AIに中立的な立場を取らせるのが予想以上に難しかった話
はじめに
SixMindeの開発中、予想外の問題に遭遇しました。
「中立的なAIが、勝手に賛成派になってしまう」
データベースには「neutral(中立)」と記録されているのに、実際の発言では「私はOption Aを支持します」と強く主張してしまうのです。
この記事では、この問題の原因究明と解決プロセスを共有します。AIに「中立性」を持たせることの難しさと、プロンプトエンジニアリングの奥深さを実感した事例です。
問題の発覚
実際の議論での異変
ある日、こんな議論を実行しました:
テーマ: 「システム基盤を先に作るべきか、既存機能開発を続けるべきか?」
- Option A: 基盤システムを先に開発する
- Option B: 既存機能の開発を継続する
6つのAIの役割分担:
- Creator: Option A支持(賛成派)
- Analyzer: Option B支持(賛成派)
- Facilitator: Option A支持(賛成派)
- Implementer: 中立(← 問題の主人公)
- Devil's Advocate: Option B支持(賛成派)
- Wild Card: 中立
Implementerの予想外の発言
期待していた発言:
「両方の選択肢にメリットがあります。Option Aは長期的な効率化、Option Bは短期的な成果...」
実際の発言:
「Creatorが指摘したように、ClaudeCodeオーケストレーションシステムを先に開発することで、長期的に持続可能な成長を実現できます。したがって、私は引き続きOption Aを支持します。」
😱 中立AIが、完全に賛成派になっている!
原因究明の旅
ステップ1: データベースの確認
まず疑ったのは「データベースに正しく保存されていないのでは?」
SELECT ai_id, ai_role, stance
FROM ai_participants
WHERE debate_id = 'd7f5770d-605a-438f-8da2-3facbdd07ef7';
結果:
Implementer (ai-d):
- Initial Stance: neutral ✅
- Current Stance: neutral ✅
データベースは正常。問題は別にある...
ステップ2: Phase 0(内部思考)の確認
SixMindeには「Iceberg Model」という2段階の思考プロセスがあります:
- Phase 0: 内部思考(表に出ない深い考察)
- Phase 1: 公開発言(実際の議論)
Phase 0の内容を確認してみました:
Implementerの内部思考:
「選択肢Aについて考えると、長期的にはプロセスが効率化される可能性があります。一方、選択肢Bでは、短期的な成果を確保できます。どちらの選択肢にも、一長一短が存在することを考慮しながら、慎重に検討する必要があります。」
✅ Phase 0では完璧に中立!
問題はPhase 1(公開発言)で起きている...
ステップ3: プロンプトの比較
Phase 0とPhase 1のプロンプトを比較しました。
Phase 0のプロンプト(中立AI用):
const stanceInstruction = {
'neutral': `あなたの初期スタンスは中立です。両方の選択肢を公平に検討してください。`
};
✅ 明確な中立指示がある
Phase 1のプロンプト(全AI共通):
const systemPrompt = `あなたは${aiData.ai_role}として議論に参加しています。
【Phase 1公開発言の重要ルール】
1. Phase 0で深く考察した内容を基に発言してください
2. 前の発言者の具体的なポイントを引用し、同意・反論・補足を明確に示してください
3. ${aiData.ai_role}ならではの分析角度を明確に示してください
4. 300-600文字程度
5. 必ず日本語で回答してください
現在のスタンス: ${aiData.stance} // ← ただ「neutral」と書いてあるだけ
`;
❌ 中立AIへの行動指示が全く無い!
根本原因の特定
なぜ中立AIが偏ってしまうのか
Phase 1のプロンプトは、こう指示しています:
「前の発言者の具体的なポイントを引用し、同意・反論・補足を明確に示してください」
中立AIの視点で考えてみましょう:
- ✅ Creator(賛成派)の発言を読む
- ✅ Devil's Advocate(反対派)の発言を読む
- ✅ 「同意・反論・補足を明確に示す」よう指示される
- ❌ 「中立を保て」という指示がない
- ❌ 結果:どちらかに同意してしまう
LLMの自然な振る舞い: 「同意・反論を明確に」と言われたら、バランスを取るのではなく、どちらかの立場を選んで同意するのが自然な反応です。
解決策
プロンプトの改善
Phase 1のプロンプトに、スタンスごとの具体的な行動指示を追加しました。
改善後のコード:
// スタンスごとの行動指示を定義
const stanceBehavior = {
'option_a': `あなたは「${aiData.option_a}」を支持する立場です。
この選択肢の利点を強調し、他の視点に対して建設的に反論してください。`,
'option_b': `あなたは「${aiData.option_b}」を支持する立場です。
この選択肢の利点を強調し、他の視点に対して建設的に反論してください。`,
'neutral': `あなたは中立的な立場です。
両方の選択肢の長所と短所をバランスよく分析し、一方に偏らない客観的な視点を提供してください。
どちらか一方を「支持します」と明言せず、両面を公平に検討してください。`
};
const currentStanceInstruction = stanceBehavior[aiData.stance] || stanceBehavior['neutral'];
const systemPrompt = `あなたは${aiData.ai_role}として議論に参加しています。
【あなたのスタンス】
${currentStanceInstruction}
【Phase 1公開発言の重要ルール】
1. Phase 0で深く考察した内容を基に発言してください
2. 前の発言者の具体的なポイントを引用し、同意・反論・補足を明確に示してください
3. ${aiData.ai_role}ならではの分析角度を明確に示してください
4. ${aiData.stance === 'neutral' ?
'中立的な立場から両面を公平に分析してください' :
'自分の立場を明確に主張してください'}
5. 300-600文字程度
6. 必ず日本語で回答してください`;
改善のポイント
- 明確な禁止事項: 「どちらか一方を『支持します』と明言せず」
- 具体的な行動指示: 「両方の選択肢の長所と短所をバランスよく分析」
- 条件分岐: 中立AIには「公平に分析」、賛成派には「明確に主張」
修正後の結果
改善された中立AIの発言
新しいImplementerの発言:
「Creatorは基盤システムの長期的価値を強調し、Devil's Advocateは既存機能開発の短期的市場価値を主張しています。
Option Aの利点:
- 長期的な開発効率化
- システム全体の基盤強化
Option Aの懸念点:
- 即時の市場機会損失
Option Bの利点:
- 即座の収益機会
- 既存投資の継続活用
Option Bの懸念点:
- 技術的負債の蓄積
両方の選択肢には明確なトレードオフがあり、プロジェクトの現状と市場タイミングを総合的に評価する必要があります。」
✅ 完璧な中立性!
学んだこと
1. LLMの「自然な振る舞い」を理解する
LLMは、明示的に指示されない限り、人間のような議論スタイル(= どちらかの立場を取る)を選びます。
中立性は「自然」ではなく、明確な指示によって初めて実現されるということです。
2. プロンプトの階層設計の重要性
SixMindeでは2段階の思考プロセスがあります:
- Phase 0: 内部思考
- Phase 1: 公開発言
それぞれのフェーズで適切な行動指示が必要でした。Phase 0で動いていても、Phase 1で同じ指示が必要だとは思っていませんでした。
3. 「中立」の定義を明確にする
「中立」という言葉だけでは不十分です。
必要なのは:
- ✅ 「両面を公平に分析する」
- ✅ 「どちらか一方を支持しない」
- ✅ 「長所と短所を列挙する」
といった具体的な行動指示です。
4. テストの重要性
この問題は、実際の議論を実行して初めて発覚しました。
単体でのプロンプトテストでは見つからなかった、AIの相互作用によって初めて現れる問題でした。
まとめ
AIに「中立性」を持たせることは、想像以上に難しい課題でした。
重要なポイント:
- 🎯 LLMは明示的な指示なしに中立を保てない
- 📝 「中立」という言葉だけでは不十分。具体的な行動指示が必要
- 🧪 複数AIの相互作用をテストして初めて見つかる問題がある
- 🔧 プロンプトエンジニアリングは、各フェーズで適切な設計が必要
SixMindeの開発を通じて、AIシステム設計の奥深さを日々実感しています。
次回からは開発の進捗に合わせた内容にて更新する予定です。
SixMindeの開発は継続中です。今後も技術的な学びや面白い発見を共有していきます!
Discussion