![cover](https://i-blog.csdnimg.cn/direct/3944647a62014e3f97eea4cb15207ef2.png)
轻薄本也能跑的RAG大模型?LLamaIndex+Ollama+phi搭建本地大模型
![](https://devpress.csdnimg.cn/6deffb34f7114cc1a2e1e686a67e0027.png)
最近,AI大模型又卷到小型机赛道上。各大公司都在加紧研发能在家用机器即可运行的“小模型”,旨在让大模型真正进入我们日常生活中。
RAG作为一门最近新兴的技术,在知识检索上有着传统大模型不可比拟的优势,应用前景十分广阔。目前,很多基于RAG的应用如雨后春笋般涌现,在企业和个人中用途广泛。前不久B站就有一位三国历史热爱者做了一个历史RAG,满足他了解历史的需求。RAG将会是未来人工智能搜索引擎的重要技术!
这一次,我们使用llamaIndex作为工具,配合ollama搭载phi3,在本地(我是轻薄本荣耀MagicBook)运行一个检索wikipedia的RAG。
微软phi3模型
Microsoft 推出 Phi-3,这是 Microsoft 开发的一系列开放式 AI 模型。Phi-3 模型是一个功能强大、成本效益高的小语言模型 (SLM),在各种语言、推理、编码和数学基准测试中,在同级别参数模型中性能表现优秀。为开发者构建生成式人工智能应用程序时提供了更多实用的选择。
phi3以小搏大(从微软放出的跑分数据看),用不到1/2的小体积(3.8b)超越llama3 8b版性能表现,增大了在手机上部署的可行性。
RAG:为知识密集型任务而生
虽然NLP在过去几年中突飞猛进,从为特定任务设计定制化的框架,再到如今各种基于海里语料无监督预训练得到强大的通用模型通过微调即可应对各种不同NLP任务。这些模型充满潜力,但它们也有三个主要缺点: (1)不能轻易地扩展或修正模型的记忆 (2)预测结果的可解释性差 (3)偶尔产生“幻觉”(hallucinations),即生成结果不可控。
为了大模型的回答在某一领域更准确、更专业和更具时效性,检索增强生成的技术(RAG)被提出,并受到学术界和工业界的广泛关注。尤其是在算力有限的初创企业及研究所中因其可节省算力人力成本就可借助大模型能力和注入私有垂域数据而备受关注,其次因其能保证数据私有性和安全性在工业界开发落地也如火如荼。
LLamaIndex
核心上,LlamaIndex包含一个工具包,旨在轻松地将LLM与您的外部数据连接起来。使用LLama我们可以轻松构建出具有语义搜索、文档查询、chatbot等AI应用。
安装
下载ollama
前往官网Ollama下载Ollama,这是一个模型托管服务,可以把很多大模型(比如llama phi3)pull到本地运行。
安装好之后,在cmd输入
ollama run phi3
程序会下载模型到本地,期间网速可能有些慢,需要一些魔法。下载完成后,模型就会运行。
保持模型运行,启动jupyter notebook。
构建RAG
下面的代码,需要在jupyter notebook中运行。安装所需库:
%pip install llama-index-core
%pip install llama-index-llms-ollama
%pip install llama-index-embeddings-huggingface
%pip install wikipedia
%pip install llama-index-readers-wikipedia
导入依赖
from llama_index.llms.ollama import Ollama
from llama_index.core import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.readers.wikipedia import WikipediaReader
from llama_index.core import VectorStoreIndex
初始化phi3作为LLM的model
phi3 = Ollama(model="phi3", request_timeout=30.0)
Settings.llm = phi3
Settings.chunk_size = 512
Settings.chunk_overlap = 75
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
去维基百科上加载一些百科条目。
documents = WikipediaReader().load_data(["History of Trinidad and Tobago"])
vector_index = VectorStoreIndex.from_documents(documents)
新建一个query engine。
query_engine = vector_index.as_query_engine(similarity_top_k=3)
提问一些问题:
response = query_engine.query("When was oil first discovered in Trinidad")
print(response)
程序会给出回答。LLamaIndex通常内置了实践证明非常优秀的prompt,这使得模型的性能比较优秀。
这样我们就完成了本地运行一个LLM,并构建RAG服务的过程。
![]( https://profile-avatar.csdnimg.cn/default.jpg)
![](https://devpress.csdnimg.cn/7174e1ca86c447029bb12f9ec0bd281c.png)
![](https://devpress.csdnimg.cn/096f7827187446559bd7b6030eb5db38.png)
![](https://devpress.csdnimg.cn/6deffb34f7114cc1a2e1e686a67e0027.png)
更多推荐
所有评论(0)