Files
obsidian-vault/personal/tech/deepseek-language-drift.md
T

93 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, способ правки без кода