AI Agent 实战:让 AI 自己干活,而不是只回答问题

Agent 是 AI 应用的下一站。如果说 ChatGPT 是"问答机器",Agent 就是"会自己干活的员工"。

一、什么是 AI Agent

1.1 定义

能感知环境 → 自主决策 → 执行动作 → 达成目标 的 AI 系统。

1.2 与传统对话 AI 的区别

| 维度 | ChatGPT | Agent | |---|---|---| | 输入 | 单个问题 | 复杂目标 | | 输出 | 一段回答 | 多步操作的结果 | | 决策 | 单次 | 持续规划 | | 工具 | 不用 | 主动调用 | | 反馈 | 用户打分 | 环境反馈 |

二、Agent 核心架构

\\\` ┌────────────────────────────────────┐ │ Planner (规划) │ │ 决定:先做什么,再做什么 │ └─────────┬──────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Memory (记忆) │ │ 短期:当前任务状态 │ │ 长期:用户偏好、历史 │ └─────────┬──────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Tools (工具) │ │ 搜索 / 代码执行 / 数据库 / API │ └─────────┬──────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Observation (观察) │ │ 工具执行的结果反馈给 Agent │ └────────────────────────────────────┘ \\\`

三、ReAct 模式(最经典)

ReAct = Reason + Act(推理 + 行动)

\\\`python from langchain.agents import createreactagent, AgentExecutor from langchain.tools import DuckDuckGoSearchRun from langchain.chatmodels import ChatOpenAI

1. 准备工具

tools = [ DuckDuckGoSearchRun(), # 联网搜索 ]

2. 创建 Agent

llm = ChatOpenAI(model="gpt-4o", temperature=0) agent = create
reactagent(llm, tools)

3. 执行

executor = AgentExecutor(agent=agent, tools=tools, verbose=True) result = executor.run(""" 北京今天的天气怎么样?根据天气给我推荐 3 个适合户外活动的地方。 """) print(result) \\\`

执行流程: \\\` Thought: 我需要查北京今天的天气 Action: 搜索 "北京今天天气" Observation: 25℃,晴,微风

Thought: 天气很好,适合户外活动 Action: 搜索 "北京 户外活动 推荐" Observation: 1. 颐和园 2. 奥林匹克森林公园 3. 香山

Thought: 我有足够信息回答了 Final Answer: 今天北京 25℃,晴,推荐去颐和园、奥森、香山 \\\`

四、构建自定义工具

Agent 强不强取决于工具集。

\\\`python from langchain.tools import tool import sqlite3

@tool def querydatabase(sql: str) -> str: """查询公司数据库。输入是 SQL 语句。""" conn = sqlite3.connect("company.db") cursor = conn.cursor() cursor.execute(sql) results = cursor.fetchall() conn.close() return str(results)

@tool def sendemail(to: str, subject: str, body: str) -> str: """发送邮件""" # 调用邮件 API return f"邮件已发送到 {to}"

给 Agent 装上这些工具

tools = [query
database, sendemail, DuckDuckGoSearchRun()] \\\`

五、高级模式

5.1 Plan-and-Execute

先制定完整计划,再逐步执行: \\\`python planner = ChatOpenAI(model="gpt-4o") executor = ChatOpenAI(model="gpt-4o")

plan = planner.invoke(""" 为这个目标制定分步计划:'分析竞品价格并生成报告' """)

plan 可能是:

1. 列出 5 个竞品

2. 搜索每个竞品的价格

3. 整理成表格

4. 生成对比报告

for step in plan.steps: result = executor.invoke(step) \\\`

5.2 Multi-Agent

多个 Agent 协作:
  • Manager Agent:分解任务
  • Worker Agents:各自执行
  • Reviewer Agent:检查结果
适合复杂任务,例如"开发一个完整 Web 应用"。

5.3 ReAct + Reflection

每步执行后自我反思: \\\`python def reflect(result): return llm.invoke(f""" 执行结果:{result} 这个结果合理吗?如果不合理,应该怎么调整? """) \\\`

六、生产环境挑战

6.1 成本控制

Agent 每步调用一次 LLM,复杂任务可能 20+ 步:
  • 每次 LLM 调用 $0.01-0.10
  • 一次 Agent 任务可能 $1-5
  • 月费可能 $100-1000+
优化策略:
  • 用小模型做简单步骤(Llama 3 / GPT-4o-mini)
  • 缓存重复查询
  • 设置 maxsteps 防止无限循环

6.2 错误处理

Agent 经常出错:
  • 选错工具
  • 工具调用参数错误
  • 陷入循环
应对:
  • 设置 maxiterations
  • 失败时回退到更简单的策略
  • 关键决策需要人确认

6.3 安全

Agent 能执行代码 → 存在提示注入风险:
  • 用户的输入可能让 Agent 执行危险操作
  • 必须有白名单机制
  • 敏感操作需要二次确认

七、实战案例

7.1 客服 Agent

\\\` 用户:我的订单 #1234 怎么还没发货? Agent: Thought: 需要查订单状态 Action: query
database("SELECT * FROM orders WHERE id=1234") Observation: 订单状态:已发货 Thought: 用户没看到物流信息,可能需要告诉他怎么查 Final Answer: 您的订单已发货,可以查看顺丰物流单号 SF1234567890 \\\`

7.2 数据分析 Agent

\\\` 用户:分析上个月销售数据,找出增长最快的品类 Agent:
  1. querydatabase("SELECT category, SUM(amount) FROM sales WHERE month='2025-01' GROUP BY category")
  1. 对比上月数据
  1. 生成可视化图表
  1. 输出报告
\\\`

7.3 代码 Agent

\\\` 用户:在 /var/log/app.log 找最近的 ERROR 日志 Agent:
  1. runcommand("grep ERROR /var/log/app.log | tail -20")
  1. 分析模式
  1. 输出报告
\\\`

八、未来发展

  • 更强的推理:o1 / o3 风格的慢思考
  • 更长的记忆:无限上下文
  • 自我改进:Agent 能修改自己的代码
  • 群体智能:1000 个 Agent 协作

九、上手指南

\\\`python

1. 安装

pip install langchain langchain-openai

2. 准备 LLM

from langchainopenai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o")

3. 创建第一个 Agent

from langchain.agents import create
reactagent, AgentExecutor from langchaincommunity.tools import DuckDuckGoSearchRun

agent = createreactagent(llm, [DuckDuckGoSearchRun()]) executor = AgentExecutor(agent=agent, tools=[DuckDuckGoSearchRun()], verbose=True)

4. 测试

executor.invoke({"input": "2025 年最火的 AI 工具是什么?"}) \\\`
Agent 是 AI 应用的最大机会。会写 Agent 的人,在未来 5 年会非常抢手。