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