【Bug汇报】团子翻译器在使用自定义格式的ai API翻译漫画时,历史上下文(“联系上下文”选项)格式构建错误
软件版本: 6.1.3 API设置: 在线ai翻译-通用 System Prompt: (用户自定义了System Prompt,严格要求AI返回JSON对象)
问题描述
作者您好:
我在使用团子翻译器对接一个兼容各个AI模型格式的自定义API时,发现了一个关于历史消息格式的问题。
这个问题导致AI模型(如DeepSeek-Chat)接收到了“被污染”的历史上下文,从而模仿了错误的格式,返回了纯文本而不是JSON字符串。这最终导致团子翻译器在解析AI响应时出现JSON解析错误(如 unexpect end of json)。
——简单来说,勾选“高级选项”里的“联系上下文”时,如果“多段译文解析格式”勾选了JSON格式,那当前正在翻译的文本是会以正确的JSON格式发送给ai的。但是历史上下文的JSON格式是错误的,就没有JSON格式,直接一个文本发过去了。AI看的一堆错误的JSON格式的历史对话,大概率会返回一个JSON格式同样错误的输出,然后就各种报错,什么unexpect json end啊,多了“‘”啊之类的。
复现步骤:
在团子翻译器中配置一个自定义API,比如deepseek,选择 deepseek-chat 格式。
“多段译文解析格式”勾选了JSON格式,“联系上下文”选个5~10,越多越容易复现
连续进行多次翻译(至少10次),以确保团子翻译器开始向API发送包含“历史记录”的请求。
观察(通过代理或服务器日志)团子翻译器发送给API的第二个及以后的请求体(Request Body)。
实际观察到的错误行为
在包含历史记录的请求中,messages 数组的格式如下:
{ "model": "deepseek-chat", "messages": [ { "role": "system", "content": "【...要求返回JSON...】" },
// 第一次交互 (正确)
{ "role": "user", "content": "{\"Hello\":\"\"}" },
{ "role": "assistant", "content": "{\"Hello\":\"你好\"}" }, // AI正确返回了JSON字符串
// 第二次交互 (问题所在)
{ "role": "user", "content": "{\"How are you?\":\"\"}" },
// 团子翻译器在构建下一次请求时,
// 错误地将AI的JSON响应解析为了纯文本
{ "role": "assistant", "content": "你好" } // <-- 错误!这里应该是 "{\"Hello\":\"你好\"}"
], "stream": false }
预期的正确行为
为了让AI模型(如DeepSeek)能够正确理解上下文并继续返回JSON,assistant 角色的历史记录必须保持其原始的JSON字符串格式:
{ "model": "deepseek-chat", "messages": [ { "role": "system", "content": "【...要求返回JSON...】" },
// 第一次交互
{ "role": "user", "content": "{\"Hello\":\"\"}" },
{ "role": "assistant", "content": "{\"Hello\":\"你好\"}" }, // <-- 正确
// 第二次交互
{ "role": "user", "content": "{\"How are you?\":\"\"}" },
// 在构建下一次请求时,历史记录也必须是JSON字符串
{ "role": "assistant", "content": "{\"Hello\":\"你好\"}" } // <-- 正确
], "stream": false }
问题分析(根本原因):
这个问题的核心在于:AI模型会模仿它在历史记录中看到的 assistant 响应格式。
当团子翻译器错误地将 assistant 的历史content从"{"Hello":"你好"}" (JSON字符串) 变成了 "你好" (纯文本) 并发送给AI...
...AI在读取上下文时就会认为:“哦,我(assistant)之前是用纯文本回复的。”
因此,AI将忽略 system 提示中“必须返回JSON”的指令,转而模仿历史记录中的纯文本格式。
最终,AI也返回了一个纯文本响应(例如:"我很好")。
团子翻译器的JSON解析器收到了这个纯文本,尝试将其解析为JSON,导致解析失败,从而报错。
建议的修复方案
在团子翻译器内部,当为 deepseek-chat 格式(以及其他类似的JSON API格式)构建 messages 历史数组时:
对于 assistant 角色的 content 字段,不应将其解析为纯文本。
它必须被存储和重新发送为AI上次返回的原始、完整的JSON字符串。
感谢您的辛勤工作,团子翻译器是一款非常棒的软件!希望这个详细的反馈能帮助您定位并修复这个问题。
(另外,漫画翻译的“笔刷填涂”功能,每次使用图片都会劣化一点,这个bug好多版本没有修。这个就容易复现多了,涂个几十次,原图就劣化的不像样了。这个也能修就好了)
Source: PantsuDango/Dango-Translator