AI Agent 实战:让 AI 自己干活,而不是只回答问题
Agent 是 2024-2025 年最热门的 AI 范式。本文从原理到代码,教你构建能自主规划、执行多步任务的 AI Agent。
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(推理 + 行动)
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import DuckDuckGoSearchRun
from langchain.chat_models import ChatOpenAI
# 1. 准备工具
tools = [
DuckDuckGoSearchRun(), # 联网搜索
]
# 2. 创建 Agent
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(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 强不强取决于工具集。
from langchain.tools import tool
import sqlite3
@tool
def query_database(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 send_email(to: str, subject: str, body: str) -> str:
"""发送邮件"""
# 调用邮件 API
return f"邮件已发送到 {to}"
# 给 Agent 装上这些工具
tools = [query_database, send_email, DuckDuckGoSearchRun()]
五、高级模式
5.1 Plan-and-Execute
先制定完整计划,再逐步执行: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
每步执行后自我反思: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. query_database("SELECT category, SUM(amount) FROM sales WHERE month='2025-01' GROUP BY category")
2. 对比上月数据
3. 生成可视化图表
4. 输出报告
7.3 代码 Agent
用户:在 /var/log/app.log 找最近的 ERROR 日志
Agent:
1. run_command("grep ERROR /var/log/app.log | tail -20")
2. 分析模式
3. 输出报告
八、未来发展
- 更强的推理:o1 / o3 风格的慢思考
- 更长的记忆:无限上下文
- 自我改进:Agent 能修改自己的代码
- 群体智能:1000 个 Agent 协作
九、上手指南
# 1. 安装
pip install langchain langchain-openai
# 2. 准备 LLM
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
# 3. 创建第一个 Agent
from langchain.agents import create_react_agent, AgentExecutor
from langchain_community.tools import DuckDuckGoSearchRun
agent = create_react_agent(llm, [DuckDuckGoSearchRun()])
executor = AgentExecutor(agent=agent, tools=[DuckDuckGoSearchRun()], verbose=True)
# 4. 测试
executor.invoke({"input": "2025 年最火的 AI 工具是什么?"})
Agent 是 AI 应用的最大机会。会写 Agent 的人,在未来 5 年会非常抢手。
💬 评论 0 条
暂无评论 — 来做第一个发声的人 ✨