AutoGenにおけるメッセージ型の完全解説
システム内で扱われる2種のメッセージ形式とその仕様
概要
AutoGenのマルチエージェント会話フレームワークでは、すべての対話と制御は「メッセージ(message)」を介して行われる。
このメッセージには、2つの異なる型が存在し、それぞれが異なる目的と役割を持つ。
- チャットメッセージ(Chat Messages)
- メッセージオブジェクト(Message Objects)
本記事では、それぞれの定義、使用方法、設計意図の違いを明確にし、AutoGenでメッセージを扱う際の正しい理解を提供する。
1. チャットメッセージ(Chat Message)
定義
チャットメッセージは、OpenAIの chat/completions API と互換性のある標準的な会話履歴形式であり、AutoGenの Agent.chat() 内部で使用される。
Python辞書(dict)として定義され、主に以下のキーを持つ:
pythonCopyEdit{
"role": "user", # user / assistant / system / function
"content": "質問があります",
"name": "user_proxy", # (任意)エージェント識別用
"function_call": {...} # (任意)関数呼び出し情報
}
主なキーと用途
| キー | 型 | 内容 |
|---|---|---|
role | str | 発信者の種類。user, assistant, system, function が指定可能 |
content | str | メッセージ本体。通常のテキストプロンプトや応答など |
name | str | (任意)発信元エージェントの名前や識別子 |
function_call | dict | (任意)OpenAI Function Calling に準拠した呼び出し情報 |
特徴
- OpenAIのChat APIとの互換性があり、プロンプト履歴として直接利用可能。
- AutoGenの
Agent.send()やGroupChat.run()など、すべてのチャット系APIで使用される。 AssistantAgent,UserProxyAgentなどのエージェント同士の対話はすべてこの形式で行われる。
2. メッセージオブジェクト(Message Object)
定義
メッセージオブジェクトは、AutoGen内部で利用される高レベルな構造体であり、よりリッチな制御・識別情報を保持する。
これは autogen.agentchat.message.Message クラスのインスタンスとして扱われ、GroupChat などの上位フレームワークで使用される。
主な属性と構造
pythonCopyEditMessage(
content="計算が完了しました。",
role="assistant",
name="code_generator",
cause_by=UserProxyAgent(name="user"),
request_reply=True,
summary="出力完了"
)
| 属性名 | 型 | 内容 |
|---|---|---|
content | str | 本文。通常のテキストメッセージ |
role | str | 発信者のロール(user, assistant, 等) |
name | str | 発信元のエージェント名 |
cause_by | Agent or Message | このメッセージが何に起因して生成されたか(返信先など) |
request_reply | bool | 応答を要求するかどうか |
summary | str | 会話の概要や要約 |
特徴
- 依存関係や応答要求などのメタ情報を保持できるため、会話フローを柔軟に制御できる。
- メッセージの起点(
cause_by)を明示することで、マルチエージェント環境での因果関係をトレース可能。 - チャットメッセージよりも構造化されており、制御向き。
3. 両者の違いと役割の棲み分け
| 比較項目 | チャットメッセージ | メッセージオブジェクト |
|---|---|---|
| 形式 | Python辞書(dict) | Message クラスのインスタンス |
| 利用箇所 | Agent.chat() などのLLM呼び出し系 | GroupChat, Context, 対話制御系 |
| 機能性 | 軽量、OpenAI互換 | 高度な制御情報(返信要求、起因、要約) |
| 相互変換 | 可能(明示的に変換関数あり) | 可能(to_chat_dict などを使用) |
| 推奨用途 | LLMとの入出力のやり取り | マルチエージェントの制御、履歴管理 |
4. 実装例
チャットメッセージの利用
pythonCopyEditmessages = [
{"role": "user", "content": "おはようございます"},
{"role": "assistant", "content": "おはようございます。何を手伝いましょうか?"}
]
response = agent.chat(messages)
メッセージオブジェクトの利用(GroupChat)
pythonCopyEditfrom autogen.agentchat.message import Message
msg = Message(
content="解析結果を出力しました。",
role="assistant",
name="analyzer",
cause_by="user_input", # または Message そのもの
request_reply=True,
summary="解析結果の送信"
)
group_chat.append(msg)
結論
AutoGenにおけるメッセージは、低レベルの「チャットメッセージ」と高レベルの「メッセージオブジェクト」の2種類に大別される。
- 単純な会話履歴やLLMとのやり取りにはチャットメッセージを使用
- エージェント間の応答制御や会話のトラッキングにはメッセージオブジェクトを使用
この2つの形式を正しく理解し、目的に応じて使い分けることで、AutoGen上での複雑なマルチエージェント対話をより堅牢かつ拡張性高く設計することが可能となる。


コメント