MAGI風・合議制AIをローカルLLMで作ってみた記録― Ollamaで3人格AIの意思決定プロセスを実装する

こんにちは、yukiです。
今回は、MAGI風AI(3人格合議制AI)をローカルLLMで試作した記録を、あとから振り返れる形でまとめます。

テーマは、
**「新世紀エヴァンゲリオンのMAGIシステムを、AIに作らせたらどうなるか」**です。

単なるLLM呼び出しではなく、

  • 人格の違い

  • 合議による意思決定

  • 判断不能時に“追加で何を聞くか”を生成する

この意思決定プロセスそのものを作ることを目的にしました。

最終的にはUI付き公開も視野に入れていますが、まずは完全ローカルで動くプロトタイプを作っています。


結論(先に要点)

先におすすめだけまとめます。

  • ローカルLLM開発はモデル選定が8割

  • 最初は gemma3:4b でフロー検証

  • 仕上げるなら llama3.1:8b-instruct-q4

  • 人格設計と合議ルールは、モデルサイズ以上に効く

  • 「制約込み」で設計すると、ローカルLLMはかなり楽しい

以下は、その判断に至るまでの記録です。


背景と目的

原作のMAGIシステムは、

  • 3つの人格が独立に判断し

  • 多数決で意思決定する

という構造を持っています。

これをそのままAIに落とすのではなく、

  • 人格差をどう作るか

  • 意見が割れたとき、どう扱うか

  • 何が足りないかをAI自身に言わせるか

このあたりを実装上のテーマにしました。


採用した基本方針

今回の前提はかなり割り切っています。

  • 完全ローカル実行

    • API課金・トークン管理を避ける

  • Ollama + ローカルLLM

  • Pythonベース

  • 実装補助に GitHub Copilot

  • UIは後回し(最終的に Streamlit

まずは「動く意思決定フロー」を作るのを最優先にしました。


MAGIシステムの設計

人格構成(原作準拠)

人格は原作にならって3つ。

  • MELCHIOR(科学者人格)

    • 合理性、再現性、成功条件の明確さ

  • BALTHASAR(母人格)

    • 安全性、人間への影響、不可逆リスク

  • CASPER(女人格)

    • 政治性、対外評価、責任構造、見え方

人格プロンプトは「性格」よりも、判断軸がズレるように設計しています。


合議ルール

各人格は必ず以下を出力します。

  • vote

    • APPROVE / REJECT / ABSTAIN

  • rationale

    • 短い理由

  • blocking_info

    • 判断に不足している情報

ルールはシンプルです。

  • 2/3で決定

  • 割れたら DEADLOCK

  • DEADLOCK時は「追加質問」を生成

ABSTAINを許容したのが、あとから効いてきました。


実装で詰まったところ

Ollama(Windows)の初期トラブル

インストール後に ollama コマンドが認識されない問題に遭遇。

原因は単純で、

  • PATHが PowerShell / VSCode に反映されていなかった

対処としては、

  • ollama.exe の実体を確認

  • 一時的にPATH追加

  • ターミナルとVSCode再起動

Windowsは、こういうところで時間を吸われがちです。


モデル選定の罠

ここが一番の学びでした。

試したモデルと結果:

  • llama4 / llama3.3
    500 Internal Server Error

  • 原因
    → 要求RAM(50GB超) > 実メモリ(約36GB)

学びとしては、

  • 「新しいモデル」≠「ローカルで動く」

  • モデル名 + B数 + 量子化タグが超重要

でした。


実際に評価が良かったモデル

gemma3:4b

  • 軽い・速い

  • JSONが比較的安定

  • 人格差は薄め

👉 フロー検証用としては最適


llama3.1:8b-instruct-q4

  • 人格差が明確

  • rationale・質問の質が一段上

  • メモリ的にも現実的

👉 MAGIらしさを出すなら最有力


llama3.3 / llama4

  • 今回の環境では非現実的

  • ローカル36GB帯では厳しい


JSON安定化のための工夫

ここは地味ですが重要です。

  • format: "json" を必須指定

  • JSONバリデーション

  • 失敗時の再プロンプト(最大2回)

  • それでも失敗した人格は ABSTAIN扱い

  • rationale / blocking_info の文字数制限

「全員成功しない前提」で設計すると、全体が安定します。


Streamlit UIを触って気づいたこと

  • 起動時のメール入力は空欄でEnterでOK

  • UIで重要なのは:

    • 人格ごとの色分け

    • rationaleの一覧性

    • DEADLOCK時の「追加質問」の目立たせ方

UIは判断を助ける補助線だと割り切った方が楽でした。


次にやろうとしていること

MAGI構造を流用して、

  • スライドショー自動ダイジェスト生成

    • 動画 → フレーム抽出 → スコアリング

候補としては、

  • llava-llama3.1:8b(画像理解)

  • qwen2.5-vl:7b(構造化評価)

  • gemma3:4b + OpenCV(高速・安定)

用途次第で人格の定義も変える予定です。


全体を通しての学び

改めてまとめると、

  • LLM開発はモデル選定が8割

  • まず「軽く動かす」

  • 人格・制約・合議ルールは、モデルサイズ以上に効く

  • ローカルLLMは「制約を受け入れる」と楽しい

  • Copilot + 小さな反復は相性がいい

という感じでした。


おまけ

使用した技術・サービス一覧(URL付き)

ローカルLLM実行環境


使用・検証したモデル


実装・開発環境


UI(プロトタイプ)


リポジトリ

 

 

「エヴァ × LLM × ローカルAI」という切り口、意外といけました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)