LangChain / 闯关模式
LangChain 入门到实战
理解模型、提示词、LCEL、工具、Agent、RAG,以及如何放进后端项目。
一句话:LangChain 是一套帮你把大模型、提示词、工具、知识库和业务代码串起来的 AI 应用开发框架。
本篇学完你会什么:知道 LangChain 解决什么问题,能写一个最小 AI 助手,理解模型、消息、提示词、工具、Agent、RAG 和工程落地边界。文章里的代码按 LangChain 当前 Python 主线写法整理,同时保留 OpenAI 兼容接口的说明。
1. LangChain 解决什么问题
直接调用大模型 API 可以完成最简单的聊天:
用户问题 -> 大模型 -> 回答但真实 AI 应用通常不止这一步。
它可能需要:
- 先整理用户输入
- 套提示词模板
- 调模型
- 调工具
- 查知识库
- 记住对话历史
- 输出结构化结果
- 记录日志和成本
LangChain 的价值就是:帮你把这些步骤组织起来。

2. 先用餐厅后厨理解 LangChain
你可以把 AI 应用想成餐厅后厨。
| 后厨角色 | LangChain 里对应什么 |
|---|---|
| 客人点单 | 用户输入 |
| 菜单模板 | Prompt Template |
| 厨师 | Chat Model |
| 刀具、锅、秤 | Tools |
| 查菜谱 | Retriever / RAG |
| 后厨流程 | Chain / LCEL |
| 主管厨师 | Agent |
只问模型一句话,像客人直接问厨师。
LangChain 像一套后厨流程:谁先处理,谁查资料,谁调用工具,最后怎么出餐,都能安排清楚。
3. 核心概念地图
先记住 8 个词:
| 名词 | 大白话 |
|---|---|
| Chat Model | 会聊天的大模型 |
| Message | 对话消息 |
| Prompt Template | 提示词模板 |
| Chain / LCEL | 把多个步骤串起来 |
| Tool | AI 可以调用的工具 |
| Agent | 会判断下一步该做什么的 AI 助手 |
| Retriever | 从资料里找相关内容 |
| RAG | 先查资料,再让模型回答 |
不要一开始就追求复杂 Agent。先把模型、提示词、工具、RAG 这四块吃透。
4. 安装依赖
基础安装:
pip install -U "langchain[openai]"如果你用 OpenRouter 官方集成,可以另外安装:
pip install -U langchain-openrouter如果你用 OpenAI 兼容接口,通常还需要配置:
export OPENAI_API_KEY="你的 key"
export OPENAI_BASE_URL="你的兼容接口地址"不同模型供应商会有不同的集成包。初学阶段先选一个能稳定调用的模型,把流程跑通。后面要接 OpenRouter、Gemini、Claude、国内兼容接口时,再按服务商文档换配置。
5. 第一个模型调用
LangChain 现在更推荐先用 init_chat_model 创建模型客户端:
from langchain.chat_models import init_chat_model
model = init_chat_model("openai:gpt-4o-mini")
response = model.invoke("用一句话解释 LangChain 是什么")
print(response.content)大白话:
init_chat_model:按供应商和模型名创建聊天模型客户端。invoke:调用一次。response.content:模型回答的正文。
如果你用 OpenRouter 官方集成,可以这样:
from langchain.chat_models import init_chat_model
model = init_chat_model("auto", model_provider="openrouter")如果你的服务商只是提供 OpenAI 兼容接口,也可以直接用 ChatOpenAI,把 base_url 和 api_key 换成自己的服务商配置:
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model="openai/gpt-4o-mini",
base_url="https://openrouter.ai/api/v1",
api_key="你的 key",
)实际参数以你使用的服务商为准。
6. Prompt Template 提示词模板
不要每次手写一整段提示词,可以做模板。
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个耐心的 Python 老师,用大白话解释。"),
("user", "请解释:{topic}"),
])
messages = prompt.invoke({"topic": "FastAPI 的 Depends"})模板的好处:
- 提示词结构稳定
- 变量清楚
- 更容易复用
- 后面可以接模型、工具、RAG
7. LCEL:把步骤串起来
LCEL 可以理解成 LangChain 的流水线写法。
chain = prompt | model
response = chain.invoke({"topic": "Redis 缓存"})
print(response.content)这个 | 可以读成:
先把变量放进 prompt
再把 prompt 结果交给 model
最后拿到回答如果你做过后端,可以把它理解成一个处理管道。
8. Tool:让 AI 会调用工具
普通模型只会生成文字。Tool 让它可以调用你提供的函数。
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""查询城市天气。"""
return f"{city} 今天晴,适合出门。"工具要写清楚:
- 工具名
- 参数
- 返回值
- 这个工具什么时候用
大白话:Tool 就是你给 AI 的外部能力,比如查数据库、查天气、发请求、调内部 API。
注意:定义 Tool 不等于模型一定会自己调用它。你还要把工具绑定给模型,或者交给 Agent 统一调度。
model_with_tools = model.bind_tools([get_weather])
response = model_with_tools.invoke("广州今天适合出门吗?")这段代码的意思是:模型回答问题时,可以选择调用 get_weather 这个工具。
9. Agent:会自己决定下一步的助手
Agent 比普通 Chain 更像“会做事的助手”。
它不只是:
输入 -> 输出而是:
理解任务
↓
判断要不要调用工具
↓
拿到工具结果
↓
继续思考
↓
给最终答案适合 Agent 的场景:
- 任务步骤不固定
- 需要根据中间结果决定下一步
- 需要调用多个工具
- 需要边查边回答
不适合 Agent 的场景:
- 固定流程
- 简单分类
- 单次摘要
- 明确的一步模型调用
这些场景用普通 Chain 更稳。
一个最小 Agent 可以这样写:
from langchain.agents import create_agent
agent = create_agent(
model="openai:gpt-4o-mini",
tools=[get_weather],
system_prompt="你是一个谨慎的助手。需要天气信息时先调用工具。"
)
result = agent.invoke({
"messages": [
{"role": "user", "content": "广州今天适合出门吗?"}
]
})大白话:Agent = 模型 + 工具 + 一套循环。它会判断要不要调用工具,拿到工具结果后再继续生成最终回答。
这里的 openai:gpt-4o-mini 只是示例模型名,实际项目要换成你账号可用、成本可接受的模型。
10. RAG:让 AI 查你的资料再回答
RAG 的完整名字是 Retrieval-Augmented Generation,可以理解成“先查资料,再生成回答”。
流程:
用户问题
↓
把问题拿去资料库搜索
↓
找到相关片段
↓
把片段和问题一起交给模型
↓
模型根据资料回答RAG 适合:
- 企业知识库
- 项目文档问答
- PDF 问答
- 客服知识库
- 代码库说明
RAG 不等于“把文件全部塞给模型”。正确做法是先切分、索引、检索,再把最相关的片段给模型。

11. LangGraph、LangSmith、部署服务分别是什么
LangChain 生态里还有几个常见名字。
| 名字 | 大白话 | 什么时候学 |
|---|---|---|
| LangChain | 串模型、提示词、工具、RAG 的基础框架 | 现在 |
| LangGraph | 做更复杂、更可控的多步骤 Agent 流程 | 学完基础 Agent 后 |
| LangSmith | 调试、追踪、评估 AI 调用过程 | 做真实项目时 |
| LangServe / LangGraph Server | 把 LangChain 或 LangGraph 应用发布成服务 | 需要对外提供服务时 |
初学顺序:
LangChain 基础
↓
RAG 和 Tools
↓
简单 Agent
↓
LangSmith 调试
↓
LangGraph 编排复杂流程12. 在后端项目里怎么放 LangChain
不要把 LangChain 代码全塞进 FastAPI 路由。
推荐结构:
app/
modules/
ai_lab/
api.py
schemas.py
service.py
chains.py
tools.py
retrievers.py
core/
ai_config.py职责分工:
| 文件 | 放什么 |
|---|---|
api.py | 接 HTTP 请求 |
schemas.py | 请求和响应格式 |
service.py | 业务流程 |
chains.py | prompt、model、chain |
tools.py | AI 可调用工具 |
retrievers.py | RAG 检索逻辑 |
ai_config.py | 模型配置和 key |
这样以后你换模型、加工具、改 RAG,不会把 API 层搅乱。
13. 常见错误
| 问题 | 原因 | 解决 |
|---|---|---|
| 一上来就写复杂 Agent | 基础链路没跑通 | 先写 model + prompt |
| 提示词散落各处 | 没有模板 | 用 Prompt Template |
| 模型回答胡说 | 没有提供资料或校验 | 用 RAG、引用来源、结果校验 |
| RAG 效果差 | 切分和检索粗糙 | 优化 chunk、metadata、top_k |
| 调试困难 | 没有记录中间步骤 | 加日志或 LangSmith |
| 成本失控 | 每次塞太多上下文 | 控制输入长度和检索数量 |
| 工具乱调用 | 工具描述不清楚 | 写清工具用途和参数 |
14. 学习顺序和练习项目
建议按这个顺序学:
- 先会直接调模型。
- 再会 Prompt Template。
- 再会 LCEL 串流程。
- 再会 Tool。
- 再做一个简单 Agent。
- 再做 RAG。
- 最后学习 LangSmith 和 LangGraph。
推荐练习项目:
| 项目 | 练什么 |
|---|---|
| 大白话解释器 | prompt + model |
| SQL 解释助手 | prompt template + 输出格式 |
| 天气问答助手 | tool calling |
| 项目文档问答 | RAG |
| AI 学习助手 | RAG + 工具 + 历史记录 |
| 自动排错助手 | Agent + 工具 |
总结表
| 名词 | 大白话 |
|---|---|
| LangChain | AI 应用开发工具箱 |
| Chat Model | 会聊天的大模型 |
| Message | 对话消息 |
| Prompt Template | 提示词模板 |
| LCEL | LangChain 流水线 |
| Tool | AI 可调用的外部能力 |
| Agent | 会决定下一步的助手 |
| Retriever | 查资料的人 |
| RAG | 先查资料再回答 |
| LangGraph | 更复杂的 Agent 流程编排 |
| LangSmith | 调试和观察 AI 调用过程 |
| LangServe / LangGraph Server | 把 AI 流程发布成服务 |
下一篇建议:结合你的后端项目,做一个 AI 实验室 小接口:输入问题,后端用 LangChain 套提示词调用模型,返回大白话解释。