見出し画像

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 - 低コストでスループット

(3) 「Pinecone Console」の「API Keys」で「PineconeのAPIキー」「Pineconeの環境名」を確認。
後ほど環境変数で設定します。

3. JWTトークンの準備

jwt.io」でJWTトークンを作成します。APIへのリクエストを認証するためのシークレットトークンです。

今回は、ローカルで動作確認したいだけなので、「Encoded」をコピーするだけでも動作しました。本番ではもちろんきちんと設定する必要あります。

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トークンが必要です。

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 : リトリーバーとして利用



いいなと思ったら応援しよう!