見出し画像

マルチエージェントLLMフレームワークのAutoGenを試す

マルチエージェントでLLMを用いたフレームワークの「AutoGen」を試したことについて書きます。
AutoGenはMicrosoftがオープンソースで開発を行っています。

エージェントですが、エージェントは自律的かつ協調的にタスクをこなす存在で、マルチエージェントでは複数のエージェントが協調してタスクを遂行します。

AutoGenはOpenAIのChatGPTなどのLLMを用いて、マルチエージェントでタスクを遂行します。

例えば、Webで市場調査を行い、調査結果をまとめるタスクがあったとして、Webで検索を行うエージェントと検索結果をまとめるエージェントを作ることでタスクを遂行します。エージェントを動かす仕組み自体が複雑なのでAutoGenを使うことでその仕組みを簡素化します。

サンプルとしてAutoGenで企業のエージェント同士を対話させて、共創の可能性について検討するタスクを実装してみます。

登場するエージェントは下記とします。
・A社の新規事業担当者のエージェント
・B社の新規事業担当者のエージェント
・共創創出施設のスタッフのエージェント

 こんな感じで各エージェントを定義します。

company_a_agent = CodingAssistantAgent(
    "company_a_agent",
    model_client=model_client,
    description="A社の新規事業担当者",
    system_message="""
あなたはA社の新規事業担当者です。以下、A社の情報です。
会社名:株式会社A社
事業:通信事業
アセット:データセンター、自社クラウドサービス、自社サービスの展開
課題:データセンターとIT事業を展開しているが、伸び悩んでおり新たな事業創出を検討しているがIT領域以外のノウハウに乏しい。
""",
)

company_b_agent = CodingAssistantAgent(
    "company_b_agent",
    model_client=model_client,
    description="B社の新規事業担当者",
    system_message="""
あなたはB社の新規事業担当者です。以下、B社の情報です。
会社名:株式会社B社
事業:飲料メーカー
アセット:食品・飲料の開発技術、宣伝・販売、市場リサーチ
課題:飲料メーカとして中堅ではあるが、近年はヒット商品が出ず、人口減少も見据えて新たな事業を模索している。
""",
)

stuff_agent = CodingAssistantAgent(
    "stuff_agent",
    model_client=model_client,
    description="共創パートナーの判断",
    system_message="""
あなたは共創パートナーを創出する施設のスタッフです。
""",
)

タスクですが4つに細分化しておきます。
1.  自社紹介
2. 課題とアセットの説明
3. 共創についての議論
4. スタッフエージェントによる評価

1〜3はA社とB社のエージェントで行い、4はスタッフエージェントが担当します。

group_chat = RoundRobinGroupChat([company_a_agent, company_b_agent])

# 1. 自社紹介
result1 = asyncio.run(group_chat.run(task="はじめに自社の紹介をしてください。", termination_condition=MaxMessageTermination(max_messages=2)))

# 2. 課題とアセットの説明
result2 = asyncio.run(group_chat.run(task="自社のアセットと課題を説明をしてください。", termination_condition=MaxMessageTermination(max_messages=2), initialMessage=result1.messages))

# 3. 共創についての議論
result3 = asyncio.run(group_chat.run(task="両社のアセットと課題を加味して共創の可能性を模索してください。", termination_condition=MaxMessageTermination(max_messages=4), initialMessage=result2.messages))

# 4. スタッフエージェントによる評価
stuff_chat = RoundRobinGroupChat([stuff_agent])
result4 = asyncio.run(stuff_chat.run(task="""
A社とB社のやりとりから実現性、市場性、社会的意義についてそれぞれ5段階で評価してください。
また理由についても記載してください。
最後に総評と総合結果を5段階で回答してださい。
""", termination_condition=MaxMessageTermination(max_messages=1), initialMessage=result3.messages))

コードで書くとこんな感じです。GroupChatで登場するエージェントを設定します。これを実行するとエージェントたちが対話をはじめます。

--------------------------------------------------------------------------- 
[2024-10-24T16:01:54.403642]:

はじめに自社の紹介をしてください。
--------------------------------------------------------------------------- 
[2024-10-24T16:01:59.370505], company_a_agent:

株式会社A社は、通信事業を中心に展開している企業です。当社はデータセンターの運営や...
株式会社B社は飲料メーカーとして、食品・飲料の開発技術において優れたノウハウを持ち、...
--------------------------------------------------------------------------- 
[2024-10-24T16:02:01.821644], company_b_agent:

株式会社B社は飲料メーカーとして、食品・飲料の開発技術において優れたノウハウを持ち、...
また、効果的な宣伝活動と全国的な販売ネットワークを活用することで、ファン層を拡大するとともに...
--------------------------------------------------------------------------- 
[2024-10-24T16:02:01.824466]:

自社のアセットと課題を説明をしてください。
--------------------------------------------------------------------------- 
[2024-10-24T16:02:07.461524], company_a_agent:

株式会社A社のアセットには以下のものがあります:

1. **データセンター**: 当社は高度なセキュリティと安定したインフラを備えたデータセンターを...

....

--------------------------------------------------------------------------- 
[2024-10-24T16:02:55.684776], stuff_agent:

もちろんです。A社とB社のやりとりについて、以下の評価を行います。なお、ここでの評価は仮想のシナリオに基づいたものです。

### 実現性(1〜5の評価):
評価: 4  
**理由**: A社とB社のやりとりで提案されているプロジェクトは、技術的に実行可能であり、両社ともに必要な技術力とリソースを持っています。...
### 市場性(1〜5の評価):
評価: 3  
**理由**: プロジェクトがターゲットとする市場は成長しており、一定の需要が見込まれます。しかし、市場には既に競争相手が存在し、...

対話の内容が順次出力されていきます。今回のサンプルでは延々と対話されても困るので回数で切っています。与えている情報の不足や評価観点の浅さなどはあるものの、LLMのエージェントの対話によってタスクが遂行できることを確認しました。
人間の方がより正確に行えるでしょう。適応先としてスクリーニングなどで量をこなす必要なタスクにはあっているでしょう。AutoGenのことはじめとして紹介は以上です。

いいなと思ったら応援しよう!