背景
#685 报告了 enableToolCall=true 时 AI 文本中的 XML 工具标签被 extractToolInvocations 提取执行的问题。经讨论,owner 确认当前行为是设计如此——XML toolcall 是项目的兼容协议,AI 输出的 XML toolcall 被执行是预期行为。
本 issue 不是 bug report,而是针对上述设计提出一个改进方向,供讨论。
设计问题
当前 enableToolCall 只控制 Provider 原生 tool call 与内部 XML 协议之间的转换,不影响执行层对 XML 的提取。这意味着:
enableToolCall=true:Provider 原生 tool call 转成 XML 执行 ✅,AI 文本中的 XML 也被执行 ❌
enableToolCall=false:AI 文本中的 XML 执行 ✅(唯一通道,合理)
两个通道并行,缺乏互斥语义。
建议的设计方向
enableToolCall 应作为通道选择开关:
enableToolCall |
工具调用通道 |
AI 文本中的 XML |
false |
XML toolcall(唯一通道) |
✅ 执行(预期行为,不变) |
true |
原生 function calling |
❌ 不执行(走原生通道) |
用户开启 enableToolCall=true 的意图是"走原生 function calling 通道"。此时 AI 在正文里解释工具格式、写代码示例时输出的 XML 不应被执行。
实测依据
在 enableToolCall=true 条件下,让 AI 原样重复一段 XML 工具标签文字,结果:系统将正文中的 XML 误识别为工具调用并尝试执行,报错 This tool is only available in...。AI 在 thinking 中正确理解了用户意图("只要我重复文字,不是要我执行工具"),但执行层无法区分 XML 来源。
该问题在分析 Operit 工具调用机制时自然复现——AI 在正文中引用工具格式代码作为说明时触发了误执行。
PR #691 的评论区有实测对比截图(未修复版 vs 修复版)。
不涉及的部分
- 渲染层不讨论:AI 文本中的 XML 仍可渲染为工具调用卡片,视觉展示不改
enableToolCall=false 行为不讨论:现有 XML toolcall 通道作为唯一通道,行为不变
- 不涉及具体实现方案:本 issue 仅讨论设计方向是否值得推进,实现细节在方向确认后再议
为什么单独开 issue
PR #691 和 #686 尝试在 bugfix 框架下推进修复,owner 正确指出这属于设计变更而非 bugfix。因此本 issue 作为 design discussion 单独提出,与 #685 的 bug 报告框架分开。
背景
#685 报告了
enableToolCall=true时 AI 文本中的 XML 工具标签被extractToolInvocations提取执行的问题。经讨论,owner 确认当前行为是设计如此——XML toolcall 是项目的兼容协议,AI 输出的 XML toolcall 被执行是预期行为。本 issue 不是 bug report,而是针对上述设计提出一个改进方向,供讨论。
设计问题
当前
enableToolCall只控制 Provider 原生 tool call 与内部 XML 协议之间的转换,不影响执行层对 XML 的提取。这意味着:enableToolCall=true:Provider 原生 tool call 转成 XML 执行 ✅,AI 文本中的 XML 也被执行 ❌enableToolCall=false:AI 文本中的 XML 执行 ✅(唯一通道,合理)两个通道并行,缺乏互斥语义。
建议的设计方向
enableToolCall应作为通道选择开关:enableToolCallfalsetrue用户开启
enableToolCall=true的意图是"走原生 function calling 通道"。此时 AI 在正文里解释工具格式、写代码示例时输出的 XML 不应被执行。实测依据
在
enableToolCall=true条件下,让 AI 原样重复一段 XML 工具标签文字,结果:系统将正文中的 XML 误识别为工具调用并尝试执行,报错This tool is only available in...。AI 在 thinking 中正确理解了用户意图("只要我重复文字,不是要我执行工具"),但执行层无法区分 XML 来源。该问题在分析 Operit 工具调用机制时自然复现——AI 在正文中引用工具格式代码作为说明时触发了误执行。
PR #691 的评论区有实测对比截图(未修复版 vs 修复版)。
不涉及的部分
enableToolCall=false行为不讨论:现有 XML toolcall 通道作为唯一通道,行为不变为什么单独开 issue
PR #691 和 #686 尝试在 bugfix 框架下推进修复,owner 正确指出这属于设计变更而非 bugfix。因此本 issue 作为 design discussion 单独提出,与 #685 的 bug 报告框架分开。