[omni] 多模态模式开启翻译后,译文时有时无,或混在 JSON 字段里
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
Piste de recherche
Start with build_omni_prompt in openless-all/app/crates/openless-core/src/cloud_providers.rs and compare its translation handling with compose_translate_prompts in prompt_compose.rs. Trace how multimodal output and streaming deltas are parsed, then add coverage for prompt composition and translation parsing; done means translation-enabled output contains only the target-language text, including across delta boundaries.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
现象
-
触发条件:
- 识别管线:多模态模式;供应商 OpenAI(支持音频);模型
gpt-audio-1.5;风格「轻度润色」「清晰结构」 - 翻译目标语言 English;工作语言 简体中文;输出语言偏好 简体中文
- 录音中按翻译键,日志为
[coord] translation requested during Recording, effective=true,历史记录为translationActive: true - 平台 / 版本:macOS;2.0.1+build.20261016 与 2.0.2-Beta.3+build.20261026-c9f49c60 均复现;代码定位基于
beta最新提交85b243ab
- 识别管线:多模态模式;供应商 OpenAI(支持音频);模型
-
预期行为:开启翻译时,只插入目标语言(English)的译文纯文本;未开启时,插入原语言的润色结果纯文本。这与传统模式一致:传统模式开启翻译时插入的是译文,润色后的源文另存为
source_text。 -
当前表现:同一设置下 13 次开启翻译的听写,结果随机,没有一次能直接使用:
结果 次数 没有翻译:只有中文 final_text8 没有翻译: original_text+final_text,两个都是中文1 翻译了:中文 final_text+ 英文translated_text2 翻译了:英文放在 final_text里2 所有结果都被包在 JSON 对象里上屏(见 #1304)。示例:
{"final_text": "我使用了翻译,为什么没有输出翻译内容呢?"} {"final_text": "你帮我检查一下这是代码的问题还是什么原因。", "translated_text": "Please help me check whether this is a code issue or something else."} -
证据:翻译状态确实传到了多模态会话。停止录音时,
update_context把translation_active = true的上下文经DictationEngineRouter推给SharedOmniDictationEngine:
多模态会话据此在 system prompt 末尾追加翻译段;部分结果含英文译文,也说明模型收到了翻译指令。
初步定位
- 翻译指令只是在润色 system prompt(仅风格模板就有三千到五千多字)末尾追加的一行,user 消息里只有音频:
- 同一份 system prompt 开头的上下文前提里有「最终输出语言偏好:简体中文。若回答可用中文表达,请优先使用简体中文。」(来自输出语言偏好设置),与翻译目标直接冲突:
纯翻译路径 compose_translate_prompts 为避免这种冲突,会把输出语言偏好强制设为 Auto(同文件 L386-L397),多模态路径没有这样处理。
3. 多模态翻译没有可解析的输出约定。传统模式「润色 + 翻译」使用 build_polish_translate_system_prompt:输出格式标注「优先级最高」,源文 / 译文分别用 [[OPENLESS_POLISHED_SOURCE]] / [[OPENLESS_TRANSLATION]] 标记,代码用 split_polish_translate_output(流式用 PolishTranslationStream)取出译文。多模态路径没有这些,所以即使模型给出了 translated_text,应用也取不出译文。
4. 与 #1304 同源:gpt-audio-1.5 不遵循文本输出要求。例如翻译段要求「只输出译文,不要输出源文」,模型却同时输出了源文和译文。
影响
- 多模态模式下翻译基本不可用:多数情况下得到中文原文;即使翻译了,也和原文一起包在 JSON 里上屏。
- 界面和历史记录都显示翻译已开启,用户无法判断这次翻译是否真的生效。
建议接受标准
- 多模态模式开启翻译时,最终插入的只有目标语言的译文(纯文本),连续多次测试结果稳定。
- 多模态翻译采用可解析的输出约定:复用传统模式的源文 / 译文标记与
split_polish_translate_output/PolishTranslationStream,或等价方案;最终文本和流式 delta 都只包含译文。 - 开启翻译时,输出语言偏好不再与翻译目标冲突(与
compose_translate_prompts一致,按 Auto 处理)。 - 识别不出译文时,不把原文当作译文静默插入(具体降级方式由维护者确定)。
- 测试覆盖:多模态翻译的提示词组成、译文解析(含跨 delta 切分)。
TODO / 不确定项
- 输出语言偏好冲突对结果的影响程度未单独验证(可把输出语言偏好设为「自动」做对照)。
- Gemini、百炼等其他多模态模型共用同一份
build_omni_prompt,它们在多模态翻译下的表现未验证。 - 多模态模式下是否改为两段式(先出源文再翻译)需要维护者确定。
- 我可以和 #1304 一起修复,并用真实
gpt-audio-1.5验证。
- Langage dominant
- Rust
- Étoiles
- 3.7k
- Forks
- 349
- Merge moyen
- 2 j 14 h
- PR mergées (30 j)
- 97
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Open-Less/openless
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour
-
[windows] 录音快捷键还不支持设置为ScrllLock键Peut-être pris @HKLHaoBin l’a pris il y a 9 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Open-Less/openless#1241 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
Les mainteneurs répondent en général sous 1 jour
-
[omni] 多模态「验证」对 OpenAI gpt-audio-1.5 必然返回 400Peut-être pris @Breadswim l’a pris il y a 2 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 58/100
Les mainteneurs répondent en général sous 1 jour
-
[omni] OpenAI gpt-audio-1.5 多模态听写输出被包成 JSON 对象(final_text 等字段)后直接上屏Peut-être pris @Breadswim l’a pris il y a 2 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de Open-Less/openless
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
libnativeapi/nativeapi#21 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
longbridge/nsh#804 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour