工具
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 对文件系统之外的一切都看不见。”