Seeing like an Agent:大模型工具的设计指南
"One of the hardest parts of building an agent harness is constructing its action space."
构建 Agent 框架最难的部分之一,是设计它的动作空间。
—— Anthropic, Lessons from Building Claude Code: Seeing like an Agent
"Claude Code currently has ~20 tools, and we are constantly asking ourselves if we need all of them. The bar to add a new tool is high, because this gives the model one more option to think about."
Claude Code 目前有约 20 个工具,我们一直在问自己是否每一个都有必要。添加新工具的门槛很高,因为每多一个工具,就多给模型一个需要思考的选项。
"Experiment often, read your outputs, try new things. See like an agent."
多做实验,审视输出,尝试新方法。学会站在 Agent 的视角看问题。
根源:大模型的输出是概率性的
要理解为什么给大模型设计工具和给程序设计 API 是两件完全不同的事,需要先回到一个根本事实:大模型的本质是一个概率函数。
它的每一次输出都是从概率分布中采样的结果——不是确定性的计算,而是发散的、不完全可预测的生成。同样的输入,不同的采样可能产生不同的行为:选择不同的工具、传入不同的参数、走向不同的分析路径。
这意味着,当你给大模型 50 个工具时,你不是在给它 50 个确定的选项,而是在给它一个巨大的概率解空间。模型需要在这个空间里采样出"下一步该做什么",选项越多,分布越分散,每一步偏离最优路径的概率就越高。
工具设计的本质,是约束大模型的解空间。
少量、正交、边界清晰的工具,把模型的选择空间从无序的高维分布压缩到一个低维、结构化的子空间里。在这个子空间里,模型的每一次采样都更可能落在有效区域内。
这不是限制模型的能力,而是让它的能力更有效地释放。就像给河流修堤坝——不是阻止水流,而是让水流到该去的地方。
Anthropic 在构建 Claude Code 的过程中反复踩坑、反复重构,最终沉淀出一句话:See like an agent——站在模型的位置看问题。当你理解了模型是一个概率系统,你就知道工具设计的目标不是"暴露更多能力",而是"让每一步选择都尽可能确定"。
以下四条原则,都是这一根源的具体推论。
一、输出克制:给对的数据,给够用的量
"To put myself in the mind of the model I like to imagine being given a difficult math problem. What tools would you want in order to solve it?"
为了站在模型的角度思考,我喜欢想象自己面对一道数学难题。你会想要什么工具来解题?
工具的输出有两个维度需要克制:量和性质。
量的克制——每次只给够做下一个判断的数据。大模型的 context window 是固定的,每多塞一段无用信息,有用信息的权重就下降一点。一个工具返回 10 万行结果,和返回 0 行结果一样没用——前者淹没,后者缺失。
Anthropic 在构建 Claude Code Guide 子代理时就遇到了这个问题:
"This worked but we found that Claude would load a lot of results into context to find the right answer when really all you needed was the answer."
这个方法有效,但我们发现 Claude 会把大量结果加载到上下文中来寻找正确答案,而实际上你只需要那个答案本身。
模型为了找到一个答案,把大量搜索结果全部加载到上下文里。信息量是够了,但大部分是噪声,反而干扰了判断。最终的解决方案是构建一个专门的子代理,带有精确的搜索指令和返回规范——不是给更多数据,而是给更精准的数据。
正确的粒度是:模型看完输出后,能决定"下一步查什么"。工具应该有分页、有上限、有摘要,让模型在多轮对话中逐步深入。
性质的克制——提供数据,不提供结论。
"By giving Claude a Grep tool, we could let it search for files and build context itself."
通过给 Claude 一个 Grep 工具,我们可以让它自己搜索文件、自己构建上下文。
Claude Code 的搜索设计经历了一次关键转变:从 RAG 自动喂上下文,到给 Grep 工具让模型自己搜。区别不在于技术实现,在于谁来做判断。RAG 替模型做了"什么信息是相关的"这个判断,但这个判断可能是错的。而 Grep 只是一个搜索工具,模型自己决定搜什么、怎么搜、搜到的结果是否有用。
"This is a pattern we've seen as Claude gets smarter, it becomes increasingly good at building its context if it's given the right tools."
我们观察到一个规律:随着 Claude 变得更聪明,只要给它合适的工具,它构建自身上下文的能力就越来越强。
工具的职责是快速取回数据。"这个数据意味着什么"——这个判断留给使用者。
自动化的"检测"和"识别"看似省事,实际上有两个问题:第一,它可能是错的,但调用方已经跳过了验证环节;第二,它把中间过程黑盒化了,调用方无法在中途调整方向。给模型原子级的操作——搜索、读取、过滤——让它自己组合出分析策略。
二、一步完成:无状态,无前置,无清理
"While Claude could just ask questions in plain text, we found answering those questions felt like they took an unnecessary amount of time. How could we lower this friction?"
虽然 Claude 可以用纯文本提问,但我们发现回答这些问题花了不必要的时间。如何降低这种摩擦?
Anthropic 在设计 AskUserQuestion 时反复强调降低摩擦。同样的道理适用于工具调用:每多一步有状态的操作,就多一层摩擦。
Claude Code 早期的 TodoWrite 工具就是一个
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290495.htm
[原创]Seeing like an Agent:大模型工具的设计指南
321 浏览
1 回复
为大模型设计工具,而不是为人,这篇文章具体讲述了,为什么两者是不同的,为大模型设计工具的原则是什么,希望大家设计工具的时候,参考claude code 这种业内顶级的智能体设计范式,我们能学到非常多知识