LangChain 实战教程:2026年从零构建大语言模型应用

发布时间:2026/8/11 12:21:54
LangChain 实战教程:2026年从零构建大语言模型应用 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在实践中积累经验。最重要的是始终关注业务价值技术只是实现目标的手段。