自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

發(fā)布于 2024-8-8 17:52
瀏覽
0收藏

隨著Llama、Mistral、Gemma等開源大型語言模型(LLMs)的興起,本地運行LLMs的實用性和必要性日益凸顯,尤其是與商業(yè)模型如GPT-3或GPT-4相比時,其成本效益展現(xiàn)出明顯的優(yōu)勢。

本文指導(dǎo)讀者如何結(jié)合Ollama、Llama 3和Milvus搭建高效的檢索增強生成(RAG)系統(tǒng),創(chuàng)建一個能解答特定問題的Q&A聊天機器人。

1 RAG概述

RAG,即檢索增強生成,是一種通過融合額外的數(shù)據(jù)源來提升大型語言模型(LLMs)性能的技術(shù)。一個典型的RAG應(yīng)用流程包括:

  • 索引:這涉及從數(shù)據(jù)源中提取數(shù)據(jù),并在Milvus中進行加載、分割和存儲,形成索引。
  • 檢索與生成:在應(yīng)用運行期間,RAG會處理用戶的查詢,從Milvus中的索引里檢索出相關(guān)數(shù)據(jù),然后利用這些數(shù)據(jù),LLM生成一個更加精準的響應(yīng)。

2 先決條件

請先確認系統(tǒng)滿足以下先決條件:

  • Docker與Docker-Compose - 請確保系統(tǒng)中已安裝Docker及Docker-Compose工具。
  • Milvus獨立版 - 使用Milvus的獨立版本,它可以通過Docker Compose方便地進行管理。具體安裝方法,請參考文檔說明(https://milvus.io/docs/install_standalone-docker-compose.md)。
  • Ollama - 在系統(tǒng)上安裝Ollama;訪問其官方網(wǎng)站獲取最新的安裝指南。

3 設(shè)置

安裝完所有前提條件后,就可以設(shè)置 RAG 應(yīng)用程序了:

  • 使用命令docker-compose up -d啟動Milvus獨立實例。 此命令以分離模式啟動Milvus實例,在后臺安靜運行。
  • 通過命令ollama pull <name_of_model>?獲取LLM模型。 通過模型庫查看可用模型列表。 例如:ollama pull llama3此命令下載模型的默認版本(通常是最新和最小的版本)。
  • 使用命令ollama run <name-of-model>直接從命令行與模型聊天。

安裝依賴項

要運行此應(yīng)用程序,需要安裝所需的庫??梢灾苯邮褂胮ip進行安裝。

pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental

4 構(gòu)建RAG應(yīng)用程序

如前所述,RAG的主要組成部分之一是索引數(shù)據(jù)。

首先使用PyPDFLoader導(dǎo)入PDF中的數(shù)據(jù)

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

分割數(shù)據(jù)

使用RecursiveCharacterTextSplitter將加載的數(shù)據(jù)分解為可管理的塊

from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

獲取嵌入并在Milvus中存儲數(shù)據(jù)

接下來,使用Jina AI的Small English嵌入(https://huggingface.co/jinaai/jina-embeddings-v2-small-en)將文本數(shù)據(jù)轉(zhuǎn)換為向量嵌入,并存儲到Milvus中。

from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus

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)的過程。在本例中,將應(yīng)用Meta公司開發(fā)的Llama 3模型進行操作。以下是如何加載:

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

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

使用Langchain構(gòu)建QA鏈

最后,構(gòu)建QA鏈以處理和響應(yīng)用戶查詢:

from langchain import hub
from langchain.chains import RetrievalQA
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 運行應(yīng)用程序

通過最后一個單元格中的 result 變量執(zhí)行 RAG 應(yīng)用程序。

問答交互示例:

Query: What is this document about?

The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications.{'query': 'What is this document about?', 'result': "The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications."}

這樣就成功使用Ollama、Llama 3、Langchain和Milvus搭建了一個功能強大的本地大型語言模型(LLM)。。這一配置不僅讓處理龐大的數(shù)據(jù)集變得輕松可行,同時也打造了一個反應(yīng)迅速的本地問答系統(tǒng)。

本文轉(zhuǎn)載自?? AI科技論談??,作者: AI科技論談

收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦