[omni] 多模态模式开启翻译后,译文时有时无,或混在 JSON 字段里
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 52/100
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
现象
-
触发条件:
- 识别管线:多模态模式;供应商 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验证。
- Ngôn ngữ chính
- Rust
- Star
- 3.7k
- Fork
- 349
- Merge trung bình
- 2 ngày 14 giờ
- Pull request đã merge (30 ngày)
- 97
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Open-Less/openless
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[windows] 录音快捷键还不支持设置为ScrllLock键Có thể đã có người làm @HKLHaoBin đã nhận 10 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Open-Less/openless#1241 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 18/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[omni] 多模态「验证」对 OpenAI gpt-audio-1.5 必然返回 400Có thể đã có người làm @Breadswim đã nhận 4 ngày trước. Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 58/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[omni] OpenAI gpt-audio-1.5 多模态听写输出被包成 JSON 对象(final_text 等字段)后直接上屏Có thể đã có người làm @Breadswim đã nhận 4 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của Open-Less/openless
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
saltnpepper97/halley#271 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Remove the unused gh-aw agentic workflow setupCó thể đã có người làm @AviAvni đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 3 ngày
-
bug stdlib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 83/100
Sh1n1230/PunctuationToggle#308 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Perl - Readme DriftCó thể đã có người làm @Omnideth đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
CommunityToolkit/Aspire#2375 ·
Maintainer thường phản hồi trong vòng 2 ngày