工具调用 (Tool Calling) 概览
工具调用系统允许智能体(Agent)在对话过程中主动调用 AIO 内部的功能模块(如文件操作、系统指令、API 测试等),从而突破纯文本生成的限制,实现“言行合一”的交互体验。
核心流程
工具调用的完整生命周期如下:
- 定义注入:系统通过
{{tools}}宏将当前智能体启用的工具定义(名称、描述、参数 Schema)注入到 LLM 的提示词中。 - 模型决策:LLM 根据用户需求,决定是否需要调用工具。如果需要,它会输出符合协议格式的调用请求。
- 解析与审批:
- 系统解析模型输出,识别出工具名称和参数。
- 根据审批策略(自动或手动),决定是否立即执行。
- 执行与反馈:
- 系统在本地执行对应的工具方法。
- 执行结果(成功数据或错误信息)被包装为“工具角色”消息,反馈给 LLM。
- 最终生成: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),确保界面响应不会因后台任务卡死。
相关阅读: