工具

Tool

Harness 暴露给 Agent 调用的函数——Read、Write、Bash、Search。Tool 是 Agent 感知并作用于 Environment 的方式:它只能通过工具结果看到 Environment,只能通过工具调用改变 Environment。每次工具调用都要额外付出一次模型请求的代价,因为结果必须先返回给模型,模型才能决定下一步做什么。

大多数编程 Agent 自带的工具:

工具作用
Read返回文件内容作为工具结果
Write在文件系统中创建或编辑文件
Bash运行 shell 命令并返回输出
Search在代码库中查找匹配模式的文件或文本

一个 Tool 由三部分定义:名称、功能描述和参数 schema。Harness 每次请求都会把这些定义发给模型,模型选择工具的方式与它生成其他内容一样——通过写 Token,在这里就是生成一个带参数的结构化调用。模型本身从不执行任何东西;Harness 读取调用、运行函数,然后把结果发回。

工具列表决定了 Agent 能做什么。一个能力很强的模型如果只有很窄的工具集,那它就是一个很窄的 Agent:它会把手头所有事都路由到仅有的工具上,这就是为什么 Agent 如此依赖 Bash——一个 shell 就能触及系统的大部分。想干净地赋予 Agent 一项能力,就给它加一个对应的工具;MCP 是从 Harness 外部接入工具的标准。

工具定义在每次请求中都会占用上下文,所以工具集越大,在还没调用任何工具之前就有常驻成本——而且描述相似的工具有很多时,模型会更难选出正确的那一个。

用法:

“Agent 能直接查询 staging 吗?”

“给 Harness 加一个 psql 工具,范围限定为只读 staging。没有对应的工具,Agent 对文件系统之外的一切都看不见。”