大语言模型的多智能体语言游戏环境
项目描述
🏟 ChatArena
大语言模型的多智能体语言游戏环境
ChatArena是一个库,提供了多智能体语言游戏环境,并促进了关于自主LLM代理及其社会互动的研究。它提供了以下功能
- 抽象:它提供了一个灵活的框架,基于马尔可夫决策过程来定义多个玩家、环境和它们之间的交互。
- 语言游戏环境:它提供了一系列环境,可以帮助理解、基准测试或训练代理LLM。
- 用户友好的界面:它提供了Web UI和CLI,以便开发/提示工程师的LLM代理在环境中行动。
入门
安装
要求
- Python >= 3.7
- OpenAI API密钥(可选,用于使用GPT-3.5-turbo或GPT-4作为LLM代理)
使用pip安装
pip install chatarena
或从源安装
pip install git+https://github.com/chatarena/chatarena
要使用GPT-3作为LLM代理,设置您的OpenAI API密钥
export OPENAI_API_KEY="your_api_key_here"
可选依赖项
默认情况下,使用 pip install chatarena
只会安装ChatArena核心功能所需的依赖项。您可以使用以下命令安装可选依赖项
pip install chatarena[all_backends] # install dependencies for all supported backends: anthropic, cohere, huggingface, etc.
pip install chatarena[all_envs] # install dependencies for all environments, such as pettingzoo
pip install chatarena[all] # install all optional dependencies for full functionality
本地启动演示
查看ChatArena的最佳方式是通过演示Web UI。要在本地计算机上启动演示,您首先需要使用额外的gradio依赖项pip安装chatarena,然后git clone此存储库到您的本地文件夹,最后调用存储库根目录中的 app.py
pip install chatarena[gradio]
git clone https://github.com/chatarena/chatarena.git
cd chatarena
gradio app.py
这将启动ChatArena的演示服务器,您可以从浏览器(端口8080)访问它。
开发者
有关ChatArena框架的介绍,请参阅此文档。有关构建新环境的教程,请参阅
在此,我们提供了一份关于如何运行游戏和有关定制的通用建议的简要指南。
关键概念
- 竞技场:竞技场封装了环境和一组玩家。它驱动游戏的主体循环,并提供如webUI、CLI、配置加载和数据存储等HCI工具。
- 环境:环境存储游戏状态并执行游戏逻辑以在游戏状态之间进行转换。它还向玩家渲染观察结果,观察结果是自然语言。
- 游戏状态对玩家不可见。玩家只能看到观察结果。
- 语言后端:语言后端是语言智能的来源。它接受文本(或文本集合)作为输入并返回文本响应。
- 玩家:玩家是玩游戏的行为代理。在RL术语中,它是一个策略,一个从观察结果到动作的无状态函数。
使用Python API运行游戏
从配置文件加载Arena
-- 这里我们使用此存储库中的 examples/nlp-classroom-3players.json
作为示例
arena = Arena.from_config("examples/nlp-classroom-3players.json")
arena.run(num_steps=10)
在交互式CLI界面中运行游戏
arena.launch_cli()
观看此视频了解如何使用CLI: 有关如何以更细粒度的控制运行主要交互循环的更详细指南,请参阅此处
通用定制建议
- 竞技场:覆盖竞技场基本上意味着一个人将要编写自己的主要循环。这可以允许不同的交互接口或以更自动化的方式驱动游戏,例如,运行在线RL训练循环
- 环境:一个新的环境对应于一个新游戏,一个人可以在此处使用硬编码的规则或规则和语言后端的混合定义游戏动态。
- 后端:如果需要改变将观察结果(以消息形式)格式化为语言模型查询的方式,则需要覆盖后端。
- 玩家:默认情况下,当输入新的观察结果时,玩家将查询语言后端并作为动作返回响应。但也可以自定义玩家与语言后端的交互方式。
创建自定义环境
您可以通过扩展Environment
类来定义自己的环境。以下是基本步骤:
- 通过继承基类并设置
type_name
来定义类,然后将该类添加到ALL_ENVIRONMENTS
- 通过定义
__init__
方法(其参数将定义相应的配置)和初始化类属性来初始化类。 - 在
step
方法中实现游戏机制。 - 通过实现
reset
、get_observation
、is_terminal
和get_rewards
等方法来处理游戏状态和奖励。 - 使用CLI或Web UI为玩家开发角色描述提示(如有必要,还包括全局提示),并将它们保存到配置文件中。
我们提供详细教程来演示如何定义自定义环境,以Chameleon
环境为例。
如果您想将现有库的环境移植到ChatArena,请查看PettingzooChess
环境作为示例。
环境列表
对话
一个多玩家语言游戏环境,模拟对话。
- NLP Classroom:一个模拟课堂设置的三玩家语言游戏环境。游戏轮流进行,每个玩家在一轮中可以提问或回答问题。当所有玩家都提问和回答过所有问题时,游戏结束。
调解员对话
基于对话,但有调解员控制游戏动态。
- 剪刀石头布:一个模拟调解员对话的两人语言游戏环境。两位玩家将并行行动,当一位玩家赢得两局时,游戏结束。
- 井字棋:一个模拟调解员对话的两人语言游戏环境。游戏轮流进行,每个玩家在一轮中可以要求移动或进行移动。当一位玩家获胜或棋盘填满时,游戏结束。
变色龙
一个多玩家推理游戏。游戏中有两个角色,变色龙和非变色龙。秘密词的主题将首先对所有玩家揭晓。然后秘密词将揭晓给非变色龙。变色龙不知道秘密词。游戏的目标取决于玩家的角色。
- 如果您不是变色龙,您的目标是揭露变色龙而不泄露秘密词。
- 如果您是变色龙,您的目标是与其他玩家混在一起,避免被发现,并找出秘密词。游戏有三个阶段:
- 给出线索阶段:每个玩家将描述关于秘密词的线索。
- 指控阶段:在此阶段,每个玩家将投票给一个最可能是变色龙的玩家。变色龙应该投票给其他玩家。
- 猜测阶段:如果指控正确,变色龙应该根据其他玩家揭示的线索猜测秘密词。
PettingZooChess
使用PettingZoo Chess环境的两人棋类游戏环境。
PettingZooTicTacTeo
使用PettingZoo TicTacToe环境的双人对战井字棋游戏环境。与主持人对话
环境不同,此环境由硬编码的规则驱动,而不是由LLM主持人驱动。
贡献
我们欢迎对ChatArena进行改进和扩展的贡献。请按照以下步骤进行贡献
- 分支仓库。
- 为您的功能或错误修复创建一个新的分支。
- 将更改提交到新分支。
- 创建一个描述您更改的拉取请求。
- 我们将审查您的拉取请求并提供反馈或合并您的更改。
请确保您的代码遵循现有的样式和结构。
引用
如果您认为ChatArena对您的科研工作有帮助,请引用我们的仓库(我们的arxiv论文即将推出)
@software{ChatArena,
author = {Yuxiang Wu, Zhengyao Jiang, Akbir Khan, Yao Fu, Laura Ruis, Edward Grefenstette, and Tim Rocktäschel},
title = {ChatArena: Multi-Agent Language Game Environments for Large Language Models},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
version = {0.1},
howpublished = {\url{https://github.com/chatarena/chatarena}},
}
联系
如果您有任何问题或建议,请随时打开一个问题或提交一个拉取请求。您还可以在Farama discord服务器上联系我们- https://discord.gg/Vrtdmu9Y8Q
聊天愉快!
赞助商
我们感谢赞助商对本项目的支持
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。