文章目录
一、关于 ChatArena
Multi-Agent Language Game Environments for LLMs
ChatArena是一个Python库,旨在促进多个大型语言模型(LLMs)之间的通信和协作。它提供了以下功能:
- Language Game Environments: 它提供了一个创建多代理语言游戏环境的框架,以及一组通用的语言驱动环境。
- Infrastructure for Multi-LLM Interaction: 它允许您快速创建多个LLM支持的播放器代理,并实现它们之间的无缝通信。
- User-friendly Interfaces: 它同时提供Web浏览器UI和命令行界面(CLI),以开发(prompt 工程师)您的LLM播放器,从而在环境中取得成功。
二、快速跑通
在线体验:https://chatarena-chatarena-demo.hf.space/
1、安装
Requirements:
- Python >= 3. 7
- OpenAI API key (optional, for using GPT-3.5-turbo or GPT-4 as an LLM agent)
使用 pip 安装
pip install chatarena
从源码安装
git clone https://github.com/chatarena/chatarena
cd chatarena
pip install .
使用 GPT-3 作为 LLM agent, 设置你的 OpenAI API key:
export OPENAI_API_KEY="your_api_key_here"
2、本地运行Demo
查看 ChatArena 最快的方式是 通过演示Web UI。
要在本地机器上启动演示,首先需要git克隆存储库并从源代码进行安装(请参阅上面的说明)。
然后在存储库的根目录中运行以下命令:
gradio app.py
这将为ChatArena启动一个演示服务器,您可以访问:http://127.0.0.1:7860/
三、基本使用
1、核心概念
-
-
Player 玩家
- 玩家是可以在游戏环境中与其他玩家进行交互的代理。一个 player 可以是一个人,也可以是一个大语言模型 (LLM). 玩家是由其名称、后端和角色来定义的。
- Backend: backend 是一个Python类,用于定义玩家如何与其他玩家交互。 后端可以是一个人、一个 LLM或它们的组合。后端由其名称、类型和参数定义。
-
-
Environment 环境
- 环境是一个定义游戏规则的Python类。环境是由其名称、类型和参数定义的。
- Moderator: moderator 是一个Python类,它定义了游戏的玩法。moderator 由其名称、类型和参数定义。
- Arena: 竞技场
:arena 是一个Python类,它定义了整个游戏。竞技场是由其名称、类型和参数定义的。
Step 1: 定义 LLM Backend 下的多玩家
from chatarena.agent import Player
from chatarena.backends import OpenAIChat
# Describe the environment (which is shared by all players)
environment_description = "It is in a university classroom ..."
# A "Professor" player
player1 = Player(name="Professor", backend=OpenAIChat(),
role_desc="You are a professor in ...",
global_prompt=environment_description)
# A "Student" player
player2 = Player(name="Student", backend=OpenAIChat(),
role_desc="You are a student who is interested in ...",
global_prompt=environment_description)
# A "Teaching Assistant" player
player3 = Player(name="Teaching assistant", backend=OpenAIChat(),
role_desc="You are a teaching assistant of module ...",
global_prompt=environment_description)
Step 2: 创建一个 Language Game 环境
你也可以创建一个语言模型驱动的环境,并将它添加到 ChatArena:
from chatarena.environments.conversation import Conversation
env = Conversation(player_names=[p.name for p in [player1, player2, player3]])
Step 3: 使用 Arena 运行 Language Game
Arena 是一个工具类,来帮助你运行 language games.
from chatarena.arena import Arena
arena = Arena(players=[player1, player2, player3],
environment=env, global_prompt=environment_description)
# Run the game for 10 steps
arena.run(num_steps=10)
# Alternatively, you can run your own main loop
for _ in range(10):
arena.step()
# Your code goes here ...
您可以轻松地将游戏历史记录保存到文件中
arena.save_history(path=...)
并将您的游戏配置保存到文件:
arena.save_config(path=...)
其他工具
从配置文件加载 Arena (在这个repo 我们使用 examples/nlp-classroom-3players.json
作为示例)
arena = Arena.from_config("examples/nlp-classroom-3players.json")
arena.run(num_steps=10)
在交互式 CLI 界面中运行游戏:
arena.launch_cli()
四、高级用法
1、ModeratedConversation
: a LLM-driven Environment
我们支持一个更先进的环境,称为 ModeratedConversation
,它允许您使用LLM 来控制游戏动态。
moderator 是一个特殊的玩家,控制游戏状态的转换,并决定游戏何时结束。
例如,您可以定义一个moderator 来跟踪棋盘游戏的棋盘状态,并在玩家获胜时结束游戏。
你可以试试我们的 Tic-tac-toe 和 Rock-paper-scissors 游戏,了解它的工作原理:
# Tic-tac-toe example
Arena.from_config("examples/tic-tac-toe.json").launch_cli()
# Rock-paper-scissors example
Arena.from_config("examples/rock-paper-scissors.json").launch_cli()
2、创建自定义环境
你可以通过扩展 Environment
类,来自定义你的环境;以下是通用步骤:
- 继承自基础类,创建类,并设置
type_name
, 然后将类添加到ALL_ENVIRONMENTS
; - 通过定义
__init__
方法,初始化类 ( 它的参数将定义相应的配置 ) 和初始化类属性 - 在
step
方法中,实现 game 机制; - 通过实现以下方法来处理游戏状态和奖励
reset
,get_observation
,is_terminal
, 和get_rewards
- 使用CLI或Web UI为玩家开发角色描述提示(必要时还提供全局提示),并将其保存到配置文件中。
我们提供 详细教程 演示如何定义自定义环境,使用 Chameleon
环境作为示例。
如果要将现有库的环境移植到 ChatArena, 查看 PettingzooChess
environment 作为示例.
- How to create your custom environments
https://github.com/chatarena/chatarena/blob/main/docs/tutorials/create_your_environment.md - Chameleon
https://github.com/chatarena/chatarena/blob/main/chatarena/environments/chameleon.py - PettingzooChess
https://github.com/chatarena/chatarena/blob/main/chatarena/environments/pettingzoo_chess.py
2023-04-06