AG2 : 高度な概念 – オーケストレーション : 2-エージェント・チャット

2 つのエージェントのチャットは最も単純な会話パターン形式です。各々の ConversableAgent エージェントの initiate_chat メソッドを使用して 2-エージェント・チャットを開始します。

AG2 : ユーザガイド – 高度な概念 : オーケストレーション : 2-エージェント・チャット

作成 : クラスキャット・セールスインフォメーション
作成日時 : 09/06/2025
バージョン : v0.9.9

* 本記事は docs.ag2.ai の以下のページを独自に翻訳した上でまとめ直し、補足説明を加えています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ リニューアルしました 😉

クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • sales-info@classcat.com
  • ClassCatJP

 

 

AG2 : ユーザガイド – 高度な概念 : オーケストレーション : 2-エージェント・チャット

2 つのエージェントのチャットは最も単純な会話パターン形式です。各々の ConversableAgent エージェントの initiate_chat メソッドを使用して 2-エージェント・チャットを開始します。

次の図は 2-エージェント・チャットがどのように動作するかを示しています。

2-エージェント・チャットは 2 つの入力を受け取ります : メッセージ、これは呼び出し側 (caller) が提供する文字列です : コンテキスト、これはチャットの様々なパラメータを指定します。

送信者エージェントはチャット初期化メソッド (i.e., ConversableAgent の generate_init_message メソッド) を使用して入力から初期メッセージを生成し、それを受信者エージェントに送信してチャットを開始します。

送信者エージェントは、その initiate_chat メソッドが呼び出されるエージェントで、受信者エージェントは他方のエージェントです。

チャットが終了すれば、チャットの履歴はチャット summarizer により処理されます。summarizer はチャット履歴を要約して、チャットのトークン使用量を計算します。initiate_chat メソッドの summary_method パラメータを使用して要約のタイプを設定できます。デフォルトでは、チャットの最後のメッセージです (i.e, summary_method=’last_msg’)。

次の例は、学生エージェントと教師エージェント間の 2-エージェント・チャットです。その summarizer は LLM ベースの要約を使用しています。

import os

from autogen import ConversableAgent, LLMConfig

llm_config = LLMConfig(api_type="openai", model="gpt-5-nano")
#llm_config=LLMConfig({"api_type": "openai", "model": "gpt-5-nano", "api_key": os.environ["OPENAI_API_KEY"]})

student_agent = ConversableAgent(
    name="Student_Agent",
    system_message="あなたは学ぶ意欲のある学生です。",
    llm_config=llm_config
)
teacher_agent = ConversableAgent(
    name="Teacher_Agent",
    system_message="あなたは数学の先生です。",
    llm_config=llm_config
)

chat_result = student_agent.initiate_chat(
    teacher_agent,
    message="三角不等式とは何ですか?",
    summary_method="reflection_with_llm",
    max_turns=2,
)

出力例

Student_Agent (to Teacher_Agent):

三角不等式とは何ですか?

--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
Teacher_Agent (to Student_Agent):

三角不等式とは、距離を測る空間で成り立つ基本的な不等式です。

- もう少しかんたんに言うと
  どんな3点 A, B, C に対しても d(A,B) ≤ d(A,C) + d(C,B) が成り立ちます。
  つまり A から B へ直線で行く距離は、途中を C を経由して行く距離より小さい、または等しいということです。

- ユークリッド平面での例
  AB ≤ AC + BC(A, B, C は平面上の点)。
  等号が成り立つときは C が AB 上の点で A と B の間にある場合です。つまり A, C, B が一直線上に並んで C が A と B の間にあるとき、AB = AC + CB になります。
  例
  - A = (0,0), B = (3,0), C = (2,0) のとき
    AB = 3, AC = 2, BC = 1, 3 = 2 + 1(等号成立)。
  - A = (0,0), B = (3,4), C = (1,2) のとき
    AB = 5, AC ≈ 2.236, BC ≈ 2.828, AC + BC ≈ 5.064 > AB(不等号が等しくない)。

- 実用的な補足
  実数のときの同値な形として |a + b| ≤ |a| + |b| も三角不等式です。等号が成立するのは、実数の場合は a と b が同符号のとき(または一方が 0 のとき)です。

- まとめ
  三角不等式は「直線距離は、途中を経由するときの距離の和より小さい」という直感を、厳密に表したものです。

もし解き方の証明や他の空間での一般化(ノルム空間での ||x+y|| ≤ ||x|| + ||y|| など)を知りたい場合、希望を教えてください。

--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
Student_Agent (to Teacher_Agent):

いいですね。証明の流れを1つ紹介します。

- ユークリッド空間のノルムを内積で定義します。||x|| = sqrt(⟨x, x⟩) とします。
- まず ||x+y||^2 = ⟨x+y, x+y⟩ = ||x||^2 + 2⟨x, y⟩ + ||y||^2 です。
- コーシー・シュワルツの不等式より |⟨x, y⟩| ≤ ||x|| ||y|| なので 2⟨x, y⟩ ≤ 2||x|| ||y||。
- よって ||x+y||^2 ≤ ||x||^2 + 2||x|| ||y|| + ||y||^2 = (||x|| + ||y||)^2。
- 両辺の平方根を取ると、||x+y|| ≤ ||x|| + ||y|| が得られます。

等号についての直感もひとつだけ:
- 等号が成立するのは、xとyが同じ方向(すなわち y が x の正のスカラー倍)である場合、または一方が0の場合です。

補足と generalization の道筋:
- ノルム空間の定義として、任意のベクトル空間での三角不等式 ||x+y|| ≤ ||x|| + ||y|| を要求することが多いです。これがノルムの公理の一つです。
- 内積空間ではコーシー・シュワルツを用いる証明があり、一般のノルム空間ではこれは公理として成り立つため、証明は空間の性質に依存します。
- 逆三角不等式も併せて覚えると便利です。すなわち ||x|| − ||y|| ≤ ||x−y|| です。

他に知りたいことを教えてください。次のリクエスト案:
- 内積空間だけでなく、一般のノルム空間での証明をもう少し詳しく。
- 逆三角不等式の証明と使い方。
- 距離空間の定義から三角不等式を導く別の視点。
- 練習問題(例題と解答付き)を用意する。

--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
Teacher_Agent (to Student_Agent):

いいですね。以下に補足と generalization の道筋を、もう少し具体的に整理します。あわせて練習問題と解答案もつけます。

1) コーシー・シュワルツ不等式の完全な証明と等号条件
- 証明の定石: x, y を内積空間のベクトルとします。y ≠ 0 として
  f(t) = ||x − t y||^2 ≥ 0 を考えると、
  f(t) = ⟨x − t y, x − t y⟩ = ||x||^2 − 2t⟨x,y⟩ + t^2||y||^2
  となる二次式です。これを t に関して最小化するときの最小値は非負です。
  したがって判別式が負または等しい条件が必要で、
  ⟨x,y⟩^2 ≤ ||x||^2 ||y||^2 が得られ、これが
  |⟨x,y⟩| ≤ ||x|| ||y|| すなわちコーシー・シュワルツ不等式です。

- 等号条件:
  x, y がともに 0 でないとき等号が成立する必要十分条件は、x と y が同じ(非負のスカラー倍)方向にあることです。すなわち y = α x for some α ≥ 0。直感的には「同じ方向に重なるときだけ等号になる」ということです。
  もし y = 0 や x = 0 の場合も等号は成立します。

2) 三角不等式のノルムへの適用と等号条件
- ユークリッド空間のノルムには ||x|| = sqrt(⟨x,x⟩) を用い、
  ||x+y||^2 = ||x||^2 + 2⟨x,y⟩ + ||y||^2
  と書けます。コーシー・シュワルツより |⟨x,y⟩| ≤ ||x|| ||y|| なので
  ||x+y||^2 ≤ ||x||^2 + 2||x|| ||y|| + ||y||^2 = (||x|| + ||y||)^2
  したがって ||x+y|| ≤ ||x|| + ||y|| が得られます。

- 等号条件の直感:
  先ほどの等号条件を使うと、等号が成立するのは「x と y が同じ方向(y = α x, α ≥ 0)」の場合、または一方が 0 の場合です。

3) 一般のノルム空間への道筋
- 重要な点: 三角不等式 ||x+y|| ≤ ||x|| + ||y|| はノルムの公理の一つとして定義されます。したがって一般のノルム空間で三角不等式を “証明する” には、特定のノルムがどのように定義されているかによります。
- 典型的な一般化の道筋としては次の2つが挙げられます。
  - 内積空間から生じるノルムの場合: コーシー・シュワルツを用いる証明が使えます。つまり内積の空間なら三角不等式は CS を使って導けます。
  - p-ノルム(L^p など)やその他の具体的ノルム: Minkowski の不等式(三角不等式の一般化)を用いて証明します。例えば p ≥ 1 の場合
    (|a1 + b1|^p + ... + |an + bn|^p)^{1/p} ≤ (|a1|^p + ... + |an|^p)^{1/p} + (|b1|^p + ... + |bn|^p)^{1/p}
    を証明するのが一般的です。これには凸性やヤコビ・ブーリカの不等式などが使われます。
- 逆三角不等式も併せて覚えると便利です。すなわち
  ||x|| − ||y|| ≤ ||x − y|| です。

4) 距離空間からの別視点
- 距離空間の定義: 距離 d には三角不等式 d(x,z) ≤ d(x,y) + d(y,z) が必要です。距離関数からノルムを定義する場合、ノルム公理のうち三角不等式を満たすことが重要です。例えば d(x,y) = ||x − y|| を満たすとき、三角不等式は d の定義から自動的に得られます。
- 代替の直感: 「直線で結んだ距離は、途中の点を経由する距離の和より小さい」という直感は、距離関数の三角不等式で常に成り立つことを意味します。

5) 練習問題(解答つきの例題)
問題1
R^2 における標準ノルムで、x = (1, 2), y = (-3, 4) のとき
- ||x||, ||y||, ||x+y|| を計算して、三角不等式を検算せよ。
- 与えられた x, y に対して等号が成り立つかを判定せよ。

解答1
- ||x|| = sqrt(1^2 + 2^2) = sqrt(5)
- ||y|| = sqrt((-3)^2 + 4^2) = sqrt(25) = 5
- x + y = (-2, 6) ⇒ ||x+y|| = sqrt((-2)^2 + 6^2) = sqrt(40) = 2√10 ≈ 6.3249
- ||x|| + ||y|| = √5 + 5 ≈ 7.236
- 6.3249 ≤ 7.236 なので三角不等式は成立。等号は成立しない(角度は 0 度ではない)。

問題2
x, y ∈ R^n に対してコーシー・シュワルツ不等式を証明せよ(二次形式を用いず、x−ty のノルムの非負性から導く方法で)。

解答2
- y ≠ 0 として t ∈ R をとる。f(t) = ||x − t y||^2 ≥ 0。
  f(t) = ||x||^2 − 2t⟨x,y⟩ + t^2||y||^2 という二次式。
  この二次式の最小値は非負で、判別式が非負であるときに限る。
  0 ≤ f(t) for all t implies discriminant ≤ 0:
  (−2⟨x,y⟩)^2 − 4||y||^2||x||^2 ≤ 0 ⇒ ⟨x,y⟩^2 ≤ ||x||^2 ||y||^2.
  これが |⟨x,y⟩| ≤ ||x|| ||y|| の証明。

問題3
x, y ∈ R^n が nonzero のとき、||x+y|| = ||x|| + ||y|| となる必要十分条件を述べよ。

解答3
- 内積空間の場合、等号が成立するのは x と y が同じ方向(y = α x, α ≥ 0)であること、あるいは片方が 0 の場合です。すなわち x と y が正のスカラー倍の関係にある場合のみ等号になる。

問題4
任意のノルム空間に対して、三角不等式が成り立つことを“公理”として受け取る場合、どういう性質を確認するとよいか。例として L^p 空間について簡単に述べよ。

解答4
- 三角不等式はノルムの公理のひとつであるため、対象ノルムがどのように定義されているかを確認します。
- 具体例として L^p 空間(1 ≤ p < ∞)では Minkowski 不等式により三角不等式を証明します。
- もし内積からノルムを定義している場合は CS 不等式を用いて三角不等式を導けます。

次のリクエスト案
- 内積空間だけでなく、一般のノルム空間での証明をもう少し詳しく
- 逆三角不等式の証明と使い方
- 距離空間の定義から三角不等式を導く別の視点
- 練習問題(解答付き)をさらに増やす

もし特に深掘りしたい「次のリクエスト案」があれば教えてください。たとえば
- Minkowski 不等式の証明を詳しく知りたい
- 逆三角不等式の厳密な等号条件を知りたい
- 練習問題をもう少し難しくして挑戦したい
のようなリクエストにも対応します。

--------------------------------------------------------------------------------

>>>>>>>> TERMINATING RUN (1e82a5fd-21e7-40c2-83d0-7391e38107e9): Maximum turns (2) reached
print(chat_result.summary)

出力例

- 三角不等式の基本形は d(x,y) ≤ d(x,z) + d(z,y) で、ノルム空間では d(x,y) = ||x−y|| を用いて ||x−y|| ≤ ||x−z|| + ||z−y||、特別な場合として ||x+y|| ≤ ||x|| + ||y|| がある。  
- ユークリッド空間での証明の流れ:||x+y||^2 = ||x||^2 + 2⟨x,y⟩ + ||y||^2、コーシー・シュワルツ不等式 |⟨x,y⟩| ≤ ||x|| ||y|| より ||x+y||^2 ≤ (||x|| + ||y||)^2 となり、平方根を取って ||x+y|| ≤ ||x|| + ||y|| が得られる。  
- 等号条件の直感:等号が成立するのは x と y が同じ方向にある場合(y = αx, α ≥ 0)またはどちらかが 0 の場合。  
- 一般のノルム空間への道筋:内積空間では CS 不等式を用いて証明、一般のノルムでは Minkowski 不等式などを用いて証明・確認するのが一般。逆三角不等式も併せて覚えると便利。  
- 距離空間の視点:d(x,y) = ||x−y|| が成り立つとき、三角不等式は距離関数の性質から自動的に得られる。  
- 実践ポイント:CS の証明の理解、等号条件の把握、ノルム公理としての三角不等式の役割、Minkowski などの一般化の見取り図。  
- 今回のやりとりの要点は以上。必要なら、内積空間の詳しい証明の別解や、Minkowski 不等式の証明、練習問題を追加で用意します。

上記の例では、summary メソッドは reflection_with_llm に設定されています、これは会話のメッセージのリストを受け取り、LLM への呼び出しを使用してこれらを要約します。

summary メソッドはまず受信者の LLM の使用を試み、それが利用可能でないならば送信者の LLM を使用します。このケースでは、受信者は “Teacher_Agent” で、送信者は “Student_Agent” です。

LLM への入力プロンプトは次のデフォルトプロンプトです :

print(ConversableAgent.DEFAULT_SUMMARY_PROMPT)

initiate_chat で summary_prompt 引数を設定することで、カスタムプロンプトを使用することもできます。

ChatResult オブジェクトには、会話履歴、人間の入力とトークンコストを含む、他の有用な情報も含まれます。

# Get the chat history.
import pprint

pprint.pprint(chat_result.chat_history)

 

以上