Discourse AI 无法翻译大量帖子和主题

你好,

我在我们的社区论坛上启用了 Discourse AI,并开始向多种语言进行回填。大约 60% 的帖子和主题已被翻译,但在过程中,我在控制台中遇到了大量错误(ai_translation_verbose_logs 已启用),现在回填已基本停滞:

DiscourseAi::Translation: Failed to translate topic 563 to de: Validation failed: Title can't be blank, Fancy title can't be blank /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.3/

DiscourseAi::Translation: Failed to translate post 582 to pl_PL: Validation failed: Raw can't be blank, Cooked can't be blank /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.3/lib/a

奇怪的是:

  • 提到的帖子和主题看起来很正常,它们有不同类型的标题和正文,有简单的也有复杂的。类似的帖子和主题已成功翻译。
  • 在第二次或第三次尝试时,它们通常会成功翻译。
  • 我为帖子使用了自定义的 persona,但这在内置的帖子翻译 persona 以及内置的主题标题翻译 persona 上也会发生。
  • 我测试过的所有模型都会发生这种情况:Gemini-2.5-flash(非思考)、Gemini-2.5-flash(思考)、GPT5 和 GPT5-mini。
  • 这种情况在所有测试过的区域设置中都同样发生(en、es、pt、de、pl_PL、fr、nl)。

是否可以记录完整的提示和模型响应以进一步调试此问题?

我正在手动测试所有这些模型上的相同提示,它们总是成功响应。

我找到了 ai_api_audit_logs,我认为我已经找到了问题所在。

当发送翻译时,有一个 get_max_tokens 函数会根据文本长度分配最大 token 数。

问题是,它大部分都被推理消耗掉了。看看这个审计日志,限制设置为 1000,推理在开始生成输出之前就占用了全部 1000 个 token。

推理模型的限制应该高得多。

data: {"id":"chatcmpl-CQ7XU4Ep16RClb7OZQAxOXN9JWgIG","object":"chat.completion.chunk","created":1760341544,"model":"gpt-5-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null}}],"usage":null,"obfuscation":"dPNNK7ojEf"}

data: {"id":"chatcmpl-CQ7XU4Ep16RClb7OZQAxOXN9JWgIG","object":"chat.completion.chunk","created":1760341544,"model":"gpt-5-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"length"}],"usage":null,"obfuscation":"dM2r"}

data: {"id":"chatcmpl-CQ7XU4Ep16RClb7OZQAxOXN9JWgIG","object":"chat.completion.chunk","created":1760341544,"model":"gpt-5-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":1075,"completion_tokens":1000,"total_tokens":2075,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1000,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"j4"}

data: [DONE]

我根本不建议在翻译任务中使用任何类型的思考模型。

https://www.reddit.com/r/LocalLLaMA/comments/1g7y74t/adding_a_thinking_turn_to_extend_llms_reasoning/

2 个赞

我的经验恰恰相反。我有一套希望被遵循的指令,这些指令需要理解上下文,而非思考模型要么会忽略这些指令,要么会在错误的情况下应用它们。我刚刚通过这种方式翻译了一个完整的应用程序——超过 3000 个字符串,使用推理模型能获得好得多的结果。

根据我的发现,我将思考力降低到 low,并获得了所有翻译。但我认为像这样限制输出令牌是适得其反的,因为思考模型并没有被禁止用于翻译,而用户却不知道为什么会失败。

解决方案可能很简单,比如如果 LLM 启用了思考功能,就将其乘以 2。或者将乘数作为一个配置选项暴露出来。

2 个赞

我们不得不限制 max_tokens,因为我们使用结构化输出来进行翻译时,许多小型模型很容易陷入无限循环。

我相信新版本的 OpenAI Responses API 在计算思考令牌时不计入 max_tokens,这解决了这个问题。

我正在尝试最新的 GPT-5。我在 Gemini 2.5 Pro 和 2.5 Flash 上遇到了完全相同的问题。为什么不稍微提高一下限制呢?

我已经花费了不少钱在失败的尝试上,如果我没有启用调试日志,我甚至不会知道这些失败,然后不得不去数据浏览器里查找日志。而这一切发生在我使用预定义的模型创建器时。

我禁用了流媒体,效果好了很多(而且仍然在思考中)

1 个赞

我们刚刚合并了一个更新,为您提供了一个名为 ai_translation_max_tokens_multiplier 的新设置,其默认值为 1。

您可以将其提高到任意您喜欢的数字,以处理您遇到的限制。

此主题已在 3 天后自动关闭。不再允许回复。