MAGI System は、性格の異なる3つのAIペルソナが議題について多角的に議論し、意見の収束を目指す思考実験ツールです。
███╗ ███╗ █████╗ ██████╗ ██╗
████╗ ████║██╔══██╗██╔════╝ ██║
██╔████╔██║███████║██║ ███╗██║
██║╚██╔╝██║██╔══██║██║ ██║██║
██║ ╚═╝ ██║██║ ██║╚██████╔╝██║
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
| 名前 | 性格 | 意思決定の優先順位 |
|---|---|---|
| MELCHIOR | 冷静・論理的 | 科学的根拠 → 論理整合性 → 再現性 |
| BALTHASAR | 人間的・感情豊か | 倫理 → 人間感情 → 社会影響 |
| CASPER | 実利主義・現実的 | 実装可能性 → コスト → リスク |
各ペルソナはターンごとに他のペルソナへの感情状態(好意的 / 中立 / 否定的)を更新し、発言スタイルに反映します。
議題入力
→ 各ペルソナにスタンス(推進派・懐疑派・代替案提案派)をランダム割当
→ ファシリテーターが議題とスタンス一覧を投下
→ 議論ループ開始(最大 MAX_TURNS ターン)
├─ 次話者を Maximum Disagreement スコアで選択
│ (否定感情・役割対立・発言間隔を加味)
├─ Novelty Check:直前2発言のバイグラム類似度 > 0.7 なら新視点指示を付与
├─ LLM 呼び出し → JSON レスポンスをパース
├─ ペルソナの感情状態・立場・収束投票を更新
├─ 議論フェーズを更新(問題定義 → 論点探索 → 解決策設計 → 合意形成)
├─ ターン 8(COVERAGE_CHECK_TURN):論点カバレッジチェック実行
│ 足りない論点があればファシリテーターが介入し、4ターン後に再チェック
│ カバレッジ通過後のみ収束フィールドがペルソナに公開される
├─ ターン MAX_TURNS // 2:ファシリテーター中間警告(折衷案要求)
├─ ターン MAX_TURNS × 0.75:ファシリテーター最終警告(収束要求)
└─ 収束判定:カバレッジ通過 + MIN_TURNS 経過 + THRESHOLD 票 + 直近同意確認
→ 全ペルソナが締めくくりコメントを述べる(固定順)
→ 最終レポートを LLM で生成
→ 保存確認・Markdown ファイルに出力
- Python 3.11 以上
- uv (パッケージ管理)
- OpenAI 互換エンドポイントを持つ LLM サーバー(例: LM Studio、litellm-proxy 経由の Vertex AI など)
- デフォルトエンドポイント:
http://localhost:1234/v1 - デフォルトモデル:
qwen/qwen3-30b-a3b-2507
- デフォルトエンドポイント:
# リポジトリのクローン
git clone <repository-url>
cd magi-system
# 依存パッケージのインストール
uv syncuv run magi起動後、プロンプトに議論トピックを入力してください。
uv run magi [オプション]| オプション | 短縮形 | 説明 |
|---|---|---|
--topic TOPIC |
-t |
議論トピックを直接指定 |
--save |
-s |
終了後に確認なしで自動保存 |
--output DIR |
-o |
保存先ディレクトリ(--save と併用) |
# トピックを指定して起動
uv run magi -t "AIの倫理的課題について"
# 自動保存あり
uv run magi -t "再生可能エネルギーの普及戦略" --save
# 保存先ディレクトリも指定
uv run magi -t "テレワークの生産性" --save --output ~/Documents/magi_logs
# ヘルプ表示
uv run magi --helpLLM の生出力と JSON パースの各ステップをファイルに記録できます。
MAGI_DEBUG=1 uv run magi -t "トピック"カレントディレクトリに magi_debug.log が生成されます。Gemini などのモデルで出力が正しくパースされない場合の原因調査に使用してください。
┌─────────────────────────────────────────────────────┐
│ ⚡ MAGI System ⚡ トピック… ターン数: N 収束票: N/3 │
├──────────────────────────────┬──────────────────────┤
│ │ MELCHIOR │
│ 議論ログ(最新が上) ├──────────────────────┤
│ │ BALTHASAR │
│ ├──────────────────────┤
│ │ CASPER │
└──────────────────────────────┴──────────────────────┘
各ペルソナパネルには以下が表示されます。
- 初期スタンス:推進派 / 懐疑派 / 代替案提案派
- 現在の立場:最新の意見(抜粋)
- 他者への感情:▲ 好意的 / ● 中立 / ▼ 否定的(強度付き)
- 収束判断:✔ 収束 / ✘ 継続 / ? 未決
議論ログはMarkdown形式で保存されます。
ファイル名: magi_YYYYMMDD_HHMMSS_<トピック>.md
内容:
- ヘッダー(トピック・日時・ターン数・収束フラグ)
- 議論ログ(ペルソナ発言に連番・タイムスタンプ付き、ファシリテーター発言は区切り線形式)
- 各ペルソナの最終状態(立場・感情・収束判断)
- 最終レポート
magi-system/
├── pyproject.toml # プロジェクト設定・依存関係
├── LICENSE
├── CHANGELOG.md
└── src/magi/
├── main.py # CLIエントリポイント・引数解析
├── discussion.py # 議論エンジン・収束判定・締めくくりフェーズ
├── persona.py # ペルソナ定義・感情・システムプロンプト生成
├── llm.py # OpenAI互換LLMクライアント・JSONパース・リトライ
├── display.py # Richリアルタイム表示(Layoutベース)
├── models.py # Pydanticデータモデル
└── save.py # Markdownファイル保存
議論の挙動を制御する定数です。
| 定数 | デフォルト | 説明 |
|---|---|---|
MAX_TURNS |
50 |
議論の最大ターン数(安全上限) |
CONVERGENCE_THRESHOLD |
2 |
収束に必要な賛成ペルソナ数 |
MIN_TURNS_BEFORE_CONVERGENCE |
10 |
収束判定を開始する最低ターン数 |
COVERAGE_CHECK_TURN |
8 |
論点カバレッジチェックを最初に実行するターン |
MAX_COVERAGE_RETRIES |
1 |
カバレッジチェックの最大リトライ回数(上限に達すると強制通過) |
| ファシリテーター中間警告 | MAX_TURNS // 2 |
平行線打破のため折衷案提示を強制するタイミング |
| ファシリテーター最終警告 | MAX_TURNS × 0.75 |
収束票がゼロの場合に最終警告を出すタイミング |
収束判定は以下の4条件をすべて満たした場合に成立します。
- カバレッジチェックが通過済み
MIN_TURNS_BEFORE_CONVERGENCEターン以上経過CONVERGENCE_THRESHOLD人以上がconvergence_vote: true- 直近4件のペルソナ発言のうち
CONVERGENCE_THRESHOLD人以上に【収束に同意】マーカーがある
LLMクライアントの設定です。
| 環境変数 / 設定 | デフォルト | 説明 |
|---|---|---|
MAGI_BASE_URL |
http://localhost:1234/v1 |
LLMエンドポイント |
MAGI_API_KEY |
lm-studio |
APIキー |
MAGI_MODEL |
qwen/qwen3-30b-a3b-2507 |
使用モデル |
MAX_RETRIES |
3 |
APIエラー時のリトライ回数 |
RETRY_DELAY |
2.0 秒 |
リトライ間隔(試行ごとに線形増加) |
PERSONA_TEMPERATURES |
MELCHIOR: 0.2 / BALTHASAR: 0.7 / CASPER: 0.4 |
ペルソナ別 temperature |
presence_penalty |
0.8 |
話題の繰り返し抑制 |
frequency_penalty |
0.8 |
表現の繰り返し抑制 |
max_tokens(ペルソナ) |
4096 |
ペルソナ応答の最大トークン数 |
max_tokens(レポート) |
8192 |
最終レポートの最大トークン数 |
MIT License © 2026 magifd2