翻訳エンジンとフォールバック
DeepL機能の提供状況
DeepL APIを利用する翻訳、無料フォールバックおよびDeepL残高の新規販売は、契約条件の書面確認が完了するまで停止しています。利用可能な機能はDashboardの表示を優先します。
MTS は複数の翻訳エンジンを束ね、障害時に自動で切り替えるフェイルオーバー(フォールバック)機構を備えています。これにより「翻訳が返ってこない」状況を最小化します。
対応エンジン
ローカル定型句高速経路(神経反射辞書)
hello、thank you、goodbye など、意味が固定しやすい短い挨拶は、完全一致した場合だけローカルJSON辞書から即時翻訳します。辞書はBot起動時にメモリへ索引化され、Ollama・LM Studio・クラウドAPIへのリクエスト、GPU利用、LocalLLM利用枠の消費は発生しません。
- 大文字小文字、前後空白、末尾の一般的な句読点を正規化します。
- 文中の部分一致は使いません(
hello thereは通常翻訳へ進みます)。 - 必要な翻訳先が1つでも辞書にない場合は、通常の翻訳エンジンへ戻ります。
- 定型句は追加Promptより先に処理するため、複雑なPromptでも基本挨拶は壊れません。サブスク用語集が有効な場合だけ、明示した訳語を優先して辞書を使いません。
- 辞書一致で判明した原文言語は、同じ言語への重複翻訳の省略にも利用します。
また、単一の翻訳先を要求したときにTranslateGemmaがJSONではなく翻訳文だけを返した場合は、そのプレーンテキストを安全に受理します。複数言語要求と壊れたJSONは引き続き厳格にエラー扱いします。
1. LocalLLM(Ollama / LM Studio)— 既定・無料
- 翻訳特化の軽量モデル(例:
translategemma系)を使用。 - 文脈をある程度踏まえた自然な翻訳が可能。
- サーバーマシンの資源に依存するため、混雑時は遅延することがあります。
- Ollama と LM Studio のどちらのランタイムにも対応。
2. DeepL — 高品質オプション
- 業界標準の高精度機械翻訳。
- 文字数を購入して利用します(→ 料金・課金)。
- 残量は gift(無料付与) / paid(購入分) の合計で判定され、消費は無料分から先に行われます。
3. Azure Translator / Google Cloud Translation — 明示設定時のみ
- Developer が臨時運用などのため明示的に有効化した場合だけ候補になります。
- 新規・設定欠損時の既定値には含まれず、通常構成では使用しません。
自動フォールバックの動作
LocalLLM 運用時
LocalLLM をメインにしている場合、次のときにクラウド翻訳へ自動で切り替えます。
- タイムアウト:LLM が時間内に応答しない(例:設定時間を超過)。
- 過負荷 (busy):同時実行数の上限に達し、これ以上処理できない。
- 一時障害:接続エラーなどが発生。
切り替え順(優先度):
LocalLLM(第一希望)
└─ ✗ → DeepL(既定のクラウドフォールバック)
Developer が Azure / GCP を明示的に有効化した場合のみ:
LocalLLM → Azure → GCP → DeepL設定済みかつ利用可能な代替のうち、上から順に試します(chainモードは順に全て試行、singleモードは最初の1つのみ)。
フォールバック先の限定:既定は DeepL のみです。Developer 設定では Azure / GCP / DeepL から候補を選べますが、Azure・GCPは明示的に選択しない限り使われません。複数を有効にした場合の順序は Azure → GCP → DeepL です。
無料枠と DeepL 残高の関係:フォールバックには毎月の無料枠があり(→ 利用上限とレート)、枠内であれば DeepL 残高がなくても DeepL にフォールバックできます。枠を超えた分だけ、サーバーの購入済み DeepL 残高から消費されます。
DeepL 利用時の自動コスト削減
DeepL で翻訳するとき、最後に設定した言語(最も使われない言語)からリクエストします。DeepL は翻訳と同時に原文の言語を判定して返すため、その結果を使って原文と同じ言語への翻訳を省略します。
原文の言語を知るには最低1回のリクエストが必要で、その1回が「原文と同じ言語」に当たってしまうと無駄になります。そこで原文の言語である可能性が最も低い=最後に設定した言語を最初に問い合わせることで、無駄打ちの確率を最小化しています。
- 例:翻訳先が「1番目=日本語 / 2番目=英語 / 3番目=韓国語」で、日本語のメッセージが投稿された場合 → 韓国語へ翻訳(1回)→ 原文が日本語と判明 → 英語へ翻訳(1回)/日本語向けの出力は原文をそのまま使用(APIリクエストなし)
- 省略された言語には費用が一切かかりません(消費量にも計上されません)。
- 表示内容・言語の並び順は変わりません。日本語向けの出力は、URL やメンションを整形しただけの原文になります。
- 翻訳先が1言語だけの場合は、そのまま翻訳します。
TIP
効果を最大化するには、よく使われる言語を上(1番目)から順に設定してください。最後の枠には、そのサーバーで最も使われない言語を入れるのが最適です。
消費文字数は DeepL が返した翻訳文の文字数でカウントします。
選択したフォールバック先がどれも使えない場合(例:DeepLの無料枠と購入残高がない)、LocalLLM を試します。LocalLLM も利用できない場合は翻訳できないことがあります。
DeepL 運用時
- DeepL の残量が少なくなると、自動的に LocalLLM へ切り替えてサービスを継続します(残量わずかの時点で事前にお知らせします)。
- 残量は gift と paid の合計で判定し、無料分から先に消費します。
無停止メンテナンス(運営向け)
サーバー本体の LocalLLM(Ollama / LM Studio)を更新・再起動する間も、翻訳を止めずに継続できます。
- 臨時エンドポイントを用意:別マシン(LAN内など)の Ollama / LM Studio を登録し、臨時モードをオンにします。マシンごとにタイムアウト・同時実行数・直行文字数を個別設定できます。
- メインをメンテナンス中にする:新規の翻訳は臨時マシンへ自動的に振り向けられ、メインには新しい処理が来なくなります。
- drain:メインのキューは最後まで処理してから静止
- handoff:メインのキュー待ちを臨時マシンへ即移動
- 更新作業を実施 → 完了後にメンテナンスを解除すると、メインが自動で復帰します。
NOTE
臨時マシンが1台も有効でない場合は、クラウドフォールバック(DeepLなど)で翻訳を継続します。実行中のリクエストは中断しないため、メインを停止する前にタイムアウト時間ぶん待ってください。
音声まわりのエンジン
VC文字起こし・読み上げは、すべて運用者のマシン上で動作します。音声が外部の事業者へ送信されることはありません。
| 用途 | エンジン | 補足 |
|---|---|---|
| 文字起こし | Whisper(large-v3-turbo) | GPUで動作。翻訳と同じGPUを共有するため同時セッション数に上限あり |
| 読み上げ(日本語) | VOICEVOX | 利用規約によりキャラクター名のクレジット表記が必要 |
| 読み上げ(英語ほか) | Piper | CPUで動作 |
文字起こしした結果は、通常のメッセージとまったく同じ翻訳パイプラインに流れます。VC専用の翻訳ロジックはありません。
同じ言語の翻訳を省く
翻訳前にメッセージの言語を判定し、すでにその言語である翻訳先を省略します。LocalLLM の消費は翻訳先の言語数に比例するため、省略はそのまま消費削減になります。
判定は2段構えで、それぞれ信頼できる範囲だけを使います。
| 手法 | 担当範囲 |
|---|---|
| 文字体系ルール | 日本語・韓国語・中国語・キリル文字など。短文でも確実に判別可能 |
| 統計的判定 | ラテン文字の言語。自信がなければ判定を棄権 |
| どちらも不明 | 省略しない(通常どおり全言語へ翻訳) |
設計上、「必要な翻訳を消してしまう」ことを最優先で避けています。誤って省略するくらいなら余分に翻訳するほうがましだからです。そのため「ok」のような数文字のメッセージでは省略が効かないことがあります。
判定はローカルで完結し、外部送信はありません。
翻訳品質を保つ工夫
- トークン保護:メンション
@user、絵文字、チャンネルリンク#channel、URL を翻訳前に退避し、翻訳後に復元。壊れません。 - 改行・行構造の保持:複数行や箇条書きのメッセージを、できるだけ元の構造で出力。
- 無駄な翻訳の抑制:発言と同じ言語への翻訳や、翻訳されていない(原文のままの)出力を検知してスキップ。
- 言語自動判定:原文の言語を推定し、適切に翻訳先を決定。
エンジン選択の考え方
| 重視する点 | 推奨 |
|---|---|
| コスト(無料) | LocalLLM |
| 品質・安定速度 | DeepL |
| とにかく止めたくない | LocalLLM + フォールバック(既定構成) |
エンジンはサーバー全体/チャンネル個別に設定できます(→ 言語・チャンネル設定)。
フォールバックの有無や優先順位は運用環境の設定に依存します。クラウド代替が未設定の場合は LocalLLM のみで動作します。
