Previous
Day 19 · Coding Agent Basics
Next
Day 21 · Agent Evaluation Basics
工具与 MCP
Day 2060 minutesAI Agent 动手实践

Day 20 - Weekly Review 4: Tool-Based Agent Demo

今日目标

能做出调用 2-3 个工具完成 Nginx CPU 分析的 Agent Demo。

学习安排

时间模块做什么
0-10 分钟整理产出盘点 Day 16-19 的四份产物(工具定义、MCP 架构、权限矩阵、流程设计),确认每份都能用自己的话解释。
10-25 分钟查漏补缺回看第 4、5 章重点,把说不清的概念补进今天的交付物。
25-45 分钟实践任务把工具定义组装成 Demo,跑通「Nginx CPU 分析」完整闭环。
45-55 分钟追问与反思回答追问练习,标记 Demo 里最容易出错的一步。
55-60 分钟复盘与作业整理阶段交付物清单,定下明天要复习的一点。

核心概念

术语中文解释应用场景
demo演示:跑通最小闭环的可运行示例,证明概念而非完成产品输入一句中文指令,Agent 调用工具输出结论
tool routing工具路由:根据任务把请求分发给正确工具的决策过程「查 CPU」走 query_metrics,「看报错」走 query_logs
empty result空结果:工具返回无数据,需判断是正常(确实无数据)还是异常(查询条件错)10:55-11:00 日志为空,先核对时间格式
verified vs unverified已验证与待验证:结论的证据分级,有工具数据支撑 vs 只有推测指标证实 CPU 升高;归因 WAF 需进一步验证
productionization产品化:把 Demo 变成生产可用系统的过程(鉴权、限流、评估、审计)给 Demo 接上权限矩阵与审计日志
acceptance criteria验收标准:判断任务是否完成的明确条件「输出含 3 个异常时间点与证据标签」
trace log轨迹日志:记录 Agent 每步决策与工具调用的日志,用于排障与复盘回看 Demo 为什么先查了指标再查日志
fallback降级路径:主路径失败时备选的处理方案query_metrics 失败时改用日志关键词统计

阅读重点

  • 对应章节:回看第 4 章(工具与 MCP)、第 5 章(Coding Agent)的关键小节。
  • 关注点:
  • 工具定义五要素(用途、参数、返回、失败、权限)是否在 Demo 里全部体现。
  • 工具路由与调用顺序:先查指标定位异常时间段,再查日志找原因。
  • 权限分级:Demo 里哪些调用无需确认,哪些必须确认。
  • 失败处理:空结果、超时、参数错误在 Demo 里如何表现。
  • 补充材料:
  • 回看 Day 16-19 的补充材料(tool use 文档、MCP 官方文档、工具安全实践)。
  • 用 OpenAI Agents SDK 或类似框架跑一遍官方工具调用示例,对照自己的 Demo。

理解检查

  • 这个 Demo 的工具调用顺序是什么?为什么先查指标再查日志?
  • 哪一步最容易出错?你的 Demo 里最可能出现的失败是什么?
  • 如何判断工具返回为空是正常还是异常?
  • 哪些结论不能让 Agent 直接下定论?应该怎么标注?

实践任务

背景:把 Day 16 设计的 3 个工具(可先用模拟实现)组装成一个最小工具 Agent,跑通「一句话任务 -> 工具调用 -> Markdown 结论」的闭环。今天跑通闭环最重要,不用追求真实数据源。

步骤:

  • 准备模拟数据:10:00-11:00 的指标样本与日志样本,包含一段异常区间。
  • 实现 3 个工具函数(可返回假数据,但返回结构按 Day 16 的定义)。
  • 写工具路由:根据任务关键词决定调用哪些工具、什么顺序。
  • 跑通闭环并打印轨迹(每步调用与结果)。
  • 输出 Markdown 结论,标注「已验证」与「待验证」。

产出:demo 脚本 + 一份 Markdown 结论 + 轨迹记录。

task = "帮我分析 10:00-11:00 Nginx CPU 升高可能原因"
metrics = query_metrics("nginx_cpu", "10:00", "11:00")
logs = query_logs("10:00", "11:00", keyword="ERROR")
summary = summarize(metrics, logs)  # 汇总异常时间点,标注已验证/待验证
print(summary)  # Markdown 结论

输出模板

Demo 骨架:
1. 输入任务: [一句话任务]
2. 工具路由: [任务 -> 调用哪些工具、什么顺序]
3. 工具调用: [每个工具的入参与返回摘要]
4. 汇总分析: [异常时间点、关键发现]
5. 输出结论: Markdown,含「已验证」与「待验证」标签
6. 轨迹记录: [每步决策与失败处理]

Markdown 结论模板:
# Nginx CPU 分析结论
分析时段: [10:00-11:00]
异常时间点: [xxx](已验证: 指标数据)
可能原因: [xxx]
- 已验证: [证据来源]
- 待验证: [需要进一步查询 xxx]

示范输出

输入: 帮我分析 10:00-11:00 Nginx CPU 升高可能原因
工具路由: query_metrics(nginx_cpu) -> query_logs(keyword=ERROR)
调用结果:
- query_metrics: 10:20-10:35 CPU 从 20% 升到 85%,10:25 达到峰值
- query_logs: 10:21-10:30 出现大量 upstream timeout,约 300 条
汇总: 异常集中在 10:20-10:35,与上游超时时间段重合

# Nginx CPU 分析结论
分析时段: 2026-08-14 10:00-11:00
异常时间点: 10:20-10:35(已验证: 指标曲线)
可能原因: 上游接口超时导致大量重试,worker 被打满
- 已验证: CPU 指标与 ERROR 日志时间吻合
- 待验证: 具体是哪个 upstream 节点超时,需查 upstream 日志

轨迹记录:
- 10:00-11:00 参数合法
- query_metrics 成功返回 60 个点
- query_logs 成功返回 300 条 ERROR,无空结果
- 结论中 2 条已验证、1 条待验证

追问练习

  • 如何把这个 Demo 扩展成生产工具?从 Day 16-19 的产物里选 5 件必须做的事。
  • query_logs 返回为空时,你如何区分「真的没日志」和「时间格式传错了」?
  • Demo 里「待验证」的比例多少算合理?全是已验证说明什么?
  • 用 Day 19 的流程骨架套这个 Demo,哪一步没有被覆盖?

常见误区

  • 用假数据骗过自己:Demo 跑通不等于逻辑对,要保留轨迹检查每一步。
  • 结论全标「已验证」:没有工具证据支撑的结论必须标「待验证」。
  • 工具路由写死:换一个任务就转不动,路由要和工具描述对应。
  • 只做 happy path:不测空结果与工具失败,交付物缺失败处理。

进阶扩展

  • 从 Demo 到生产:鉴权、限流、评估集、审计日志、人工确认。
  • 用 trace 驱动改进:回看轨迹发现「工具白调」「参数错传」这类浪费。
  • 复用阶段产物:权限矩阵接进执行层,工具定义直接进 schema。

今日作业

  • 跑通 Demo,保存脚本与运行轨迹。
  • 输出一份 Markdown 分析结论。
  • 整理 Day 16-19 的四份产物为阶段交付物清单(工具 schema 设计、权限与风险清单、MCP 架构、Coding Agent 流程)。
  • 写出 Demo 的 3 个已知局限,作为下一阶段改进输入。

自检清单

Previous
Day 19 · Coding Agent Basics
Next
Day 21 · Agent Evaluation Basics