ARVISとは、ChatGPT等のLLMを使って、機械学習の複雑なタスクを自動的に解くことを目的とした自律型AIエージェントです。オープンソースで開発が進められています。
今回は、JARVISをローカル環境のCLIで動作させるところまでを試してみます。
目次
- はじめに
1.1 自律型AIエージェントとは?
1.2 JARVISとは?
1.3 Hugging Faceとは? - JARVISのシステム概要
- OpenAI APIとHugging Faceトークンの取得
3.1 OpenAI APIキーの取得
3.2 Hugging Faceトークンの取得 - JARVISのセットアップ
4.1 はじめに: デフォルト設定とライト設定
4.2 Githubリポジトリのクローン
4.3 必要なライブラリのインストール
4.4 OpenAI APIキーとHugging Faceトークンの設定 - JARVISをCLIモードで動かしてみる
- まとめ
- 参考資料
1. はじめに
1.1 自律型AIエージェントとは?
自律型AIエージェントとは、人間が与えたゴールに対して、自動的にタスクを分解して行動計画を立て、実行を行うようなAIの一種をさします。
1.2 JARVISとは?
JARVISは、大規模言語モデル(LLM)を使って、機械学習の複雑なタスクを自動的に解くことを目的として作られているシステムです。
具体的には、ChatGPT等のLLMをAIモデルの管理者として利用します。LLMに対して、HuggingFace上の様々なAIモデルを接続します。これによって、機械学習の複雑なタスクに対して、自動的に適切なモデルを選択して予測を行い、その結果に基づいた返答をすることを可能にします。
オープンソースで開発されている類似のシステムとして、Auto-GPTやBabyAGIなどが存在しています。
1.3 Hugging Faceとは?
Hugging Faceは、機械学習アプリケーションを作成するためのライブラリ及びプラットフォームを開発しているUSの会社です。
自然言語処理のためのモデルを扱うライブラリを開発しているほか、ユーザーがモデルやデータセットを共有するためのリポジトリを提供しています。
2. JARVISのシステム概要
JARVISは、HuggingGPTというフレームワークに基づいて、機械学習のタスクを自動的に解いていきます。
HuggingGPTは、以下のような流れで自動的にタスクを解き、回答を生成するようなフレームワークです。
- タスク計画:指示を受け取ると、その指示をタスクに分割します。
- モデル選択:Hugging Faceから各タスクに対応するモデルを選択します。
- タスク実行:モデルを使って予測を行います。
- レスポンスの生成:予測結果を使って回答を生成します。
3. OpenAI APIとHugging Faceトークンの取得
3.1 OpenAI APIキーの取得
OpenAIのアカウントページでAPIキーを発行することができます。
OpenAIのAPIキーの発行方法は、LangChainでOpenAIのAPIを使用する手順の記事を参考にしてください。
3.2 Hugging Faceトークンの取得
HuggingFaceのアカウント情報ページにアクセスして、APIキーを取得します。
![スクリーンショット 2023-07-04 19.09.51.png (41.8 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/04/93654/d04e5779-6a89-498a-8bc7-a5046d99bbe5.png)
![スクリーンショット 2023-07-04 19.10.07.png (26.3 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/04/93654/97509a4a-3d5a-4cac-8388-74f72871350f.png)
HuggingFaceのトークンは、利用者側は無料で使うことができます(2023/7/5時点)
4. JARVISのセットアップ
4.1 はじめに: デフォルト設定とライト設定
JARVISでは、「デフォルト」と「ライト」の2つの実行方法があります。2つの実行方法の違いは使用するモデルをダウンロードするか否かです。
「デフォルト」では、ダウンロードしたモデルを使用します。「ライト」では、モデルをダウンロードせずHuggingFace APIからモデルにアクセスします。
今回は簡単に動かしてみるために、「ライト」で実行してみます。
※ デフォルトで実行する場合、ストレージに284GB以上の空き容量を用意する必要があります。
4.2 Githubリポジトリのクローン
Githubリポジトリをクローンします。
■bash
git clone https://github.com/microsoft/JARVIS.git
4.3 必要なライブラリのインストール
■bash
# venvの作成 cd JARVIS python -m venv .venv source .venv/bin/activate # 必要なライブラリのインストール pip install torch torchvision torchaudio pip install -r ./server/requirements.txt
4.4 OpenAI APIキーとHugging Faceトークンの設定
ライト設定で起動する場合の設定ファイル./server/configs/config.lite.yamlを開きます。
ファイルの2行目のREPLACE_WITH_YOUR_OPENAI_API_KEY_HEREをOpenAI API Keyに置き換えます。ファイルの4行目REPLACE_WITH_YOUR_OPENAI_API_KEY_HEREをHugging Faceトークンに置き換えます。
■./server/configs/config.lite.yaml
openai: api_key: REPLACE_WITH_YOUR_OPENAI_API_KEY_HERE huggingface: token: REPLACE_WITH_YOUR_HUGGINGFACE_TOKEN_HERE # required: huggingface token @ https://huggingface.co/settings/tokens
5. JARVISをCLIモードで動かしてみる
JARVISをCLIモードで実行してみます。ターミナル上で以下のコマンドを実行します。
■bash
cd server python awesome_chat.py --config configs/config.lite.yaml --mode cli
このコマンドを実行すると、JARVISが起動して、ユーザーが指示を入力できるようになります。
![スクリーンショット 2023-07-05 15.58.03.png (33.1 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/05/93654/10f3929f-c761-47a9-9b04-aec6a31a940a.png)
ここでは、JARVISのREADMEに例題としてあげられている、画像認識の問題を実行してみます。
具体的には、以下の3枚の画像の中に写っているシマウマの数を数えてもらいます。
a.jpg
![a.jpg (83.2 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/05/93654/841331b6-af96-4721-839a-0d564cd39254.jpg)
b.jpg
![b.jpg (136.4 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/05/93654/32af1a20-2e35-4f9d-b141-005d39dbd1d2.jpg)
c.jpg
![c.jpg (66.7 kB)](https://img.esa.io/uploads/production/attachments/16757/2023/07/05/93654/466f6c82-8b6f-4889-9b83-36b25c15fdde.jpg)
[ User ]: 3枚の写真A: /examples/a.jpg, B: /examples/b.jpg, C: /examples/c.jpg があります。これらの写真に合計何頭のシマウマが写っているか数えてください。 応答は日本語に翻訳してください。
すると、以下のようにシマウマの頭数を返してくれます。その過程でどのようなモデルを使って予測をしたかも返答してくれます。
[ Jarvis ]: あなたのリクエストに基づいて、私は以下の3枚の写真A: /examples/a.jpg, B: /examples/b.jpg, C: /examples/c.jpgに合計何頭のシマウマが写っているか数えました。 まず、写真Aには、猫と観葉植物が写っていることを確認しました。その後、Facebook/detr-resnet-50モデルを使用して、写真Aからオブジェクト検出を行いました。結果として、猫が1頭、観葉植物が1頭検出されました。 次に、写真Bには、シマウマが1頭写っていることを確認しました。その後、Facebook/detr-resnet-50モデルを使用して、写真Bからオブジェクト検出を行いました。結果として、シマウマが1頭検出されました。 最後に、写真Cには、シマウマが3頭写っていることを確認しました。その後、Facebook/detr-resnet-50モデルを使用して、写真Cからオブジェクト検出を行いました。結果として、シマウマが3頭検出されました。 結論として、3枚の写真A: /examples/a.jpg, B: /examples/b.jpg, C: /examples/c.jpgに合計何頭のシマウマが写っているか数えると、全部で4頭のシマウマが写っていることがわかりました。
6. まとめ
今回は、ChatGPTを用いた自律型AIエージェントJARVISを紹介して、ローカル環境で実際に動作させるところまで試してみました。実際にターミナル上でJARVISを動かして、画像認識のモデルを使用して写真に写っているシマウマの頭数を数えることができました。
JARVISは画像のほか、テキストや音声データも扱うことができます。また、指示を元に画像を生成することもできます。今後はそのようなタスクも試してみたいと思います。
JARVISはOpenAIおよびHuggingFace上に公開されているモデルを使用するため、既存のモデルを使った推論を行うことが可能な一方、新規に機械学習モデルを作成することはできないようです。