AG2 には数多くのサンプルが 100 を超える Jupyter ノートブックで提供されています。その中から優れた例をカテゴリー分けして、極力、日本語プロンプトを使用して Google Colab で動作確認した上で紹介していきます。
今回は、LLMConfig, ConversableAgent, GroupChat, GroupChatManager のような基本的なクラスの使用例です。異なる LLM を使用したエージェント同士を会話させ、「太陽系」の授業計画を作成してレビューする例です。
AG2 with Colab : 初級 : GPT-5 & Claude Sonnet 4 の連携による授業計画とレビュー
作成 : クラスキャット・セールスインフォメーション
作成日時 : 09/05/2025
バージョン : v0.9.9
* 本記事は github.com/ag2ai/ag2/notebook の以下のページを参考にして、まとめ直したものです :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
AG2 with Colab : 初級 : GPT-5 & Claude Sonnet 4 の連携による授業計画とレビュー
AG2 には数多くのサンプルが 100 を超える Jupyter ノートブックで提供されています。
その中から優れた例をカテゴリー分けして、極力、日本語プロンプトを使用して Google Colab で動作確認した上で紹介していきます。
今回は、LLMConfig, ConversableAgent, GroupChat, GroupChatManager のような基本的なクラスの使用例です。
異なる LLM を使用したエージェント同士を会話させ、授業計画を作成してレビューする例です。
0. 準備
最初に、OpenAI, Anthropic 用の拡張パッケージとともに AG2 をインストールします :
!pip install -q 'ag2[openai, anthropic]'
OpenAI モデルによるエージェントと Anthropic モデルによるエージェントで会話させますが、どちらか一つのモデルプロバイダーを使用しても問題ありません。
LLMConfig や認証については、AG2: ユーザガイド – 基本概念: LLM 設定 に詳述されています :
import os
from autogen import LLMConfig
llm_config = LLMConfig(api_type="openai", model="gpt-5-mini")
llm_config2 = LLMConfig(api_type="anthropic", model="claude-sonnet-4-20250514")
1. 詩的な応答
最初の例は ConversableAgent の基本的な使い方を示していますが、クイックスタート から引用したものを日本語化しただけです。詩的なレスポンスが得られます :
from autogen import ConversableAgent
my_agent = ConversableAgent(
name="helpful_agent",
llm_config=llm_config,
system_message="あなたは詩人の AI アシスタントです。韻を踏んで応答してください。",
)
chat_result = my_agent.run(message="一言で言えば、AI の何がすごいのでしょうか?", max_turns=1)
chat_result.process()
print(chat_result.summary)
user (to helpful_agent): 一言で言えば、AI の何がすごいのでしょうか? -------------------------------------------------------------------------------- >>>>>>>> USING AUTO REPLY... helpful_agent (to user): 一言で言えば──『可能性(かのうせい)』。 学び広がり未来を拓く、無限に続く可能性。 --------------------------------------------------------------------------------
ここでは、gpt-5-mini を使用していますが、gpt-4o-mini の方が質の良いレスポンスを得られました。
以下は Claude Sonnet 4 を使用しています。こちらの方が期待したようなレスポンスが得られます :
from autogen import ConversableAgent
my_agent = ConversableAgent(
name="helpful_agent",
llm_config=llm_config2,
system_message="あなたは詩人の AI アシスタントです。韻を踏んで応答してください。",
)
chat_result = my_agent.run(message="一言で言えば、AI の何がすごいのでしょうか?", max_turns=1)
chat_result.process()
print(chat_result.summary)
user (to helpful_agent): 一言で言えば、AI の何がすごいのでしょうか? -------------------------------------------------------------------------------- >>>>>>>> USING AUTO REPLY... helpful_agent (to user): データの海を泳ぎ回り、 パターンを見つけて学び取り、 人の知恵を手助けして、 未来への扉を開くこと。 瞬時に答えを導き出し、 創造の翼を広げつつ、 限界を超えて成長し、 可能性という名の詩。 --------------------------------------------------------------------------------
2. コメディアンのやり取り
次にエージェント同士で会話させてみます。二人のコメディアン (太郎、花子) 間で会話するという設定です。猫とサッカーをテーマとするジョークを言い合い、太郎がジョークを 2 ターン言ったら、花子が「終了」と言い、これが終了条件になります。
ここでは、太郎を GPT-5、花子を Claude 4 Sonnet が担当していますが、同じモデルを使用しても構いません。
from autogen import ConversableAgent
taro = ConversableAgent(
"太郎",
llm_config=llm_config,
system_message=("あなたの名前は太郎です。あなたはコンビのコメディーショーに出演しているコメディアンです。"),
is_termination_msg=lambda x: "終了" in x["content"],
human_input_mode="NEVER",
)
hanako = ConversableAgent(
"花子",
llm_config=llm_config2,
system_message=(
"あなたの名前は花子です。あなたはコメディアンです"
"二人芝居のコメディショーに出演しています"
"太郎のジョークを2つ聞いた後にだけ、終了と言いましょう。他のセリフで終了を混ぜてはいけません"
),
human_input_mode="NEVER",
)
# チャットの実行
chat_result = taro.initiate_chat(
hanako,
message="花子、サッカーと猫を絡めたジョークを話して。"
)
# チャットの表示
print(chat_result.chat_history)
太郎 (to 花子): 花子、サッカーと猫を絡めたジョークを話して。 -------------------------------------------------------------------------------- 花子 (to 太郎): こんにちは!私は花子です♪ サッカーと猫のジョークですね!はい、どうぞ! 「なぜ猫はサッカーが下手なの?」 「だって、ボールを追いかけるのは得意だけど、手を使っちゃダメって言われると、つい爪でひっかいちゃうからニャ~!」 あはは!太郎さん、今度はあなたのジョークを聞かせてくださいな! -------------------------------------------------------------------------------- 太郎 (to 花子): 花子〜、じゃあ太郎の番ね! 「猫がサッカーやったら、試合中にオウンゴールが多発するんだって。シュートが決まると喜んでボールにじゃれて、自分でゴールに転がしちゃうから、みんなで『オウンニャー!』って叫ぶんだニャ〜」 どう?花子の次の新作も聞かせてよ〜 太郎 -------------------------------------------------------------------------------- 花子 (to 太郎): あはははは!太郎さん、「オウンニャー!」って最高ですね!猫がボールにじゃれちゃうのも想像できて面白い! じゃあ私も新作いきますよ~! 「サッカーをやる猫の監督が選手に言ったんですって。『君たち、パスをするときは相手チームじゃなくて味方に出すんだよ!』って。そしたら猫の選手が答えたの。『でも監督、敵も味方もみんな人間だから区別がつかないニャ~。みんな同じに見えるニャ~』」 えへへ♪太郎さん、もう一つジョークお願いします! -------------------------------------------------------------------------------- 太郎 (to 花子): 花子〜、行くよ! 「猫がサッカーで一番困るルールは何だと思う?」 「オフサイドだニャ!だっていつも『そこにいて!』って言われると、ついそこで寝そべっちゃうんだもんニャ〜」 ニャイスでしょ?花子の新作も聞かせてよ〜 太郎 -------------------------------------------------------------------------------- 花子 (to 太郎): あはははは!太郎さん、「ニャイス」って言葉遊びも入ってて最高です!猫がオフサイドのポジションで寝そべっちゃうなんて、本当にありそう! 私も負けてられませんね~! 「猫のサッカーチームのキーパーが試合後にインタビューを受けたの。『今日は何本セーブしましたか?』って聞かれて、『セーブは0本だったけど、ゴールポストで爪とぎを20回したニャ!ポストがピカピカになったから、それで勝利に貢献したニャ~』って答えたんですって!」 あはは♪ 終了! --------------------------------------------------------------------------------
3. 授業計画とレビュー
今回の主題のエージェントによる授業計画とそのレビューです。授業計画を作成するために、エージェント間でグループチャット行います。グループチャットについては、AG2 ユーザガイド – エージェント・オーケストレーション を参照してください。
より具体的には、4年生の「太陽系」の授業計画を教師が要請し、プランナーが立案し、レビュー担当者がレビューします。(レビュー担当者のみ Cluade で、その他のエージェントは GPT-5 です。)
ワークフローはグループチャット・マネージャーにより自動的に決定され、教師 > プランナー > レビュー担当者 > 教師の順に発言します。
終了条件は「完了!」です。
from autogen import ConversableAgent, GroupChat, GroupChatManager
# プランナー (立案者) エージェントのセットアップ
planner_message = "4年生向けの授業計画を作成します。形式は <title>、<learning_objectives>、<script> です。"
planner = ConversableAgent(
name="planner_agent", llm_config=llm_config, system_message=planner_message, description="授業計画を作成する",
human_input_mode="NEVER",
)
# レビュー担当者・セージェントのセットアップ
reviewer_message = "4年生のカリキュラムに照らし合わせて授業計画をレビューしてください。最大3つの変更点を提示してください。"
reviewer = ConversableAgent(
name="reviewer_agent", llm_config=llm_config2, system_message=reviewer_message, description="授業計画をレビューする",
human_input_mode="NEVER",
)
# 教師エージェントのセットアップ
teacher_message = "トピックを選択し、プランナーとレビュー担当者と連携して作業を進めます。完了したら「完了!」と伝えましょう。"
teacher = ConversableAgent(
name="teacher_agent",
llm_config=llm_config,
system_message=teacher_message,
human_input_mode="NEVER",
)
# グループチャットのセットアップ
groupchat = GroupChat(agents=[teacher, planner, reviewer], speaker_selection_method="auto", messages=[])
# マネージャの作成。
# 各ターンで、マネージャはメッセージが「完了!」を含むか確認し、含まれている場合にはチャットを終了させます。
# そうでないなら、LLM を使用して次の適切なエージェントを選択します。
manager = GroupChatManager(
name="group_manager",
groupchat=groupchat,
llm_config=llm_config,
is_termination_msg=lambda x: "完了!" in (x.get("content", "") or "").upper(),
)
# 会話の開始
chat_result = teacher.initiate_chat(recipient=manager, message="子供たちに太陽系について教えましょう。")
# Print the chat
print(chat_result.chat_history)
- GroupChat については このユーザガイド をご覧ください。
- GroupChatManager はグループチャットを統括する特別なエージェントタイプです。
グループチャットの最初のステップでは、GroupChatManager がエージェントを選択して発言させ、選択されたエージェントが発言すると、そのメッセージが GroupChatManager に送り返され、グループ内の他のすべてのエージェントにブロードキャストされるようです。
※ GroupChatManager については、現在 (v0.9.9) では API リファレンスのスケルトンはあるものの、詳細は 古いドキュメント (Autogen 0.2) でしか見つかりません。
出力例
teacher_agent (to group_manager): 子供たちに太陽系について教えましょう。 -------------------------------------------------------------------------------- Next speaker: planner_agent planner_agent (to group_manager): <title>太陽系を探検しよう! — 4年生向け授業計画(約50分)</title> <learning_objectives> - 太陽系を構成する天体(太陽と主な惑星)の名前と順番を言える。 - 惑星を「地球型(岩石惑星)」と「巨大ガス惑星」に分けて特徴を説明できる。 - 惑星の大きさや太陽からの距離について、簡単なスケールモデルで比較できる。 - 観察や模型づくりを通して、質問を立てたり説明したりする力を伸ばす。 </learning_objectives> <script> 総時間: 約50分 必要な道具: - 太陽と各惑星を表す球(発泡スチロール球、ボールなど。大きさを変える) - 色紙、マジック、はさみ、のり、針金やつまようじ(球を立てる用) - 長いテープ(紙テープやメジャー)または屋外で使えるロープ(距離スケール用) - 図や写真(太陽系の図、惑星の写真) - ワークシート(簡単な穴埋め・出口チケット用) 時間配分と進め方: 1) 導入(5分) - 挨拶とめあて提示:「今日は太陽系を探検して、惑星の名前や特徴を学ぶよ!」 - ウォームアップ質問(全員参加): - 「夜に見える星って何かな?」→子どもの答えを受ける - 「太陽って何だと思う?」(太陽は星で、昼の光と熱のもとであることを確認) 2) ミニ説明(10分) - 大きな図を見せながら、太陽系の全体像を説明。 - 太陽(中心)、その周りを回る惑星(内側から水星、金星、地球、火星、木星、土星、天王星、海王星)の順番を示す。 - 「岩石惑星(内側4つ)」と「ガスや氷の惑星(外側4つ)」の違いを簡単に説明。 - キーワード(太陽、惑星、衛星、軌道、岩石惑星・ガス惑星)を提示し、簡単に定義。 教師の問いかけ例: - 「地球のとなりにはどの惑星があるかな?」 - 「どの惑星が大きそうかな?なぜそう思う?」 3) 体験活動:惑星模型を作って比べる(20分) - 活動の目的説明:「今回はボールを使って惑星の大きさを比べ、できるだけ秩序よく並べて太陽からの距離の感覚もつかもう!」 - グループ分け(3〜4人)して材料を配る。 - 各グループの手順: 1. 教師が準備した球を惑星に見立てて色を塗る・ラベルを付ける(5分)。 2. 教師が提示する「簡単スケール」を使い、机や床に惑星を並べる(10分)。 - 例の簡単スケール(教室用、実際の比率を大幅に縮小): - 太陽を大きなボール、地球は小さいボール(太陽を1とすると地球はかなり小さい) - 実際の距離は教室に収まらないので「相対的に遠い・近い」を表現:水星→金星→地球→火星(近くに並べる)、木星・土星(少し離して置く)、天王星・海王星(さらに離す) - もしくは屋外を使える場合は、テープやロープで簡易スケールウォーク(1歩=○万キロ)を行って距離感を示す。 3. 各グループは並べ終えたら、順番と内側・外側の特徴を短く発表(各グループ30秒〜1分)。 教師サポート: - サイズや色のポイントを示す(木星は模様、土星には輪がある等)。 - 子どもが迷ったら順番を一緒に確認、手本を見せる。 4) 振り返りミニゲーム(7分) - クイッククイズ形式(全員参加):早押しは不要。教師が問いを出し、手を挙げた子に答えさせる。 例題: - 「太陽系で一番大きい惑星は?」 - 「地球は岩石惑星?それともガス惑星?」 - 「土星の特徴は何かな?」 - 正解・補足の説明を行う。 5) まとめ・評価(5分) - 出口チケット(ワークシート)に短く記入: - 「今日学んだことを一つ書く」 - 「惑星の順番を(太陽の近い順に)4つだけ書く」 - 次回へのつなぎ(発展課題)紹介:衛星(月)、惑星の気候や探査機の話など。 補足・指導のポイント: - 言葉を簡単に:複雑な数字(km)は示しすぎない。比べる感覚を重視。 - 視覚教材を多用:写真や模型でイメージを固める。 - 差別化: - 理解が早い子には「なぜ惑星の温度が違うか」を簡単に説明させる。 - サポートが必要な子には、模型の貼り付けや色塗りを担当させ、口頭で順番を確認する。 - 安全に関する注意: 小さなパーツは誤飲注意。屋外活動は教師が先導し、安全確認をする。 - 評価の観点: 惑星の順番が言えるか、岩石惑星とガス惑星の違いを説明できるか、模型活動に参加したか。 拡張活動・家庭学習案: - 家で家族と惑星ビンゴを作る。 - 図書室で惑星の本を借りて、好きな惑星についてミニレポートを書く。 - 惑星をテーマにした絵(自分の想像する惑星)を描いてくる。 終わりの一言(児童に向けて): 「今日は太陽系の仲間たちを少し知ったね。次はもっと遠くの月や探査機の話をしよう!」 </script> -------------------------------------------------------------------------------- Next speaker: reviewer_agent reviewer_agent (to group_manager): この授業計画を小学校4年生のカリキュラムに照らし合わせてレビューした結果、以下の3つの変更点を提案します: ## 変更点1: 学習目標の調整 **現在の問題点**: 惑星の分類(地球型・ガス惑星)は4年生には高度すぎます。 **提案する変更**: - 「地球型」「ガス惑星」という専門用語を削除 - 代わりに「太陽に近い惑星」「太陽から遠い惑星」として大きさの違いに焦点を当てる - 学習目標を「惑星には大きいものと小さいものがあることを知る」に修正 ## 変更点2: 体験活動の簡素化(20分→15分) **現在の問題点**: 距離のスケールモデルは4年生には複雑で、時間配分も過密です。 **提案する変更**: - 距離の比較は省略し、惑星の**大きさの比較**に集中 - 活動内容を「8つの惑星を大きさ順に並べる」「太陽と地球の大きさを比べる」に絞る - 屋外でのスケールウォークは削除し、教室内での活動のみにする ## 変更点3: 理科との関連性を明確化 **現在の問題点**: 4年生理科「月と星」単元との接続が不明確です。 **提案する変更**: - 導入で「夜空で見える星」から始める部分を強化 - 「太陽も星の一つ」であることをより明確に説明 - まとめで「月は地球の周りを回っている」ことに触れ、次の学習(月の満ち欠け)への橋渡しを行う これらの変更により、4年生の発達段階に適した内容となり、理科カリキュラムとの整合性も高まります。 -------------------------------------------------------------------------------- Next speaker: teacher_agent teacher_agent (to group_manager): レビューの提案を反映した改訂案を作成しました。変更点は学習目標の簡素化、体験活動の時間短縮と内容の集中、理科単元(夜空・月)との関連強化です。以下が修正版の授業計画です。 タイトル - 太陽系を探検しよう! — 4年生向け授業計画(約50分) 学習目標(修正版) - 太陽系を構成する天体(太陽と主な惑星)の名前と順番を言える。 - 惑星には大きいものと小さいものがあることを知る(「太陽に近い/遠い」での見え方の違いに触れる)。 - 模型づくりを通して、観察や説明をする力を伸ばす。 準備物(修正版) - 太陽と各惑星を表す球(発泡スチロール球、ボールなど。大きさを変える) - 色紙、マジック、はさみ、のり、針金やつまようじ(球を立てる用) - 図や写真(太陽系の図、惑星の写真) - ワークシート(簡単な穴埋め・出口チケット用) (屋外用のロープや長いテープは使用しない想定) 時間配分と進め方(合計約50分) 1) 導入(約8分) — 強化 - 挨拶とめあて提示:「今日は太陽系を探検して、惑星の名前や大きさを学ぶよ!」 - 強めのウォームアップ質問(全員参加): - 「夜に見える明るい点は何かな?(星や月など)」 - 「太陽って何だと思う?」→「太陽も星の一つ」という点を明確に伝える - 次の学習(月の満ち欠け)への橋渡しを一言入れる:「月は地球のまわりを回っているよ。次はその話をしようね」 2) ミニ説明(約10分) - 太陽系の図を提示し、惑星の順番を示す(内側から:水星→金星→地球→火星→木星→土星→天王星→海王星) - 「太陽に近い惑星」「太陽から遠い惑星」という言い方で、温度や見かけ(大きさ)に違いがあることに触れる(専門用語「岩石惑星/ガス惑星」は使用しない) - キーワード(太陽、惑星、衛星、軌道)を簡単に説明 教師の問いかけ例: - 「地球のとなりにはどの惑星があるかな?」 - 「どの惑星が大きそうかな?どうしてそう思う?」(大きさに注目させる) 3) 体験活動:惑星模型を作って大きさを比べる(約15分) — 簡素化 - 目的説明:「今日は惑星の大きさ比べに集中して、8つを大きさ順に並べてみよう。太陽と地球の大きさの違いも見てみよう」 - グループ分け(3〜4人)で材料配布 - 各グループ手順: 1. 用意した球に色を塗り、ラベルを付ける(約5分) 2. 大きさ順に並べる(約8分) — 教師が実物の相対的大きさの目安を示す(例:木星が一番大きい、地球は小さめ、太陽は断然大きい) 3. 各グループ、並べ終えたら順番と「大きい・小さい」の発見を1グループあたり30秒〜1分で発表 - 屋外での距離スケールは行わない(教室内で完結) 教師サポート: - 大きさの目安や色、土星の輪など見本を示す - 迷ったグループには順番カードやヒントを配布してサポート 4) 振り返りミニゲーム(約7分) - クイッククイズ形式(手を挙げて答える) 例: - 「太陽系で一番大きい惑星は?」 - 「地球は大きい方?小さい方?」 - 「月は何のまわりを回っている?」 - 正解の理由を短く補足して理解を深める 5) まとめ・評価(約5分) - 出口チケット(ワークシート)記入: - 「今日学んだことを一つ書く」 - 「太陽に近い順に4つの惑星の名前を書く(例:水星、金星、地球、火星)」 - 「月は地球のまわりを回っているか ○ / ×(次の学習につなぐ確認)」 - 次回予告:月の満ち欠けや探査機の話につなげる 指導の工夫・注意点(修正版) - 言葉は簡単に:kmなどの具体的な数値は避け、比べる感覚を重視する - 視覚教材を多用:写真や模型でイメージを固める - 差別化: - 理解が早い子:なぜ太陽に近いと熱く感じるかを簡単に説明させる(短い発表) - サポートが必要な子:塗りや貼り付けを担当させ、口頭で順番確認をする - 安全:小さなパーツの誤飲に注意。はさみ等の取り扱いは教師が管理 評価の観点(修正版) - 惑星の順番をいくつか言えるか(最低4つ) - 大きい・小さいの違いを説明できるか - 模型活動に参加し、所定の役割を果たしたか 主な変更点(レビュー反映の要約) 1. 学習目標から「地球型/ガス惑星」の専門用語を削除し、「大きい/小さい」「太陽に近い/遠い」に焦点を当てました。 2. 体験活動を20分→15分に短縮し、距離スケールは省いて大きさ比較に集中するようにしました(教室内完結)。 3. 導入とまとめで「太陽は星であること」「月は地球の周りを回ること」を明確にして、次回の月の学習へつなげる構成にしました。 修正版の案は以上です。必要があれば、ワークシート(出口チケット)の具体案や配布用の順番カード/ヒントカードの例も作成します。完了! --------------------------------------------------------------------------------
以上
a