返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

基于Llama 3、Ollama、Milvus、LangChain,快速搭建本地RAG

[复制链接]
链载Ai 显示全部楼层 发表于 2 小时前 |阅读模式 打印 上一主题 下一主题

指导如何结合Ollama、Llama 3和Milvus搭建高效的检索增强生成(RAG)系统,创建一个能解答特定问题的Q&A聊天机器人。

随着Llama、Mistral、Gemma等开源大型语言模型(LLMs)的兴起,本地运行LLMs的实用性和必要性日益凸显,尤其是与商业模型如GPT-3或GPT-4相比时,其成本效益展现出明显的优势。

本文指导读者如何结合Ollama、Llama 3和Milvus搭建高效的检索增强生成(RAG)系统,创建一个能解答特定问题的Q&A聊天机器人。

1 RAG概述

RAG,即检索增强生成,是一种通过融合额外的数据源来提升大型语言模型(LLMs)性能的技术。一个典型的RAG应用流程包括:

  • 索引:这涉及从数据源中提取数据,并在Milvus中进行加载、分割和存储,形成索引。

  • 检索与生成:在应用运行期间,RAG会处理用户的查询,从Milvus中的索引里检索出相关数据,然后利用这些数据,LLM生成一个更加精准的响应。

2 先决条件

请先确认系统满足以下先决条件:

  • Docker与Docker-Compose - 请确保系统中已安装Docker及Docker-Compose工具。

  • Milvus独立版 - 使用Milvus的独立版本,它可以通过Docker Compose方便地进行管理。具体安装方法,请参考文档说明(https://milvus.io/docs/install_standalone-docker-compose.md)。

  • Ollama - 在系统上安装Ollama;访问其官方网站获取最新的安装指南。

3 设置

安装完所有前提条件后,就可以设置 RAG 应用程序了:

  • 使用命令docker-compose up -d启动Milvus独立实例。 此命令以分离模式启动Milvus实例,在后台安静运行。

  • 通过命令ollama pull <name_of_model>获取LLM模型。 通过模型库查看可用模型列表。 例如:ollama pull llama3此命令下载模型的默认版本(通常是最新和最小的版本)。

  • 使用命令ollama run <name-of-model>直接从命令行与模型聊天。

安装依赖项

要运行此应用程序,需要安装所需的库。可以直接使用pip进行安装。

pipinstalllangchainpymilvusollamapypdflangchainhublangchain-communitylangchain-experimental

4 构建RAG应用程序

如前所述,RAG的主要组成部分之一是索引数据。

首先使用PyPDFLoader导入PDF中的数据

fromlangchain_community.document_loadersimportPyPDFLoader
loader=PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data=loader.load()

分割数据

使用RecursiveCharacterTextSplitter将加载的数据分解为可管理的块

fromlangchain.text_splitterimportRecursiveCharacterTextSplitter
text_splitter=RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=0)
all_splits=text_splitter.split_documents(data)

获取嵌入并在Milvus中存储数据

接下来,使用Jina AI的Small English嵌入(https://huggingface.co/jinaai/jina-embeddings-v2-small-en)将文本数据转换为向量嵌入,并存储到Milvus中。

fromlangchain_community.embeddings.jinaimportJinaEmbeddings
fromlangchain.vectorstores.milvusimportMilvus

embeddings=JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY,model_name="jina-embeddings-v2-small-en"
)
vector_store=Milvus.from_documents(documents=all_splits,embedding=embeddings)

加载LLM

Ollama极大简化了在本地加载和运用大型语言模型(LLM)的过程。在本例中,将应用Meta公司开发的Llama 3模型进行操作。以下是如何加载:

fromlangchain_community.llmsimportOllama
fromlangchain.callbacks.managerimportCallbackManager
fromlangchain.callbacks.streaming_stdoutimportStreamingStdOutCallbackHandler

llm=Ollama(
model="llama3",
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)

使用Langchain构建QA链

最后,构建QA链以处理和响应用户查询:

fromlangchainimporthub
fromlangchain.chainsimportRetrievalQA
query=input("\nQuery:")
prompt=hub.pull("rlm/rag-prompt")
qa_chain=RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever(),chain_type_kwargs={"prompt":prompt})
result=qa_chain({"query":query})
print(result)

5 运行应用程序

通过最后一个单元格中的 result 变量执行 RAG 应用程序。

问答交互示例:

Query:Whatisthisdocumentabout?

Thedocumentappearstobea104CoverPageInteractiveDataFileforanSECfiling.Itcontainsinformationaboutthecompany'sfinancialstatementsandcertifications.{'query':'Whatisthisdocumentabout?','result':"Thedocumentappearstobea104CoverPageInteractiveDataFileforanSECfiling.Itcontainsinformationaboutthecompany'sfinancialstatementsandcertifications."}

这样就成功使用Ollama、Llama 3、Langchain和Milvus搭建了一个功能强大的本地大型语言模型(LLM)。。这一配置不仅让处理庞大的数据集变得轻松可行,同时也打造了一个反应迅速的本地问答系统。

推荐书单

《LangChain编程:从入门到实践》

LangChain为开发者提供了一套强大而灵活的工具,使其能够轻松构建和优化大模型应用。本书以简洁而实用的方式引导读者入门大模型应用开发,涵盖LangChain的核心概念、原理和高级特性,并为读者提供了在实际项目中应用LangChain的指导。 本书从实际的例子出发,细致解读LangChain框架的核心模块和源码,使抽象的概念变得具体。无论你是初学者还是有经验的开发者,都能从中受益,能够将LangChain的独特之处融入自己的编程实践中。阅读本书,一起探索LangChain编程的奇妙世界吧!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ