<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>工具设计 | Feisky</title><link>https://feisky.xyz/tags/%E5%B7%A5%E5%85%B7%E8%AE%BE%E8%AE%A1/</link><description>极客时间专栏作者，专注于 Kubernetes、AI Infra、AI Agent 领域的深度技术分享，让 AI 成为你的第二大脑</description><generator>Hugo 0.165.0</generator><language>zh-CN</language><managingEditor>Pengfei Ni</managingEditor><webMaster>Pengfei Ni</webMaster><lastBuildDate>Fri, 14 Aug 2026 12:39:05 +0000</lastBuildDate><atom:link href="https://feisky.xyz/tags/%E5%B7%A5%E5%85%B7%E8%AE%BE%E8%AE%A1/index.xml" rel="self" type="application/rss+xml"/><item><title>像 Agent 一样思考：Claude Code 工具设计的进化史</title><link>https://feisky.xyz/posts/2026-02-28-%E5%83%8Fagent%E4%B8%80%E6%A0%B7%E6%80%9D%E8%80%83claude-code%E5%B7%A5%E5%85%B7%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%BF%9B%E5%8C%96%E5%8F%B2/</link><pubDate>Sat, 28 Feb 2026 10:00:00 +0800</pubDate><dc:creator>Pengfei Ni</dc:creator><category>Claude Code</category><category>AI Agent</category><category>工具设计</category><category>提示词工程</category><category>MCP</category><guid>https://feisky.xyz/posts/2026-02-28-%E5%83%8Fagent%E4%B8%80%E6%A0%B7%E6%80%9D%E8%80%83claude-code%E5%B7%A5%E5%85%B7%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%BF%9B%E5%8C%96%E5%8F%B2/</guid><description>&lt;blockquote&gt;
&lt;p&gt;题记：本文编译自 Anthropic 工程师 @trq212 发表的技术长文《Lessons from Building Claude Code: Seeing like an Agent》，文章总结了构建 Claude Code 过程中积累的工具设计方法论，从 AskUserQuestion 工具的三次迭代、Todo 演化为 Task 的背后逻辑，到渐进式披露这个设计模式，信息密度很高。原文链接：&lt;a href="https://x.com/trq212/status/2027463795355095314"&gt;https://x.com/trq212/status/2027463795355095314&lt;/a&gt;。&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<blockquote><p>题记：本文编译自 Anthropic 工程师 @trq212 发表的技术长文《Lessons from Building Claude Code: Seeing like an Agent》，文章总结了构建 Claude Code 过程中积累的工具设计方法论，从 AskUserQuestion 工具的三次迭代、Todo 演化为 Task 的背后逻辑，到渐进式披露这个设计模式，信息密度很高。原文链接：<a href="https://x.com/trq212/status/2027463795355095314">https://x.com/trq212/status/2027463795355095314</a>。</p></blockquote><hr><p>正在构建 AI Agent 的人，大都会卡在同一个问题上：该给模型什么工具？</p><p>工具太少，Agent 能做的事受限；工具太多，模型反而不知道用哪个，甚至会在不该用的时候乱用。Claude Code 的工程师 Thariq 把这个问题研究了将近一年，陆续更换和迭代了多个工具，最近整理出了一篇总结。我觉得值得认真读，不只是因为这篇文章谈的是 Claude Code，更是因为里面的思路对任何人构建 Agent 都有参考价值。</p><h4 id="工具设计的起点以模型能力为锚">工具设计的起点：以模型能力为锚</h4><p>原文里有个简单但容易理解的类比：如果让你解一道难的数学题，你想要什么工具？</p><p>纸笔是起点，能手算，但速度慢。计算器快，但要知道怎么使用它的高级功能。最强大的自然是计算机，可以写代码来解，但前提是你会编程。工具的档次不同，能解决的问题就不一样，而且工具必须匹配使用者的能力。</p><p>给 Agent 设计工具，逻辑一样。原文的核心观点是：你需要给模型能力匹配的工具，而匹配的标准，来自你对模型能力的观察和理解。这需要持续关注它的输出，看它在哪里卡壳、哪里游刃有余，然后针对性地调整工具设计。</p><p>说起来简单，实践里很难。下面这几个案例能说明具体是怎么做的。</p><h4 id="askuserquestion三次迭代才找到正解">AskUserQuestion：三次迭代才找到正解</h4><p><img src="/images/2026-02-28-AgentClaude-Code-HCLxg2JbsAA3Ag_.jpeg" alt="AskUserQuestion 工具截图" loading="lazy" decoding="async"/></p><p>Claude Code 本来可以直接在对话里问用户问题，但这种自由格式的问答摩擦感很强。Anthropic 想降低这个成本，提升模型和用户之间的信息传递效率。</p><p>第一次尝试是在<code>ExitPlanTool</code> 里加一个问题数组，让模型同时输出计划和问题。实现最简单，但逻辑上有个矛盾：如果用户的回答和计划冲突了，模型要不要重新调用<code>ExitPlanTool</code>？这个方案废了。</p><p>第二次改输出格式，让 Claude Code 用特定的 Markdown 格式来提问，比如带选项的 bullet list，前端解析后展示成 UI 组件。思路挺好，执行不稳定。Claude Code 会在末尾多写几句话、换一种格式、或者漏掉选项。靠模型自律输出结构化内容，在复杂上下文里根本靠不住。</p><p>第三次，单独做了一个工具。Claude Code 可以在任何时候调用，但尤其适合在 Plan Mode 阶段。工具触发时弹出 Modal，展示问题和选项，阻塞 Agent 执行循环，等用户回答完再继续。</p><p><img src="/images/2026-02-28-AgentClaude-Code-HCL0gcObkAA4tKt.jpeg" alt="AskUserQuestion Modal 界面" loading="lazy" decoding="async"/></p><p>这个方案的关键在于把格式约束放进了工具 Schema，而不是寄希望于模型自觉。Claude Code 也更愿意调用这个工具，因为调用动作本身就是结构化的，不需要它猜格式。</p><p>这个迭代过程挺有代表性的。很多人以为提示词写清楚，模型就会乖乖按格式输出。真实情况是，这种稳定性在复杂场景下很脆弱。把格式约束建进工具才是根本解法。</p><h4 id="todo-变成-task工具要跟着模型一起进化">Todo 变成 Task：工具要跟着模型一起进化</h4><p><img src="/images/2026-02-28-AgentClaude-Code-HCLxrfXbEAUXwRV.jpeg" alt="Task 工具截图" loading="lazy" decoding="async"/></p><p>Claude Code 刚上线时，模型跑着跑着就会忘记自己在做什么。早期的解决方案是<code>TodoWrite</code> 工具，让 Claude Code 开始时列出待办，边做边打勾。为了防止它还是遗忘，每五轮对话插一条系统提醒。</p><p>这套机制在当时有效。但在模型能力变强后，新问题来了。</p><p>Opus 4.5 不需要频繁提醒，但系统提示的存在让它以为必须严格按 Todo 执行，不能灵活调整计划。模型被工具套住了，而工具反而限制 Claude Code 的能力。同时，子 Agent 协作的场景越来越多，几个 Agent 怎么共享一个 Todo 列表？<code>TodoWrite</code> 完全没考虑这个场景。</p><p>于是换成了 Task 工具。Task 支持依赖关系，子 Agent 可以互相通知状态，模型可以修改和删除任务，也可以主动新建。它更像是 Agent 之间的协调机制，而不是单纯的备忘录。</p><p>原文里说的这句话我觉得值得记住：“随着模型能力提升，那些原本帮助模型的工具，可能反而开始限制它。定期重新审视之前的假设很重要。”</p><p>这不只是 Claude Code 的问题。任何长期运行的 Agent 系统都会面临这个问题，因为你依赖的基座模型在变，但工具往往不会跟着变。</p><h4 id="搜索工具从被动接收到主动探索">搜索工具：从被动接收到主动探索</h4><p>最早，Claude Code 用 RAG 向量数据库来给 Claude Code 提供上下文。RAG 快、能处理大量文件，但它需要额外的索引和配置，并且也不够稳定。更重要的是，上下文是你喂给 Claude Code 的，而不是它自己找的。</p><p>后来加了<code>Grep</code> 工具，这个变化看起来很小，背后的设计理念转变挺大的。RAG 是外部系统决定 Claude Code 应该看什么，Grep 是让 Claude 自己决定自己需要看什么。模型越来越强，后者效果越来越好。Claude Code 逐渐学会了按需构建自己的上下文。</p><p>在 Agent Skills 上，这个思路被正式化为渐进式披露（Progressive Disclosure）。Skill 文件可以引用其他文件，模型可以递归地读取，层层展开。不是一次性把所有信息都摆在模型面前，而是让它按需探索。</p><p>一年下来，Claude Code 从基本不会自主构建上下文，进化到能在多层文件里精确找到自己需要的信息。</p><h4 id="渐进式披露不用加工具也能扩展能力">渐进式披露：不用加工具也能扩展能力</h4><p>Claude Code 现在大约有 20 个工具，团队经常在自问：它们真的都需要吗？每加一个工具，模型就多一个要考虑的选项，决策负担上升。</p><p>比如，用户问 Claude Code 怎么添加 MCP、Slash Command 是什么，Claude Code 可能就答不上来，因为这些信息没在系统提示里。要不要把所有文档塞进系统提示？空间浪费，而且用户很少问这类问题，不值得一直放那儿。</p><p>他们的最终解法是做了一个专门的 Claude Code 指南 子 Agent，当你问 Claude Code 关于自身使用的问题时，它会调用这个子 Agent。子 Agent 有详细的搜索策略，知道去哪里找什么，只返回真正需要的答案。</p><p>这是渐进式披露的另一个形态：不加工具，而是加子 Agent，把专业问题交给专业的执行者。需要时才激活，不需要时不占用主 Agent 的注意力。</p><h2 id="写在最后">写在最后</h2><p>给模型设计工具，不只是技术，更是一种艺术，没有一套通用规则，要看用的是什么模型、Agent 的目标是什么、运行环境是什么。</p><p>从最简单的方案开始，观察模型在哪里用得好、哪里卡壳，然后针对性地改。工具是模型能力的放大器，模型能力变了，放大器也得跟着换。</p><p>有意思的是，这篇文章本身就用了渐进式披露的写法。没有一上来就给结论，而是通过三个迭代案例，让读者自己摸出规律来。作者确实做到了“像 Agent 一样思考”。</p><hr><hr><p>欢迎长按下面的二维码关注<strong>Feisky</strong> 公众号，了解更多云原生和 AI 知识。</p><p><img src="/images/mp.png" alt="Feisky 公众号二维码" loading="lazy" decoding="async"/></p>
]]></content:encoded><dc:extent>5 min read</dc:extent></item></channel></rss>