Skip to content

magifd2/magi-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MAGI System

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 sync

使い方

基本(対話入力)

uv 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 --help

デバッグログ

LLM の生出力と 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

内容:

  1. ヘッダー(トピック・日時・ターン数・収束フラグ)
  2. 議論ログ(ペルソナ発言に連番・タイムスタンプ付き、ファシリテーター発言は区切り線形式)
  3. 各ペルソナの最終状態(立場・感情・収束判断)
  4. 最終レポート

プロジェクト構成

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ファイル保存

動作パラメータ

src/magi/discussion.py

議論の挙動を制御する定数です。

定数 デフォルト 説明
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条件をすべて満たした場合に成立します。

  1. カバレッジチェックが通過済み
  2. MIN_TURNS_BEFORE_CONVERGENCE ターン以上経過
  3. CONVERGENCE_THRESHOLD 人以上が convergence_vote: true
  4. 直近4件のペルソナ発言のうち CONVERGENCE_THRESHOLD 人以上に 【収束に同意】 マーカーがある

src/magi/llm.py

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

About

3つのAIペルソナ(MELCHIOR・BALTHASAR・CASPER)が議題を多角的に議論し、意見の収束を目指す思考実験ツール。LM Studio (OpenAI互換) でローカルLLMを使用

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages