1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPT retrieval plugin 導入メモ

Last updated at Posted at 2024-01-27

はじめに

ChatGPTで自前のDB(PostgreSQL16)に保管したドキュメントから自然言語でQAをする仕組みを検証するために、前回までにPostgreSQL16とpgvectorを導入しました。
今回はいよいよChatGPT retrieval pluginを導入します。
特記事項なき場合は作業用の一般ユーザーでコマンド実行します。

OpenAI APIキーの取得

https://platform.openai.com/api-keys
こちらのサイトから自身のOpenAIのAPIキーを作成、取得します。
APIキーは作成したタイミングでしか確認できませんので、忘れずにテキストエディタなどにコピーし保管しましょう。
image.png

ChatGPT retrieval plugin の導入

基本的にはGitHubのドキュメントの内容で導入可能です。
https://github.com/openai/chatgpt-retrieval-plugin

前提パッケージの導入

PostgreSQLを利用するにはlibpgが必要でしたので、インストールしました。
本来であれば、ソースで導入したものを使うようにすべきかとは思いますが、今回は利用を優先したため、パッケージで導入しています。

apt install libpq5

Bearerトークンの取得

下記URLでBearerトークンを作成します。
https://jwt.io/
image.png
"your-256-bit-secret" の箇所に自身のOpenAI APIキーを入れて左側のトークンをコピーし保存しておきます。

ChatGPT retrival pluginのセットアップ

リポジトリからのクローン

git clone https://github.com/openai/chatgpt-retrieval-plugin.git

PostgreSQLにテーブルを作成

エラーが表示されずテーブルが作成できている事を別途確認してください。

cd 
psql -h localhost -p 5432 -U <DB接続ユーザー> -d <接続先DB> -f chatgpt-retrieval-plugin/examples/providers/supabase/migrations/20230414142107_init_pg_vector.sql

poetryで関連Pythonパッケージの導入と仮想環境準備

cd chatgpt-retrieval-plugin/
pip install poetry
poetry env use python3.10
poetry shell
poetry install

環境変数を設定し起動

下記の環境変数を設定し最後のpoetry run startコマンドで起動します。

export DATASTORE=postgres
export BEARER_TOKEN=<上の手順で取得したBearerトークン>
export PG_HOST=<PostgreSQLサーバのIPもしくはホスト名>
export PG_PORT=<PostgreSQLのポート>
export PG_USER=<接続ユーザー>
export PG_PASSWORD=<接続ユーザーのパスワード>
export PG_DB=<利用するPostgreSQLのDataBase>

poetry run start

ChatGPT retrieval plugin動作確認

http://<インストールしたサーバのIP>:8000 にアクセスし、下記WebUIが表示されることを確認します。
image.png
4つのエンドポイントがWebから操作できるようになっています。機能は以下のとおり

  • /upsert-file
    PDF、TXT(md)、DOCX、PPTXをアップロードし、そのテキストとメタデータをベクトルデータベースに保存します。
    ファイルはプレーンテキストに変換された上、約200トークンのチャンクに分割され、それぞれに一意のIDが付与されます。レスポンスとして、アップロードされたファイルの内容に対し、発行されたIDを返します。
  • /upsert
    こちらは、単一のドキュメントのテキストとメタデータをベクトルデータベースに保存します。
    チャンクの分割などはupsert-fileと同じです。
  • /query
    こちらのエンドポイントはChatGPTからベクトルデータベースにアクセスする際に使うエンドポイントになります。
    自然言語クエリを実行し、最も関連性の高いチャンクのテキストとメタデータ、関連度合いを返します。
  • /delete
    ベクトルデータベースに登録したドキュメントを削除します。

動作チェック

  1. 画面右上のAuthorizeをクリックし、Bearerトークンを入力し認証
  2. Upsert-fileエンドポイントに適当なPDFをアップロード
    今回は、Sirilという天体写真画像処理用のソフトウェアのドキュメントPDFをダウンロードし、Upsert-fileで登録しました。
    https://siril.readthedocs.io/_/downloads/en/latest/pdf/
  3. 正常に登録されたことを確認
  4. PostgreSQLからレコードの登録を確認
    上記ドキュメントで680行のレコードとなった。
gptretdb=# select source,document_id,count(embedding) from documents group by document_id,source;
 source |             document_id              | count 
--------+--------------------------------------+-------
 file   | ee1c666c-e537-4fa9-aac0-2797ddde9d3b |   680
 file   | 8e5f5adf-6115-4643-9719-06f3dfde6fa6 |     1

参考にしたURL

本作業及び本頁作成にを実施するにあたり、下記のURLの記事を参考にしました。ありがとうございます。
https://www.slideshare.net/nttdata-tech/postgresql-chatgpt-odc2023-nttdata
https://push.co.jp/archives/616

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?