跳转至

工具系统

Tools 组件页讲的是“怎么实现”,本页讲的是“为什么要有工具系统,以及如何设计一套对 Agent 友好的工具能力”。

1. 没有工具的 Agent 会遇到什么问题

如果 Agent 只能依赖模型内部知识,它会天然受限于:

  • 知识时效性
  • 对运行时系统状态的无感知
  • 无法执行查询或操作

所以工具系统存在的根本原因是:让 Agent 能感知外部真实世界。

2. 工具系统在架构中的位置

flowchart LR Agent --> ToolDecision["是否调用工具"] ToolDecision --> Tools["Tool System"] Tools --> Internal["Internal"] Tools --> Mock["Mock"] Tools --> MCP["MCP"] Tools --> Result["结构化结果"] Result --> Agent

3. 一个好工具的标准

  • 名字语义清晰
  • 输入 schema 稳定
  • 输出结构统一
  • 错误可诊断
  • 超时和权限边界明确

对 Agent 来说,“能不能正确用工具”很大程度上取决于工具设计是否清晰,而不是模型本身是否足够强。

4. 工具系统不是越多越好

工具过多会带来三个问题:

  • 模型选择困难
  • prompt 变长
  • 高风险调用面变大

因此建议按知识域或职责封装工具,而不是把所有底层 API 都直接暴露给 Agent。

5. 推荐的工具设计方式

  • 把多个底层调用封装成一个语义完整的工具
  • 输出尽量携带 summary
  • 对高风险动作做明确保护
  • 给每个工具补最小测试样例

6. 什么时候该新增工具

当你发现 Agent 反复需要某类外部信息,且这类信息:

  • 不能稳定从模型记忆中得到
  • 不能仅靠 RAG 解决
  • 具备明确的输入和输出边界

这时就应该考虑新增工具,而不是继续增加 Prompt 说明。