複数のAIエージェント(ペルソナ)が特定のトピックについて自律的にディスカッションするローカル動作のWebアプリ。
| 項目 | バージョン |
|---|---|
| Python | 3.13 以上 |
| Poetry | 1.8 以上(2.x 推奨) |
| Anthropic API キー | 有効なキーとクレジット残高 |
| インターネット接続 | Claude API 呼び出しに必要 |
git clone <repository-url>
cd AgentDiscussionpoetry install仮想環境は自動的に .venv/ に作成されます。
プロジェクトルートに config.yaml を作成し、Anthropic API キーを設定します。
anthropic:
api_key: "sk-ant-api03-..." # Anthropic APIキー(必須)
model: "claude-haiku-4-5-20251001" # 使用するモデル
max_tokens: 4096 # APIレベルのトークン上限
max_response_chars: 500 # エージェント1発言あたりの文字数目安
app:
max_turns_default: 3 # ディスカッションのデフォルトターン数
max_personas: 6 # 最大エージェント数
min_personas: 2 # 最小エージェント数
max_file_size_mb: 10 # 資料アップロードの上限サイズ (MB)
language_default: "ja" # デフォルト言語
discussion_style_default: "formal"
log_level: "INFO"
paths:
discussions_dir: "data/discussions"
personas_dir: "data/personas"
materials_dir: "data/materials"
exports_dir: "exports"
logs_dir: "logs"注意:
config.yamlには API キーが含まれるため.gitignoreに自動追加されます。Git にコミットしないでください。
poetry run streamlit run main.py起動後、ブラウザで http://localhost:8501 が自動的に開きます。
アプリ起動後に最初に表示されるページです。
- ✅ API key is valid が表示されれば準備完了
- ❌ エラーが表示された場合:
config.yamlのanthropic.api_keyを確認してアプリを再起動してください
「Go to Discussion →」ボタンでディスカッション設定画面に進みます。
ディスカッションの設定と実行を行います。
- 最大 500 文字でディスカッションのテーマを入力します
- 例:
AIが教育に与える影響について議論してください
組み込みペルソナの中から 2〜6 名を選択します。
| ペルソナ | 特徴 |
|---|---|
| 組み込み4種 | 事前定義済みのエージェント |
| カスタム | 任意の名前・説明で作成可能 |
チェックボックスで参加するエージェントを選択してください。
| 設定項目 | 内容 | 選択肢 |
|---|---|---|
| Max turns | 最大ターン数(1エージェント1回=1ターン) | 1〜20 |
| Discussion style | ディスカッションのトーン | formal / casual / debate |
| Language | 発言言語 | ja / en / fr / de / es |
- 対応形式:
.txt,.md,.pdf,.docx - 最大サイズ: 10 MB
- アップロードした資料はAIが前処理し、全エージェントの文脈として注入されます
「▶ Start Discussion」ボタンを押すと実行が始まります。各エージェントの発言がリアルタイムにストリーミング表示されます。
実行中の操作:
| ボタン | 動作 |
|---|---|
| ⏹ Stop Discussion | 現在のターン完了後に停止 |
| ターン上限到達時 | 「Continue」で延長 / 「Finish」で終了 |
| エラー発生時 | 「▶ Resume Discussion」で中断点から再開 |
完了したディスカッションの結果を確認します。
- トランスクリプト: 全発言をエージェントごとの色で表示
- 📥 Export Meeting Minutes: 議事録を Markdown ファイルとして
exports/に保存し、ダウンロードリンクを表示 - ➕ New Discussion: 設定をリセットして新しいディスカッションを開始
過去のディスカッションを一覧表示します。
- トピック・参加者・ターン数・日時・状態を確認できます
- 「Load」ボタンで過去のディスカッションを Results ページに読み込めます
- 中断したディスカッション(
is_resumable)は Discussion ページから再開可能です
| キー | 説明 | デフォルト |
|---|---|---|
api_key |
Anthropic API キー(必須) | — |
model |
使用する Claude モデル ID | claude-3-5-sonnet-20241022 |
max_tokens |
APIレベルのトークン上限(打ち切り防止) | 4096 |
max_response_chars |
エージェントへの文字数指示(ソフト制約) | 500 |
max_response_chars の調整指針:
| 値 | 発言スタイル |
|---|---|
| 200〜300 | 短く簡潔なやり取り |
| 400〜600 | 標準的なディスカッション |
| 800〜1200 | 詳細な論点展開 |
| キー | 説明 |
|---|---|
max_turns_default |
ディスカッションのデフォルトターン数 |
max_turns_extension |
ターン上限到達時の延長ターン数 |
max_personas |
最大エージェント数(上限 6) |
min_personas |
最小エージェント数(下限 2) |
max_file_size_mb |
資料アップロードの上限サイズ |
language_default |
デフォルト言語 |
discussion_style_default |
デフォルトのディスカッションスタイル |
log_level |
ログレベル(DEBUG / INFO / WARNING) |
Discussion ページの「➕ Create Custom Persona」セクションから作成できます。
- Name: ペルソナの名前(最大 100 文字)
- Description: キャラクターの説明(最大 500 文字)
例:
慎重派のエンジニア。リスクとコストを重視し、実現可能性を常に問う。 - 「Save Persona」ボタンで保存
作成したペルソナは data/personas/ に JSON で保存され、以降のセッションでも利用できます。
Results ページの「📥 Export Meeting Minutes」で Markdown 形式の議事録を生成します。
出力先: exports/{topic_slug}_{日時}.md
形式:
# Meeting Minutes
**Topic**: ...
**Date**: ...
**Participants**: ...
**Turns**: ...
---
## Transcript
### Turn 1 — エージェント名
発言内容...config.yamlのanthropic.api_keyが正しいか確認してください- アプリを再起動してください(Streamlit はセッション単位で初期化されます)
Error code: 400 - credit balance is too low
Anthropic Console の Plans & Billing でクレジットを追加してください。
Error code: 404 - model: xxx not found
config.yaml の anthropic.model を利用可能なモデル ID に変更してください。
例: claude-haiku-4-5-20251001
config.yaml の max_tokens を増やしてください(例: 8192)。
また max_response_chars を小さくすることで、エージェントが上限内に収まるよう促せます。
「▶ Resume Discussion」ボタンで中断点から再開できます。 再開できない場合は History ページからも確認できます。
cat logs/agent_discussion.logログはローテーション管理(最大 1MB × 3ファイル)されます。
AgentDiscussion/
├── main.py # エントリポイント
├── config.yaml # 設定ファイル(gitignore対象)
├── pyproject.toml # Poetry 依存管理
├── pages/ # Streamlit マルチページ
│ ├── 1_Setup.py
│ ├── 2_Discussion.py
│ ├── 3_Results.py
│ └── 4_History.py
├── agent_discussion/ # アプリケーションコード
├── data/ # ローカルデータ(自動生成)
│ ├── discussions/ # ディスカッション履歴 (JSON)
│ └── personas/ # カスタムペルソナ (JSON)
├── exports/ # エクスポートした議事録 (Markdown)
└── logs/ # アプリログ