
LangChain 實戰教程2026年從零構建大語言模型應用引言LangChain 是一個用于構建大語言模型應用的開源框架由 Harrison Chase 團隊開發。它最大的價值在于把復雜的 LLM 應用開發標準化讓你能快速搭建問答系統、文檔分析工具、智能 Agent 等應用。相比直接調用 OpenAI APILangChain 提供了更完整的工具鏈和模塊化設計。2026年LangChain 已經發展到了相當成熟的階段支持本地模型和云端 API 混合調用提供完整的記憶管理、工具調用和 Agent 工作流模塊化設計讓代碼復用性極高。本文將用實際代碼演示 LangChain 六大核心模塊的用法重點放在如何避免常見坑點、如何設計可維護的 Chain 結構、以及如何將學到的知識直接應用到實際項目中。## 一、環境搭建與基礎配置在開始之前我們需要準備好開發環境。LangChain 支持 Python 和 JavaScript 兩種語言本文以 Python 為主。python# 安裝 LangChain 核心庫pip install langchain langchain-core langchain-community# 安裝 OpenAI 集成也可以使用其他模型提供商pip install langchain-openai# 安裝向量數據庫用于 RAG 場景pip install chromadb# 可選安裝本地模型支持pip install ollama配置 API 密鑰的最佳實踐是使用環境變量避免將密鑰硬編碼在代碼中pythonimport osfrom dotenv import load_dotenvload_dotenv()# 從環境變量讀取 API 密鑰OPENAI_API_KEY os.getenv(OPENAI_API_KEY)## 二、Models 模塊統一模型調用接口LangChain 的 Models 模塊提供了統一的接口來調用不同的 LLM。無論是 OpenAI、Anthropic 還是本地模型調用方式都是一致的。pythonfrom langchain_openai import ChatOpenAIfrom langchain_core.messages import HumanMessage, SystemMessage# 初始化模型llm ChatOpenAI( modelgpt-4o, temperature0.7, max_tokens2000)# 基礎調用messages [ SystemMessage(content你是一個專業的技術文檔撰寫助手。), HumanMessage(content請用200字介紹什么是微服務架構。)]response llm.invoke(messages)print(response.content)對于需要結構化輸出的場景LangChain 支持使用 Pydantic 模型來約束輸出格式pythonfrom langchain_core.pydantic_v1 import BaseModel, Fieldfrom typing import Listclass CodeReview(BaseModel): 代碼審查結果的結構化輸出 overall_score: int Field(description代碼整體評分1-10分) issues: List[str] Field(description發現的問題列表) suggestions: List[str] Field(description改進建議列表) security_concerns: List[str] Field(description安全隱患列表)structured_llm llm.with_structured_output(CodeReview)code_snippet def process_user_input(data): query SELECT * FROM users WHERE name data result db.execute(query) return resultreview structured_llm.invoke(f請審查以下代碼\n{code_snippet})print(f評分{review.overall_score}/10)print(f問題{review.issues})## 三、Prompt 模塊模板化提示詞管理Prompt 模板是 LangChain 中最常用的功能之一。它允許你將提示詞參數化實現提示詞的復用和管理。pythonfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain_core.prompts import FewShotChatMessagePromptTemplate# 基礎模板template ChatPromptTemplate.from_messages([ (system, 你是一個{role}擅長{skill}。請用{language}回答。), (human, {question})])prompt_value template.invoke({ role: Python 高級工程師, skill: 代碼優化和性能調優, language: 中文, question: 如何優化一個處理百萬級數據的 Python 腳本})# Few-shot 示例模板examples [ {input: 列表去重, output: 使用 set() 或 dict.fromkeys() 方法}, {input: 字符串拼接, output: 使用 join() 方法而非 運算符},]example_prompt ChatPromptTemplate.from_messages([ (human, {input}), (ai, {output})])few_shot_prompt FewShotChatMessagePromptTemplate( example_promptexample_prompt, examplesexamples,)final_prompt ChatPromptTemplate.from_messages([ (system, 你是一個 Python 性能優化專家。), few_shot_prompt, (human, {input})])## 四、Chain 模塊構建處理流水線Chain 是 LangChain 的核心概念它將多個組件串聯成處理流水線。LCELLangChain Expression Language是構建 Chain 的推薦方式。pythonfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnablePassthrough, RunnableLambda# 使用 LCEL 構建 Chainchain ( {question: RunnablePassthrough()} | template | llm | StrOutputParser())result chain.invoke(什么是依賴注入)print(result)# 復雜 Chain代碼分析流水線def extract_code_blocks(text): 從文本中提取代碼塊 import re pattern rpython\n(.*?) return re.findall(pattern, text, re.DOTALL)analysis_chain ( { code: RunnableLambda(extract_code_blocks), original: RunnablePassthrough() } | RunnableLambda(lambda x: f分析以下代碼\n{x[code]}) | llm | StrOutputParser())## 五、Memory 模塊對話記憶管理Memory 模塊讓 LLM 應用能夠記住歷史對話實現連貫的多輪交互。pythonfrom langchain.memory import ConversationBufferMemory, ConversationSummaryMemoryfrom langchain.chains import ConversationChain# 基礎對話記憶memory ConversationBufferMemory(return_messagesTrue)conversation ConversationChain( llmllm, memorymemory, verboseTrue)conversation.predict(input我叫張三是一名前端工程師。)conversation.predict(input我剛才說我叫什么)conversation.predict(input根據我的職業推薦一些學習資源。)# 摘要記憶適合長對話summary_memory ConversationSummaryMemory( llmllm, return_messagesTrue, max_token_limit500)# 查看記憶內容print(memory.load_memory_variables({}))## 六、RAG 模塊檢索增強生成RAGRetrieval-Augmented Generation是 LangChain 最強大的功能之一它讓 LLM 能夠基于外部知識庫回答問題。pythonfrom langchain_community.document_loaders import TextLoader, DirectoryLoaderfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromafrom langchain.chains import RetrievalQA# 1. 加載文檔loader DirectoryLoader( ./docs/, glob**/*.md, loader_clsTextLoader)documents loader.load()# 2. 文檔分割text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200, separators[\n\n, \n, 。, , , ])chunks text_splitter.split_documents(documents)# 3. 創建向量存儲embeddings OpenAIEmbeddings()vectorstore Chroma.from_documents( documentschunks, embeddingembeddings, persist_directory./chroma_db)# 4. 構建 RAG Chainqa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrievervectorstore.as_retriever( search_kwargs{k: 4} ), return_source_documentsTrue)result qa_chain.invoke({query: 項目的技術架構是什么})print(f答案{result[result]})print(f參考文檔{result[source_documents]})## 七、Agents 模塊智能代理Agent 是 LangChain 中最靈活也最復雜的模塊。它讓 LLM 能夠自主決策、調用工具、完成多步驟任務。pythonfrom langchain.agents import AgentExecutor, create_openai_functions_agentfrom langchain.tools import toolfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderimport requestsimport json# 定義工具tooldef search_documentation(query: str) - str: 搜索技術文檔。輸入搜索關鍵詞返回相關文檔內容。 # 實際項目中這里會連接真實的文檔搜索服務 docs { fastapi: FastAPI 是一個現代、快速的 Web 框架..., docker: Docker 是一個容器化平臺..., } return docs.get(query.lower(), 未找到相關文檔)tooldef run_python_code(code: str) - str: 執行 Python 代碼并返回結果。注意僅用于安全的代碼執行。 try: # 使用受限的執行環境 local_vars {} exec(code, {__builtins__: {}}, local_vars) return str(local_vars) except Exception as e: return f執行錯誤{str(e)}tooldef get_current_time() - str: 獲取當前時間。 from datetime import datetime return datetime.now().strftime(%Y-%m-%d %H:%M:%S)# 創建 Agenttools [search_documentation, run_python_code, get_current_time]prompt ChatPromptTemplate.from_messages([ (system, 你是一個智能編程助手可以使用工具來完成任務。), (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad),])agent create_openai_functions_agent(llm, tools, prompt)agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, max_iterations5, handle_parsing_errorsTrue)# 執行 Agent 任務result agent_executor.invoke({ input: 幫我查一下 FastAPI 的文檔然后寫一個簡單的 Hello World 示例并執行它。})print(result[output])## 八、生產環境最佳實踐### 8.1 錯誤處理與重試pythonfrom langchain_core.runnables import RunnableConfigfrom tenacity import retry, stop_after_attempt, wait_exponentialretry( stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10))def invoke_with_retry(chain, input_data): try: return chain.invoke(input_data) except Exception as e: print(f調用失敗{e}正在重試...) raise### 8.2 緩存策略pythonfrom langchain_core.caches import InMemoryCachefrom langchain_core.globals import set_llm_cache# 啟用內存緩存set_llm_cache(InMemoryCache())# 對于生產環境建議使用 Redis 緩存# from langchain_community.cache import RedisCache# set_llm_cache(RedisCache(redis_urlredis://localhost:6379))### 8.3 流式輸出python# 流式輸出對于提升用戶體驗非常重要async for chunk in llm.astream(請詳細介紹微服務架構的優缺點。): print(chunk.content, end, flushTrue)## 九、常見問題與解決方案1.Token 超限問題使用tiktoken庫精確計算 token 數量設置合理的max_tokens限制。2.模型幻覺通過 RAG 技術引入外部知識庫或使用temperature0降低隨機性。3.響應速度慢啟用流式輸出、使用緩存、選擇更快的模型如 gpt-4o-mini。4.成本控制使用摘要記憶減少上下文長度設置合理的 token 預算。## 結語LangChain 在 2026 年已經成為 LLM 應用開發的事實標準。掌握它的六大核心模塊——Models、Prompt、Chain、Memory、RAG 和 Agents——你將能夠快速構建從簡單問答到復雜 Agent 的各種 AI 應用。建議從簡單的 Chain 開始逐步引入 RAG 和 Agent在實踐中積累經驗。最重要的是始終關注業務價值技術只是實現目標的手段。