链载Ai

标题: 基于Llama 3、Ollama、Milvus、LangChain,快速搭建本地RAG [打印本页]

作者: 链载Ai    时间: 3 小时前
标题: 基于Llama 3、Ollama、Milvus、LangChain,快速搭建本地RAG

指导如何结合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应用流程包括:

2 先决条件

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

3 设置

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

安装依赖项

要运行此应用程序,需要安装所需的库。可以直接使用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 (https://www.lianzai.com/) Powered by Discuz! X3.5