AutoGenでエージェント同士に会話させてみた
はじめに
Micorsoftが公開しているAutoGenをgpt-3.5-turboで簡単に試してみました。
AutoGenとは ※翻訳文
相互に対話してタスクを解決できる複数のエージェントを使用したLLMアプリケーションの開発を可能にするフレームワークです。AutoGenエージェントはカスタマイズ可能で会話可能で、人間の参加をシームレスに許可します。これらは、LLM、人間による入力、およびツールの組み合わせを使用するさまざまなモードで動作できます。
とのことです。複数エージェントを作る場合は便利そうですね。
詳細は下記ページをチェックしてみてください。
参考ドキュメント
公式ドキュメント
LLM構成 FAQ Multi-agent Conversation Framework使ってみる
今回はとりあえず動作させてみたかったので、コストを考えて 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構成についての概要や他の実装方法など、詳しくは下記をご確認ください。
[
{
"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の制御をいろいろ試した記事を書きました。
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