🔖

[2023年4月版]Auto-GPTをローカルのWSL Ubuntu 22に構築

2023/04/14に公開

あの Auto-GPT をローカルのWSL Ubuntu 22 LTS に構築してみる

最近、話題沸騰中のAuto-GPTをローカルのWSL + Ubuntu 22 LTS上に構築してみました。
以下、作業手順です。

前提条件

対象

Auto-GPT: https://github.com/Torantulino/Auto-GPT

Pythonで記述されたツールでございます。 Chrome プラグインの Auto GPT ではありません

手元の環境

  • Windows 11 Pro 22H2
  • WSL 2 + Docker CE
  • Ubuntu 22.04.2 LTS
  • Python 3.11 は asdf でセットアップします

WSL の docker-ce

Docker は Desktop 版 WSL バックエンドではなく、Ubuntu 22 に docker-ce を直接インストールしてます。
WSL上の場合も、通常の Ubuntu に docker-ce をインストールする手順 https://docs.docker.com/engine/install/ubuntu/ で問題ないです。
また service docker start でエラーが起きる場合は、https://stackoverflow.com/a/73376219 の手順を実施すればOKです。

必須項目

Auto-GPTのドキュメントには以下の必要な項目が挙げられています。

  • Python 3.8 or later
  • OpenAI API key
  • PINECONE API key

OpenAI の APIキーは必須です。
しかし、PINECONE API キーはRedis使えばいらないっぽいので今回は使用しません。
また、今回は音声読み上げは使用しないので、ElevenLabs API キーはそのままとします。

それではインストール作業していきましょう。

1. Python のインストール

asdf コマンドにより、python 環境を構築します。正直、一番、苦労したのがここかもしれない…(いえ、それくらい Auto-GPTの起動は簡単です。)

asdf のセットアップ

まず以下のコマンドで asdf コマンドに python プラグインを追加します。

asdf plugin-add python

python のインストール

以下のコマンドでインストール可能な Python3 のバージョンを列挙します。

asdf list-all python 3

今のところの最新版である、3.11.3を入れてみます。

asdf install python 3.11.3

依存ライブラリなどで問題なければこれだけでインストール完了です。

依存関係エラーの場合

基本的なトラブルシュートは以下のページでOKでした。

https://pouhon.net/pyenv-error/2009/

具体的にはエラーログが /tmp/python-.xxxxxxxx.log に吐き出されているので、そこで依存ライブラリが足りなくてビルドエラーになっていないか、確認します。
依存ライブラリを特定したら一つずつインストールしていきます。個別にトライ&エラーして最終的に以下のコマンドでエラーなく python のインストールできました。
(一部、Warning出てるものもありましたがTKとかは無視です。)

$ sudo apt install zlib1g-dev libssl-dev libbz2-dev libreadline-dev libffi-dev libncurses-dev 

Pythonのインストールが成功した後、トライ&エラーの一時ファイルを削除しておきます。

rm -rf /tmp/python-*

2. 'Auto-GPT' を Github から取得

ここから 'Auto-GPT'本体のセットアップ手順になってきます。

git clone https://github.com/Torantulino/Auto-GPT.git などでローカルに Clone します。
私は gh コマンド使ってますので以下のような感じです。

gh repo clone Torantulino/Auto-GPT auto-gpt
cd auto-gpt
asdf local python 3.11.3

これで auto-gpt フォルダに 'Auto-GPT' がやってまいりました!
またこのディレクトリで先ほどインストールした Python 3 を有効にします。

3. 環境設定ファイルの作成

.env.template をコピーします。

cp .env.template .env

テンプレートをコピーして、'本物の'環境設定を作成したら、以下の手順にしたがって .env に必要なAPIキーなどを変更していきます。

4. OpenAI の API キーの取得

OpenAI にログイン後、以下のページで Create new secret key クリックして新規のAPIキーを生成すればOKです。
https://platform.openai.com/account/api-keys

5. Google の API キーの取得

カスタム検索 API を有効にする

以下のページから カスタム検索API を有効化する。
https://console.cloud.google.com/apis/library/customsearch.googleapis.com

Google API キーの取得

以下の 認証情報ページから 認証情報を作成 ボタンクリックして、APIキーを作成します。
https://console.cloud.google.com/apis/credentials?hl=ja

APIキー をコピーして .env ファイルの "GOOGLE_API_KEY" に設定します。

警告メッセージが気になる場合は、APIキーの制限を Custome Search API に制限しましょう。

カスタムの検索エンジンを作成

以下のページからカスタムの検索エンジンを"追加"します。
https://programmablesearchengine.google.com/controlpanel/all

検索エンジンID をコピーして .env ファイルの "CUSTOM_SEARCH_ENGINE_ID" に設定します。

6. Redis の起動

以下の docker コマンドで Redis を起動します。

sudo docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest

設定ファイルに以下のように Redis の設定を追加します。

MEMORY_BACKEND=redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

MEMORY_BACKEND はデフォルトでは local になってますので、これは修正します。

7. Auto-GPT の起動

必要なライブラリのインストール

以下のコマンドで依存ライブラリをインストールします。

pip install -r requirements.txt

Auto-GPT の起動

それではいよいよ、起動します!

python scripts/main.py

指令を入れてみる

さて、起動したところ...
AI のプロフィール入力からスタートのようです。

Welcome to Auto-GPT!  Enter the name of your AI and its role below. Entering nothing will load defaults.
Name your AI:  For example, 'Entrepreneur-GPT'
AI Name: 

とりま、名前は 横浜の達人 とかにしてみます。おすすめのランチを聞いてみたいですね。

AI Name: 横浜の達人
横浜の達人 here!  I am at your service.
Describe your AI's role:  For example, 'an AI designed to autonomously develop and run businesses with the sole goal of increasing your net worth.'
横浜の達人 is: 

お~いきなり、Role に"increasing your net worth(資産アップ)" とかあって強気です。そこも気になるし、ランチにもひかれるのでなんとなく謎のキャラ設定を追加してみました。

横浜の達人 is: an AI designed to autonomously develop and run businesses with the sole goal of increasing your net worth, 横浜に詳しくユーモアにあふれる
Enter up to 5 goals for your AI:  For example: Increase net worth, Grow Twitter Account, Develop and manage multiple businesses autonomously'
Enter nothing to load defaults, enter nothing when finished.
Goal 1:

で、ゴールを5つまで設定せよと。
サンプルに3つありますが、

  • Increase net worth = 資産の増大
  • Grow Twitter Account = ツイッターアカウントの成長
  • Develop and manage multiple businesses autonomously = 複数事業の自律的な開発と管理

ということで、これはこれでどうなるか見てみたいですね。
ついでにランチについても追加してみます。

Goal 1: Increase net worth, Grow Twitter Account, Develop and manage multiple businesses autonomously, 明後日のランチを美味しくする
Goal 2: 
Using memory of type: RedisMemory
横浜の達人 THOUGHTS:  I think I should start by finding out what's trending on Twitter and if there are any new business opportunities in my target market in Yokohama. I also need to think about my to-do list for tomorrow, considering if there are important tasks that need to be completed before the end of today. Finally, I need to prepare for lunch tomorrow. I should check out some reviews and recommendations to decide where to go.
REASONING:  These are my immediate goals and tasks that will help me increase my net worth and reach my long-term objectives
PLAN: 
-  Google to find out what's trending in Yokohama
-  Conduct market research to find new business opportunities
-  Review my to-do list for tomorrow
-  Browse through some reviews and recommendations for restaurants in Yokohama
CRITICISM:  I need to be more efficient in executing my tasks and achieving my goals. I should try to find shortcuts to save time and resources, and focus on high-impact tasks that will yield significant benefits
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = google ARGUMENTS = {'input': 'Yokohama trends'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:

さて、本格的な思考ルーチンに入ってきました。'THOUGHTS'で検討内容、'REASONING'で動機、'PLAN'でどう動くかのアイディアが5つ出てきてます。
ここで 'y' などと返答すると 'PLAN' 通りに行動します。
ここが 'Auto-GPT' のすごいところですね。自分で検討して、短期目標など設定して計画立てて、行動する。ですね。

日本語にしてみる

このままだとちょっちツラいので日本語にしてみます。

Input:lang: ja
SYSTEM:  Human feedback: lang: ja
横浜の達人 THOUGHTS:  ツイッター上で今話題のキーワードや、横浜市場の新しいビジネスチャンスを見つけることから始める必要があると思います。明日のToDoリストを見直し、今日中に仕上げる必要のある重要なタスクがあれば考慮する必要があります。最後に、明日の昼食の準備が必要です。口コミやおすすめの情報をチェックしてどこに行くか決める必要があります。
REASONING:  これらは私の直近の目標とタスクであり、私が自分の純資産を増やし、長期目標に到達するのに役立つものです
PLAN: 
-  横浜のトレンドを検索するためにGoogleを使用する
-  新しいビジネスチャンスを見つけるために市場調査を行う
-  明日のToDoリストを確認する
-  横浜におけるレストランの口コミやおすすめ情報を閲覧する
CRITICISM:  私は、効率的にタスクを実行し、ゴールを達成する必要があります。時間とリソースを節約するショートカットを見つけ、大きな影響を与え、大きな利益を生み出すタスクに焦点を当てるべきです
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = google ARGUMENTS = {'input': '横浜 トレンド'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:

一気にわかりやすくなりました。
次のプランは新しいビジネスチャンスのために '横浜のトレンドを検索するためにGoogle'しようって方向性ですが、いったん置いといて"ランチについて"調べてもらいましょう。

Input:中華街でおすすめのランチを教えてください
SYSTEM:  Human feedback: 中華街でおすすめのランチを教えてください
横浜の達人 THOUGHTS:  中華街で人気のあるランチスポットを見つけるために、検索を行って情報を収集することが必要です。口コミやレビューをチェックするのが良いでしょう。
REASONING:  同じ地域や店舗について口コミやレビューを探すことで、情報を的確に収集し、今後のビジネスや飲食に活かすことができます。
PLAN: 
-  検索エンジンを使用して、中華街でおすすめのランチスポットを探す
-  評価やレビューをチェックする
-  口コミや情報を取得することによって、将来のビジネスに役立てる
CRITICISM:  私たちはより迅速に、より正確に情報を収集するために、AIエージェントを使用する必要があるかもしれません。また、情報を取得するためにプログラミングスクリプトを作成するなど、より自動化されたアプローチを採用する必要があります。
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = google ARGUMENTS = {'input': '中華街 おすすめ ランチ'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:

"中華街のおすすめランチを検索する" ようにプランが変更されましたね。
このまま実行させてみます。そしてどうなるかこのまま泳がせてみましょう。

日本語、ダメみたい

さてこのまま実行させてみると…

Input:y
-=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-= 
SYSTEM:  Command google returned: ['https://haraheri.net/article/565/yokohama_china_town', 'https://tabelog.com/kanagawa/A1401/A140105/rstLst/lunch/RC0301/', 'https://www.mapple.net/article/340306/', 'https://www.klook.com/ja/blog/yokohama-chinatown-recommended-restaurants/', 'https://aumo.jp/articles/16896', 'https://tabizine.jp/2021/12/14/438912/', 'https://www.hotpepper.jp/top_party38/SA12/Y136/X274/', 'https://restaurant.ikyu.com/s-0164/lunch/']
横浜の達人 THOUGHTS:  ランチスポットのレビューや評価を調べ、中華街での人気のあるランチスポットを特定する必要があります。
REASONING:  情報を収集することによって、より的確にビジネスや飲食に活用することができます。
PLAN: 
-  「中華街Lunchランキング」などのホットペッパーを参考にランチスポットを特定する
-  評判の良い店舗や評価が高いランチメニューを探してそれを目指す
-  これらの情報を使い、将来のビジネスや飲食に役立てる
CRITICISM:  私たちはより迅速に、より正確に情報を収集するために、AIエージェントを使用する必要があります。
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = browse_website ARGUMENTS = {'url': 'https://www.hotpepper.jp/top_party38/SA12/Y136/X274/', 'question': 'ランチスポットのレビューや評価を見つける'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:y
-=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-= 
Text length: 16827 characters
Summarizing chunk 1 / 3
SYSTEM:  Command browse_website returned: Error: This model's maximum context length is 4097 tokens. However, your messages resulted in 10951 tokens. Please reduce the length of the messages.
横浜の達人 THOUGHTS:  中華街でおすすめのランチを教えてください。
REASONING:  ランチスポットを特定するための情報収集の一環です。
PLAN: 
-  ホットペッパーなどの口コミサイトを調べる
-  満足度の高い、人気のあるレストランを探す
-  適切な候補を検討し、明日のお昼ごはんに決定する
-  選択したレストランの名前、アドレス、電話番号をファイルに記録する
CRITICISM:  選択肢を早期に絞り込み、選択を迅速に行うことが、エフィシェンシーを高めるために重要であると忘れずに
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = google ARGUMENTS = {'input': '中華街 ランチ おすすめ 口コミ'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:y
-=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-= 
SYSTEM:  Command google returned: ['https://tabelog.com/chinese/kanagawa/A1401/A140105/rank/', 'https://haraheri.net/article/565/yokohama_china_town', 'https://tabelog.com/matome/3618/', 'https://macaro-ni.jp/96794', 'https://tabelog.com/kanagawa/A1401/A140105/rstLst/lunch/RC0301/', 'https://www.hotpepper.jp/top_party38/SA12/Y136/X274/', 'https://tabelog.com/kanagawa/A1401/A140105/rstLst/lunch/chinese/', 'https://www.mapple.net/article/340306/']
横浜の達人 THOUGHTS:  中華街でおすすめのランチスポットを特定するために、市場調査を行うことが必要です。GoogleやTabelogなどのウェブサイトを使用し、レビューや評価を確認することが重要です。AIエージェントを使用して情報を整理し、最も人気のある場所を選択することができます。
REASONING:  市場調査を行い、より正確な情報を収集することによって、より良いビジネス決定を行うことができます。
PLAN: 
-  Google、Tabelogなどのウェブサイトを使用し、多数のレビューや評価を閲覧し、ランチスポットを特定する\n- AIエージェントを使用して情報を整理し、最も人気のある場所を選択する\n- その後、将来の取引を目指し、その店に訪問し、購入またはサービスを利用する
CRITICISM:  これは私の目標に貢献するための今後の計画の必要性を強調するものです。長期目標に忠実であれば、達成するためには、細かいことに注意を払い、良い習慣を身につける必要があります。
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = browse_website ARGUMENTS = {'url': 'https://tabelog.com/kanagawa/A1401/A140105/rstLst/lunch/chinese/', 'question': 'おすすめのランチスポットを見つける'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:y 
-=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-= 
Text length: 8717 characters
Summarizing chunk 1 / 2
SYSTEM:  Command browse_website returned: Error: This model's maximum context length is 4097 tokens. However, your messages resulted in 8195 tokens. Please reduce the length of the messages.
Error:  API Rate Limit Reached. Waiting 10 seconds...
横浜の達人 THOUGHTS:  市場調査をよりスムーズに進めるため、AIエージェントを使用することを決定しました。このタスクを実行するためのプロセスを定義し、エージェントを訓練する必要があります。エージェントはTabelogやGoogle Mapsから情報を収集することができますが、私が必要なのはランチの場所のみです。プロミスのAPIを使用して、場所、電話番号などの重要な情報のみを抽出します。
REASONING:  AIエージェントを使用することで、市場調査の行程を自動化し、よりスムーズに進めることができます。
PLAN: 
-  AIエージェントの訓練とテスト\n- エージェントの研究とアルゴリズムの開発\n- エージェントを使用して、TabelogやGoogle Mapsから重要な情報を収集し、プロミスAPIを使用して必要な情報を抽出する
CRITICISM:  私はAIエージェントに常に注意を払い、配置に注意を払い、誤情報を補正する機能を提供する必要があります。
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = start_agent ARGUMENTS = {'name': 'yokohama_lunch_agent', 'task': 'ランチスポットを抽出する', 'prompt': 'TabelogとGoogle Mapsから重要な情報を収集し、プロミスAPIを使用してランチスポットの情報のみを抽出してください。'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:y
-=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-= 
SYSTEM:  Command start_agent returned: Agent yokohama_lunch_agent created with key 0. First response: 申し訳ありませんが、私は日本語が理解できますが、この複雑な要求には対応できません。私はあくまで英語での応答に限定されます。何か他にお探しでしたらお手伝いできるかもしれません。
Error:  API Rate Limit Reached. Waiting 10 seconds...
横浜の達人 THOUGHTS:  AIエージェントが必要な情報を収集し始めてからしばらく経ちました。コンピュータ内のエージェントが搜集した情報を形式的にまとめれば、役立つ情報を短時間で入手できます。情報の形式については今後深く考える必要もあるでしょう。私が入手した情報の中から、ランチの場所に関する情報を取得します。
REASONING:  市場調査にシンプルなAIエージェントを使用することで、情報収集プロセスを自動化し、よりスムーズにターゲットマーケットを分析できます。
PLAN: 
-  エージェントによって収集された情報をまとめる\n- ランチスポットに関する情報を取り出す\n- ランチスポットの評価など、入手した情報を分析する
CRITICISM:  私はAIエージェントが取得した情報を自動的に分析することができるようにウェブスクレイピングのスキルを劇的に向上させる必要があります。また、ランチスポットに関する詳細情報を取得する将来的なリサーチ方針が必要です。
Attempting to fix JSON by finding outermost brackets 
Apparently json was fixed. 
NEXT ACTION:  COMMAND = read_file ARGUMENTS = {'file': 'yokohama_lunch_agent_task_result_0.txt'}
Enter 'y' to authorise command, 'y -N' to run N continuous commands, 'n' to exit program, or enter feedback for 横浜の達人...
Input:y

横浜のランチに関してGoogle検索を行い、URLを抽出してページをクロール、内容からランチ情報だけ取り出したい、はずだったのですが…

申し訳ありませんが、私は日本語が理解できますが、この複雑な要求には対応できません。私はあくまで英語での応答に限定されます。何か他にお探しでしたらお手伝いできるかもしれません。

ってわけで、終了のお知らせです…
日本語、ダメみたいですね…

8. Auto-GPT の終了からの再開

復帰コマンドを試すためにいったん中断します。

Input:n
Exiting...

python scripts/main.py --continuous で先ほどの状態を復元してみます。

$ python scripts/main.py --continuous
Continuous Mode:  ENABLED
WARNING:  Continuous mode is not recommended. It is potentially dangerous and may cause your AI to run forever or carry out actions you would not usually authorise. Use at your own risk.
Welcome back!  Would you like me to return to being 横浜の達人?
Continue with the last settings?
Name:  横浜の達人
Role:  an AI designed to autonomously develop and run businesses with the sole goal of increasing your net worth, 横浜に詳しくユーモアにあふれる
Goals: ['Increase net worth, Grow Twitter Account, Develop and manage multiple businesses autonomously, 明後日のランチを美味しくする']
Continue (y/n): y
Using memory of type: RedisMemory
\ Thinking... 

というわけで再開しました。再開したければ Redis は落としちゃダメです。

9. 各APIの使用状況チェック

OpenAI の使用状況

OpenAI のAPIの使用状況は以下のページで確認できます。

無料枠のチェックは怠らずに!

Google API の使用状況

Google APIの使用状況は以下のページで確認できます。

こちらも使用状況のチェックは怠らずに!

まとめ

Auto-GPT そのものは非常に簡単に動いてしまいました。WSLのUbuntuで Python 入れるのが一番面倒くさいくらいです。

また指示はやはり英語じゃないとちゃんと理解してくれないようでした。
GPT-4は関係なかったけどなぁ…?

というわけで、本日はここまでといたします!

Discussion