LangChain 是一個用于構建基于大語言模型(LLM)的應用程序的開源框架,它提供了一套工具、組件和接口, 可以將 LLM 模型、向量數據庫、交互層 Prompt、外部知識、外部工具整合到一起,進而可以自由構建 LLM 應用。
LangChain 主要能做這些事:
1. 連接外部數據:大語言模型的訓練數據有時間限制,且無法直接訪問實時信息或私有數據。LangChain 可以連接數據庫、文檔(PDF、Word 等)、網頁等外部數據源,讓模型能基于最新或專有數據生成回答。例如,讓模型結合公司內部文檔回答員工問題,或結合實時新聞分析市場動態。2. 調用外部工具:除了處理文本,LangChain 能讓模型調用各種外部工具完成任務,比如調用計算器做數學運算、調用地圖 API 獲取地理位置信息、調用代碼解釋器執行代碼、甚至調用搜索引擎獲取實時數據。例如,讓模型幫你查詢天氣、預訂機票,或根據數據生成圖表。3. 構建復雜工作流:對于多步驟的任務,LangChain 支持將多個操作(如 “先查詢數據→再分析數據→最后生成報告”)組合成一個連貫的工作流,讓模型按步驟完成復雜任務。例如,自動生成市場調研報告:先調用工具收集行業數據,再讓模型分析數據,最后生成結構化報告。4. 實現記憶功能:在對話場景中,LangChain 可以幫助模型 “記住” 之前的對話內容,讓對話更連貫自然。比如聊天機器人能根據歷史對話上下文理解用戶的潛在需求。5. 支持多模態交互:除了文本,LangChain 還能擴展到大語言模型與圖像、音頻等其他模態數據的交互,構建多模態應用。
langchain核心組件包括:
模型(Models):封裝各類 LLM(如 GPT、Claude)和嵌入模型(用于數據向量化);
提示(Prompts):提示詞模板、輸出解析器(規范模型輸出格式);
Indexes(索引):從外部數據中高效查找與問題相關的信息;
鏈(Chains):將多個組件按邏輯串聯(如 “提示→模型調用→結果處理”);
記憶(Memory):保存對話上下文,支持多輪交互;
智能體(Agents):讓模型自主決策調用哪些工具或組件完成任務。
LangChain組件講解
1. Models(模型)
langchain的模型核心類型有
① LLM(大語言模型)
單輪文本生成、摘要, 常用于內容創作、簡單問答②ChatModel(聊天模型)
多輪對話、上下文交互, 常用于聊天機器人、客服系統
ps: 聊天模型與傳統 LLM(輸入輸出均為純文本)不同,ChatModel 的輸入是結構化的消息列表(包含角色和內容),輸出是單一的消息對象。
聊天模型天然適合多輪對話,通過在消息列表中保留歷史對話,模型可以理解上下文邏輯(例如 “它”“這個” 等代詞指代的內容)。
LLM是 “文本生成工具”,ChatModel是 “對話交互引擎”③Embedding Model (嵌入模型)
文本語義編碼、相似度計算,用于文檔檢索(RAG)、聚類分析
2.Prompts(提示詞)
在 LangChain 中,Prompts(提示詞)是連接用戶輸入與語言模型的核心橋梁,它定義了模型的輸入格式、任務目標和輸出要求。
Prompts 的核心作用
明確任務目標:告訴模型需要完成什么任務(如 “總結文本”“翻譯句子”“生成代碼”)。
規范輸入輸出:定義用戶輸入的格式和模型輸出的格式(如 “用 JSON 返回結果”“分點回答”)。
注入背景信息:提供上下文、約束條件或示例,幫助模型更準確地理解需求(如 “你是一名醫生,請用專業術語回答”)。Prompts 的關鍵組件:
① PromptTemplate(提示模板): 最基礎的提示詞組件,用于定義包含變量的模板,運行時動態替換變量值。
② ChatPromptTemplate(聊天提示模板): 專為ChatModel設計,支持多角色消息(如SystemMessage、HumanMessage)的模板化。
③ FewShotPromptTemplate(少樣本提示模板):通過提供示例(few-shot examples)引導模型輸出格式,適合需要嚴格格式約束的任務(如分類、提取)。
④ OutputParser輸出解析器)配合提示詞使用,將模型的原始輸出轉換為結構化格式(如 JSON、列表),方便后續處理。
3.Indexes(索引)
Indexes(索引)是處理和組織外部數據(如文檔、文本)的核心模塊,其主要作用是將原始數據轉換為可高效檢索的格式,為后續的檢索增強生成(RAG)等功能提供支持。
Indexes 的核心功能
①數據加載(Loading):從多種來源加載數據(如 PDF、TXT、網頁、數據庫等)。
②文本分割(Splitting):將長文檔拆分為小塊(chunks),避免超出模型的上下文長度限制。
③嵌入生成(Embedding):將文本塊轉換為向量(通過Embedding Model),捕捉語義信息。
④向量存儲(Vector Stores):將向量存入專門的數據庫(如 Chroma、Pinecone),支持高效的相似度檢索。Indexes 的核心組件
①文檔加載器(Document Loaders)
負責從不同來源加載數據,并統一轉換為 LangChain 的Document對象(包含page_content文本內容和metadata元數據)。
常用加載器:PyPDFLoader:加載 PDF 文件;TextLoader:加載 TXT 文件;WebBaseLoader:加載網頁內容;DirectoryLoader:批量加載文件夾中的文件。②文本分割器(Text Splitters)
將長文檔分割為語義連貫的小塊(chunks),平衡 “上下文完整性” 和 “檢索精度”。
核心分割器:
RecursiveCharacterTextSplitter(推薦):按標點符號、空格等遞歸分割,適合大多數文本;
CharacterTextSplitter:按固定字符數分割,簡單但可能破壞語義;
TokenTextSplitter:按模型 token 數分割,精準控制長度。③向量存儲(Vector Stores)
存儲文本塊的向量表示,支持高效的相似度檢索(如余弦相似度)
LangChain 集成了很多常用的向量數據庫,包括 Faiss、Milvus、Pinecone、Chroma 等④檢索器(Retrievers)
主要用于從海量文檔中快速找到與當前問題最相關的信息,是實現 “檢索增強生成(RAG)” 的核心工具。
LangChain 提供了多種檢索器:
VectorStoreRetriever(向量存儲檢索器): 基于向量相似度檢索
BM25Retriever(關鍵詞檢索器):基于傳統的 TF-IDF(詞頻 - 逆文檔頻率)算法,通過關鍵詞匹配檢索文檔,不依賴向量嵌入。
ContextualCompressionRetriever(上下文壓縮檢索器): 在基礎檢索結果(如向量檢索)的基礎上,用 LLM 對文檔片段進行 “壓縮” 或 “過濾”,保留與問題最相關的核心信息。
ToolRetriever(工具檢索器): 將檢索能力封裝為工具,供智能體(Agent)調用,支持動態決定何時檢索(如 “不確定答案時自動檢索”)。
4. Chains(鏈)
Chains(鏈)是將多個組件(如模型、提示詞、工具、檢索器等)按特定邏輯組合起來的核心機制,用于實現復雜任務的自動化流程。
Chains 的核心價值
組件協同:將獨立的組件(如PromptTemplate→LLM→OutputParser)串聯起來,形成完整的任務流水線。
流程自動化:支持多步驟任務(如 “檢索文檔→生成回答→格式化輸出”),無需手動干預。
抽象復雜度:隱藏組件交互的細節,開發者只需關注整體邏輯(如 “調用鏈→獲取結果”)。Chains 的主要類型
LangChain 提供了數十種鏈,按功能可分為基礎鏈、組合鏈和專用鏈三大類
基礎鏈:單一功能的簡單組合
LLMChain: 最基礎的鏈,將PromptTemplate與LLM/ChatModel組合,實現 “提示詞→模型調用” 的簡單流程。
SimpleSequentialChain: 按順序執行多個鏈,前一個鏈的輸出作為后一個鏈的輸入(僅支持單輸入單輸出)。組合鏈:多步驟復雜流程
SequentialChain: 支持多輸入多輸出的順序鏈,可指定每個鏈的輸入來源和輸出目標(更靈活)。
RouterChain: 根據輸入動態選擇執行哪個鏈(類似 “路由” 功能),適合需要分支邏輯的場景。專用鏈:針對特定場景優化
RetrievalQA: 結合檢索器(Retriever)和模型,實現 “檢索相關文檔→生成回答” 的 RAG(檢索增強生成)流程。
ConversationalRetrievalChain: 在RetrievalQA基礎上增加對話記憶,支持 “多輪對話 + 檢索”適用場景
單步驟任務(如生成文本、翻譯)→ 用LLMChain;
固定流程的多步驟任務(如 “生成標題→寫摘要→翻譯”)→ 用SequentialChain;
動態分支任務(如 “根據問題類型選擇專家”)→ 用RouterChain;
基于文檔的問答→ 用RetrievalQA;
多輪對話 + 檢索→ 用ConversationalRetrievalChain
5. Memory(記憶)
Memory(記憶)是用于存儲和管理對話歷史的核心組件,它讓語言模型能夠 “記住” 之前的交互內容,從而實現連貫的多輪對話。沒有記憶組件,模型每次調用都相當于 “全新對話”,就無法理解上下文關聯
Memory 的核心作用
保存對話歷史:存儲用戶與 AI 的交互記錄(問題和回答)。
提供上下文:將相關歷史對話傳入模型,讓模型理解當前對話的背景。
支持多輪交互:讓對話能夠自然延續(如 “上一個問題你提到…,再詳細說說”)。
langchain 提供了不同的 Memory 組件
①ConversationBufferMemory(基礎緩沖記憶)
完整保存所有對話歷史(用戶消息 + AI 回復)。
簡單直觀單,但歷史過長時會超出模型上下文長度限制②ConversationBufferWindowMemory(窗口記憶)
只保留最近的k輪對話(k為窗口大小),避免歷史過長③ ConversationSummaryMemory(摘要記憶)
用 LLM 將對話歷史總結為摘要,只保留摘要而非完整對話。
大幅壓縮歷史長度,適合超長對話。可能丟失細節(取決于摘要質量)。④ ConversationSummaryBufferMemory(摘要緩存記憶)
積核摘要記憶并使用token長度來確定何時刷新交互。⑤ ConversationKGMemory(知識圖譜記憶)
從對話中提取實體和關系,構建簡單知識圖譜。
結構化存儲關鍵信息,適合需要提取實體關系的場景(如客戶咨詢)。⑥ VectorStoreRetrieverMemory向量存儲記憶
它是將所有之前的對話通過向量的方式存儲到 VectorDB(向量數據庫)中,
在每一輪新的對話中,會根據用戶的輸入信息,匹配向量數據庫中最相似的 K 組對話。
6.Agents(代理)
在 LangChain 中,Agent(智能體)是一種能夠自主決策、調用工具并逐步解決復雜任務的高級組件,
它賦予大型語言模型(LLM)決策和行動能力。Agent 能夠根據用戶輸入動態選擇并調用工具(Tools)、處理復雜任務、維護狀態,并通過迭代推理(如 ReAct 框架)逐步解決問題。
Agent 的本質是 LLM(大腦) + 工具集(Tools) + 決策邏輯(Executor)
關鍵組件
LLM/ChatModel:作為 “大腦”,負責推理、決策和生成指令(如 GPT-4、Claude 等)
Agent: 決策中樞,選擇工具或返回答案 如: ZeroShotAgent, ReActAgent
Tools: 可執行的外部函數 例如: 搜索工具、計算器、自定義 API
AgentExecutor: 運行代理的循環控制器 例如: 處理迭代、錯誤、超時
Memory: 存儲對話/任務狀態 例如: ConversationBufferMemory
常用 Agent 類型
① zero-shot-react-description
基于工具描述直接決定調用哪個工具(無記憶)
適用簡單工具調用、單輪任務② structured-chat-zero-shot-react-description
支持結構化輸出(如 JSON),適合復雜工具參數
適用需要精確控制工具輸入的場景③ chat-conversational-react-description
結合對話記憶,支持多輪交互
適用聊天式任務、需要上下文的工具調用④self-ask-with-search
通過 “自問自答” 分解問題,逐步調用工具
適用復雜推理任務(如多步數學題
Agent 的工作流程
1. 接收問題:理解用戶需要 例如計算質數之和。
2. 思考決策:是否需要工具? 選擇哪個工具? (因涉及數學計算所以判斷出需要調用Python_REPL工具)。
3. 生成工具調用:構造 Python 代碼(如編寫質數判斷函數并求和)。
4.執行工具:運行代碼并獲取結果(1060)。
5.整理回答:將工具返回的結果用自然語言解釋給用戶。