前言

到目前为止我们讲的大模型用法——不管是普通对话还是 RAG——本质上都是”你问一句,它答一句”。

Agent(智能体)让模型更进一步:给一个目标,它自己规划步骤、调用工具、检查结果、修正错误,直到把事办成。就像你交代下属一个任务,不需要把每个细节都告诉他怎么做。


一、Agent 和普通 Chat 的区别

1
2
3
4
5
6
7
8
9
10
普通 Chat:
你: "今天北京天气怎么样?"
模型: "抱歉,我无法获取实时天气信息。"

Agent:
你: "帮我查一下北京今天的天气,如果下雨就提醒我带伞"
Agent 做了三件事:
1. 调用天气 API: get_weather("北京") → "多云转小雨,15-22°C"
2. 分析结果:有小雨
3. "今天北京多云转小雨,15-22°C,出门记得带伞。"

Agent 本质上是 LLM + 工具 + 循环 的组合。LLM 负责思考规划,工具负责执行实际操作,循环负责检查修正。


二、ReAct 模式

这是目前 Agent 最主流的实现模式,全称是 Reasoning + Acting(推理 + 行动)。

1
2
3
ReAct 循环:
思考(Thought) → 行动(Action) → 观察(Observation) → 思考 → 行动 → 观察 → ...
直到:我认为任务完成了 → 给出最终答案

一个具体的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
用户: "帮我在淘宝上搜索 500 元以内的机械键盘,选评分最高的三款"

Agent 思考链:
Thought: 我需要搜索"机械键盘",限制价格 < 500 元
Action: 调用 search_product("机械键盘", max_price=500)
Observation: 返回 47 个结果

Thought: 我需要按评分排序,取前 3
Action: 调用 sort_by_rating(结果, top_k=3)
Observation: [罗技K835(4.8分), 达尔优A87(4.7分), 黑峡谷GK715(4.6分)]

Thought: 已拿到结果,整理输出
Final Answer: 根据评分,推荐以下三款...(附价格和评分对比)

三、使用 OpenAI Agents SDK 构建 Agent

OpenAI 在 2025 年初发布了轻量级的 Agents SDK,比 LangChain 更简洁。

1
pip install openai-agents

基础 Agent

1
2
3
4
5
6
7
8
9
10
11
from agents import Agent, Runner

agent = Agent(
name="Code Reviewer",
instructions="你是一个资深代码审查专家。审查代码并给出具体建议。",
model="gpt-4o"
)

result = Runner.run_sync(agent, "审查这段代码的安全问题:\n```python\n"
"query = f\"SELECT * FROM users WHERE name='{user_input}'\"\n```")
print(result.final_output)

带工具的 Agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from agents import Agent, Runner, function_tool
import requests

# 定义一个工具
@function_tool
def get_weather(city: str) -> str:
"""查询指定城市的实时天气"""
# 实际项目中调用真实的天气 API
weather_data = {
"北京": "晴,22°C,湿度 45%",
"上海": "多云,25°C,湿度 65%",
"深圳": "阵雨,28°C,湿度 80%",
}
return weather_data.get(city, f"未找到 {city} 的天气数据")

@function_tool
def calculate(expression: str) -> str:
"""执行数学计算"""
try:
return str(eval(expression)) # 生产环境请用更安全的方式
except:
return f"无法计算: {expression}"

agent = Agent(
name="Assistant",
instructions="你可以调用工具来帮助用户。回答要简洁。",
tools=[get_weather, calculate]
)

result = Runner.run_sync(
agent,
"北京今天天气怎么样?摄氏温度 22 度换算成华氏是多少?"
)
print(result.final_output)

四、用 Dify 低代码搭建 Agent

如果不想写代码,Dify 是一个不错的选择(支持私有部署)。

Dify 搭建 Agent 的步骤:

  1. 创建 Agent 应用,选择基座模型(GPT-4o / DeepSeek 等)
  2. 在”工具”面板添加工具——支持 API 调用、数据库查询、代码执行等
  3. 写 Agent 指令(相当于 system prompt):
1
2
3
4
5
6
你是一个数据分析助手。当用户提出数据相关的问题时:
1. 先理解用户的需求
2. 使用 data_query 工具获取相关数据
3. 使用 chart_generator 工具生成可视化图表
4. 用简洁的语言解释数据含义
如果没有合适的工具,诚实告诉用户你做不到。
  1. 调试:在调试面板输入问题,观察 Agent 的思考过程和工具调用
  2. 发布:一键发布为 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 跑通容易,生产落地要考虑:

  1. 状态管理:Agent 的中间状态要持久化,不能进程重启就丢
  2. 工具安全:别给 Agent 直接执行 SQL/Shell 的权限,加上沙箱/审批
  3. 可观测性:记录每一步的 Thought/Action/Observation,方便排查问题
  4. 人工兜底:关键操作(下单、退款、发送邮件)需要人工确认
  5. 成本控制:Agent 可能调用很多次 LLM,token 消耗比普通 Chat 大得多

Agent 是好工具,但在真正”值得用 Agent”的场景才上。绝大多数需求,Chat + RAG 就足够了。