【AutoGen0.6.4】Messages : 2025/7/20

エージェント

AutoGenにおけるメッセージ型の完全解説

システム内で扱われる2種のメッセージ形式とその仕様


概要

AutoGenのマルチエージェント会話フレームワークでは、すべての対話と制御は「メッセージ(message)」を介して行われる。
このメッセージには、2つの異なる型が存在し、それぞれが異なる目的と役割を持つ。

  1. チャットメッセージ(Chat Messages)
  2. メッセージオブジェクト(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": {...}     # (任意)関数呼び出し情報
}

主なキーと用途

キー内容
rolestr発信者の種類。user, assistant, system, function が指定可能
contentstrメッセージ本体。通常のテキストプロンプトや応答など
namestr(任意)発信元エージェントの名前や識別子
function_calldict(任意)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="出力完了"
)
属性名内容
contentstr本文。通常のテキストメッセージ
rolestr発信者のロール(user, assistant, 等)
namestr発信元のエージェント名
cause_byAgent or Messageこのメッセージが何に起因して生成されたか(返信先など)
request_replybool応答を要求するかどうか
summarystr会話の概要や要約

特徴

  • 依存関係や応答要求などのメタ情報を保持できるため、会話フローを柔軟に制御できる。
  • メッセージの起点(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上での複雑なマルチエージェント対話をより堅牢かつ拡張性高く設計することが可能となる。

コメント

タイトルとURLをコピーしました