93 lines
5.8 KiB
Markdown
93 lines
5.8 KiB
Markdown
# DeepSeek — спонтанный переход на китайский
|
||
|
||
**Дата:** 2026-09-15
|
||
**Статус:** известный баг модели, официального фикса нет. Решение не принято.
|
||
**Проявление:** Кит (Whale) начал отвечать Alex'у на китайском вместо русского.
|
||
|
||
## Симптом
|
||
|
||
Модель `deepseek-chat` (провайдер `deepseek`, наш основной) выдаёт ответ
|
||
целиком на китайском, хотя весь диалог — на русском или английском.
|
||
Диалог был: коммиты git, английский технический вывод, короткие ответы.
|
||
|
||
**Опять же**, баг плавающий: тот же промпт то даёт правильный язык, то нет.
|
||
|
||
## Первопричина (подтверждена)
|
||
|
||
Модель **рассуждает внутри на китайском** (это её дефолт — так эффективнее
|
||
по токенам), а финальный шаг «перевести на язык пользователя» иногда
|
||
пропускается или сбоит.
|
||
|
||
Два фактора:
|
||
|
||
1. **Мультиязычное reasoning по дизайну.** Внутренняя цепочка рассуждений
|
||
генерируется на китайском намеренно, для эффективности. Перевод обратно
|
||
не всегда происходит.
|
||
2. **Недетерминированность генерации.** Тот же вход иногда даёт английский,
|
||
иногда китайский. Поэтому ни один фикс не гарантирован.
|
||
|
||
**Промпт игнорируется:** в багрепортах отмечено, что модель продолжает
|
||
на китайском **даже после прямой просьбы** не переключать язык.
|
||
|
||
## Триггеры
|
||
|
||
- **Короткие технические ответы без явной языковой привязки** — самый частый
|
||
триггер. Формулировка из разбора: «short, context-lacking prompts more
|
||
likely trigger default reasoning language».
|
||
- Большой объём англоязычного вывода (git-логи, diff'ы, термины) —
|
||
сбивает языковую привязку.
|
||
- В нашем system prompt **нет жёсткой языковой инструкции**: единственное
|
||
упоминание — строка 4 `SOUL.md`: `respond in the language you're
|
||
addressed in — Russian or English`. Формулировка мягкая.
|
||
|
||
## Статус в апстриме
|
||
|
||
Issue **открыты**, мейнтейнеры не ответили, официального фикса **нет**:
|
||
|
||
- [DeepSeek-V3 #1226](https://github.com/deepseek-ai/DeepSeek-V3/issues/1226) — Model sometimes responds in Chinese even when the conversation is in English
|
||
- [DeepSeek-V3 #1443](https://github.com/deepseek-ai/DeepSeek-V3/issues/1443) — Model switches to Chinese despite all English prompts
|
||
- [DeepSeek-V3 #1463](https://github.com/deepseek-ai/DeepSeek-V3/issues/1463) — DeepSeek responds in Chinese instead of English
|
||
|
||
Все решения ниже — community workarounds, не официальные.
|
||
|
||
## Способы решения (по возрастанию стоимости)
|
||
|
||
### 1. Жёсткая языковая инструкция в SOUL.md — дешёвый, не гарантирован
|
||
|
||
Заменить мягкую формулировку на явную:
|
||
|
||
> Отвечай **только** на языке собеседника — русский или английский.
|
||
> Никогда не используй китайский, даже внутри рассуждений.
|
||
> Если сомневаешься — пиши по-русски.
|
||
|
||
**Плюс:** правится без кода, `SOUL.md` редактируется напрямую.
|
||
**Минус:** в багрепортах модель игнорировала и прямые запреты.
|
||
|
||
Полезно ещё потому, что теперь есть `prompt_overrides` — можно вынести
|
||
формулировку в `review/*.md`, не трогая Python. См. [[hermes-agent-improvements]].
|
||
|
||
### 2. Детектор языка + retry — надёжно, дорого
|
||
|
||
Программная проверка вывода: если китайский — повтор запроса.
|
||
Недетерминированность играет в нашу пользу: retry часто даёт правильный язык.
|
||
|
||
**Требует кода в Hermes** (перехват ответа, детекция, повтор). Отдельная задача.
|
||
|
||
### 3. Смена модели — радикально, эффективно
|
||
|
||
Claude / GPT следуют языковым инструкциям заметно лучше. Если китайский
|
||
будет повторяться — вариант.
|
||
|
||
**Открытый вопрос:** `deepseek-chat` выбран сознательно или это дефолт,
|
||
который никто не выбирал? Ответ определяет выбор между путями 1+2 и 3.
|
||
|
||
## Что НЕ работает
|
||
|
||
- Повтор той же просьбы «говори по-английски» — модель игнорирует.
|
||
- Опора на мягкую формулировку (`respond in the language you're addressed in`).
|
||
|
||
## Связанное
|
||
|
||
- [[hermes-whale-system-prompt]] — где живёт языковая инструкция (SOUL.md, строка 4)
|
||
- [[hermes-agent-improvements]] — prompt_overrides, способ правки без кода
|