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赞助。任何使用第三方商标或徽标都遵守这些第三方政策。