设计智能体能用好的工具

K1
深入解析 · 工具与能力设计

工具就是智能体的 API,而你设计的对象是模型,不是人。

模型的能力上限,由你交给它的工具决定。一位熟练工程师读过源码后能用的工具,与一个模型仅凭描述、在上下文压力下、第一次就要盲用的工具,完全不是一回事。本文讲的是思维转变:工具不是被包了一层的函数,而是一个非确定性推理器作用于世界的接口;工具所提供的能力与模型能从中推断出的能力之间的每一道缝隙,都会变成你在生产环境中看到的故障。Anthropic 自己的指南就把工具定义为一种新的软件契约——介于确定性系统与随机性智能体之间——这个定位改变了下文的每一个设计决策。

STEP 1

工具是智能体通往现实的全部接口。

智能体没有手。它对世界做的每一件事——读文件、查数据库、发消息、退款——都通过一次工具调用完成,别无他途。因此工具集就是智能体完整的动作空间:你没暴露的能力对模型而言不存在,你暴露得糟糕的能力它就会用得糟糕。这里的杠杆极大却被严重低估——团队在提示词和模型选型上倾注精力,却交付出一堆薄薄的 JSON 外壳,包着一个从未为随机性调用方设计的内部 API。工具层通常是智能体系统中回报最高、却最少被打磨的那一层。

STEP 2

为模型的失败模式而设计,而不是为工程师的能力而设计。

REST API 假定调用方读过文档、能跨调用维持状态、靠堆栈跟踪调试。模型这些都没有。它在上下文里只看到工具名、描述和模式;它会幻觉出参数、误读用途、乱序调用,或凭空发明一个听起来合理的字段。你设计的对象,是一个快速、能干、且在歧义下自信地犯错的调用方。这条纪律是:假定描述就是唯一存在的文档,假定每一处可选的歧义都会被以最坏的方式解读,假定一次格式错误的调用是你设计的过错,而非模型的过错。

把工具的名称、描述和模式孤立起来读——别看别的——然后问自己:「在没有源码的情况下,我能正确调用它吗?」如果你犹豫了,模型就会失败。这三行的阅读,是你拥有的最便宜的工具评估。

STEP 3

可供性:工具应让正确的调用显而易见,让错误的调用难以发生。

这个词借自界面设计。好的门把手不用标牌就告诉你该推还是该拉;好的工具不用范例就告诉模型该怎么用。可供性来自工具的形状:一个说清动作与对象的名字(refund_order,而非 process)、一段说明何时该用、何时不该用的描述、一组窄到本质上只有一种正确填法的参数,以及用模型能据以行动的措辞报告发生了什么的返回值。可供性不是事后贴上的文档——而是模式与命名在结构上替你做了讲解。

STEP 4

围绕任务而非围绕你的内部 API 构建工具。

本能反应是把现有端点机械地一对一暴露出去。那等于把数据库的形状交给模型,而不是把智能体的工作交给它。Block 把它的 Linear 集成从三十多个薄薄的端点镜像重建成两个任务形状的工具,结果智能体反而更好了,因为模型推理的单位是「找到这个 issue 并更新它」,而不是「先 GET /issues 再 PATCH /issues/:id」。围绕智能体要完成的那件整合后的事来设计工具;当模型根本不该插手编排时,就把多步的内部舞步收拢到一次调用背后。

# Wrong: the database's shape, leaked to the model
db_query(table="orders", where="id=42")
db_update(table="orders", set="status='refunded'")

# Right: the task's shape, the orchestration hidden
refund_order(order_id="42", reason="defective")
# -> "Refunded $39.00 to order 42. Customer notified."

一对一镜像端点感觉很高效,却是 2025 年代智能体里最常见的工具设计错误。它把模型并不擅长的编排推进了循环,并把每个多步任务都变成智能体可能失步的地方。

STEP 5

工具的输出也是一段提示词。

工具返回的一切都会直接回到模型的上下文,并左右下一个决策。一个返回原始行、晦涩 ID 或一个干巴巴 200 的工具,逼着模型去猜发生了什么;一个返回简短、人类可读的结果陈述的工具——什么变了、下一步该做什么、现在什么为真——则免费地把下一步引导对了。Anthropic 的工具指南明确指出,相比技术标识符,智能体在人类可读的字段上推理得更好。把每个返回值都当作你写进模型推理里的一句话,因为它就是。

STEP 6

何时「为模型设计」不该是默认选项。

两个诚实的例外。一个工具如果唯一的调用方是一个边界明确的确定性外壳——而非模型自由选择——那它可以像任何内部函数一样原始;面向模型的那套纪律在这里买不到任何东西。另外,早期的一次性原型可以先镜像端点,借此摸清智能体真正需要什么,再去投入任务形状的设计。为模型设计要付出实打实的功夫;把这功夫花在模型自由选择、且用户能感知结果的工具上——而不是花在模型永远看不见的管道上。