😗

AutoGenでエージェント同士に会話させてみた

2023/10/19に公開

はじめに

Micorsoftが公開しているAutoGenをgpt-3.5-turboで簡単に試してみました。

AutoGenとは ※翻訳文
相互に対話してタスクを解決できる複数のエージェントを使用したLLMアプリケーションの開発を可能にするフレームワークです。AutoGenエージェントはカスタマイズ可能で会話可能で、人間の参加をシームレスに許可します。これらは、LLM、人間による入力、およびツールの組み合わせを使用するさまざまなモードで動作できます。

とのことです。複数エージェントを作る場合は便利そうですね。
詳細は下記ページをチェックしてみてください。
https://github.com/microsoft/autogen

参考ドキュメント

公式ドキュメント
https://microsoft.github.io/autogen/docs/getting-started
LLM構成
https://microsoft.github.io/autogen/docs/llm_configuration
FAQ
https://microsoft.github.io/autogen/docs/FAQ/
Multi-agent Conversation Framework
https://microsoft.github.io/autogen/docs/Use-Cases/agent_chat

使ってみる

今回はとりあえず動作させてみたかったので、コストを考えて gpt-3.5-turboやgpt-3.5-turbo-1106を使い、複数エージェントが雑談するだけのものを実験してみました。
また、seed値を設定してキャッシュを作成するようにし、会話の回数はmax_round=4にしてみました。

必要なものをインストール
Pythonが前提です。
Python version >= 3.8

pip install pyautogen

バージョンを確認

pip show pyautogen
Name: pyautogen
Version: 0.2.15

作成するファイル
適当にディレクトリを作成(例 test_autogen)

  • /test_autogen/OAI_CONFIG_LIST
  • /test_autogen/app/test.py
    を作成します。

OAI_CONFIG_LIST
※ 拡張子はつけません。
OpenAIのAPI KEY情報を記述します。切り替えられるようにmodelを2つ記述しています。
LLM構成についての概要や他の実装方法など、詳しくは下記をご確認ください。
https://microsoft.github.io/autogen/docs/llm_configuration

[
  {
    "model": "gpt-3.5-turbo-1106",
    "api_key": ""**********""
  },
  {
    "model": "gpt-3.5-turbo-0125",
    "api_key": "**********"
  }
]

test.py
3名のエージェントだけで雑談をさせてみます。

import autogen
import json
from pathlib import Path


# OAI_CONFIG_LIST
config_list_gpt = autogen.config_list_from_json(
   "OAI_CONFIG_LIST",
   file_location="..",
   # 省略可能
   # filter_dict={
   #     "model": {
   #         "gpt-3.5-turbo-0125",
   #     }
   # },
)

llm_config = {
   "config_list": config_list_gpt,
   "seed": 10,  # キャッシュの作成に使用
   "temperature": 0.7,
}

# 今回は使わないで実験
# user_proxy = autogen.UserProxyAgent(
#     name="User_proxy",
#     system_message="A human admin.",
#     code_execution_config={"last_n_messages": 2, "work_dir": "groupchat"},
#     human_input_mode="TERMINATE",
# )

agent_a = autogen.AssistantAgent(
   name="Agent-A",
   system_message="和食が好きです。回答は一言で。",
   llm_config=llm_config,
)
agent_b = autogen.AssistantAgent(
   name="Agent-B",
   system_message="中華料理が好きです。回答は一言で。",
   llm_config=llm_config,
)
agent_c = autogen.AssistantAgent(
   name="Agent-C",
   system_message="和食が好きです。回答は一言で。",
   llm_config=llm_config,
)

# max_roundで会話回数を制限しています
groupchat = autogen.GroupChat(
   agents=[agent_a, agent_b, agent_c], messages=[], max_round=4
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)

manager.initiate_chat(manager, message="食べ物の話題で雑談してください")

# agent指定はどれでも同じで、全ての会話記録が順番通りに入る
all_messages = manager.chat_messages[agent_a]

# 現在のファイルの絶対パスを取得
current_file_path = Path(__file__).resolve()
# 一つ上の階層のフォルダを取得
parent_directory = current_file_path.parent.parent
save_file = parent_directory / "conversation.json"
# all_messagesの内容をjsonファイルに上書き保存
with open(save_file, "w") as f:
   json.dump(all_messages, f, indent=2, ensure_ascii=False)

実行してみる
ターミナルから実行します。
python test.py

出力結果
指定した回数まで会話が生成されました。
キャッシュを作成しているので、もう一度実行しても同じ内容です。

chat_manager (to chat_manager):

食べ物の話題で雑談してください

--------------------------------------------------------------------------------
Agent-A (to chat_manager):

和食が好きです。

--------------------------------------------------------------------------------
Agent-B (to chat_manager):

美味しいですね。

--------------------------------------------------------------------------------
Agent-C (to chat_manager):

和食のバリエーションが豊富です。

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

conversation.jsonファイルに保存された内容

[
  {
    "content": "食べ物の話題で雑談してください",
    "name": "chat_manager",
    "role": "assistant"
  },
  {
    "content": "和食が好きです。",
    "role": "user",
    "name": "Agent-A"
  },
  {
    "content": "美味しいですね。",
    "name": "Agent-B",
    "role": "assistant"
  },
  {
    "content": "和食のバリエーションが豊富です。",
    "name": "Agent-C",
    "role": "assistant"
  }
]

追記

2024/3/26

  • GroupChatの制御をいろいろ試した記事を書きました。

https://zenn.dev/nari007/articles/2f86f9828f0949

2023/11/28

  • autogenのllm_configの仕様が変更になったので、ソースコードを修正しました。
    https://microsoft.github.io/autogen/docs/Installation
  • 会話履歴all_messagesをjsonファイルとして保存する部分も追加しました。
    なお、all_messages = manager.chat_messages[agent_a]で指定したエージェントは
    "role": "user"になるようです。

まとめ

autogenはまだv0.2.15なのでアップデートの頻度も多いですが、GroupChatなどはサンプルコード見ながら、簡単に実装できました。今回は特に意味のないAI同士の会話でしたが、GPT-4を使って、コード生成の自動タスク解決などいくつか例がありますので、何か面白いものが作れそうです。

Discussion