工具是运行框架提供给智能体调用的函数,例如 Read、Write、Bash 和 Search。智能体通过工具感知并操作环境:它只能通过工具结果看到环境,也只能通过工具调用改变环境。每次工具调用都会额外消耗一次模型提供商请求,因为结果必须先返回模型,模型才能决定下一步。
大多数编码智能体都会提供以下工具:
| 工具 | 作用 |
|---|---|
| 读取 | 把文件内容作为工具结果返回 |
| Write | 在环境中创建或编辑文件 文件系统 |
| Bash | 运行 shell 命令并返回输出 |
| 搜索 | 在整个代码库中查找与模式匹配的文件或文本 |
一个工具由三部分定义:名称、功能说明和参数 schema。运行框架会在每次请求中把这些定义发送给模型;模型选择工具的方式与生成其他内容完全相同——继续写出 Token,只不过这次生成的是一段带参数的结构化调用。模型本身从不执行任何操作;运行框架负责读取调用、运行函数并把结果送回模型。
工具列表决定了智能体能做什么。即使模型能力很强,如果工具集狭窄,智能体的能力同样受限;它会把所有任务都绕到现有工具上,这正是智能体高度依赖 Bash 的原因——一个 shell 工具就能触达系统的大部分区域。要以清晰方式赋予智能体某项能力,最好为它提供专用工具;MCP 则是从运行框架外部接入工具的标准。
工具定义会在每次请求中占用上下文,因此即使尚未调用任何工具,庞大的工具集也会产生固定成本;如果多个工具的描述十分相似,模型选择正确工具的能力还会下降。
用法:
“智能体能直接查询预发布环境吗?”
“给运行框架添加一个 psql 工具,并把权限限制为只读访问预发布环境。没有对应工具时,智能体看不到文件系统之外的任何东西。”