AIシステムが回答途中でランダムにフランス語へ切り替わってしまう問題—原因が分かるまで時間がかかった

Reddit r/artificial / 2026/4/21

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 著者は、問い合わせ言語に応じてドイツ語または英語で回答することを目的にマルチリンガルRAGを構築したが、取得した文脈内にフランスの法律用語があると、回答の途中でフランス語へ「ドリフト」することが頻発した。
  • LLMに問い合わせ言語の検出を任せる方法は不安定で、ユーザーが挙げたフランスの裁判名が理由で「フランス語の問い合わせ」と誤判定されるケースもあった。
  • うまくいったのは、正規表現ベースで言語を判定する単純な方式で、一定数のドイツ語マーカーがあれば回答言語をドイツ語に強制し、それ以外は英語にすることで安定した。
  • プロンプトには、回答全体を指定言語のみにすること、そしてフランス語を明確に禁じるという強い制約を追加し、これが継続的な言語汚染を防ぐ決定打になったという。
  • 著者は、この「ソース文書に混ざった言語による汚染」はマルチリンガルRAGで現実的に起きる厄介な問題であり、あまり議論されていないと述べている。

クエリの言語に応じて、ドイツ語または英語で回答する必要があるRAGシステムを作りました。簡単そうでした。簡単ではありませんでした。

ソース文書は主にドイツ語ですが、フランスの法律用語が含まれているものもあり、ラテン語の句や、時には英語の引用も含まれます。起きていたことはというと、LLMがまずドイツ語で回答を始めるものの、文脈の中にフランス語の一節が出てくると、ただ..段落の途中でフランス語に切り替えてしまう、ということでした。同じ文の中でドイツ語とフランス語を混ぜてしまうこともありました。一度、イタリア語だけで最後まで回答したことがあって、今でも理由がわかりません。

LLMにクエリの言語自体を検出させてみました。信頼できませんでした。ユーザーがフランスの裁判例を名前で挙げると、クエリがフランス語だと判断してしまうことがありました。

実際にうまくいったのは、単純なregex(正規表現)検出器でした。クエリに一般的なドイツ語の単語(der, die, das, und, ist, nicht, mit, für, datenschutz, verletzung など)が含まれているかをチェックします。ドイツ語の目印が十分にある場合は、応答言語をドイツ語に強制します。そうでなければ英語です。言語検出のための高度なライブラリは使いません。パターンマッチングだけです。

そしてプロンプトに、強い制約を追加しました。"あなたの回答はすべてONLYで{language}で書いてください。出力はドイツ語または英語のみです。決してフランス語、スペイン語、イタリア語、または他のいかなる言語もしないでください。取得したコンテキストが別の言語を一部含む場合でも、あなたの回答は{language}のみに翻訳してください。"

「never French(決してフランス語にしない)」の部分が重要な役割を果たしています。明示的な禁止がないと、テストを始めて数日でモデルが再びフランス語に戻ってしまいます。モデルが文脈上のフランスの法律文書を見て、「あ、これフランス語でやるんだ」と思ってしまう感じです。

多言語のRAGシステムを作っている人で、これに遭遇した人はいますか? ソース文書由来の言語汚染が、私が対応した中で最も厄介なバグで、ほとんど誰もそれについて書いていないのを見かけました。

submitted by /u/Fabulous-Pea-5366
[link] [comments]