![見出し画像](https://assets.st-note.com/production/uploads/images/101181794/rectangle_large_type_2_a5829cfa14785e6e21f91c63d8530b42.png?width=1200)
ChatGPT Retrieval Plugin を試す
「ChatGPT Retrieval Plugin」を試したので、まとめました。
・Python 3.10.10
・LlamaIndex v0.4.38
・LangChain v0.0.123
1. ChatGPT Retrieval Plugin
「ChatGPT Retrieval Plugin」は、情報提供を許可した個人・団体のデータにアクセスできる「ChatGPTプラグイン」です。OpenAI公式の「ChatGPTプラグイン」の実装になります。
2. ベクトルデータベースの準備
「ChatGPT Retrieval Plugin」は、ドキュメントの埋め込みの保存とクエリにベクトルデータベースを使います。
以下のデータベースに対応しています。
・pinecone
・weaviate
・zilliz
・milvus
・qdrant
・redis
今回は、「Pinecone」を使います。
(1) 「Pinecone」のアカウントを作成してログイン。
(2) 以下の設定でインデックスを作成。
・Index Name : test - インデックス名
・Dimensions : 1536 - OpenAIの埋め込み(ada)の次元数
・Metric : euclidan - ユークリッド距離メトリック
・Pod Type : S1 - 低コストでスループット
![](https://assets.st-note.com/img/1679790874626-4iTcfqnSn9.png?width=1200)
(3) 「Pinecone Console」の「API Keys」で「PineconeのAPIキー」「Pineconeの環境名」を確認。
後ほど環境変数で設定します。
![](https://assets.st-note.com/img/1679791381839-CnVF443GyG.png?width=1200)
3. JWTトークンの準備
「jwt.io」でJWTトークンを作成します。APIへのリクエストを認証するためのシークレットトークンです。
今回は、ローカルで動作確認したいだけなので、「Encoded」をコピーするだけでも動作しました。本番ではもちろんきちんと設定する必要あります。
![](https://assets.st-note.com/img/1679791883211-ZI0EdUDxsC.png?width=1200)
4. サーバーの起動
サーバーの起動手順は、次のとおりです。
(1) ローカルPCで「Python 3.10」の仮想環境を準備。
(2) 「chatgpt-retrieval-plugin」リポジトリのクローン後、ルートフォルダに移動。
$ git clone https://github.com/openai/chatgpt-retrieval-plugin.git
$ cd chatgpt-retrieval-plugin
(3) poetryのインストール。
$ pip install poetry
(4) 「chatgpt-retrieval-plugin」用のPython仮想環境の作成し、有効化し、依存パッケージをインストール。
$ poetry env use python3.10
$ poetry shell
$ poetry install
(5) 環境変数の準備
macOSでは「.zshrc」に以下を追記後、「source ~/.zshrc」で反映させます。
export DATASTORE=pinecone
export BEARER_TOKEN=<BEARER_TOKEN>
export OPENAI_API_KEY=<OpenAI_APIのAPIキー>
export PINECONE_API_KEY=<PineconeのAPIキー>
export PINECONE_ENVIRONMENT=<Pineconeの環境名>
export PINECONE_INDEX=<インデックス名>
・DATASTORE : データストア名
・BEARER_TOKEN : JWTトークン
・OPENAI_API_KEY : OpenAI APIキー
・PINECONE_API_KEY : PineconeのAPIキー
・PINECONE_ENVIRONMENT : Pineconeの環境
・PINECONE_INDEX : Pineconeのインデックス名
(6) サーバーの実行。
$ poetry run start
(7) ブラウザで「http://0.0.0.0:8000/docs」(または http://localhost:8000/docs)にアクセス。
OpenAPIドキュメントが開きます。APIエンドポイントを動作確認できます。Bearerトークンが必要です。
![](https://assets.st-note.com/img/1679790492552-7VivyfG0Ix.png?width=1200)
5. LlamaIndexからの操作
「LlamaIndex」で、「ChatGPT Retrieval Plugin」を操作します。
(1) ローカルPCで「Python 3.10」の仮想環境を準備。
(2) 「Jupyter Notebook」パッケージのインストールして起動。
$ pip install jupyter
$ jupyter notebook
(3) 「新規 → Python 3」でJupyterのノートブックを作成。
(4) 「LlamaIndex」パッケージのインストール。
# パッケージのインストール
!pip install llama-index
(5) 環境変数の準備。
以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークンを指定します。(有料)
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"
(6) ログレベルの設定。
import logging
import sys
# ログレベルの設定
logging.basicConfig(stream=sys.stdout, level=logging.INFO, force=True)
(7) 「data」フォルダを作成し、ドキュメント「bocchi.txt」を配置。
「bocchi.txt」は以下で使ったものと同様になります。
(8) ドキュメントの読み込み。
from llama_index import SimpleDirectoryReader
# ドキュメントの読み込み
documents = SimpleDirectoryReader("data").load_data()
(9) ChatGPTRetrievalPluginIndexの作成。
「ChatGPT Retrieval Plugin」経由で、ドキュメントを埋め込みに変換して、Pineconeに格納されます。
from llama_index.indices.vector_store import ChatGPTRetrievalPluginIndex
# ChatGPTRetrievalPluginIndexの作成
index = ChatGPTRetrievalPluginIndex(
documents,
endpoint_url="http://localhost:8000",
bearer_token=os.getenv("BEARER_TOKEN"),
)
(10) 質問応答。
# 質問応答
response = index.query("ぼっちちゃんの得意な楽器は?")
print(response)
ぼっちちゃんの得意な楽器はギターです。
6. LangChainからの操作
「LangChain」で、「ChatGPT Retrieval Plugin」を操作します。
(1) ローカルPCで「Python 3.10」の仮想環境を準備。
(2) 「Jupyter Notebook」パッケージのインストールして起動。
$ pip install jupyter
$ jupyter notebook
(3) 「新規 → Python 3」でJupyterのノートブックを作成。
(4) 「LangChain」パッケージのインストール。
# パッケージのインストール
!pip install langchain
!pip install openai
(5) 環境変数の準備。
以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークンを指定します。(有料)
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"
(6) ChatGPTPluginRetrieverの準備。
from langchain.retrievers import ChatGPTPluginRetriever
# ChatGPTPluginRetrieverの準備
retriever = ChatGPTPluginRetriever(
url="http://0.0.0.0:8000",
bearer_token=os.getenv("BEARER_TOKEN")
)
(7) RetrievalQAチェーンの生成。
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
# RetrievalQAチェーンの生成
qa = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=retriever
)
(8) 質問応答。
# 質問応答
qa.run("ぼっちちゃんの得意な楽器は?")
' ボッチちゃんの得意な楽器はギターです。'
【おまけ】 ChatGPTプラグインの用語
ChatGPTプラグインの用語が混乱しやすいので整理しました。
◎ ChatGPTプラグイン
・ChatGPT Retrival Plugin : ChatGPTプラグインの実装の1つ
◎ LlamaIndex
・ChatGPTRetrievalPluginIndex : インデックスとして利用
・LlamaHub chatgpt_plugin : コネクタとして利用
◎ LangChain
・AIPluginTool : ツールとして利用
・ChatGPTPluginRetriever : リトリーバーとして利用
この記事が気に入ったらサポートをしてみませんか?