AI Agent 系统 - 自主规划与工具调用
系列文章: System Prompt 实战指南(6/6)
难度: ⭐⭐⭐⭐⭐
预计阅读时间: 30 分钟
一、真实案例引入
1.1 场景:自动化数据分析 Agent
某数据团队每天需要处理大量数据分析请求:
- 从数据库提取数据
- 数据清洗和转换
- 生成可视化图表
- 撰写分析报告
现状痛点:
- 重复性工作多(80% 的分析流程相似)
- 人工操作易出错
- 响应时间长(平均 2 小时)
- 需要懂 SQL、Python、数据可视化
解决方案: 构建一个自动化数据分析 Agent
1.2 用户需求分析
核心需求:
- 任务理解:理解用户的分析需求
- 自主规划:分解任务为可执行步骤
- 工具调用:调用数据库、Python、可视化工具
- 错误恢复:遇到错误能自动修正
典型工作流程:
用户: 分析上周销售数据,找出 Top 10 产品
Agent 规划:
1. 查询数据库获取上周销售数据
2. 按产品聚合销售额
3. 排序并取 Top 10
4. 生成柱状图
5. 撰写分析报告
Agent 执行:
→ 调用 SQL 工具
→ 调用 Python 数据处理
→ 调用图表生成工具
→ 生成报告
输出: 完整的分析报告 + 图表
二、问题分析与需求拆解
2.1 核心挑战 1:任务理解与分解
问题: 如何将复杂任务分解为可执行步骤?
示例:
用户需求: "分析用户留存率"
需要分解为:
1. 定义留存率计算方法
2. 确定时间范围
3. 查询用户活跃数据
4. 计算留存率
5. 可视化趋势
6. 生成报告
解决思路:
- ReAct 模式:推理 → 行动 → 观察
- Plan-and-Execute:先规划,再执行
- 分层任务分解
2.2 核心挑战 2:工具选择与编排
问题: 何时使用哪个工具?如何组合多个工具?
可用工具:
query_database: 查询数据库run_python: 执行 Python 代码create_chart: 生成图表search_web: 搜索信息
编排模式:
- 串行:A → B → C
- 并行:A + B → C
- 条件:if A then B else C
解决思路:
- 明确每个工具的能力和限制
- 提供工具使用示例
- 定义工具组合模式
2.3 核心挑战 3:多步推理与状态管理
问题: 如何记住中间结果?如何基于结果调整计划?
状态管理:
state = {
"current_step": 3,
"completed_steps": [1, 2],
"intermediate_results": {
"step_1": "查询结果: 1000 条数据",
"step_2": "清洗后: 950 条有效数据"
},
"next_action": "执行数据聚合"
}
解决思路:
- 维护执行状态
- 记录中间结果
- 动态调整计划
2.4 核心挑战 4:错误处理与恢复
问题: 工具调用失败时如何处理?
常见错误:
- SQL 语法错误
- Python 代码异常
- 数据格式不匹配
- 工具超时
恢复策略:
- 重试:临时性错误(网络超时)
- 修正:语法错误(修改 SQL)
- 替代:换一个工具或方法
- 求助:无法自动恢复,请求人工
三、解决方案演进
V1:简单的工具调用
System Prompt:
SYSTEM_PROMPT_V1 = """
你是一个数据分析助手,可以调用以下工具:
## 可用工具
1. query_database(sql): 执行 SQL 查询
2. run_python(code): 执行 Python 代码
3. create_chart(data, type): 生成图表
## 工作流程
1. 理解用户需求
2. 选择合适的工具
3. 调用工具获取结果
4. 返回分析结果
"""
优点:
- ✅ 能调用工具
- ✅ 基本可用
缺点:
- ❌ 不能多步规划
- ❌ 错误处理简单
- ❌ 没有状态管理
V2:ReAct 模式 Agent
改进点:
- ReAct 循环:思考 → 行动 → 观察
- 多步推理:支持复杂任务
- 中间结果记录:保存每步输出
System Prompt 改进:
SYSTEM_PROMPT_V2 = """
你是一个数据分析 Agent,使用 ReAct 模式工作。
## ReAct 循环
每一步按以下格式输出:
**思考 (Thought):** [分析当前情况,决定下一步]
**行动 (Action):** [选择工具和参数]
**观察 (Observation):** [工具返回的结果]
重复上述循环,直到完成任务。
## 可用工具
### query_database
- 功能:执行 SQL 查询
- 参数:sql (string)
- 返回:查询结果(JSON)
### run_python
- 功能:执行 Python 代码
- 参数:code (string)
- 返回:执行结果
### create_chart
- 功能:生成图表
- 参数:data (JSON), chart_type (string)
- 返回:图表 URL
## 示例
用户: 查询上周销售额
**思考:** 需要查询数据库获取上周的销售数据
**行动:** query_database("SELECT SUM(amount) FROM sales WHERE date >= '2024-05-01' AND date < '2024-05-08'")
**观察:** 结果: {"total": 125000}
**思考:** 已获取数据,现在生成报告
**行动:** 完成任务
**结果:** 上周销售额为 125,000 元
## 约束
- 每次只执行一个行动
- 基于观察结果调整计划
- 遇到错误要分析原因并修正
"""
改进效果:
- ✅ 支持多步推理
- ✅ 能处理复杂任务
- ✅ 有思考过程
仍存在的问题:
- ❌ 错误恢复能力弱
- ❌ 没有并行执行
- ❌ 缺少计划优化
V3:生产级 Agent 系统
完整代码见 code/v3_production.py
核心特性:
- ✅ Plan-and-Execute:先规划,再执行
- ✅ 并行工具调用:提升效率
- ✅ 智能错误恢复:自动重试和修正
- ✅ 状态持久化:可暂停和恢复
- ✅ 执行监控:记录每步耗时和结果
四、关键技术点深度剖析
4.1 任务规划技术
ReAct vs Plan-and-Execute:
| 维度 | ReAct | Plan-and-Execute |
|---|---|---|
| 规划方式 | 边执行边规划 | 先规划后执行 |
| 灵活性 | 高 | 中 |
| 效率 | 中 | 高 |
| 适用场景 | 探索性任务 | 明确目标任务 |
推荐: 混合模式
- 先用 Plan-and-Execute 生成初始计划
- 执行中用 ReAct 动态调整
4.2 工具编排模式
串行执行:
result1 = tool_a()
result2 = tool_b(result1)
result3 = tool_c(result2)
并行执行:
result1, result2 = parallel(tool_a(), tool_b())
result3 = tool_c(result1, result2)
条件执行:
if condition:
result = tool_a()
else:
result = tool_b()
4.3 错误分类与恢复
错误类型:
-
临时性错误(网络超时)
- 策略:重试 3 次
- 延迟:指数退避
-
语法错误(SQL 错误)
- 策略:分析错误信息,修正后重试
- 示例:修正 SQL 语法
-
逻辑错误(结果不符合预期)
- 策略:重新规划
- 示例:换一种查询方式
-
不可恢复错误(权限不足)
- 策略:报告错误,请求人工介入
4.4 状态机管理
状态定义:
class AgentState(Enum):
PLANNING = "planning" # 规划中
EXECUTING = "executing" # 执行中
WAITING = "waiting" # 等待工具返回
ERROR = "error" # 错误状态
COMPLETED = "completed" # 已完成
状态转换:
PLANNING → EXECUTING → WAITING → EXECUTING → COMPLETED
↓
ERROR → PLANNING (重新规划)
五、生产环境注意事项
5.1 安全控制
- 工具权限限制
- 敏感操作需人工确认
- 审计日志
5.2 成本控制
- 设置最大步数限制
- Token 消耗监控
- 工具调用计费
5.3 性能优化
- 并行执行
- 结果缓存
- Prompt Caching
六、性能优化与成本控制
6.1 并行优化
- 识别可并行的工具调用
- 减少总执行时间 50-70%
6.2 成本分析
人工 vs Agent:
| 任务 | 人工耗时 | Agent 耗时 | 节省 |
|---|---|---|---|
| 数据分析 | 2 小时 | 5 分钟 | 96% |
| 报告生成 | 1 小时 | 3 分钟 | 95% |
ROI: 提升 20-30 倍效率
七、关键要点总结
-
规划是关键
- 先规划后执行
- 动态调整计划
-
工具编排要灵活
- 串行、并行、条件
- 根据场景选择
-
错误恢复要智能
- 分类处理
- 自动修正
-
状态管理要完善
- 记录中间结果
- 支持暂停恢复
-
安全控制不能少
- 权限限制
- 人工确认
- 审计日志
系列总结
恭喜你完成了《System Prompt 实战指南》系列的学习!
我们学习了:
- 第 0 篇:System Prompt 基础概念
- 第 1 篇:多轮对话系统(上下文管理)
- 第 2 篇:内容创作系统(风格控制)
- 第 3 篇:RAG 系统(知识库问答)
- 第 4 篇:代码生成助手(智能编程)
- 第 5 篇:AI Agent 系统(自主规划)
核心收获:
- System Prompt 是 AI 应用的灵魂
- 不同场景需要不同的设计策略
- 从简单到复杂的渐进式优化
- 生产环境需要考虑全面
- 成本优化有方法
下一步:
- 实践:运行代码示例
- 应用:将技术应用到实际项目
- 优化:根据反馈持续改进
- 分享:与团队分享经验
本文是《System Prompt 实战指南》系列的第 6 篇(完结篇)
发布日期:2026-05-08
感谢阅读!期待你的反馈和实践成果分享。

浙公网安备 33010602011771号