AI Agent 入门:让大模型自己干活
前言
到目前为止我们讲的大模型用法——不管是普通对话还是 RAG——本质上都是”你问一句,它答一句”。
Agent(智能体)让模型更进一步:给一个目标,它自己规划步骤、调用工具、检查结果、修正错误,直到把事办成。就像你交代下属一个任务,不需要把每个细节都告诉他怎么做。
一、Agent 和普通 Chat 的区别
1 | 普通 Chat: |
Agent 本质上是 LLM + 工具 + 循环 的组合。LLM 负责思考规划,工具负责执行实际操作,循环负责检查修正。
二、ReAct 模式
这是目前 Agent 最主流的实现模式,全称是 Reasoning + Acting(推理 + 行动)。
flowchart TD
Start([用户输入任务目标]) --> Thought["思考 (Thought)<br/>大模型分析现状与拆解子目标"]
Thought --> Decision{"是否需要执行操作?"}
Decision -- "需要调用工具" --> Action["行动 (Action)<br/>输出标准 Tool Call 参数"]
Action --> Exec["环境执行 (Tool Execution)<br/>调用外部 API / 数据库 / 本地脚本"]
Exec --> Obs["观察 (Observation)<br/>获取工具执行结果与返回数据"]
Obs --> Thought
Decision -- "任务已完成 / 无需工具" --> Final["输出最终答案 (Final Answer)"]
Final --> EndNode([结束任务交互])
其核心循环由三个阶段交替驱动:
- 思考(Thought):大模型根据当前上下文分析还缺少什么信息、下一步应当做什么;
- 行动(Action):输出结构化的工具调用请求(工具名 + 参数);
- 观察(Observation):宿主程序执行工具,并将真实返回值拼接回上下文,供下一轮思考使用。
一个具体的例子:
1 | 用户: "帮我在淘宝上搜索 500 元以内的机械键盘,选评分最高的三款" |
三、使用 OpenAI Agents SDK 构建 Agent
OpenAI 在 2025 年初发布了轻量级的 Agents SDK,比 LangChain 更简洁。
1 | pip install openai-agents |
基础 Agent
1 | from agents import Agent, Runner |
带工具的 Agent
1 | from agents import Agent, Runner, function_tool |
四、用 Dify 低代码搭建 Agent
如果不想写代码,Dify 是一个不错的选择(支持私有部署)。
Dify 搭建 Agent 的步骤:
- 创建 Agent 应用,选择基座模型(GPT-4o / DeepSeek 等)
- 在”工具”面板添加工具——支持 API 调用、数据库查询、代码执行等
- 写 Agent 指令(相当于 system prompt):
1 | 你是一个数据分析助手。当用户提出数据相关的问题时: |
- 调试:在调试面板输入问题,观察 Agent 的思考过程和工具调用
- 发布:一键发布为 Web 应用或 API 端点
Dify 适合:内部工具、原型验证、非技术团队使用 AI。
五、Agent 的常见问题
1. 无限循环
Agent 有时候会陷入”调用工具 → 结果不满意 → 调用工具 → …”的死循环。
对策:
- 设置最大调用步数(比如最多 10 步)
- 在指令中明确:”如果 3 次工具调用还没得到满意结果,就向用户报告目前已知信息”
2. 幻觉工具调用
Agent 可能会”凭空”调用一个不存在的工具,或者给工具传递不合理的参数。
对策:
- 给每个工具写好详细的 description
- 对工具输入做校验(类型检查、范围检查)
3. 效率低
简单问题 Agent 也会走完整的”思考 → 工具调用 → 观察”循环,明明一步就能回答的。
对策:
- 指令中明确:”对于简单的事实性问题,直接回答,不要调用工具”
- 用更小的模型判断问题复杂度,简单问题走 fast path
六、什么时候用 Agent,什么时候用普通 Chat
| 场景 | 用什么 | 原因 |
|---|---|---|
| 闲聊 | Chat | 不需要工具 |
| 问一个事实性问题 | RAG | 检索+回答,单轮就够了 |
| 自动写周报(需要查 Jira + 查 Git) | Agent | 需要多步工具调用 |
| 客服机器人(查订单、查物流、退换货) | Agent | 需要根据情况调用不同 API |
| 数据分析(查询 → 计算 → 绘图) | Agent | 多步操作,步骤间有依赖 |
| 代码生成 | Chat | 输入代码,输出代码,一步搞定 |
不是所有事情都需要 Agent。Agent 的引入会增加复杂度和延迟,如果单一的 Chat 或 RAG 就能解决问题,就不要上 Agent。
七、从 Demo 到生产架构演进
Demo 跑通往往只需要几十行代码,但在真实生产系统中,Agent 的失控风险极高。构建企业级 Agent 系统需要建立以下四道“安全护栏”:
1. 状态管理与状态图(Stateful Checkpoints)
千万不要将 Agent 设计成无状态的纯内存循环。生产系统应基于状态图(State Graph,如 LangGraph):
- 每一轮的
Thought/Action/Observation必须持久化存储在 Redis 或 Postgres 中(Checkpointer 机制); - 支持中途崩溃恢复与会话回溯,避免用户网络闪断后前功尽弃。
2. 人在回路(Human-in-the-Loop, HITL)
对于可能产生持久化副作用的操作(如:修改生产数据库、提交转账、向全员发送邮件、执行危险 shell 命令):
- 绝对不允许 Agent 自主直接执行;
- 触发高风险工具时,Agent 自动进入
Suspended(挂起)状态,向前端抛出审批确认卡片; - 只有收到人工管理员的授权信号(Approve)后,工作流才继续前进。
3. 工具熔断与防死循环限流
1 | # 生产级 Agent 必配的防死循环熔断示例 |
4. 单智能体 vs 多智能体(Multi-Agent)选型
当业务复杂度上升时,不要试图训练一个“全知全能的超级 Agent”,而应采用职责分离的多 Agent 协同架构:
- Router Agent(路由专家):专职意图识别,将需求快速分发给垂直子 Agent;
- Worker Agent(垂直执行者):各司其职,专注特定工具集(如数据分析 Agent、代码审查 Agent);
- Reviewer Agent(审计复核者):负责对照原始需求进行验收与输出格式校验。
核心建议:Agent 是一把双刃剑,它用不确定性的推理带来了灵活性,但也牺牲了确定性与延迟。在能够用确定的代码逻辑、工作流(Workflow)或单轮 RAG 解决的问题上,坚决不要过度引入自主 Agent。让代码负责确定性,让大模型负责创造性与语义理解。