本文將聚焦于 LangChain 如何集成檢索增強生成(RAG),了解其架構、主要組件,以及與 LLM 的交互
LangChain 架構概覽
1、基礎層
這是與各類 LLM 對接的 “橋梁”。LangChain 支持多種流行的 LLM,如 OpenAI 的系列模型、Hugging Face 的眾多模型等。通過統一且抽象的接口,開發者可以輕松切換不同的 LLM,就像為應用換上不同 “大腦”,而無需對上層代碼大動干戈,保證了應用的靈活性和適應性。
2、功能層
這是LangChain“智慧核心”,涵蓋了諸多關鍵功能模塊。其中,提示詞管理模塊像是一位 “語言大師”,幫助開發者雕琢輸入給 LLM 的提示詞,以獲取更精準、更符合預期的輸出;記憶模塊如同一個 “貼心小秘書”,在多輪交互中記住上下文信息,使對話更具連貫性;工具集成模塊則似一個 “百寶箱”,能將外部工具,如搜索引擎、數據庫等與 LLM 有機結合,拓展模型的能力邊界。
3、應用層
在這里,開發者能夠基于下層提供的堅實基礎,像搭建積木一樣,快速搭建各種自然語言處理應用,如智能聊天機器人、高效問答系統、精準文本摘要生成器等。應用層將 LLM 的強大能力與具體業務邏輯深度融合,實現各種智能化的自然語言交互功能。
LangChain 主要組件
1、Prompts(提示詞)
Prompts 是引導 LLM 輸出的 “指揮棒”。LangChain 允許開發者創建模板化的提示詞,通過向模板中靈活填充變量,生成針對不同任務的個性化提示。例如,在構建影評生成應用時,可設計一個提示詞模板:“請為電影《{movie_name}》撰寫一篇 {length} 字左右的影評,重點描述其劇情和視覺效果。” 通過替換 movie_name 和 length,就能讓 LLM 生成不同電影、不同篇幅要求的影評。同時,LangChain 還提供提示詞優化工具,如自動格式化、動態調整結構等,助力提升 LLM 的響應質量。
2、Chains(鏈)
Chains 是預定義的工作流程 “生產線”,將多個組件串聯起來完成復雜任務。比如 SequentialChain 能按順序執行多個步驟,每個步驟可以是調用 LLM、操作外部工具或處理中間結果。在 RAG 集成場景中,RetrievalQAChain 大放異彩。它巧妙結合文檔檢索與 LLM 回答生成功能,先從文檔庫中精準檢索與問題相關的信息,再借助 LLM 基于這些信息生成高質量回答,實現檢索增強生成的效果。
3、Agents(智能體)
Agents 如同擁有自主思考能力的 “小助手”,能依據環境反饋,從一組預定義工具中挑選合適的工具完成自然語言指令任務。例如,當接收到 “查詢北京明天的天氣,并計算與今天溫差” 的指令時,它可以先調用天氣查詢工具獲取天氣數據,再利用計算工具算出溫差,最后整理生成回答。Agents 為構建智能靈活的自然語言處理應用賦予了強大動力。
LangChain 與 LLM 交互
1、初始化連接
首先要與所選 LLM 建立聯系。以使用 OpenAI 的模型為例,代碼如下
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="你的 API 密鑰")
2、構建提示與獲取響應
利用Prompts構建合適提示并獲取 LLM 回答,以下是一個簡單的文本生成示例:
from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate(
input_variables=["主題"],
template="圍繞{主題}寫一個小故事。"
)
prompt = prompt_template.format(主題="魔法森林")
response = llm(prompt)
print(response)
3、集成RAG實現增強回答
借助 RetrievalQAChain,假設已有基于 FAISS 的向量數據庫檢索器,實現代碼如下:
from langchain.chains import RetrievalQA
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI# 初始化向量數據庫與檢索器
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.load_local("faiss_index", embeddings)
retriever = vectorstore.as_retriever()# 初始化 LLM 與 RetrievalQAChain
llm = OpenAI(openai_api_key="你的 API 密鑰")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever
)問題 = "LangChain 的主要優勢是什么?"
答案 = qa_chain.run(問題)
print(答案)
RetrievalQAChain 先從向量數據庫檢索與問題相關文檔片段,再將其與問題一同交給 LLM,使 LLM 生成更準確豐富的回答。