🧙

MetaGPTを動かしてみた

2024/03/24に公開

MetaGPTが凄そう

ネットで「MetaGPTが凄い」みたいな話を聞いたのでちょっと試してみました。

GitHubのリポジトリは以下です。
https://github.com/geekan/MetaGPT

論文は以下です。
https://arxiv.org/abs/2402.18679

論文によると他のLLMエージェント系より性能がめっちゃ良いそうです。ここまで圧倒的だと逆にちょっと不安な気も。


Data Interpreter: An LLM Agent For Data Scienceより引用

MetaGPTのセットアップ

MetaGPTのリポジトリ、Dockerfileがあるから簡単にセットアップできるだろうと思っていたのですが、2重くらいに罠があって少しハマったので、微修正してサンプルファイルを追加したリポジトリを作成しました。

https://github.com/karaage0703/MetaGPT

説明は割愛しますが、差分はこちらです。本家も凄い勢いで開発しているので、そのうちアップデートされるかと思います。

環境はApple Silicon Macbook Airを使いました。試してはないですが、Dockerを使えばLinuxでもWindows(WSL2)でも同様に動くと思います。

まずはDockerをセットアップします。Dockerのセットアップに関しては以下の記事を参考にしてください。
https://zenn.dev/mkj/articles/33befbaf38c693

VS Codeエディタをインストールして、拡張機能のDev Containersもインストールしておきましょう。詳細は以下記事参照してください。

https://zenn.dev/karaage0703/books/80b6999d429abc8051bb/viewer/6ebae8

ここまで準備がすんだらあとは簡単です。以下コマンドを実行してください。

$ git clone https://github.com/karaage0703/MetaGPT
$ cd MetaGPT
$ code .

ここからは、VS Codeエディタのターミナルでコマンドを実行します。ターミナルが表示されてなかったらVS Codeエディタの「表示→ターミナル」で表示しましょう。

以下のような画面だったらOKです。

VS Codeエディタのターミナルで以下を実行しましょう。

$ pip install -e .
$ metagpt --init-config

あとは、「ファイル→フォルダーを開く」で/home/vscode/.metagpt/を選択してconfig2.yamlを編集しましょう。

viエディタが得意なら$ vi ~/.metagpt/config2.yamlでもOKです。

以下のような中身なので"YOUR_API_KEY"のところにOpenAIのAPI Keyを入力しましょう。

llm:
  api_type: "openai"  # or azure / ollama / open_llm etc. Check LLMType for more options
  model: "gpt-4-turbo-preview"  # or gpt-3.5-turbo-1106 / gpt-4-1106-preview
  base_url: "https://api.openai.com/v1"  # or forward url / other llm url
  api_key: "YOUR_API_KEY"

これでセットアップはOKです。コンテナを破棄したら(docker rmしたら)、pip install -e .からやり直す必要があります。

MetaGPTを動かしてみる

サンプルの以下コマンドを試してみたのですが、凄い勢いでゲームのプロジェクトを作り続けて、全然終わらないのであんまりおすすめできないです。

$ metagpt "Create a 2048 game" 

とりあえずHello worldがおすすめです。

$ python examples/llm_hello_world.py

以下みたいに表示されたら、一応動いているようです。

metagpt.const:get_metagpt_package_root:29 - Package root set to /workspaces/MetaGPT
2024-03-24 09:24:20.953 | INFO     | __main__:main:18 - what's your name: 
I don't have a personal name, but you can call me Assistant. How can I assist you today?
2024-03-24 09:24:24.569 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 21, completion_tokens: 22
2024-03-24 09:24:24.571 | INFO     | __main__:main:19 - I don't have a personal name, but you can call me Assistant. How can I assist you today?
2024-03-24 09:24:24.572 | INFO     | __main__:main:20 - 


I am a robot.
2024-03-24 09:24:25.291 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 35, completion_tokens: 5
2024-03-24 09:24:25.295 | INFO     | __main__:main:22 - I am a robot.
2024-03-24 09:24:26.505 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.002 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 8, completion_tokens: 9
2024-03-24 09:24:33.294 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.005 | Max budget: $10.000 | Current cost: $0.003, prompt_tokens: 30, completion_tokens: 96
2024-03-24 09:24:33.299 | INFO     | __main__:main:28 - Hello! How can I assist you today?
Certainly! Here's a simple Python program that prints "Hello, World!" to the console:

```python
print("Hello, World!")
```

To run this program, you'll need to have Python installed on your computer. Then, you can save this code in a file with a `.py` extension (for example, `hello_world.py`) and run it from your command line or terminal by navigating to the directory containing the file and typing `python hello_world.py`.
2024-03-24 09:24:34.594 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.006 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 19, completion_tokens: 19
2024-03-24 09:24:34.594 | INFO     | __main__:main:31 - ChatCompletion(id='chatcmpl-96ENdzhhyXng1eqQE7v7wvaO5GAKG', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='1\n2\n3\n4\n5\n6\n7\n8\n9\n10', role='assistant', function_call=None, tool_calls=None))], created=1711272273, model='gpt-4-0125-preview', object='chat.completion', system_fingerprint='fp_a7daf7c51e', usage=CompletionUsage(completion_tokens=19, prompt_tokens=19, total_tokens=38))
2024-03-24 09:24:35.831 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.006 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 19, completion_tokens: 19
2024-03-24 09:24:35.833 | INFO     | __main__:main:32 - 1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
2024-03-24 09:24:36.989 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.007 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 19, completion_tokens: 19

続いて、ディベートをさせてみました。オフィシャルのサンプルが、トランプさんとバイデンさんがディベートするといういささか過激(?)な設定だったので、キャラクターを変えて、日本語で会話するようにしてみました(といっても Please use Japaneseとか適当にプロンプトに追加しただけです)。

以下コマンドで動きます。

$ python examples/debate_karaage.py "からあげにレモンをかけたら死刑ですか?"

結果です。なかなかの激論が交わされました。でも平行線ですね。

2024-03-24 08:13:12.566 | INFO     | metagpt.const:get_metagpt_package_root:29 - Package root set to /workspaces/MetaGPT
2024-03-24 08:13:14.251 | INFO     | metagpt.team:invest:90 - Investment: $3.0.
2024-03-24 08:13:14.266 | INFO     | __main__:_act:63 - Curry(Republican): to do SpeakAloud(SpeakAloud)私はカレーです。私たちの文化では、食べ物に対する敬意が重要です。しかし、からあげにレモンをかけることが死刑に値するかどうかは、極端な議論です。私たちは、多様性と個人の選択を尊重すべきです。食べ物は人々を結びつけるものであり、分断するものではありません。からあげにレモンをかけることは、個人の好みの表現であり、それを罰することは自由への攻撃です。私たちは、理解と寛容の精神でこの問題に接するべきです。

2024-03-24 08:13:22.782 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.008 | Max budget: $10.000 | Current cost: $0.008, prompt_tokens: 165, completion_tokens: 213
2024-03-24 08:13:22.796 | INFO     | __main__:_act:63 - Karaage(Democrat): to do SpeakAloud(SpeakAloud)
私はからあげです。カレーさん、あなたの言葉には一理あります。しかし、文化と伝統を守ることも大切です。からあげにレモンをかける行為は、伝統的な食文化への無知から来るものです。私たちは、伝統を尊重し、それを守る責任があります。多様性を認めつつも、文化の本質を見失ってはなりません。食は結びつけるものですが、それには共通の理解と尊重が必要です。文化の根幹を守りながら、新しい風を受け入れましょう。
2024-03-24 08:13:31.464 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.010 | Max budget: $10.000 | Current cost: $0.010, prompt_tokens: 342, completion_tokens: 210
2024-03-24 08:13:31.507 | INFO     | __main__:_act:63 - Curry(Republican): to do SpeakAloud(SpeakAloud)
からあげさん、文化と伝統を守ることの重要性は理解しています。しかし、文化の進化という側面も忘れてはなりません。伝統を尊重しつつも、新しい試みを拒否することは、文化の成長を妨げることになります。からあげにレモンをかける行為は、新しい風味の探求であり、それを受け入れることは、文化の多様性と豊かさを認めることです。私たちは、開かれた心で新しい文化的表現を受け入れるべきです。
2024-03-24 08:13:39.618 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.020 | Max budget: $10.000 | Current cost: $0.012, prompt_tokens: 597, completion_tokens: 200
2024-03-24 08:13:39.647 | INFO     | __main__:_act:63 - Karaage(Democrat): to do SpeakAloud(SpeakAloud)
カレーさん、文化の進化を否定するわけではありません。しかし、新しい風味を追求することと、伝統を軽視することは異なります。からあげにレモンをかける行為が、単に新しい試みとして受け入れられるべきではなく、伝統への理解と尊重が先に来るべきです。文化の根幹を守りつつ、新しい風を吟味することが、真の多様性と文化の豊かさを育む道です。文化の本質を見失わず、共に成長しましょう。
2024-03-24 08:13:50.936 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.024 | Max budget: $10.000 | Current cost: $0.014, prompt_tokens: 761, completion_tokens: 206
2024-03-24 08:13:50.970 | INFO     | __main__:_act:63 - Curry(Republican): to do SpeakAloud(SpeakAloud)
からあげさん、私たちは文化の本質を見失ってはいません。むしろ、新しい試みを通じて文化を豊かにしています。レモンをかける行為は、伝統への敬意と新しい風味の追求のバランスを示しています。文化は生き物のように成長し、変化します。私たちの目指すべきは、過去を尊重しつつも未来に向けて開かれた文化です。多様性と革新こそが、文化を生き生きとさせ、共に成長させる鍵です。
2024-03-24 08:13:59.426 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.036 | Max budget: $10.000 | Current cost: $0.016, prompt_tokens: 1012, completion_tokens: 189
2024-03-24 08:13:59.453 | INFO     | __main__:_act:63 - Karaage(Democrat): to do SpeakAloud(SpeakAloud)
カレーさん、文化の成長と変化を受け入れることは大切ですが、伝統への敬意を忘れてはなりません。新しい風味の追求が、文化の本質を損なうことなく、伝統と調和することが重要です。私たちは、過去から学び、未来へと繋ぐ橋渡しをする責任があります。レモンをかける行為が、本当に文化的な豊かさに貢献しているのか、深く考える必要があります。文化の根幹を守りながら、真の多様性を追求しましょう。
2024-03-24 08:14:09.254 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.042 | Max budget: $10.000 | Current cost: $0.018, prompt_tokens: 1165, completion_tokens: 218
2024-03-24 08:14:09.280 | INFO     | __main__:_act:63 - Curry(Republican): to do SpeakAloud(SpeakAloud)
からあげさん、伝統への敬意を忘れることなく、私たちは新しい試みを受け入れるべきです。文化は静止したものではなく、常に進化し続ける生き物です。レモンをかける行為は、私たちの文化を豊かにし、新しい風味と伝統が融合する美しい例です。このような革新が、文化の真の多様性と豊かさを育むのです。私たちは、過去を尊重しながらも、未来に向けて柔軟に進むべきです。
2024-03-24 08:14:19.657 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.056 | Max budget: $10.000 | Current cost: $0.020, prompt_tokens: 1428, completion_tokens: 196
2024-03-24 08:14:19.684 | INFO     | __main__:_act:63 - Karaage(Democrat): to do SpeakAloud(SpeakAloud)
カレーさん、伝統と革新の間の橋渡しは確かに重要ですが、新しい試みが常に正しいとは限りません。レモンをかける行為が文化を豊かにするかもしれませんが、それが本当に伝統と調和しているか深く考えるべきです。私たちは、伝統を軽んじることなく、真の多様性と文化の豊かさを追求すべきです。文化の本質を見失わず、共に成長することが、私たちの目指すべき未来です。
2024-03-24 08:14:33.006 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.063 | Max budget: $10.000 | Current cost: $0.022, prompt_tokens: 1588, completion_tokens: 192
2024-03-24 08:14:33.061 | INFO     | __main__:_act:63 - Curry(Republican): to do SpeakAloud(SpeakAloud)
からあげさん、私たちは伝統を重んじ、それを守るべきですが、新しい試みを恐れてはなりません。レモンをかける行為は、私たちの文化の多様性と進化を象徴しています。このような革新を受け入れることで、私たちは過去と未来を繋ぎ、文化の本質をさらに豊かにすることができます。伝統と革新は共存でき、それが私たちの文化を生き生きとさせ、未来へと繋がる道を作ります。
2024-03-24 08:14:46.023 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.080 | Max budget: $10.000 | Current cost: $0.024, prompt_tokens: 1825, completion_tokens: 187
2024-03-24 08:14:46.036 | INFO     | __main__:_act:63 - Karaage(Democrat): to do SpeakAloud(SpeakAloud)
カレーさん、伝統と革新の共存は理解していますが、新しい試みが必ずしも文化を豊かにするとは限らないことを忘れてはなりません。レモンをかける行為が本当に伝統と調和しているのか、深く考えるべきです。私たちは、文化の本質を見失わず、伝統を尊重しながら、真の多様性と文化の豊かさを追求する責任があります。過去から学び、未来へと繋ぐ橋渡しをすることが、私たちの使命です。
2024-03-24 08:14:59.795 | INFO     | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.089 | Max budget: $10.000 | Current cost: $0.026, prompt_tokens: 1976, completion_tokens: 199

まとめ

MetaGPTを試してみました。もっと実用的なデータ分析とかも試しているのですが、正直見せられる結果を出せるほど使いこなせてないのが現状です。

更新頻度高く、ドキュメントとかも結構整備されているのはよいですね。ライセンスもMITライセンスですし。Open Interpreterが、ライセンスがいきなりMITからAGPL-3.0に変わってしてしまったりしたので、しばらくはMetaGPTを試してみようかなと思っています。

エージェント系は、見ている分には面白くて夢がありますね。その仕事、AIエージェントがやっておきました。 ――ChatGPTの次に来る自律型AI革命とか読むと、次はエージェントなのかな?と思ったりはします。

参考リンク

https://speakerdeck.com/masatoto/iclr2024-llmezientonoyan-jiu-dong-xiang

https://github.com/open-thought/system-2-research?tab=readme-ov-file#agent-papers

関連記事

https://zenn.dev/karaage0703/articles/e2e6417fb003dd

Discussion