JSON 流解析中断时翻译被静默截断(未引发错误)

补充一个数据点——我们观察到的现象似乎源于相同的底层机制,但表现形式不同。

观察环境: Discourse 核心 + discourse-ai,LLM:通过 OpenAI 接入的 GPT-5.1(自定义 API 连接,非预置模型)。

复现证据

同一源帖子(俄语,约 2000 字符,包含标题/粗体/项目符号列表/链接),通过原生 AI 翻译功能翻译成多种语言:

  • 波兰语 (pl):嵌入图片的 Markdown 结构丢失——从 ![alt text|690x460](upload://...) 变为格式错误的链接,缺失了 ! 前缀和 | 分隔符,替代文本和尺寸混在一起作为纯文本显示。渲染结果为可点击链接而非嵌入图片。
  • 乌克兰语 (uk):整个帖子中出现了字面量的 \n\n 序列,取代了段落换行。同一翻译中的图片 Markdown 保持完整——因此这种损坏并非由单一固定症状引起,而是随每次运行而变化。

与上述描述的截断问题不同,我们的案例中并未出现内容缺失——全文完整存在,但转义序列 / Markdown 语法遭到破坏,而非输出被缩短。不同的服务商(此处为 OpenAI 而非 Google),不同的症状(损坏而非截断),但疑似根本原因相同:StructuredOutput#read_buffered_property 回退至 BestEffortJsonParser#extract_key,该方法未对 JSON 字符串序列进行转义处理(\n 保持字面量),并且在解析中途触发回退时,似乎也无法正确处理 Markdown 语法旁边的特殊字符。

我们这边的 Sidekiq 或 Rails 日志中也没有报错——同样表现为静默失败。

1 个赞