Skip to content

Gemini Flash 思维链文本泄露到 iMessage 消息渠道

问题

使用 google/gemini-3-flash-preview 并设置 thinkingDefault: "off" 时,模型仍然会把链式推理(Chain-of-Thought)以普通文本的形式嵌入回复内容。这段"内心独白"不会被过滤,而是原封不动地通过 message() 工具调用发送到 iMessage 等消息渠道。

用户的 iMessage 收到的不是你想说的话,而是龙虾的"内心戏"——比如一大段以 Reasoning: 开头的分析文字,或者全是斜体格式的推理段落。

解决方案

需要在发送前对 Gemini 输出进行清洗,移除以下两类内容:

  1. Reasoning: 开头的标题段落及其后续内容
  2. 只包含斜体文本的纯推理段落(没有实质性回复内容)

对应代码位置:在 normalizeReplyPayloadsForDelivery 中添加 stripGeminiInlineReasoning() 函数,并限定只对 Gemini provider 生效(早期 PR #33138 的问题在于全局应用,误将其他 provider 的正常 Reasoning: 内容也过滤了)。

关键点:调用清洗函数时必须传入 options.provider 参数,否则 deliver.ts 和 send/mirror 路径不会生效,变成死代码。

参考:Ollama provider 的类似问题已在 v2026.3.13 修复(PR #45330 fix(ollama): hide native reasoning-only output),Gemini 需要相同处理。

相关 Issue:#33091