AG2 with Colab : 初級 : GPT-5 & Claude Sonnet 4 の連携による授業計画とレビュー

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