Package: chatarena
🏟ChatArenaMulti-Agent Language Game Environments for LLMsChatArena is a library that provides multi-agent language game environments and facilitates research about autonomous
LLM agents and their social interactions.
It provides the following features:Abstraction: it provides a flexible framework to define multiple players, environments and the interactions
between them, based on Markov Decision Process.Language Game Environments: it provides a set of environments that can help understanding, benchmarking or
training agent LLMs.User-friendly Interfaces: it provides both Web UI and CLI to develop/prompt engineer your LLM agents to act in
environments.Getting StartedTry our online demo:InstallationRequirements:Python >= 3. 7OpenAI API key (optional, for using GPT-3.5-turbo or GPT-4 as an LLM agent)Install with pip:pipinstallchatarenaor install from source:pipinstallgit+https://github.com/chatarena/chatarenaTo use GPT-3 as an LLM agent, set your OpenAI API key:exportOPENAI_API_KEY="your_api_key_here"Optional DependenciesBy defaultpip install chatarenawill only install dependencies necessary for ChatArena's core functionalities.
You can install optional dependencies with the following commands:pipinstallchatarena[all_backends]# install dependencies for all supported backends: anthropic, cohere, huggingface, etc.pipinstallchatarena[all_envs]# install dependencies for all environments, such as pettingzoopipinstallchatarena[all]# install all optional dependencies for full functionalityLaunch the Demo LocallyThe quickest way to see ChatArena in action is via the demo Web UI.
To launch the demo on your local machine, you first pip install chatarena with extra gradio dependency, then git clone
this repository to your local folder, and finally call theapp.pyin the root directory of the repository:pipinstallchatarena[gradio]gitclonehttps://github.com/chatarena/chatarena.gitcdchatarena
gradioapp.pyThis will launch a demo server for ChatArena, and you can access it from your browser (port 8080).Check out this video to learn how to use Web UI:For DevelopersFor an introduction to the ChatArena framework, please refer tothis document.
For a walkthrough of building a new environment, checkHere we provide a compact guide on minimal setup to run the game and some general advice on customization.Key ConceptsArena: Arena encapsulates an environment and a collection of players. It drives the main loop of the game and
provides HCI utilities like webUI, CLI, configuration loading and data storage.Environment: The environment stores the game state and executes game logics to make transitions between game
states. It also renders observations for players, the observations are natural languages.The game state is not directly visible to the players. Players can only see the observations.Language Backend: Language backends are the source of language intelligence. It takes text (or collection of
text) as input and returns text in response.Player: The player is an agent that plays the game. In RL terminology, it’s a policy, a stateless function
mapping from observations to actions.Run the Game with Python APILoadArenafrom a config file -- here we useexamples/nlp-classroom-3players.jsonin this repository as an example:arena=Arena.from_config("examples/nlp-classroom-3players.json")arena.run(num_steps=10)Run the game in an interactive CLI interface:arena.launch_cli()Check out this video to learn how to use
CLI:A more detailed guide about how to run the main interaction loop with finer-grained control can be
foundhereGeneral Customization AdviceArena: Overriding Arena basically means one is going to write their own main loop. This can allow different
interaction interfaces or drive games in a more automated manner, for example, running an online RL training loopEnvironment: A new environment corresponds to a new game, one can define the game dynamics here with hard-coded
rules or a mixture of rules and language backend.Backend: If one needs to change the way of formatting observations (in terms of messages) into queries for the
language model, the backend should be overridden.Player: By default, when a new observation is fed, players will query the language backend and return the
response as actions. But one can also customize the way that players are interacting with the language backend.Creating your Custom EnvironmentYou can define your own environment by extending theEnvironmentclass. Here are the general steps:Define the class by inheriting from a base class and settingtype_name, then add the class
toALL_ENVIRONMENTSInitialize the class by defining__init__method (its arguments will define the corresponding config) and
initializing class attributesImplement game mechanics in methodsstepHandle game states and rewards by implementing methods such asreset,get_observation,is_terminal,
andget_rewardsDevelop role description prompts (and a global prompt if necessary) for players using CLI or Web UI and save them to
a
config file.We providea detailed tutorialto demonstrate how to define a custom
environment,
using theChameleonenvironmentas example.If you want to port an existing library's environment to ChatArena, check
outPettingzooChessenvironmentas an example.List of EnvironmentsConversationA multi-player language game environment that simulates a
conversation.NLP Classroom: a 3-player language game environment that simulates a
classroom
setting. The game is played in turns, and each turn a player can either ask a question or answer a question.
The game ends when all players have asked and answered all questions.Moderator ConversationBased on conversation, but with a moderator that controls the game dynamics.Rock-paper-scissors: a 2-player language game environment that simulates a
rock-paper-scissors game with moderator conversation.
Both player will act in parallel, and the game ends when one player wins 2 rounds.Tic-tac-toe: a 2-player language game environment that simulates a tic-tac-toe
game with moderator conversation.
The game is played in turns, and each turn a player can either ask for a move or make a move. The game ends when
one
player wins or the board is full.ChameleonA multi-player social deduction game. There are two roles in the game, chameleon and non-chameleon.
The topic of the secret word will be first revealed to all the players.
Then the secret word will be revealed to non-chameleons.
The chameleon does not know the secret word.
The objective in the game depends on the role of the player:If you are not a chameleon, your goal is to reveal the chameleon without exposing the secret word.If you are a chameleon, your aim is to blend in with other players, avoid being caught, and figure out the secret
word.
There are three stages in the game:The giving clues stage: each player will describe the clues about the secret word.The accusation stage: In this stage, each player will vote for another player who is most likely the chameleon. The
chameleon should vote for other players.The guess stage: If the accusation is correct, the chameleon should guess the secret word given the clues revealed by
other players.PettingZooChessA two-player chess game environment that uses the PettingZoo Chess environment.PettingZooTicTacTeoA two-player tic-tac-toe game environment that uses the PettingZoo TicTacToe environment. Differing from theModerator Conversationenvironment, this environment is driven by hard-coded rules rather than a LLM moderator.ContributingWe welcome contributions to improve and extend ChatArena. Please follow these steps to contribute:Fork the repository.Create a new branch for your feature or bugfix.Commit your changes to the new branch.Create a pull request describing your changes.We will review your pull request and provide feedback or merge your changes.Please ensure your code follows the existing style and structure.CitationIf you find ChatArena useful for your research, please cite our repository (our arxiv paper is coming soon):@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}},}ContactIf you have any questions or suggestions, feel free to open an issue or submit a pull request.
You can also contact us on the Farama discord server-https://discord.gg/Vrtdmu9Y8QHappy chatting!SponsorsWe would like to thank our sponsors for supporting this project:SEQUOIAShixiang Capital