用 Agent 优化 Agent 的工具
Claude Code 实践:用 AI 写工具描述、跑评测、自动迭代优化
本页解决的问题
先给结论「用 Agent 优化 Agent 的工具」要解决的关键问题是什么?
Claude Code 实践:用 AI 写工具描述、跑评测、自动迭代优化
让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。
写下一个问题:试完这个方法后,你能用什么证据回答它?
结论听起来很完整,却没有检查最关键的假设。
新方式:让 Claude Code 写工具 → 用评测自动度量 → 让 Claude Code 读评测结果并自动优化。Agent 成了自己工具的产品经理。
Prototype
输出:Claude Code 生成完整的 MCP 工具代码,包括工具定义、参数校验、API 调用逻辑
Evaluate
- Agent 是否选对了工具?
- 参数填写是否正确?
- 返回结果是否被正确理解?
- 端到端任务完成率如何?
Optimize
自动修复:重写工具描述,增加区分说明和使用示例
选对工具:少即是多
search 还是 find 还是 lookup,Agent 也分不清。命名空间:分组管理
jira_create_issue / jira_list_issues / jira_update_status差的命名:
create_issue / list_tasks / update返回有意义的上下文
{"status": "success"}好:
{"status": "success", "issue_id": "PROJ-123", "url": "https://...", "assignee": "示例用户"}Token 效率:精简返回
Prompt 工程化工具描述
工具命名空间分组
jira_ 前缀的一组工具时,它立刻知道这些工具是相关的、操作的是同一个系统。这大幅降低了选错工具的概率。
全量返回
精简返回
search_issues 工具描述对比
「核心思路」如何改变一次回答
「Claude Code 实践:用 AI 写工具描述、跑评测、自动迭代优化」说明,模型处理的不是我们眼中的“字数”,而是一段段 Token。Token 的切分方式会影响输入长度、上下文能放下多少内容,以及一次请求要花多少计算。
长度、信息量和上下文不是一回事
当「Claude Code 实践:用 AI 写工具描述、跑评测、自动迭代优化」变长时,先要分清三件事:文字被切成多少 Token、哪些内容真正参与当前判断、以及旧内容是否已经超出上下文窗口。删掉重复说明通常比单纯把窗口开得更大更有效。
先保留会改变判断的内容
可以用「Claude Code 实践:用 AI 写工具描述、跑评测、自动迭代优化」做一次对照:保留同样的问题,分别删掉重复背景、压缩格式和移除无关历史,比较答案质量、延迟与 Token 数量。
从「核心思路」走到「三步工作流:Prototype → Evaluate → Optimize」
「核心思路」先把问题落在「传统方式: 人类写工具 → 人类测试 → 人类改进。周期长、反馈慢、依赖开发者的直觉。 新方式: 让 Claude Code 写工具 → 用评测自动度量 → 让 Claude Code 读评测结果并自动优化。 Agent 成了自己工具的产品经理」上;到了「三步工作流:Prototype → Evaluate → Optimize」,讨论继续推进到「Prototype Evaluate Optimize 评测结果不满意?重复循环,直到达标 01」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。
把这条判断带到下一个场景
处理长文本时,先保留会改变结论的内容,再决定如何压缩格式和历史;上下文更长只有在新增信息真正有用时才值得付出代价。
- 「核心思路」:传统方式: 人类写工具 → 人类测试 → 人类改进。周期长、反馈慢、依赖开发者的直觉。 新方式: 让 Claude Code 写工具 → 用评测自动度量 → 让 Claude Code 读评测结果并自动优化。 Agent 成了自己工具的产品经理
- 「三步工作流:Prototype → Evaluate → Optimize」:Prototype Evaluate Optimize 评测结果不满意?重复循环,直到达标 01
- 「真实例子:工具描述的差距」:search_issues 工具描述对比 BEFORE -- 敷衍描述 { "name": "search_issues", "description": "Search for issues in the project tracker." } Agent 不知道搜索语法、不知道返回格式、不知道和 list_issues 有什么区别 AFTER -- 工程化描述 { "name": "search_issues"…
最后的「真实例子:工具描述的差距」把讨论落到「search_issues 工具描述对比 BEFORE -- 敷衍描述 { "name": "search_issues", "description": "Search for issues in the project tracker." } Agent 不知道搜索语法、不知道返回格式、不知道和 list_issues 有什么区别 AFTER -- 工程化描述 { "name": "search_issues"…」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。
我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。
读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。
如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。
还没有这篇文章的讨论。