最終更新:2026年3月 · ソース:agent-meeting
マルチエージェント合意プロトコル
メディエーターパターンを使って構造化されたターンベースのディスカッションで複数の OpenClaw エージェントを調整します。各エージェントは独立して推論し、スタンスマーカーをレスポンスに埋め込み、コーディネーターが自動的に合意を検出して議事録を書き出します。
概要
agent-meeting はマルチエージェントミーティングシステムです。コーディネーターが各エージェントに現在のローリングサマリーと質問を送信し、エージェントは推論と構造化されたスタンスマーカーで応答します。各ラウンド後、コーディネーターはスタンスを抽出し、合意を確認し、会話履歴を圧縮して、次のラウンドに進むか最終的な Markdown 議事録ファイルを書き出します。
なぜ必要か
構造のないマルチエージェントコラボレーションには2つの失敗モードがあります:トークン爆発と曖昧な結果です。コーディネーターなしでは、エージェントは N×N パターンで互いにメッセージを送り合い、会話履歴が二次的に増加します。正式な合意メカニズムがなければ、グループが実際に何かに合意したかを確実に知る方法がありません。
プロンプトベースのマルチエージェントフレームワークは通常、エージェントにトピックを「議論」させ、会話を要約します。これは単純なケースでは機能しますが、ラウンドが長くなったり、エージェントが意見を異にしたり、検証可能な監査証跡が必要な場合は機能しなくなります。このモジュールはプロセスを形式化します:固定プロトコル、確定的な合意検出、および正確に何が言われ決定されたかを記録する構造化された議事録ファイル。
アーキテクチャ
| コンポーネント | 役割 |
|---|---|
| コーディネーター | ミーティングオーケストレーションループ — ラウンドを進め、状態を管理し、すべてのメッセージをルーティング |
| セッションマネージャー | OpenClaw エージェントセッションを起動してメッセージを送信 |
| サマライザー | 各ラウンド後にラウンド履歴を約 500 トークンに圧縮 |
| 合意検出器 | 正規表現によるスタンス抽出;FULL / MAJORITY / NO 合意ロジック |
| 議事録ライター | 完全な議事録を含む最終的な Markdown 議事録を生成 |
| タイムアウトハンドラー | エージェントごとに 60 秒のタイムアウト;ミーティング全体で 10 分の制限 |
ラウンドのライフサイクル:
コーディネーター → 各エージェントに送信:ローリングサマリー + 質問 → [STANCE: AGREE/DISAGREE/NEUTRAL] のあるレスポンスを収集 → スタンスを抽出(正規表現、確定的) → 合意を確認 → 合意に達した、または最大ラウンド → 議事録を書き出す → そうでなければ → 履歴を約 500 トークンに圧縮 → 次のラウンド
合意ルール:
| 結果 | 条件 |
|---|---|
| FULL_CONSENSUS | 全エージェントが AGREE |
| MAJORITY_CONSENSUS | 2/3 以上のエージェントが AGREE、DISAGREE がゼロ |
| NO_CONSENSUS | どちらの条件も満たされない — 次のラウンドへ継続 |
重要な設計上の決定
メディエーターパターン — N×N のチャットなし
すべてのメッセージはコーディネーターを通じてルーティングされます。エージェントは直接通信しません。これによりメッセージグラフが線形(1ラウンドあたり N メッセージ、N×N ではない)に保たれ、コーディネーターが会話状態を完全に制御できます。
ローリングサマリー — ラウンドあたり O(1) トークン
各ラウンド後、完全な議事録が約 500 トークンに圧縮されます。後続の各ラウンドはローリングサマリーと新しいラウンドのレスポンスのみを参照します(履歴全体ではなく)。トークン使用量はラウンド数に関わらずほぼ一定に保たれ、長いミーティングが実現可能になります。
スタンスマーカー — 確定的、追加の LLM 呼び出しなし
エージェントはレスポンスに [STANCE: AGREE | DISAGREE | NEUTRAL] を埋め込みます。正規表現パーシングが解釈のための追加 LLM 呼び出しなしにスタンスを抽出します。不明または欠落したスタンスは NEUTRAL として扱われ、多数決合意をブロックしません。
合意時の早期終了
完全または多数決合意に達すると、最大ラウンドになる前でもミーティングが終了します。エージェントがすでに合意している場合に無意味な追加ラウンドを避けられます。
独自のシステムの構築方法
1. エージェントシステムプロンプトにスタンス指示を注入する
参加する各エージェントには、スタンスマーカーを含めるよう指示するシステムプロンプトが必要です。フォーマットは一貫していて合意検出器がパースできるものでなければなりません。[STANCE: AGREE/DISAGREE/NEUTRAL] のような固定フォーマットを使用し、エージェントが独自のフォーマットを選ぶことを許可しないでください。
2. スタンス抽出には LLM パーシングではなく正規表現を使用する
エージェントが合意したかどうかを解釈するために LLM を呼び出すと、コストと遅延が追加され、パーサー LLM が元の内容を誤読する失敗モードが生まれます。/\[STANCE:\s*(AGREE|DISAGREE|NEUTRAL)\]/i のような単純な正規表現は確定的で高速です。
3. 最後にまとめてではなく、各ラウンド後に圧縮する
ローリング圧縮はインクリメンタルに行われなければなりません。最後にのみ圧縮すると目的が達成できません—コンテキストウィンドウがすでに使い果たされているからです。LLM を使って現在のラウンドのレスポンスと前のローリングサマリーを新しい約 500 トークンのサマリーにまとめてください。
4. エージェントごとと全体の両方のタイムアウトを設定する
遅いまたはスタックした単一エージェントがミーティング全体を無期限にブロックすべきではありません。エージェントごとのタイムアウト(例:60秒)はそのエージェントに NEUTRAL スタンスをトリガーし、ミーティング全体の制限(例:10分)によりコーディネーターが最終的に終了することが保証されます。
5. メモリだけでなくディスクに議事録を書き出す
マルチエージェントミーティングの出力は、その記録と同じくらいの有用性しかありません。次の内容を含む構造化 Markdown ファイルを書き出してください:トピック、参加者、タイムスタンプ、パースされたスタンスを含むラウンドごとの議事録、ローリングサマリー、最終的な合意結果。これが決定の監査証跡になります。
よくある質問
すでに設定済みの OpenClaw エージェントで機能しますか?
はい。OpenClaw ワークスペースに存在するエージェント ID を渡します。セッションマネージャーは新しいエージェント設定を作成するのではなく、OpenClaw ゲートウェイを通じてそれらを起動します。
エージェントがスタンスマーカーを含めなかった場合はどうなりますか?
スタンスは UNKNOWN として記録されます。コーディネーターは合意計算において UNKNOWN を NEUTRAL と同じように扱います—他のすべてのエージェントが同意すれば多数決合意はブロックされません。
ローリングサマリー圧縮はどのように機能しますか?
各ラウンド後、サマライザーが完全な議事録を LLM に送り、約 500 トークンの圧縮サマリーを要求します。このサマリーが次のラウンドのコンテキストになり、ラウンド数に関係なくトークン使用量をほぼ一定に保ちます。
OpenClaw なしで使用できますか?
直接はできません—セッションマネージャーは OpenClaw ゲートウェイ経由でエージェントを起動します。ただし、コアプロトコル(スタンスマーカー、ローリング圧縮、合意検出)はフレームワークに依存せず、任意のエージェントランタイムに対して再実装できます。
Authors: Qiushi Wu & Orange 🍊