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

发布时间:2026/10/2 0:58:41

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在实践中积累经验。最重要的是始终关注业务价值技术只是实现目标的手段。
延伸阅读

更多相关文章

2026/10/2 0:58:00

Ohook终极指南:三分钟免费解锁Microsoft 365完整功能

Ohook终极指南:三分钟免费解锁Microsoft 365完整功能 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/ohook …

2026/9/29 9:22:16

Twitter引流有必要用自动化工具吗?提高获客效率

“只要每天坚持运营,就一定能找到客户。”这是大家做运营时都会产生的一种想法,于是每天搜索关键词、查看账号、翻评论、找潜在买家,再一个个关注、互动、沟通。问题真的只是“发帖不够多”吗?其实不是。Twitter 引流真正消耗时间…

2026/10/2 0:58:00

MCP协议、服务与Tool三层解析:从WebSocket通信到AI工具链集成

1. 别再被“MCP”三个字母绕晕了:先撕开它身上的三层面纱你是不是也这样?刷技术群、看文档、查报错日志,冷不丁就撞上“MCP”——在 Playwright 的 GitHub Issue 里看到playwright mcp;在 Burp Suite 插件说明里读到“需对接 MCP …

2026/10/2 0:58:00

基于LLM的AI智能体Office套件:架构设计与工程化实践

1. 为什么传统Office套件需要一个"智能体层"1.1 从"人找功能"到"功能找人"的转变任何人如果每天要花两三个小时在Word、Excel、PPT、邮件和日历之间来回切换,都会产生一个念头:能不能让这些工具主动替我把活干了&#xff…

2026/10/2 0:58:00

AI网关与RAG融合实践:用MAI Gateway统一模型调用

MAI Gateway 落地实践:把 AI 网关用在 RAG 场景里,到底是不是叠床架屋?这是我们立项时被产品和技术两头追问最多的一句话。当时团队要做的是一个面向企业内部资料的知识库问答系统,RAG 方案自然成了首选;但在模型调用层…

2026/10/2 0:53:00

ESP32双模网关实战:从硬件选型到App控制完整链路

看到不少人在智能家居上折腾,最头疼的就是“协议不统一”和“平台锁定”这两个问题。用树莓派当网关,性能和价格都过了头,还费电;用STM32自己做,WiFi模块和蓝牙模块电路复杂化,调起来特别折磨人。ESP32几乎…

2026/10/2 0:53:00

PMSM矢量控制实战:Simulink建模、参数精调与实物调试全路径

1. 这不是教科书里的“矢量控制”,而是我调通PMSM电机真实转速的全过程永磁同步电机、PMSM、矢量控制、Simulink——这四个词凑在一起,不是论文标题,也不是课程作业编号,而是我在新能源电控实验室连续熬了17个通宵后,终…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑