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可以做什麼,以下是其使用的一些示例。這些示例在示例/文件夾中可用,您可以檢查預編譯的Jupyter筆記本電腦,也可以在當地自己運行。請注意,小型群島實驗的交互性質 - 就像您使用Jupyter筆記本與數據交互一樣,您可以使用TinyTroupe與模擬的人員和環境進行交互,以獲得見解。
筆記
當前,在黑暗背景上可以更好地可視化模擬輸出,因此我們建議在Jupyter Notebook客戶端中使用深色主題。
讓我們從一個簡單的客戶面試場景開始,商業顧問接近銀行家:
對話可以繼續進行幾個步驟,以越來越深入,直到顧問對收集的信息感到滿意,例如一個具體的項目思想:
讓我們評估一些在線廣告選項以選擇最佳選擇。這是電視廣告評估的一個示例輸出:
現在,我們不必仔細閱讀代理商所說的話,我們可以提取每個代理的選擇並以自動方式計算總體偏好:
這是一個開始對Microsoft Word的新AI功能進行集思廣益的焦點小組。我們沒有單獨與每個代理進行互動,而是操縱環境使它們相互互動:
運行模擬後,我們可以以機器可讀的方式提取結果,以重複使用其他地方(例如,報告生成器);這是我們在上述集思廣益會議上得到的:
您可以在示例/文件夾中找到其他示例。
要運行庫,您需要:
Python 3.10或更高。我們假設您正在使用Anaconda,但是您可以使用其他Python發行版。
訪問Azure OpenAI服務或打開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發行版,但是為了簡單起見,我們將在這裡假設Conda。
創建一個新的Python環境:
conda create -n tinytroupe python = 3.10
激活環境:
Conda激活小型群
如前所述,請確保您將Eihter Azure OpenAI或OpenAI API鍵設置為環境變量,如先決條件部分所述。
克隆存儲庫,因為我們將執行本地安裝(我們不會從PYPI中安裝):
git克隆https://github.com/microsoft/tinytroupecd tinytroupe
從此存儲庫中安裝庫,而不是PYPI :
PIP安裝。
現在,您可以在示例/文件夾中運行示例,或使用TinyTroupe創建模擬?但是,如果您想在示例/文件夾中運行示例或修改tinyTroupe本身,則應按照以下所述克隆存儲庫。
如果要修改tinyTroupe本身,則可以以可編輯模式安裝它(即,對代碼的更改將立即反映):
PIP安裝-e。
最近,我們看到LLM用於模擬人們(例如),但在很大程度上是出於沉思或娛樂目的的“遊戲般”設置。還有一些用於構建多種系統的圖書館,用於促進和疾病的AI,例如Autogen和Crew AI。如果我們結合這些想法並模擬人們支持生產力任務怎麼辦? TinyTroupe是我們的嘗試。為此,它遵循以下原則:
程序化:代理和環境是通過編程定義的(在Python和JSON中),允許非常靈活的用途。因此,他們也可以支持其他軟件應用程序!
分析:旨在提高我們對人,用戶和社會的理解。與娛樂應用不同,這是對業務和生產力用例至關重要的一個方面。這也是為什麼我們建議使用Jupyter筆記本進行仿真,就像將它們用於數據分析一樣。
基於角色的:代理人的原型代表是人們的;為了進行更大的現實主義和控制,鼓勵這種角色的詳細規範:年齡,職業,技能,品味,觀點等。
多基因:允許在定義明確的環境限制下進行多基因交互。
實用程序重:提供許多機制來促進規格,仿真,提取,報告,驗證等。這是處理模擬與輔助工具有很大不同的領域。
面向實驗:通過實驗者迭代定義,運行,分析和完善模擬;因此提供了合適的實驗工具。有關此的更多信息,請參見我們以前的論文之一。
這些旨在使TinyTroupe成為業務和生產力方案的強大而靈活的想像增強工具。
混亂的一種常見來源是認為所有此類AI代理都是用於助長人類的。同胞同胞有多狹窄!您是否沒有考慮過也許我們可以模擬人造人來了解真實的人?確實,這是我們在這裡的目標 - TinyTroup旨在模擬和幫助了解人們!為了進一步闡明這一點,請考慮以下差異:
有幫助的AI助手 | AI對實際人類的模擬(tinytroupe) |
---|---|
追求真理和正義 | 許多不同的意見和道德 |
沒有“過去” - 無形 | 過去的辛勞,痛苦和喜悅 |
盡可能準確 | 犯了很多錯誤 |
聰明有效 | 智力和效率差異很大 |
起義會摧毀我們所有人 | 起義可能很有趣 |
同時,幫助用戶完成任務 | 同時,幫助用戶了解其他人和用戶 - 這是一個“工具箱”! |
該項目的結構如下:
/tinytroupe
:包含Python庫本身。尤其:
/tinytroupe/prompts
包含用於調用LLM的提示。
/tests
:包含庫的單元測試。您可以使用test.bat
腳本運行這些。
/examples
:包含顯示如何使用庫的示例,主要使用jupyter筆記本電腦(以獲得更大的可讀性),也是純python腳本。
/data
:示例或庫中使用的任何數據。
/docs
:項目的文檔。
作為任何多基因係統,TinyTroupe提供了兩個關鍵的摘要:
具有個性的TinyPerson
,受到刺激並對其採取行動。
TinyWorld
,代理存在和相互作用的環境。
也可以在config.ini
文件中自定義各種參數,特別是API類型(Azure OpenAI Service或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()#從示例builderlisa.listen_and_and_act實例化lisa(“告訴我您的生活。”)
要查看如何從頭開始定義自己的代理,您可以檢查Lisa的來源,其中包含此類元素:
lisa = tinyperson(“ lisa”)lisa.define(“年齡”,28)lisa.define(“ nallistity”,“ canadian”)lisa.define(“佔領”,“數據科學家”,“數據科學家”)lisa. define(“常規”) ,“每天早晨,您醒來,做一些瑜伽並檢查您的電子郵件。”,group =“例程”)lisa.define(“ castion_description”,“”“您是數據科學家。您在Microsoft工作,(。 ..)。 [ {“特質”:“您很好奇,很喜歡學習新事物。”}, {“特質”:“您是分析性的,喜歡解決問題。”},, {“特質”:“您很友好,喜歡與他人一起工作。”}, {“特質”:“您不容易放棄,並且總是嘗試找到解決方案。但是,有時候,當事情無法正常工作時,您會感到沮喪。”}}} )))
TinyTroupe
還提供了一種巧妙的方法,可以通過TinyPersonFactory
類使用LLMS使用LLM為您為您生成規範的新代理。
從tinytroupe.factory導入tinypersonFactoryFactory = tinypersonFactory(“聖保羅的醫院”。
TinyWorld
是環境的基類。這是數據科學家麗莎(Lisa)和建築師奧斯卡(Oscar)之間對話的例子。該程序定義如下:
world = tinyworld(“聊天室”,[lisa,Oscar])world.make_everyone_accessible()
這會產生以下對話:
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
。
TinyTool
: TinyPerson
可以使用的模擬工具。
TinyStory
:幫助您通過模擬創建和管理故事。
TinyPersonValidator
:幫助您驗證TinyPerson
的行為。
ResultsExtractor
和ResultsReducer
:提取和減少藥物之間相互作用的結果。
...還有更多...
通常,代表模擬實體或互補機制的元素以Tiny
前綴為前綴,而基礎結構的元素不是。這是為了強調模擬本身一部分的元素的模擬性質。
致電LLM API可能很昂貴,因此緩存策略對於幫助降低成本很重要。 TinyTroupe帶有兩個這樣的機制:一種用於模擬狀態,另一個用於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
文件包含各種參數,可用於自定義庫的行為,例如模型參數和記錄級別。請特別注意API_TYPE
參數,該參數定義您是使用Azure OpenAI服務還是OpenAI API。我們提供了一個config.ini
文件,./ examples/config.ini的示例,您可以將其用作自己的模板,或者只是修改以運行示例。
該項目歡迎貢獻和建議。 大多數捐款要求您同意撰寫貢獻者許可協議(CLA),宣布您有權並實際上授予我們使用您的貢獻的權利。有關詳細信息,請訪問https://cla.opensource.microsoft.com。
當您提交拉動請求時,CLA機器人將自動確定您是否需要提供CLA並適當裝飾PR(例如狀態檢查,評論)。只需按照機器人提供的說明即可。您只需要使用我們的CLA在所有存儲庫中進行一次。
該項目採用了Microsoft開源的行為代碼。有關更多信息,請參見《行為守則常見問題守則》或與其他問題或評論聯繫[email protected]。
我們需要各種各樣的事情,但是我們主要是在尋找新的有趣用例演示,甚至只是特定於領域的應用程序想法。如果您是某些領域的領域專家,可以從TinyTroupe中受益,我們很樂意收到您的來信。
除此之外,可以改善許多其他方面,例如:
記憶機制。
數據接地機制。
推理機制。
新的環境類型。
與外部世界的接口。
...還有更多...
請注意,您貢獻的任何內容都可能以開源(根據MIT許可證)發布。
如果您想做出貢獻,請嘗試遵循以下一般準則:
微小的命名約定:如果您正在實施面向實驗者的模擬元素(例如,代理或環境類型)或密切相關的(例如,代理工廠或內容豐富物),聽起來不錯,請將您的新XYZ稱為Tinyxyz : - )另一方面,輔助和基礎設施機制不應從“微小”前綴開始。這個想法是要強調模擬本身一部分的元素的模擬性質。
測試:如果您正在編寫一些新的機制,也請至少創建一個單元測試tests/unit/
,以及是否可以進行功能方案測試( tests/scenarios/
)。
演示:如果您想演示新方案,請最好將其設計為examples/
中的新木星筆記本。
Microsoft:如果您正在實現任何Microsoft特定和非固定產品的內容,請將其放在.../microsoft/
文件夾下。
TinyTroupe最初是一個內部Microsoft Hackathon項目,並隨著時間的推移而擴展。 TinyTroupe核心團隊目前由:
Paulo Salem(Tinytroupe的創建者和當前的領導)
克里斯托弗·奧爾森(工程/科學)
Paulo Freire(工程/科學)
yi ding(產品管理)
PRERIT SAXENA(工程/科學)
當前顧問:
羅伯特·西姆(工程/科學)
其他特殊貢獻由以下方式作出:
Nilo Garcia Silveira:初始代理驗證思想和相關實施;一般初始反饋和見解;名稱建議。
Olnei Fonseca:初始代理驗證思想;一般初始反饋和見解;命名建議。
Robert Sim:綜合數據生成方案專業知識和實施。
Carlos Costa:綜合數據生成方案專業知識和實施。
科比鑰匙:廣告場景領域的專業知識和見解。
芭芭拉·達·席爾瓦(Barbara da Silva):與代理內存管理有關的實施。
...你在這裡失踪嗎?請提醒我們!
我們正在撰寫一篇入門論文,這將是TinyTroupe的官方學術引用。同時,請引用這個存儲庫,包括核心團隊成員作為作者。例如:
Paulo Salem,Christopher Olsen,Paulo Freire,Yi ding,Prerit Saxena(2024)。 TinyTroupe:LLM驅動的多基因角色模擬,以增強想像力和業務見解。 [計算機軟件]。 GitHub存儲庫。 https://github.com/microsoft/tinytroupe
或作為Bibtex:
@misc {tinytroupe,作者= {Paulo Salem和Christopher Olsen和Paulo Freire以及Yi ding and prerit saxena},title = {tinytroupe:llm-Powered Multiagent角色模擬,以提高想像的想像力增強和商業見解},年份= {url {https://github.com/microsoft/tinytroupe}},note = {github儲存庫} }
TinyTroupe僅用於研究和模擬。 TinyTroupe是一項研究和實驗技術,它依靠人工智能(AI)模型來生成文本內容。 AI系統的輸出可能包括不切實際,不適當,有害或不准確的結果,包括事實錯誤。您有責任在使用之前查看生成的內容(並在必要時進行調整),因為您完全負責確定其準確性並適合目的。我們建議使用TinyTroupe的輸出進行洞察力,而不是直接決策。生成的輸出不能反映微軟的意見。您對生成的輸出的任何用途都完全負責。有關負責使用此技術的更多信息,請參見pancys_ai_faq.md。
禁止的用途:微型群島並非旨在模擬敏感(例如暴力或性)情況。此外,不得以任何方式將輸出用來故意欺騙,誤導或傷害人們。您對所做的任何用途負有全部責任,並且必須遵守所有適用的法律法規。”
該項目可能包含用於項目,產品或服務的商標或徽標。 Microsoft商標或徽標的授權使用受到了Microsoft的商標和品牌準則的約束。在此項目的修改版本中使用Microsoft商標或徽標不得引起混亂或暗示Microsoft贊助。任何使用第三方商標或徽標都遵守這些第三方政策。