ChatDevでLLMにアプリ開発させるのを試してみる
README.mdよりはこちらのほうが詳細っぽい。
動画見る限りはローカルでやったほうがいろいろ楽そうだけどとりあえずうちはLAN内のサーバでやる。pyenv/virtual-envでpython-3.10.11。
$ git clone https://github.com/OpenBMB/ChatDev
$ pyenv virtualenv 3.10.11 ChatDev
$ cd ChatDev
$ pyenv local ChatDev
$ pip install -r requirements.txt
$ export OPENAI_API_KEY="XXXXXXXX"
ではアプリを作ってもらう。ターミナルで動くsnake gameを作ってもらう。モデルは最初gpt-3.5-turboを使ってやってみたのだけど、いろいろうまく行かなかったのでgpt-4にした。
$ python run.py --task "design a simple cli snake game" --name "cli_snake_game" --model "GPT_4"
MetaGPTと同じような感じでいろいろ勝手に動いてて、この過程が面白いのだけど、かなり長いので割愛。作成が終わるとこんな感じでユーザーマニュアルが作成される。
# CLI Snake Game
A simple and fun command-line interface (CLI) game developed in Python.
## Quick Install
Before you can play the game, you need to have Python installed on your computer. If you don't have Python installed, you can download it from the official website: https://www.python.org/downloads/
Once Python is installed, you can download the game files from our repository and run it directly from your terminal.
## 🤔 What is this?
This is a simple snake game that you can play directly from your command-line interface. The game is developed in Python and uses the curses library for its GUI. The objective of the game is to control a snake that grows in length by eating food that randomly appears on the screen. The game ends when the snake hits the screen border or its own body.
## 🎮 How to Play
1. Open your terminal.
2. Navigate to the directory where you downloaded the game files.
3. Run the command `python main.py` to start the game.
4. Use the arrow keys to control the direction of the snake.
5. Try to eat the food ('*') that appears randomly on the screen. Each time the snake eats food, it grows in length.
6. The game ends when the snake hits the screen border or its own body.
## 📖 Game Components
The game consists of two main components: the Snake and the Food.
- **Snake**: The snake is controlled by the player. It moves in the direction specified by the player and grows in length each time it eats food.
- **Food**: The food appears randomly on the screen. When the snake eats the food, it grows in length and the food reappears at a new random location.
## 🛠️ Troubleshooting
If you encounter any issues while playing the game, make sure your terminal supports curses. If the problem persists, please contact our support team.
Enjoy the game!
でこんな感じで開発内容のサマリが表示される。
Software Info:
💰**cost**=$0.089492
🔨**version_updates**=8.0
📃**num_code_files**=3
🏞**num_png_files**=0
📚**num_doc_files**=6
📃**code_lines**=85
📋**env_lines**=-1
📒**manual_lines**=24
🗣**num_utterances**=38
🤔**num_self_reflections**=1
❓**num_prompt_tokens**=20380
❗**num_completion_tokens**=7088
🌟**num_total_tokens**=27468
🕑**duration**=600.00s
ChatDev Starts (20230831201006)
ChatDev Ends (20230831202006)
作成されたアプリはWarehouse
ディレクトリ配下に生成される。
$ ls -lt WareHouse | head
合計 128
drwxrwxr-x 2 kun432 kun432 4096 8月 31 20:20 cli_snake_game_DefaultOrganization_20230831201006
では作成したアプリを動かしてみる。本当は別に環境を用意したほうがいいんだけど、今回はそのまま実行する。
$ cd WareHouse/cli_snake_game_DefaultOrganization_20230831201006
$ python main.py
動いた。
でここまでCLIで完結しているけど、あのGUIはいつでてくるの?ということになるんだけど、どうやらこれは後付でリプレイ再生される模様。以下のように起動する。
$ cd ../..
$ python online_log/app.py
ただしデフォルトだとlocalhost:8000でしかアクセスできない。うちはLAN内のサーバで動かしてて、かつ、8000番ポートも既に使っていたので、online_log/app.pyを以下のように修正した。
(snip)
def send_msg(role, text):
try:
data = {"role": role, "text": text}
response = requests.post("http://192.168.XXX.XXX:9000/send_message", json=data)
(snip)
if __name__ == "__main__":
print("please visit http://192.168.XXX.XXX:9000/ for demo")
app.run(debug=True, host='192.168.XXX.XXX', port=9000)
(snip)
アクセスするとこんな感じの画面が表示される。
ChatChainVisualizerはどうも開発の各フェーズにおける会話のチェーン数のようなものを参照できるもので、ChatReplayがGUIで開発の様子をリプレイするものの様子。
でそれぞれを実行数にはファイルをインポートしてやる必要がある。ファイルは作成されたアプリディレクトリの下にある。
$ cd Warehouse/cli_snake_game_DefaultOrganization_20230831201006/
$ ls -l
合計 532
-rw-rw-r-- 1 kun432 kun432 2288 8月 31 20:10 ChatChainConfig.json # ChatChainVisualizerで使う
-rw-rw-r-- 1 kun432 kun432 19038 8月 31 20:10 PhaseConfig.json
-rw-rw-r-- 1 kun432 kun432 6490 8月 31 20:10 RoleConfig.json
drwxrwxr-x 2 kun432 kun432 4096 8月 31 20:20 __pycache__
-rw-rw-r-- 1 kun432 kun432 30 8月 31 20:10 cli_snake_game.prompt
-rw-rw-r-- 1 kun432 kun432 480849 8月 31 20:20 cli_snake_game_DefaultOrganization_20230831201006.log # ChatReplayで使う
-rw-rw-r-- 1 kun432 kun432 455 8月 31 20:18 food.py
-rw-rw-r-- 1 kun432 kun432 1121 8月 31 20:18 main.py
-rw-rw-r-- 1 kun432 kun432 1825 8月 31 20:20 manual.md
-rw-rw-r-- 1 kun432 kun432 431 8月 31 20:20 meta.txt
-rw-rw-r-- 1 kun432 kun432 1349 8月 31 20:18 snake.py
ChatReplayで使うログをscpで持ってきて(最初にローカルでやったほうが良いといったのはこういうこと)ChatReplayで再生してみるとこうなる。
動画は面倒なのでやってないけど、実際にはいろいろ各部門がやりとりしてる様が見えてとてもおもしろい。
所感
- MetaGPTと基本的には同じようなものだと思う。ソフトウェア開発は環境的に題材にしやすいんだろうね。
- GUIでそれっぽく見せられると箱庭感あって面白い。
- 役割の異なるAgent同士で協調させて大きなゴールを目指すというのはやっぱりLLMのキーになっていきそう。
どうでもいいけど同じ名前なのね
そう、コストなんだけど
💰**cost**=$0.089492
正確な金額はわからないけどOpenAIのUsage見てるともっとかかってると思う、多分数十円ぐらいじゃなかろうか。