在 LangChain 生态中,Agent(智能体)和 Chain(链)是两个核心抽象,它们代表了 LLM 应用开发的两种范式:
- Chain 是“剧本式”的:开发者预先定义好每一步做什么;
- Agent 是“即兴式”的:LLM 自主决定下一步调用哪个工具、如何推理。
理解二者的区别与适用场景,是构建高级 AI 应用的关键。

一、Agent 是什么?
Agent = LLM + 工具集 + 推理循环
LangChain 中的 Agent 是一个能自主使用工具解决问题的智能体。它的工作流程如下:
- 接收用户目标(如“查明天北京天气并建议穿衣”);
- LLM 分析任务,决定是否需要调用外部工具;
- 选择合适工具(如天气 API),生成调用参数;
- 执行工具,获取结果;
- 基于结果继续推理,可能重复步骤 2–4;
- 最终生成答案。
✅ 核心能力:动态决策 + 工具调用 + 多步推理
示例:Agent 自动完成复杂任务
from langchain.agents import load_tools, initialize_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description")
response = agent.run("2024年诺贝尔物理学奖得主是谁?他今年多大了?")
Agent 内部执行过程:
- 调用
serpapi搜索“2024 Nobel Physics winner” → 得到姓名; - 再次调用
serpapi搜索“[姓名] birth year” → 得到出生年份; - 调用
llm-math计算2024 - 出生年份→ 得到年龄; - 整合信息,返回答案。
🔁 整个过程无需开发者预设步骤顺序,由 LLM 动态规划。
二、Chain 是什么?(回顾)
Chain = 预定义的线性/分支工作流
Chain 的每一步都是开发者显式编排的,例如:
# 先检索 → 再生成 → 最后格式化
qa_chain = RetrievalQA.from_chain_type(llm, retriever=...)
- 输入 → 步骤1 → 步骤2 → … → 输出
- 流程固定,无法根据中间结果改变路径。
✅ 适用:结构清晰、步骤确定的任务(如 RAG 问答、报告生成)。
三、Agent vs Chain:核心区别
| 维度 | Chain | Agent |
|---|---|---|
| 控制流 | 开发者预定义(静态) | LLM 自主决策(动态) |
| 灵活性 | 低(只能按剧本走) | 高(可探索不同路径) |
| 工具使用 | 通常不直接调用工具(除非嵌入 Chain) | 核心能力:动态选择/调用工具 |
| 适用任务 | 确定性流程(如 ETL、模板填充) | 开放性问题(如研究、诊断、规划) |
| 可预测性 | 高(每次执行相同) | 中(依赖 LLM 推理,可能波动) |
| 调试难度 | 低(步骤明确) | 高(需分析推理轨迹) |
| Token 成本 | 通常较低 | 可能较高(多轮推理) |
🎯 一句话总结:
- Chain 回答“怎么做”(How)——你告诉它步骤;
- Agent 回答“做什么”(What)——它自己想步骤。
四、Agent 的核心组件
1. Tools(工具)
- 外部能力的封装,如:
Search(网络搜索)Calculator(计算器)Custom API(企业内部系统)
- Agent 通过工具描述(description)理解其用途。
2. Agent Executor(执行器)
- 控制推理循环:思考 → 行动 → 观察 → 再思考;
- 支持最大步数限制、错误重试等。
3. Agent Type(推理策略)
LangChain 提供多种 Agent 类型:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| Zero-shot ReAct | 基于 ReAct 框架,单步推理 | 简单工具调用 |
| Conversational | 带对话记忆 | 多轮交互任务 |
| Plan-and-Execute | 先制定计划,再分步执行 | 复杂多步任务 |
| Self-ask | 通过自问自答分解问题 | 需要中间问题的任务 |
五、何时用 Agent?何时用 Chain?
✅ 优先用 Chain 当:
- 任务流程固定(如“用户提问 → 检索知识库 → 生成答案”);
- 需要高可预测性和低延迟;
- 不涉及外部工具调用;
- 示例:客服 FAQ 机器人、文档摘要。
✅ 优先用 Agent 当:
- 任务需要多工具协作(如查数据 + 计算 + 发邮件);
- 问题开放,解决路径不唯一;
- 需要动态适应新信息;
- 示例:研究助理、自动化运维、智能导购。
💡 混合模式(最佳实践):
- 用 Agent 做高层规划,用 Chain 做底层执行。
例如:Agent 决定“需要分析销售数据”,然后调用一个预定义的
SalesAnalysisChain。
六、实战对比:同一任务的不同实现
任务:回答“公司上季度营收同比增长多少?”
方案 1:Chain(假设数据已结构化)
# 预先构建 SQL 查询链
sql_chain = SQLDatabaseChain(llm=llm, database=db)
answer = sql_chain.run("计算上季度营收同比增速")
- ✅ 快速、稳定
- ❌ 无法处理“如果数据库没有该字段”等异常
方案 2:Agent(更鲁棒)
tools = [SQLDatabaseTool(db), FileSearchTool("财务报告.pdf")]
agent = initialize_agent(tools, llm, agent="react-docstore")
agent.run("公司上季度营收同比增长多少?")
- Agent 可能:
- 先尝试查数据库;
- 若失败,自动检索财务 PDF;
- 从 PDF 中提取数字并计算。
- ✅ 更灵活,容错性强
- ❌ 执行时间更长,成本更高
七、Agent 的挑战与应对
| 挑战 | 解决方案 |
|---|---|
| 幻觉调用不存在的工具 | 严格定义工具描述,使用 JSON Schema 约束 |
| 陷入无限循环 | 设置 max_iterations(如 10 步) |
| 工具调用参数错误 | 使用 Pydantic 验证输入,提供示例 |
| 成本不可控 | 监控 Token 使用,设置预算告警 |
| 安全性风险 | 沙箱运行工具,禁止敏感操作(如删除文件) |
八、未来演进:Agent + Memory + Planning
新一代 Agent 正在融合:
- 长期记忆(向量存储用户偏好);
- 分层规划(先制定大纲,再逐项执行);
- 多 Agent 协作(分工讨论,达成共识)。
LangChain 通过 LangGraph 支持此类复杂状态机,超越传统 Chain/Agent 范式。
总结
| Chain | Agent | |
|---|---|---|
| 本质 | 预设流水线 | 自主决策引擎 |
| 控制权 | 开发者 | LLM |
| 优势 | 简单、高效、可靠 | 灵活、强大、适应性强 |
| 定位 | “执行者” | “思考者 + 执行者” |
选择建议:
- 80% 的企业应用可用 Chain(尤其是 RAG 场景);
- 20% 的复杂、开放任务需要 Agent;
- 高级系统往往 混合使用:Agent 负责调度,Chain 负责执行。
掌握 Chain 与 Agent 的区别,你就拥有了在“确定性”与“智能性”之间做架构权衡的能力,这是构建生产级 AI 应用的核心技能。