Microsoft発 マルチエージェントフレームワーク『TinyTroupe』を調べてみた🤠🤓🥸🧐
こちらの記事は、Azure PoC部 Advent Calendar 2024の8日目の記事となります。
はじめに、のまえに
この記事を書いている私は現在、ラスベガスにて12/2~12/6に開催される『AWS re:Invent 2024』に現地参加し、本日無事帰国しました!
そんなAWSに浸りきってしまった事後ですが、掲題のテーマのMicrosoft発 マルチエージェントフレームワーク 『TinyTroupe』に関する記事を書いていきたいと思います!
(AWS re:Invent2024の現地参加に関する記事もどこかで書きたいと思います。)
また、浸り直前に書いた記事はこちらです。併せて読むと何か私の中の変化がわかるかもしれません?
とりあえず、re:Play Partyの様子だけ貼っておきます。
はじめに
大規模言語モデル(LLM)の進歩に伴い、複数の仮想的な「人」(エージェント)を同時にシミュレートし、その相互作用からビジネス上の洞察や新規アイデアを得る手法が注目を浴びています。こうしたマルチエージェントシミュレーションは、顧客行動分析やマーケティング戦略立案、UX改善、広告評価、新製品アイデア創出など、多様な応用が可能です。
Microsoftが開発した「TinyTroupe」は、GPT-4などのLLMを活用し、様々なペルソナを持つ「TinyPersons」を「TinyWorld」という仮想空間に配置して、複数エージェントが対話・意思決定する様子をシミュレートするPythonライブラリです。
他のマルチエージェントフレームワーク(AutoGenやCrewAIなど)がタスク遂行や問題解決に焦点を当てる中、TinyTroupeはより人間的で多面的な視点から社会的・ビジネス的シナリオを再現することに特徴があります。これにより、マーケティング戦略の事前検証、仮想顧客インタビュー、広告コピー評価、合成データ生成など、ビジネス上の試行錯誤を低コスト・高速に行うことが可能です。
上記のGithubのリポジトリを見てみますと、『TinyTroupe🤠🤓🥸🧐』と書いてあります。🤠🤓🥸🧐の絵文字が示すように、様々な個性を持つ小さなエージェントたちが、仮想的なオフィスで働きながら、私たちのビジネスに関する理解を深めてくれます。
TinyTroupeとは
TinyTroupeは、LLMを用いてリアルな会話・行動を示す仮想エージェントを構築し、それらを1つの世界(TinyWorld)内で相互作用させることで、人間社会やビジネス現場を模したシナリオを再現します。主な特徴としては、以下のとおりです。
主な特徴:
- 詳細なペルソナ定義: 年齢、職業、スキル、価値観、日常習慣などをエージェントに付与し、人間らしい行動を再現します。
- マルチエージェント環境: 複数のエージェントを同時に配置し、対話や意思決定プロセスを観察できます。
- LLM統合: GPT-4などを用いて自然な対話を実現し、説得力ある相互作用が可能です。
- ビジネス指向の活用: マーケティング戦略テスト、製品アイデア評価、顧客インタビューの仮想実施など、多面的なビジネス応用を狙えます。
- 分析・キャッシング機能: シミュレーションの結果を構造化データとして抽出できるユーティリティや、LLMコールのコスト低減のためのキャッシング機能を提供します。
その中でも、TinyTroupeの最大の特徴は、「ゲーム的なシミュレーション」や「タスク支援型AI」とは異なり、ビジネスシナリオの理解と洞察の獲得に焦点を当てている点です。
ユースケース例
主な用途として、以下のようなものが想定されています:
- 広告案やキャンペーンの事前評価: 複数の仮想顧客エージェントに新しい広告アイデアを提示し、誰が何を好むかを観察可能。
- 顧客インタビューの仮想化: コストや時間をかけずに、特定の役職・業界背景を持つ仮想人物へのインタビューを実施し、課題抽出が可能です。
- チームブレインストーミングの模擬: デザイナー、データサイエンティスト、プロダクトマネージャーなど異なる専門家エージェントを1つの世界に集め、新機能アイデアを議論させ、有用な示唆を得られます。
- 合成データ生成: 対話ログを蓄積し、チャットボット学習や顧客行動分析のためのトレーニングデータとして活用可能です。
- ソフトウェアテスト:検索エンジンやチャットボット、コパイロットなどのテスト入力とその評価が可能です。
- プロダクト管理:医師や弁護士、ナレッジワーカーなど、特定のペルソナからのフィードバックを得られます。
主要コンポーネント
1. TinyPerson(エージェント)
TinyPersonは、個性や目標を持つ仮想的な人物です。以下のような詳細な属性を定義できます:
lisa = TinyPerson("Lisa")
lisa.define("age", 28)
lisa.define("nationality", "Canadian")
lisa.define("occupation", "Data Scientist")
lisa.define("routine", "Every morning, you wake up, do some yoga, and check your emails.")
lisa.define("personality_traits", [
{"trait": "You are curious and love to learn new things."},
{"trait": "You are analytical and like to solve problems."}
])
2. TinyWorld(環境)
TinyWorldは、エージェントが存在し相互作用する環境です。複数のエージェントを配置し、会話や行動をシミュレートできます:
world = TinyWorld("Chat Room", [lisa, oscar])
world.make_everyone_accessible()
lisa.listen("Talk to Oscar to know more about him")
world.run(4) # 4ステップ実行
3. 便利なユーティリティ
- TinyPersonFactory: LLMを使用して新しいエージェントを生成
- ResultsExtractor: エージェントの出力から特定の情報を抽出
- ResultsReducer: 抽出した結果の集計や分析
インストール・セットアップ
必要条件:
- Python 3.10以上
- Azure OpenAI Service または OpenAI GPT-4へのアクセス
- APIキー設定(環境変数OPENAI_API_KEYまたはAZURE_OPENAI_KEY, AZURE_OPENAI_ENDPOINT)
インストール例:
conda create -n tinytroupe python=3.10
conda activate tinytroupe
git clone https://github.com/microsoft/tinytroupe
cd tinytroupe
pip install .
config.iniを編集してモデルやAPIタイプ、キャッシュ設定などを調整できます。
コンテンツフィルタ: 不適切な出力を回避するために、Azure OpenAI Serviceのコンテンツモデレーション機能を有効にすることが推奨されます。
公式リポジトリの例3:製品アイデアブレインストーミング
ここでは、公式GitHubリポジトリにあるproduct_brainstorming.ipynbの例3を日本語化して紹介します。この例では、Microsoft Word向けの新しいAI機能についてブレインストーミングするフォーカスグループをシミュレートします。複数のエージェント(例:データサイエンティストのLisa、建築家のOscar、医療系コンサルタントのMarcosなど)がアイデアを出し合い、シミュレーション完了後にResultsExtractorでアイデアを構造化します。
コード例: フォーカスグループのブレインストーミング
from tinytroupe.agent import TinyPerson
from tinytroupe.environment import TinyWorld
from tinytroupe.extraction import ResultsExtractor
# エージェント定義
lisa = TinyPerson("Lisa")
lisa.define("occupation", "データサイエンティスト")
lisa.define("personality_traits", [{"trait": "常に新技術を模索し、ユーザー行動分析を得意とする"}])
oscar = TinyPerson("Oscar")
oscar.define("occupation", "建築家")
oscar.define("personality_traits", [{"trait": "複雑なドキュメントの構造化や標準化に興味を持つ"}])
marcos = TinyPerson("Marcos")
marcos.define("occupation", "医療系コンサルタント")
marcos.define("personality_traits", [{"trait": "医療規制やコンプライアンスに詳しく、精度を重視する"}])
# フォーカスグループの世界を生成
world = TinyWorld("AI機能ブレインストーミング", [lisa, oscar, marcos])
world.make_everyone_accessible()
# シミュレーション開始
world.broadcast("""
皆さん、今日はMicrosoft Word向けの新規AI機能についてブレインストーミングを行います。
ユーザの文章作成体験を向上させるような革新的な機能アイデアを出してください。
業界特化の表現、ドキュメント構造化、自動校閲、コンプライアンスチェックなど、自由な発想でお願いします!
""")
world.run(4)
実行すると、各エージェントが自分の専門性に基づいたアイデアを提示します。
例:
- Lisa: 「AIによるコンテキスト対応型アシスタント、ドキュメントの目的やユーザ過去嗜好を考慮して文体やトーンを提案」
- Oscar: 「業界別テンプレートでドキュメント構造を自動最適化する機能」
- Marcos: 「医療文書のコンプライアンスチェック機能、用量ミスや規制違反を自動検出」
結果抽出とデータ構造化
シミュレーション後、ResultsExtractorを用いて提案されたアイデアを整理できます。
extractor = ResultsExtractor()
results = extractor.extract_results_from_agent(
agent=lisa,
extraction_objective="グループが提示したアイデアをリスト形式で要約し、それぞれの利点や留意点を説明してください。",
situation="新製品アイデア創出のためのフォーカスグループ"
)
print(results)
出力例(JSON形式イメージ):
[
{
"idea": "AI対応コンテキストアシスタント",
"benefits": "ドキュメントの目的やユーザの過去嗜好に基づき、専門用語や文体を自動提案し、執筆効率を向上",
"drawbacks": null
},
{
"idea": "スマートテンプレートシステム",
"benefits": "ユーザの編集履歴から学習し、適切な文書構成やレイアウト改善をリアルタイムに提案",
"drawbacks": null
},
{
"idea": "自動フォーマット・構造化AI",
"benefits": "過去文書から効率的な書式と構造を学び、標準化および規格適合性を確保",
"drawbacks": null
},
{
"idea": "医療文書用コンプライアンスチェックAI",
"benefits": "医療規制遵守や薬品用量ミスの防止など、精度と安全性を確保",
"drawbacks": null
}
]
このように、TinyTroupeを用いることで、エージェント間の対話から得られたアイデアを構造化し、後続の分析や報告書作成に活用できます。
キャッシング機能
LLM APIコールを多用するシミュレーションではコスト削減が重要です。TinyTroupeは以下のキャッシングを提供します:
- シミュレーション状態キャッシュ: 途中状態を保存し、再実行時に初期段階からのやり直しを不要にします。
- LLM APIコールキャッシュ: 同一入力へのレスポンスを再利用し、同じ問い合わせでのコストを削減します。
config.iniでcache_enabled = Trueを指定すると有効になります。
他のAIエージェントフレームワークとの違い
他のマルチエージェントフレームワーク(例:AutoGen、CrewAIなど)は、主にタスク達成や問題解決に特化しており、与えられた目標を効率的にクリアするためのエージェント連携に強みがあります。たとえば、コード生成、ドキュメント整理、タスク自動化といった場面で威力を発揮します。一方でTinyTroupeは、人間社会を模した「多様なペルソナ」が互いに意思決定や議論を行うシナリオを重視しており、純粋な問題解決以上に、「人々がどのような視点やバイアスを持ち、どのようにアイデアを交換するのか」といった社会学的・マーケティング的な洞察を得ることに強みがあります。また、TinyTroupeは合成データ生成や仮想フォーカスグループなど、実ビジネスの現場で試行錯誤されるコミュニケーションを事前に再現・分析する用途に最適です。つまり、他のフレームワークが「目的達成のためのエージェント連携」に重点を置くのに対し、TinyTroupeは「多面的な社会的・ビジネス的相互作用からインサイトを抽出する」点に特化しているといえます。
留意事項
TinyTroupeは現在開発段階にある実験的プロジェクトであり、機能やAPIが頻繁に更新される可能性があります。そのため、ユーザーにはGitHubリポジトリに記載の最新ドキュメントやリリースノートを確認しながら利用することが推奨されます。
また、本ツールは研究およびシミュレーション目的で設計されており、生成された出力を商用利用する際には法的および倫理的な責任が利用者に帰属します。具体的な制約や注意事項については、GitHubリポジトリに掲載されているLEGAL DISCLAIMERを必ずご確認ください。
まとめ
TinyTroupeは、LLMベースのマルチエージェントシミュレーションを用いて、人間的な振る舞いや意思決定プロセスを仮想的に再現します。これにより、実際の顧客インタビューやテストマーケティングに先立って、アイデア検証や戦略評価を安価かつ迅速に行うことが可能です。
特に以下の点で価値があります:
- 実際のユーザーテストや市場調査の前段階での洞察獲得
- 多様なペルソナからのフィードバック収集
- コスト効率の高いシミュレーション実施
- プログラマブルな柔軟性
本記事で示した「product_brainstorming」の例では、Microsoft Word向けの新機能アイデア創出が仮想的なフォーカスグループで行われ、その結果を整理可能であることを示しました。
まだ開発段階のプロジェクトではありますが、ビジネス現場での実践的な活用が期待できるツールとなっています。TinyTroupeを活用し、複雑な社会的・ビジネス的相互作用を事前検証することで、より的確で効果的なビジネス戦略・製品開発につなげてみてください。
参考リンク
- TinyTroupe GitHub Repository
- Azure OpenAI Service Documentation
- AIエージェント同士で会話ができるTinyTroupe!Microsoftの新しいPythonライブラリ徹底解説
【免責事項】
本記事の情報は執筆時点(2024年12月8日)のものです。本記事は、公開されている情報に基づいて作成されていますが、誤りが含まれている可能性もあります。内容の正確性については、読者ご自身の責任で判断をお願いいたします。AI技術は急速に進化しており、製品の仕様、価格、可用性などが予告なく変更される可能性があります。また、本記事の内容は一般的な情報提供を目的としており、専門的なアドバイスとしては意図していません。適切な専門家にご相談ください。
Discussion