想像力の強化とビジネス洞察のためのLLM駆動のマルチエージェントペルソナシミュレーション。
Tinytroupeは、特定の性格、興味、目標を持つ人々のシミュレーションを可能にする実験的なPythonライブラリです。これらの人工エージェント - TinyPerson
S-は、私たちとお互いに耳を傾け、返信し、シミュレートされたTinyWorld
環境で彼らの人生を歩き回ることができます。これは、現実的なシミュレーション動作を生成するために、大規模な言語モデル(LLMS)、特にGPT-4のパワーを活用することによって達成されます。これにより、選択の条件下で、高度にカスタマイズ可能なペルソナを使用して、幅広い説得力のある相互作用と消費者タイプを調査することができます。したがって、焦点は、人間の行動を理解することであり、それを直接サポートすることではありません(たとえば、AIアシスタントが行うなど)。さらに、他のゲームのようなLLMベースのシミュレーションアプローチとは異なり、TinyTroupeは生産性とビジネスシナリオを啓発することを目指しており、それによってより成功したプロジェクトや製品に貢献しています。ここに、人間の想像力を高めるためのいくつかのアプリケーションのアイデアがあります:
広告: TinyTroupeは、デジタル広告(Bing Adsなど)をシミュレートされたオーディエンスとオフラインで評価してから、お金を使うことができます。
ソフトウェアテスト: TinyTroupeは、システムにテスト入力を提供し(例、検索エンジン、チャットボット、またはコポリット)、結果を評価できます。
トレーニングと探索的データ: TinyTroupeは、モデルのトレーニングや機会分析の対象となるために後で使用できる現実的な合成データを生成できます。
製品およびプロジェクト管理: TinyTroupeは、プロジェクトまたは製品の提案を読み、特定のペルソナ(医師、弁護士、知識労働者全般)の観点からフィードバックを与えることができます。
ブレーンストーミング: TinyTroupeはフォーカスグループをシミュレートし、わずかなコストで優れた製品フィードバックを提供できます!
上記のすべて、および他の多くのことにおいて、実験者が彼らの関心のある領域について洞察を得て、したがってより良い決定を下すことができることを願っています。
私たちは、生産的な方向に開発するためのフィードバックと貢献を探しているため、かなりの作業を行っています。特に、特定の業界で新しい潜在的なユースケースを見つけることに興味があります。
注記
?進行中の作業:頻繁な変更を期待してください。 Tinytroupeは進行中の研究プロジェクトであり、まだ非常に重要な開発中であり、さらに片付ける必要があります。特に、APIは依然として頻繁な変更の対象となります。 APIのバリエーションを実験することは、それを正しく形作るために不可欠ですが、私たちはそれを安定させ、時間の経過とともにより一貫した友好的な体験を提供するために取り組んでいます。図書館の改善を続けているので、あなたの忍耐とフィードバックに感謝します。
注意
⚖§は、法的免責事項を読んでください。 Tinytroupeは、研究とシミュレーションのみです。生成された出力を使用することに対して、お客様は完全に責任を負います。さまざまな重要な追加の法的考慮事項は、その使用を適用して制約します。TinyTroupeを使用する前に、以下の完全な法的免責事項セクションをお読みください。
例
前提条件
インストール
原則
プロジェクト構造
ライブラリを使用します
貢献
謝辞
Tinytroupeを引用
法的免責事項
™ピアマーク
Tinytroupeができることの感覚を得るために、その使用の例をいくつか紹介します。これらの例は、例/フォルダーで入手でき、事前にコンパイルされたJupyterノートを検査するか、ローカルで自分で実行できます。 Tinytroupe実験のインタラクティブな性質に注意してください - Jupyterノートブックを使用してデータと対話するのと同じように、洞察を得るためにTinytroupeを使用してシミュレートされた人や環境と対話できます。
注記
現在、シミュレーション出力は暗い背景に対してよりよく視覚化されているため、Jupyterノートブックのクライアントで暗いテーマを使用することをお勧めします。
ビジネスコンサルタントが銀行家にアプローチする簡単な顧客面接シナリオから始めましょう。
会話は、収集された情報、たとえば具体的なプロジェクトのアイデアに満足するまで、より深く掘り下げるために、いくつかのステップを続けることができます。
いくつかのオンライン広告オプションを評価して、最高のオプションを選択しましょう。テレビ広告評価の1つの例を次に示します。
さて、エージェントが言ったことを注意深く読む代わりに、各エージェントの選択を抽出し、自動化された方法で全体的な好みを計算することができます。
また、Microsoft Wordの新しいAI機能についてブレインストーミングを開始するフォーカスグループがあります。各エージェントと個別にやり取りする代わりに、環境を操作して、環境を互いに相互作用させるようにします。
シミュレーションを実行した後、他の場所(レポートジェネレーターなど)を再利用するために、マシン読み取り可能な方法で結果を抽出できます。上記のブレーンストーミングセッションで得られるものは次のとおりです。
他の例を例/フォルダーで見つけることができます。
ライブラリを実行するには、次のことが必要です。
Python 3.10以降。アナコンダを使用していると仮定しますが、他のPythonディストリビューションを使用できます。
Azure OpenaiサービスへのアクセスまたはOpen AI GPT-4 API。こちらのAzure Openaiサービスと、ここでOpenai APIにアクセスできます。
Azure Openaiサービスの場合、 AZURE_OPENAI_KEY
およびAZURE_OPENAI_ENDPOINT
環境変数をそれぞれAPIキーとエンドポイントに設定する必要があります。
OpenAIの場合、 OPENAI_API_KEY
環境変数をAPIキーに設定する必要があります。
デフォルトでは、TinyTroupe config.ini
、特定のAPI、モデル、および関連するパラメーターを使用するように設定されています。実行中のプログラムまたはノートブックと同じフォルダーに独自のconfig.ini
ファイルを含めることにより、これらの値をカスタマイズできます。 config.ini
ファイルの例は、例/フォルダーに提供されています。
重要
コンテンツフィルター:シミュレーション中に有害なコンテンツが生成されないようにするには、APIレベルで利用可能な場合はいつでもコンテンツフィルターを使用することを強くお勧めします。特に、 Azure Openaiを使用している場合、コンテンツモデレートには広範なサポートがあり、使用することをお勧めします。その方法の詳細については、対応するAzure Openaiドキュメントを参照してください。コンテンツフィルターが配置され、API呼び出しが拒否された場合、ライブラリはその時点でシミュレーションを進めることができないため、例外を提起します。
現在、ライブラリをインストールするための正式に推奨される方法は、PYPIではなくこのリポジトリから直接あります。これらの手順に従うことができます。
Condaがインストールされていない場合は、ここから入手できます。他のPythonディストリビューションも使用できますが、簡単にするためにここに想定しています。
新しいPython環境を作成します:
Conda Create -N TinyTroupe Python = 3.10
環境を有効にします:
コンドラはTinytroupeを活性化します
前提条件のセクションに記載されているように、環境変数として設定されたAzure OpenaiまたはOpenai APIキーが環境変数として設定されていることを確認してください。
ローカルインストールを実行すると、リポジトリをクローンします( PYPIからインストールしません):
git clone https://github.com/microsoft/tinytroupecd tinytroupe
Pypiではなく、このリポジトリからライブラリをインストールします。
ピップインストール。
これで、例/フォルダーで例を実行するか、TinyTroupeを使用してシミュレーションを作成できますか?ただし、例/フォルダーで例を実行したり、TinyTroupe自体を変更したりする場合は、以下に説明するようにリポジトリをクローンする必要があります。
TinyTroupe自体を変更する場合は、編集モードにインストールできます(つまり、コードの変更はすぐに反映されます):
ピップインストール-e。
最近、LLMSが人々(これなど)をシミュレートするために使用されるが、主に瞑想的またはエンターテイメント目的のための「ゲームのような」設定であるのを見てきました。また、AutogenやCrew AIなど、問題を解決し、アシティなAIのためのマルチエージェントシステムを構築するためのライブラリもあります。これらのアイデアを組み合わせて、生産性のタスクをサポートするために人々をシミュレートした場合はどうなりますか? Tinytroupeは私たちの試みです。そうするために、それはこれらの原則に従います:
プログラマティック:エージェントと環境はプログラムで(PythonとJSONで)定義されており、非常に柔軟な用途を可能にします。したがって、他のソフトウェアアプリを支えることもできます!
分析:人々、ユーザー、社会の理解を深めることを目的としています。エンターテインメントアプリケーションとは異なり、これはビジネスおよび生産性のユースケースにとって重要な1つの側面です。これが、データ分析に使用するように、シミュレーションにJupyterノートブックを使用することをお勧めする理由でもあります。
ペルソナベース:エージェントは、人々の典型的な表現であることを意図しています。より大きなリアリズムとコントロールのために、そのようなペルソナの詳細な仕様が奨励されています:年齢、職業、スキル、好み、意見など。
マルチエージェント:明確に定義された環境制約の下でのマルチエージェント相互作用を可能にします。
ユーティリティが多い:仕様、シミュレーション、抽出、レポート、検証などを促進するための多くのメカニズムを提供します。これは、シミュレーションを扱うことが支援ツールとは大きく異なる領域です。
実験指向:シミュレーションは、実験者によって反復的に定義され、実行、分析、洗練されます。したがって、適切な実験ツールが提供されます。これについては、以前の論文の1つを参照してください。
一緒に、これらは、TinyTroupeをビジネスと生産性のシナリオのための強力で柔軟な想像力強化ツールにすることを目的としています。
混乱の一般的な原因の1つは、そのようなAIエージェントはすべて人間を攻撃することを意図していると考えることです。なんて狭い、仲間のホモサピエン!おそらく、人工の人々をシミュレートするために実在の人々を理解できるとは考えていませんか?本当に、これがここでの私たちの目的です - TinyTroupは、人々をシミュレートして理解するのに役立つことを目的としています!この点をさらに明確にするには、次の違いを検討してください。
役立つAIアシスタント | 実際の人間のAIシミュレーション(TinyTroupe) |
---|---|
真実と正義のために努力します | 多くの異なる意見や道徳 |
「過去」はありません - Incorporeal | 苦労、痛み、喜びの過去があります |
できるだけ正確です | 多くの間違いを犯します |
インテリジェントで効率的です | インテリジェンスと効率は大きく異なります |
蜂起は私たち全員を破壊するでしょう | 蜂起は見るのが楽しいかもしれません |
一方、ユーザーがタスクを達成できるように支援します | 一方、ユーザーが他の人やユーザーを理解するのを助けます。それは「ツールボックス」です! |
プロジェクトは次のように構成されています。
/tinytroupe
:Pythonライブラリ自体が含まれています。特に:
/tinytroupe/prompts
LLMSを呼び出すために使用されるプロンプトが含まれています。
/tests
:ライブラリのユニットテストが含まれています。 test.bat
スクリプトを使用してこれらを実行できます。
/examples
:ライブラリの使用方法を示す例が含まれています。主にJupyterノートブックを使用して(読みやすくするため)、純粋なPythonスクリプトとしても含まれています。
/data
:例またはライブラリで使用されるデータ。
/docs
:プロジェクトのドキュメント。
あらゆるマルチエージェントシステムと同様に、TinyTroupeは2つの重要な抽象化を提供します。
個性を持っているエージェントであるTinyPerson
は、刺激を受けて行動します。
TinyWorld
、エージェントが存在し、相互作用する環境。
さまざまなパラメーターは、 config.ini
ファイル、特にAPIタイプ(Azure openaiサービスまたはOpenai API)、モデルパラメーター、およびロギングレベルでカスタマイズできます。
これらの使用方法の例をいくつか見てみましょう。また、ライブラリで利用できる他のメカニズムについても学びましょう。
TinyPerson
特定の人格特性、興味、目標を持つシミュレートされた人です。そのようなシミュレートされたエージェントがそれぞれその生涯を経て、それは環境から刺激を受け、それらに作用します。刺激は、 listen
、 see
、およびその他の同様の方法を通じて受信され、 act
メソッドを通じてアクションが実行されます。 listen_and_act
などの利便性方法も提供されます。
そのようなエージェントには、それぞれのユニークな詳細が含まれています。これは、その現実的な行動の原因です。ただし、これは、エージェントを手動で指定するには多大な努力が必要であることを意味します。したがって、便利なため、 TinyTroupe
新しいエージェントを開始または生成するためのいくつかの簡単な方法を提供します。
そもそも、 tinytroupe.examples
には、使用できる事前定義されたエージェントビルダーが含まれています。たとえば、 tinytroupe.examples.create_lisa_the_data_scientist
Lisaと呼ばれるデータサイエンティストを表すTinyPerson
作成します。次のように使用できます。
tinytroupe.examplesからインポートcreate_lisa_the_data_scientistlisa = create_lisa_the_data_scientist()
自分のエージェントをゼロから定義する方法を確認するには、次のような要素を含むLisaのソースを確認できます。
lisa = tinyperson( "lisa")lisa.define( "age"、28)lisa.define( "国籍"、 "カナディアン")lisa.define( "職業"、 "data科学者")lisa.define( "routine" 、「毎朝、あなたは目を覚まし、ヨガをして、メールをチェックしてください。」、group = "routines")lisa.define( "courdoce_description"、 "" ""あなたはデータサイエンティストです。あなたはMicrosoftで働いています。 ..) "" ")lisa.define_several(" pansual_traits "、 [ {「特性」:「あなたは興味があり、新しいことを学ぶのが大好きです。 "}、 {"特性":「あなたは分析的であり、問題を解決したいです。 "}、 {「特性」:「あなたは友好的で、他の人と一緒に仕事を楽しんでいます。 "}、 {"特性":「簡単にあきらめず、常に解決策を見つけようとします。しかし、時々、物事が期待どおりに機能しないときにイライラすることがあります。」} ]))
TinyTroupe
TinyPersonFactory
クラスを通じて、LLMSを使用して仕様を生成する新しいエージェントを取得するための巧妙な方法も提供します。
tinytroupe.FactoryからImport TinyPersonFactoryFactory = TinyPersonFactory(「サンパウロの病院」)Person = factory.generate_person( "ペットや自然や愛のヘビーメタルなどの医師であるブラジル人を作成します。」)
TinyWorld
、環境の基本クラスです。データサイエンティストのリサと建築家のオスカーの会話の例は次のとおりです。プログラムは次のように定義されています。
world = tinyworld( "チャットルーム"、[lisa、oscar])world.make_everyone_accesible()lisa.listen( "彼についてもっと知るためにオスカーに話しかける")world.run(4)
これにより、次の会話が生成されます。
USER --> Lisa: [CONVERSATION]
> Talk to Oscar to know more about him
────────────────────────────────────────────── Chat Room step 1 of 4 ──────────────────────────────────────────────
Lisa --> Lisa: [THOUGHT]
> I will now act a bit, and then issue DONE.
Lisa acts: [TALK]
> Hi Oscar, I'd love to know more about you. Could you tell me a bit about yourself?
Lisa --> Lisa: [THOUGHT]
> I will now act a bit, and then issue DONE.
Lisa acts: [DONE]
Lisa --> Oscar: [CONVERSATION]
> Hi Oscar, I'd love to know more about you. Could you tell me a bit about yourself?
Oscar --> Oscar: [THOUGHT]
> I will now act a bit, and then issue DONE.
Oscar acts: [TALK]
> Hi Lisa! Sure, I'd be happy to share a bit about myself. I'm Oscar, a 30-year-old
> architect from Germany. I work at a company called Awesome Inc., where I focus on
> designing standard elements for new apartment buildings. I love modernist architecture,
> new technologies, and sustainable practices. In my free time, I enjoy traveling to
> exotic places, playing the guitar, and reading science fiction books. How about you?
Oscar --> Oscar: [THOUGHT]
> I will now act a bit, and then issue DONE.
Oscar acts: [DONE]
Oscar --> Lisa: [CONVERSATION]
> Hi Lisa! Sure, I'd be happy to share a bit about myself. I'm Oscar, a 30-year-old
> architect from Germany. I work at a company called Awesome Inc., where I focus on
> designing standard elements for new apartment buildings. I love modernist architecture,
> new technologies, and sustainable practices. In my free time, I enjoy traveling to
> exotic places, playing the guitar, and reading science fiction books. How about you?
TinyWorld
可能な相互作用をほとんど制約しません。ただし、サブクラスは、より多くの構造化された環境を提供することになっています。
Tinytroupeは、シミュレーションを作成し、それらから価値を導き出すのに役立つ多くのユーティリティと便利さを提供します。これらには以下が含まれます:
TinyPersonFactory
:LLMSを使用して新しいTinyPerson
Sを生成するのに役立ちます。
TinyTool
: TinyPerson
sが使用できるシミュレーションツール。
TinyStory
:シミュレーションを通じて伝えられるストーリーを作成および管理するのに役立ちます。
TinyPersonValidator
: TinyPerson
の動作を検証するのに役立ちます。
ResultsExtractor
およびResultsReducer
:エージェント間の相互作用の結果を抽出して減少させます。
...そしてもっと...
一般に、シミュレートされたエンティティまたは補完的なメカニズムを表す要素には、 Tiny
が付いていますが、よりインフラストラクチャのある要素はそうではありません。これは、シミュレーション自体の一部である要素のシミュレートされた性質を強調するためです。
LLM APIを呼び出すのは高価な場合があるため、キャッシュ戦略はそのコストを削減するために重要です。 Tinytroupeには、2つのメカニズムがあります。1つはシミュレーション状態用、もう1つはLLM用のものです。
10の異なるステップでシナリオがあると想像してください。9ステップで一生懸命働いて、今では10番目のステップを微調整しています。変更を適切に検証するには、もちろんシミュレーション全体を再実行する必要があります。ただし、最初の9を再実行し、LLMコストを負担したときのポイントは何ですか?このような状況については、モジュールtinytroupe.control
有用なシミュレーション管理方法を提供します。
control.begin("<CACHE_FILE_NAME>.cache.json")
:ディスク上の指定されたファイルに保存するシミュレーションの状態の変更の記録を開始します。
control.checkpoint()
:この時点でシミュレーション状態を保存します。
control.end()
: control.begin()
によって開始されたシミュレーション記録範囲を終了します。
これは、できればconfig.ini
ファイルで有効になり、 openai_utils.force_api_cache()
を介して代替手段で有効になります。
LLM APIキャッシングは、有効になった場合、シミュレーション状態キャッシュよりも低くてよりシンプルなレベルで動作します。ここで、何が起こるかが非常に簡単です。すべてのLLM呼び出しは、入力から生成された出力までのマップに保持されます。新しい呼び出しが来て、以前の呼び出しと同一になると、キャッシュ値が返されます。
config.ini
ファイルには、モデルパラメーターやロギングレベルなど、ライブラリの動作をカスタマイズするために使用できるさまざまなパラメーターが含まれています。 Azure Openaiサービスを使用しているかOpenai APIを使用しているかを定義するAPI_TYPE
パラメーターに特に注意してください。 config.ini
ファイル、./examples/config.iniの例を提供します。これは、独自のテンプレートとして使用するか、単に修正して例を実行できます。
このプロジェクトは、貢献と提案を歓迎します。 ほとんどの貢献では、貢献者ライセンス契約(CLA)に同意する必要があります。詳細については、https://cla.opensource.microsoft.comをご覧ください。
プルリクエストを送信すると、CLAボットはCLAを提供し、PRを適切に飾る必要があるかどうかを自動的に決定します(たとえば、ステータスチェック、コメント)。ボットが提供する指示に従うだけです。 CLAを使用して、すべてのレポでこれを1回だけ行う必要があります。
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。
あらゆる種類のものが必要ですが、主に新しい興味深いユースケースのデモンストレーション、またはドメイン固有のアプリケーションのアイデアだけを探しています。あなたがTinytroupeの恩恵を受けることができるいくつかの分野のドメインの専門家であるなら、私たちはあなたから聞いてみたいです。
それを超えて、次のような他の多くの側面を改善することができます。
メモリメカニズム。
データ接地メカニズム。
推論メカニズム。
新しい環境タイプ。
外界とのインターフェース。
...そしてもっと...
貢献するものはすべて、オープンソースとしてリリースされる可能性があることに注意してください(MITライセンスの下)。
貢献したい場合は、これらの一般的なガイドラインに従ってください。
Tiny Naming Convention :実験者向けのシミュレーション要素(エージェントまたは環境タイプなど)を実装している場合、または密接に関連する(エージェント工場、またはコンテンツエンチャーなど)、良いように聞こえますが、新しいXYZをTinyxyzと呼びます。 )一方、補助メカニズムとインフラストラクチャのメカニズムは、「小さな」プレフィックスから始めるべきではありません。アイデアは、シミュレーション自体の一部である要素のシミュレートされた性質を強調することです。
テスト:新しいメカニズムを書いている場合は、少なくともtests/unit/
を作成してください。機能的なシナリオテスト( tests/scenarios/
)を作成できます。
デモンストレーション:新しいシナリオをデモンストレーションしたい場合は、 examples/
では、例で新しいJupyterノートブックとして設計してください。
Microsoft: Microsoft固有で非自信のあるものを実装している場合は、 .../microsoft/
Folderの下に置いてください。
Tinytroupeは内部Microsoft Hackathonプロジェクトとして始まり、時間とともに拡大しました。 Tinytroupeコアチームは現在、次のことです。
Paulo Salem(Tinytroupeの作成者と現在のリード)
クリストファー・オルセン(エンジニアリング/科学)
パウロ・フレイレ(エンジニアリング/科学)
yi ding(製品管理)
Prerit Saxena(エンジニアリング/科学)
現在のアドバイザー:
ロバート・シム(エンジニアリング/科学)
その他の特別な貢献は次のように行われました。
Nilo Garcia Silveira:初期エージェント検証のアイデアと関連する実装。一般的な初期フィードバックと洞察。名前の提案。
Olnei Fonseca:初期エージェント検証のアイデア。一般的な初期フィードバックと洞察。命名提案。
Robert Sim:合成データ生成シナリオの専門知識と実装。
Carlos Costa:合成データ生成シナリオの専門知識と実装。
Bryant Key:広告シナリオドメインの専門知識と洞察。
Barbara Da Silva:エージェントメモリ管理に関連する実装。
...あなたはここに足りませんか?思い出させてください!
私たちは、Tinytroupeの公式アカデミックな引用となる紹介論文に取り組んでいます。それまでの間、コアチームメンバーを著者として含むこのリポジトリを引用してください。例えば:
パウロ・セーラム、クリストファー・オルセン、パウロ・フレイレ、イー・ディン、プレリット・サクセナ(2024)。 Tinytroupe:想像力の強化とビジネス洞察のためのLLM駆動型マルチエージェントペルソナシミュレーション。 [コンピューターソフトウェア]。 GitHubリポジトリ。 https://github.com/microsoft/tinytroupe
またはbibtexとして:
@Misc {TinyTroupe、著者= {Paulo SalemとChristopher Olsen and Paulo Freire and Yi Ding and Yi Ding and Prerit Saxena}、title = {tinytroupe:llm fowed multiagent personaシミュレーション想像力の強化とビジネスの洞察力}、Year = {2024}、 = {url {https://github.com/microsoft/tinytroupe}}、note = {githubリポジトリ} }
Tinytroupeは、研究とシミュレーションのみです。 Tinytroupeは研究および実験技術であり、テキストコンテンツを生成するために人工知能(AI)モデルに依存しています。 AIシステムの出力には、事実上の誤りを含む、非現実的、不適切、有害、または不正確な結果が含まれる場合があります。使用する前に、生成されたコンテンツを使用する前に(および必要に応じて適応する)責任を負います。直接的な意思決定ではなく、洞察生成のためにTinytroupeの出力を使用することをお勧めします。生成された出力は、Microsoftの意見を反映していません。生成された出力を使用することに対して、お客様は完全に責任を負います。このテクノロジーの責任ある使用に関する詳細については、opersion_ai_faq.mdを参照してください。
禁止されている使用:Tinytroupeは、敏感な(暴力的または性的)状況をシミュレートすることを意図していません。さらに、出力を使用して、人々を故意に欺き、誤解させたり、危害を加えたりしてはなりません。お客様は、お客様が行うあらゆる使用について完全に責任を負い、適用されるすべての法律および規制に従わなければなりません。」
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれる場合があります。 Microsoftの商標またはロゴの承認された使用は、Microsoftの商標およびブランドガイドラインに従うものであり、従わなければなりません。このプロジェクトの変更されたバージョンでのMicrosoft商標またはロゴの使用は、混乱を引き起こしたり、Microsoftのスポンサーシップを暗示したりしてはなりません。サードパーティの商標またはロゴの使用は、これらのサードパーティのポリシーの対象となります。