Auto-GPTハンズオン ~ インストールから日本語出力の設定まで

# Auto-GPTハンズオン ~ インストールから日本語出力の設定まで

この記事では、大規模言語モデルが急速に進化する中で注目を集めている自律型AI、「Auto-GPT」のハンズオンについて取り扱います。
Auto-GPTのインストールから日本語出力の設定までの手順をステップバイステップに説明していきます。


## 目次

  - [目次](#目次)
  - [Auto-GPTの紹介](#auto-gptの紹介)
    - [機能\&特徴](#機能特徴)
  - [環境設定](#環境設定)
    - [コードのダウンロード](#コードのダウンロード)
    - [必要なパッケージーのインストール](#必要なパッケージーのインストール)
    - [APIキーの設定](#apiキーの設定)
    - [日本語出力の設定](#日本語出力の設定)
  - [簡単な例](#簡単な例)
    - [Auto-GPTのロールとゴールの設定](#auto-gptのロールとゴールの設定)
    - [Auto-GPTの起動](#auto-gptの起動)
    - [結果の表示とフィードバックの入力](#結果の表示とフィードバックの入力)
    - [ユーザーフィードバックに対するAuto-GPTの反応](#ユーザーフィードバックに対するauto-gptの反応)
  - [Auto-GPTの動作を理解する](#auto-gptの動作を理解する)
  - [最後に](#最後に)

## Auto-GPTの紹介

Auto-GPTは、GPT-4やGPT-3.5-turboを用いた革新的なオープンソースアプリケーションとして広く認識されています。

初めて公開されたのは2023年03月30日で、それからわずかな期間で注目を集め始めました。その人気は爆発的で、2023年05月24日の時点では、Top 100 Github Repository(獲得Star数基準)において28位にまで上昇しています。

![Top 100 Github Repositoryでは28位 (2023年05月24日時点)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665774/0c29aa08-6c27-f572-df33-209f6d002dd2.png)

同時期に公開された他の自律型AI（ユーザーが設定したゴールを自律的に達成するAI）に比べて、Auto-GPTは圧倒的な支持を得ています。ただし、これは各AIの機能や仕組みが異なるため、一概に優位性を示すものではありません。

![他自律型AIのGithub Repositoryの獲得star数の時系列グラフ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665774/5fcb555d-36a2-7d09-864a-45382f8a1ac7.png)


### 機能&特徴

「Auto-GPT」はその強力な特徴と機能により、注目を浴びています。以下に、これらの特徴と機能を簡潔にまとめてみました。

【特徴】
Auto-GPTは与えられた役割（Role）と目的（Goals）を達成するために、以下のプロセスを自律的に繰り返します。

1. 考える (Thoughts)
2. 推論する (Reasoning)
3. 計画を立てる (Plan)
4. 自己レビューを行う (Criticism)
5. 次の行動を決定する (Next action)

【機能】
Auto-GPTは以下のような多彩な機能を持っています。

1. インターネット接続：最新の情報をユーザーに提供するために、インターネットに接続し情報を検索、データを収集します。
2. 長期記憶と短期記憶の管理：過去の会話を記憶し活用したり、アクティビティやサブタスクを把握するために短期記憶を用いたりします。
3. テキスト生成：GPT-4インスタンスを用いて他のチャットボットと比較してより複雑で正確なテキストを生成します。
4. Webサイトやプラットフォームへの接続：主要なWebサイトやプラットフォームと連携し、自動化された操作（メール送信や予約、ソーシャルメディアへの投稿など）を可能にします。
5. ファイルの保存と要約：GPT-3.5を利用したファイルの保存・要約が可能で、データの整理・管理を効率的に行います。
6. プラグインによる拡張性：新機能を追加したり、機能を拡張したりするためのプラグインに対応しています。

| ![ChatGPTでは目的を達成するまで人間と言語モデルがやりとりを続ける](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665774/df815fc0-7735-ff4c-f1b8-0bc785c88f32.png) | ![7c702a40-2dd9-44c4-adab-5aca9d578944.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665774/82b02560-17c0-acf8-a37f-c92c6452a473.gif) |
|---|---|
| ChatGPTは目的を達成するまで人間と言語モデルがやりとりを続ける| Auto-GPTは役割と目的を与えるとそれを達成するまで言語モデルが自己対話を続ける |





## 環境設定

本節では、Auto-GPTの動作を確認するための環境構築を行います。既にPythonとGit環境が整っていることを前提として進めます。

### コードのダウンロード

最新の安定版リリースをAuto-GPTの公式GitHuhよりダウンロードします。
本記事では、大部分のバグ修正が完了し、安定性が保証されている```Auto-GPT v0.3.0```を用いて進めます。

https://github.com/Significant-Gravitas/Auto-GPT/releases/tag/v0.3.0

### 必要なパッケージーのインストール

必要なパッケージは```requirements.txt```を用いてインストールします。以下のコマンドを実行してください:

```bash
pip install -r requirements.txt
```

### APIキーの設定

APIキーの設定に当たって、事前準備として```.env.template```をコピーし、```.env```ファイルを生成します。
```.env```ファイルではAuto-GPTが外部APIと連携するためのAPIキーを設定を行います。

Auto-GPTのブレインの役割を果たすGPT-3.5/4との連携のためにはOpenAI APIの設定が必須です。
OpenAI APIキーの取得については以下のリンクに詳細な手順が記載されています。

https://platform.openai.com/overview

その他に、設定を推奨するAPIキーとして、以下のものがあります。

- ベクトルデータベースAPI
- Google API

ベクトルデータベースAPIはAuto-GPTが調査した情報を保存する、いわばGPT-4の外付けメモリーの役割を果たします。調査した情報を保存しておくことで、同じ情報を再度調査することなく、より多くの情報を取得することができます。ベクトルデータベースを使用しない場合は、調査した内容をローカルに保存します。

`.env`ファイルからは設定できるベクトルデータベースAPIは以下のものがあります。

- [pinecone](https://www.pinecone.io/)
- [redis](https://redis.io/)
- [milvus](https://milvus.io/)
- [weaviate](https://weaviate.io/)

それぞれのAPIキーの取得については以下のリンクに詳細な手順が記載されています。

https://docs.agpt.co/configuration/memory/

Google APIはGoogle Search API を使ってGoogle検索の結果を返すために使用します。
手順は「Google Cloud Consoleより新しいプロジェクトの作成」と「カスタム検索APIの設定」となります。

Google APIキーの取得は以下のリンクに詳細な手順が記載されています。

https://docs.agpt.co/configuration/search/

### 日本語出力の設定

Auto-GPTにロールと制約条件を与えるシステムプロンプトは `/autogpt/prompts/generator.py`ファイルの`PromptGenerator`クラスの`generate_prompt_strin`メソッドより生成されます。このプロンプトに対して日本語で答えてもらうため、以下のプロンプトを追加します。

```python
    def generate_prompt_string(self) -> str:
        """
        Generate a prompt string based on the constraints, commands, resources,
            and performance evaluations.
        Returns:
            str: The generated prompt string.
        """
        formatted_response_format = json.dumps(self.response_format, indent=4)
        return (
            f"Constraints:\n{self._generate_numbered_list(self.constraints)}\n\n"
            "Commands:\n"
            f"{self._generate_numbered_list(self.commands, item_type='command')}\n\n"
            f"Resources:\n{self._generate_numbered_list(self.resources)}\n\n"
            "Performance Evaluation:\n"
            f"{self._generate_numbered_list(self.performance_evaluation)}\n\n"
            "You should only respond in JSON format as described below \nResponse"
            f" Format: \n{formatted_response_format} \nEnsure the response can be"
            " parsed by Python json.loads\n"

            # 日本語で答えてもらうための追加プロンプト
            "Ensure the 'thoughts' in response must be translated in Japanese.\n"
            "回答の'thoughts'は必ず日本語に翻訳されていることを確認してください。\n"
        )
```

## 簡単な例

### Auto-GPTのロールとゴールの設定

Auto-GPTのロールとゴールはコマンドより与えることもできますが、ここでは`ai_settings.yaml`を用いて設定します。この例では、大規模言語モデル関連のビジネス案件を自律的に調査するロールをBrainPad_GPT君に与えます。詳細なロールとゴールは以下に示します。

ここれ`api_budget`を設定することより過剰な課金を防ぐことができます。`0.0`の時は上限がないことを意味します。

```yaml
ai_name: BrainPad_GPT
ai_role: an AI desinged to autonomously investigate business cases concerned with large-language model (LLM). LLM（大規模言語モデル）関連のビジネス案件を自律的に調査するために開発されたAIです。
api_budget: 0.0
ai_goals:
- Analyze and interpret complex business data to provide actionable insights and recommendations for strategic decision-making. 複雑なビジネスデータを分析・解釈し、戦略的な意思決定のための実用的な洞察と提案を提供する。
- Translate business findings and recommendations into clear, concise Japanese to facilitate communication with Japanese clients or partners. 日本のクライアントやパートナーとのコミュニケーションを円滑にするために、ビジネス上の発見や提案を明確で簡潔な日本語に翻訳する。
- Continuously learn and adapt to evolving business scenarios and trends to provide up-to-date and relevant business intelligence. 最新のビジネス情報を提供するため、常に学習し、進化するビジネスシナリオやトレンドに適応する。
- Identify potential business opportunities and risks through autonomous investigation of global markets and industries. グローバルな市場や業界を調査し、潜在的なビジネスチャンスやリスクを特定する。
- Facilitate cross-cultural business understanding by providing a nuanced translation of business contexts, both from and into Japanese. ビジネスの文脈を日本語から、または日本語にニュアンス豊かに翻訳し、異文化間のビジネス理解を促進する。
```

### Auto-GPTの起動

`run.sh`を実行することでAuto-GPTを起動します。コマンドに`run.sh`をしましょう。

起動とともに`logs`と`autogpt/auto_gpt_workspace`のフォルダが生成されます。Auto-GPTが調査した内容や出力結果が保存されます。

`run.sh`を実行すると以下のように`ai_settings.yaml`の内容通りに調査を進めるかを確認するメッセージが表示されます。`y`を入力して調査を始めます。

```bash
Welcome back!  Would you like me to return to being BrainPad_GPT?
  Asking user via keyboard...
Continue with the last settings?
Name:  BrainPad_GPT
ス案件を自律的に調査するために開発されたAIです。e business cases concerned with large-language model (LLM). LLM（大規模言語モデル）関連のビジネ  
スデータを分析・解釈し、戦略的な意思決定のための実用的な洞察と提案を提供する。', 'Translate business findings and recommendations into clear, concise Japanese to facilitate communication with Japanese clients or partners. 日本のクライアントやパートナーとのコミュニケーションを円滑にするために、ビジネス上の発見や提案を明確で簡潔な日本語に翻訳する。', 'Continuously learn and adapt to evolving business scenarios and trends to provide up-to-date and relevant business intelligence. 最新のビジネス情報を提供するため、常に学習し、進化するビジネスシナリオやトレンドに適応する。', 'Identify potential business opportunities and risks through autonomous investigation of global markets and industries. グローバルな市場や業界を調査し、潜在的なビジネスチャンスやリスクを特定する。', 'Facilitate cross-cultural business understanding by providing a nuanced translation of business contexts, both from and into Japanese. ビジネスの文脈を日本語から、または日本語にニュアンス豊かに翻訳し、異文化間のビジネス理解を促進する。']
API Budget: infinite
Continue (y/n): y
```

### 結果の表示とフィードバックの入力

早速、以下のメッセージが表示されます。ゴールを達成するための計画(PLAN)と次の行動(NEXT ACTION)を提示しています。

```bash
 THOUGHTS:  最初に何をすべきかを決定するために、現在のビジネス状況を把握する必要があります。これには、市場動向、競合他社の動向、および自社の強みと弱みを分析することが含まれます。これらの情報を収集するために、ウェブサイトを閲覧することができます。
REASONING:  ビジネス状況を理解することは、戦略的な意思決定を行うために重要です。市場動向や競合他社の動向を把握することで、自社の強みと弱みをより明確に把握することができます。
PLAN: 
-  市場動向、競合他社の動向、および自社の強みと弱みを分析する
-  ウェブサイトを閲覧して情報を収集する
-  収集した情報を分析して、戦略的な意思決定を行う
CRITICISM:  現在のビジネス状況を把握することは、重要ですが、より具体的なアクションプランが必要です。具体的な目標を設定し、それに向けて行動することが重要です。
NEXT ACTION:  COMMAND = browse_website ARGUMENTS = {'url': '<url>', 'question': '<what_you_want_to_find_on_website>'}
  Enter 'y' to authorise command, 'y -N' to run N continuous commands, 's' to run self-feedback commands'n' to exit program, or enter feedback for ...
  Asking user via keyboard...
Input:
```

フィードバックとして以下のコマンドを入力できます：

- `y`: 次の行動を許可する。
- `y -N`: N回の連続コマンドを実行する。
- `s`: 自己フィードバックコマンドを実行する。
- `n`: プログラムを終了する。

またはメッセージを入力することで情報をより詳しく伝えることができます。

ここで、Auto-GPTが提示した次の行動は有効なurlに見えないです。`y -2`を入力して、Auto-GPTがどのように反応するかを見てみましょう。

```bash
NEXT ACTION:  COMMAND = browse_website ARGUMENTS = {'url': '<url>', 'question': '<what_you_want_to_find_on_website>'}
```

### ユーザーフィードバックに対するAuto-GPTの反応

以下に2回連続に実行された結果が表示されます。

1回目ではurlが有効でないことに気づき、`google`で'競合他社の戦略、製品、サービス、価格などに関する情報'を検索することを新しく提案します。

```bash
SYSTEM:  Command browse_website returned: Error: Invalid URL format
 THOUGHTS:  ビジネス状況を把握するために、競合他社の動向を調査することが重要です。競合他社の戦略や製品、サービス、価格などを調査することで、自社の強みと弱みをより明確に把握することができます。競合他社の情報を収集するために、ウェブサイトを閲覧することができます。
REASONING:  競合他社の動向を調査することは、自社の強みと弱みを把握するために重要です。競合他社の戦略や製品、サービス、価格などを調査することで、自社の差別化ポイントを見つけることができます。
PLAN: 
-  競合他社の戦略、製品、サービス、価格などを調査する
-  ウェブサイトを閲覧して情報を収集する
-  収集した情報を分析して、自社の強みと弱みを把握する
CRITICISM:  競合他社の情報を収集することは重要ですが、自社の強みと弱みを把握するためには、より具体的なアクションプランが必要です。自社の差別化ポイントを見つけ、それに向けて行動することが重要です。
NEXT ACTION:  COMMAND = browse_website ARGUMENTS = {'url': 'https://www.google.com/', 'question': '競合他社の戦略、製品、サービス、価格などに関する情報'}
```

2回目の実行では、検索した内容を表示しながら、その内容をローカルに保存することを提案します。ここで、`y`を入力すると`autogpt/auto_gpt_workspace/analysis.txt`ファイルが生成されます。次のコマンドに`n`を入力して、この例を一旦終了しましょう。

```bash
[WDM] - Downloading: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 8.81M/8.81M [00:00<00:00, 18.1MB/s]
  Text length: 190 characters
  Adding chunk 1 / 1 to memory
  Summarizing chunk 1 / 1 of length 190 characters, or 268 tokens
  Added chunk 1 summary to memory, of length 302 characters
  Summarized 1 chunks.
SYSTEM:  Command browse_website returned: ("Answer gathered from website: The question cannot be answered using the text. The text discusses various options and features available on Google, such as searching for Doodles, adjusting search settings, and reporting inappropriate search suggestions. It also mentions the Japanese advertising business and privacy policies. \n \n Links: ['Googleについて (https://about.google/?fg=1&utm_source=google-JP&utm_medium=referral&utm_campaign=hp-header)', 'ストア (https://store.google.com/JP?utm_source=hp_header&utm_medium=google_ooo&utm_campaign=GS100042&hl=ja-JP)', 'Gmail (https://mail.google.com/mail/&ogbl)', '画像 (https://www.google.co.jp/imghp?hl=ja&ogbl)', ' (https://www.google.co.jp/intl/ja/about/products)']", <selenium.webdriver.chrome.webdriver.WebDriver (session="4a2acbdbed44895ea7d87090f0db4ff5")>)
 THOUGHTS:  競合他社の情報を収集するために、収集した情報を分析する必要があります。分析には、データを整理し、傾向を把握するためのグラフや表を作成することが重要です。また、競合他社の戦略や製品、サービス、価格などを比較することで、自社の強みと弱みを把握することができます。
REASONING:  競合他社の情報を収集することは重要ですが、それを分析しなければ意味がありません。データを整理し、傾向を把握することで、自社の強みと弱みを把握することができます。
PLAN: 
-  収集した情報を整理する
-  データをグラフや表にまとめる
-  競合他社の戦略や製品、サービス、価格などを比較する
-  自社の強みと弱みを把握する
CRITICISM:  競合他社の情報を収集し、分析することは重要ですが、それだけでは意味がありません。自社の強みと弱みを把握し、それに基づいて行動することが重要です。
NEXT ACTION:  COMMAND = write_to_file ARGUMENTS = {'filename': 'root/autogpt/auto_gpt_workspace/analysis.txt', 'text': '競合他社の情報を収集し、収集した情報を整理して、データをグラフや表にまとめます。競合他社の戦略や製品、サービス、価格などを比較し、自社の強みと弱みを把握します。'}
```

## Auto-GPTの動作を理解する

このセクションでは、Auto-GPTが内部でどのような処理を行っているかを詳述し、その動作原理を理解することを目指します。Auto-GPTの内部処理は、`/autogpt/agent/agent.py`内の`Agent`クラスの`start_interaction_loop`メソッドによって主に実行されており、その主要なステップは次の通りです：

1. 変数の初期化とループの開始：AUTO-GPTのロールとゴールを設定して、対話ループを開始します。
2. AIへのメッセージの送信とレスポンスの取得:`THOUGHTS`、`REASONING`、`PLAN`、`CRITICISM`, `NEXT ACTION`のメッセージが表示されます。
3. ユーザーからの入力の受け取り：ユーザーのフィードバックや会話の終了命令が`Input`ステップにより受け取られます。
4. ユーザーの入力に基づくコマンドの実行：ユーザーの許可を基に、`NEXT ACTION`の提案内容が実行されます。
5. 実行したコマンドから得られた結果をメッセージ履歴に追記：`SYSTEM`により、実行したコマンドから得られた結果が表示されます。その結果はメッセージ履歴に追記されます。
6. 2.に戻る：2.に戻って上記の対話ループが継続されます。

この一連の流れにより、Auto-GPTは対話的にユーザーとのコミュニケーションを実現し、ユーザーからの指示に応じて適切な行動を自律的に選択・実行します。

## 最後に

この記事では、大規模言語モデルの一つである自律型AI「Auto-GPT」の紹介とそのインストールから日本語設定までの手順をステップバイステップで説明しました。また、Auto-GPTの内部動作についても詳しく解説しました。

Auto-GPTはその自律性と拡張性、そして強力なGPT-4とGPT-3.5-turboを用いたテキスト生成能力により、多くの可能性を持っています。これからの進化に期待しつつ、この記事がAuto-GPTをより深く理解し活用するための一助になれば幸いです。

しかし、どのような強力なAIツールでも、その使い方一つでその価値は大きく変わります。ユーザーのニーズに合わせた活用と、適切なデータ管理とプライバシーの確保に十分注意しながら、Auto-GPTの可能性を探求していきましょう。