Skip to content

工具调用 (Tool Calling) 概览

工具调用系统允许智能体(Agent)在对话过程中主动调用 AIO 内部的功能模块(如文件操作、系统指令、API 测试等),从而突破纯文本生成的限制,实现“言行合一”的交互体验。

核心流程

工具调用的完整生命周期如下:

  1. 定义注入:系统通过 {{tools}} 宏将当前智能体启用的工具定义(名称、描述、参数 Schema)注入到 LLM 的提示词中。
  2. 模型决策:LLM 根据用户需求,决定是否需要调用工具。如果需要,它会输出符合协议格式的调用请求。
  3. 解析与审批
    • 系统解析模型输出,识别出工具名称和参数。
    • 根据审批策略(自动或手动),决定是否立即执行。
  4. 执行与反馈
    • 系统在本地执行对应的工具方法。
    • 执行结果(成功数据或错误信息)被包装为“工具角色”消息,反馈给 LLM。
  5. 最终生成:LLM 根据工具返回的结果,生成最终回复给用户。

协议支持

系统支持多种工具调用协议,以适配不同能力等级的模型:

  • VCP (Versatile Chat Protocol)
    • 特点:纯文本结构协议,不依赖模型厂商的原生 Tool Calling API。
    • 优势:兼容性极强,适用于所有能输出文本的模型(如 DeepSeek、本地 Llama 等)。
    • 格式:通常采用 XML 或特定的 Markdown 标记包裹。
  • 厂商原生协议
    • 支持 OpenAI、Anthropic、Google Gemini 等厂商的标准工具调用接口。
    • 系统会自动将内部工具定义转换为对应厂商的 JSON Schema。

角色兼容性 (convertToolRoleToUser)

由于部分模型或 API 代理不支持原生的 tool 角色消息,系统提供了“角色转换”功能:

  • 开启后:工具的执行结果将伪装成 user 角色的消息发送给模型。
  • 适用场景:使用不支持工具角色的纯文本协议(如 VCP)或某些限制严格的 API 渠道时。

性能与安全控制

  • 并行执行:支持同时发起多个不相关的工具调用,提升效率。
  • 最大迭代次数:限制模型在单次对话中连续调用工具的次数(默认为 20 次),防止因逻辑死循环导致的 Token 浪费。
  • 超时控制:为每个工具调用设置硬性超时时间(默认 30s),确保界面响应不会因后台任务卡死。

相关阅读

Released under the Apache-2.0 License.