More Related Content
More from NTT DATA Technology & Innovation (20)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
- 1. © 2023 NTT DATA Group Corporation
© 2023 NTT DATA Group Corporation
ChatGPTのデータソースにPostgreSQLを使う
2023/7/3 第42回 PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータグループ 技術開発本部 石井愛弓
- 3. © 2023 NTT DATA Group Corporation 3
ある日思った。ズボラ母(私)にもできる安上がりな教育コンテンツはないか。
• 毎日、親が小学生新聞を読み込み、その内容を題材にした穴埋め問題を作成し、ホワイトボードに出題。
• 子は毎朝起きたら新聞を読んでその穴埋め問題に取り組む…という素晴らしい記事を読んだ。
• すばらしい…新聞を楽しみながら読む習慣がつきそう…だが、ズボラ母にはできる気がしない…
• ChatGPTに問題作成をお願いしてみようかな!
- 4. © 2023 NTT DATA Group Corporation 4
4歳向けの問題を作成してもらう
…いまいちすぎる!
- 5. © 2023 NTT DATA Group Corporation 5
最新情報も取得できなかった
- 6. © 2023 NTT DATA Group Corporation 6
ChatGPTに感じた問題
通常のChatGPTでは、既存のインプットからしか、回答を得ることができない。
最新情報をデータソースにできないか?
自分で質の高いデータセットを作り、それを参照させることはできないか?
ChatGPTにPostgreSQLを使いたい!
そうすれば以下のようなものもデータソースにできるかも?
• 自分のオリジナルデータ
• 2021年9月以降の最新情報
- 7. © 2023 NTT DATA Group Corporation 7
ChatGPT Retrieval Plugin
• ChatGPTでプライベートなドキュメントにアクセスできるプラグイン
• ドキュメントの保存には、ベクトルデータベースを使用する
• 様々なデータベースに対応
• PostgreSQLも、pgvectorを使って、データソースにすることができる!
• OpenAIのtext-embeddin-ada-002モデルを使用している。
• 英語に最適化されているが、他の言語でも良好な結果を生成できるらしい
プラグイン自体は、OSS
ただしChatGPTでプラグイン機能を使うためには、ChatGPT Plus月額20ドル必要
かつ、プラグイン開発者のwaitlistで承認される必要あり。
- 8. © 2023 NTT DATA Group Corporation 8
全体像
• 事前にChatGPT retrieval pluginのAPIを使って、PDFのオリジナルデータをベクトルデータ
として、PostgreSQLに保存しておく。
• ChatGPTからこのプラグインを利用できるようにし、PostgreSQLに保存されたデータを利用す
る
• 問い合わせの自然言語をベクトル化し、PostgreSQLのベクトルと類似性の高いものを探す
PostgreSQL
オリジナルデータ
(PDF)
chatgpt-retrieval-plugin
upsert-file API
テキスト抽出&ベクトル化
ChatGPT
ベクトルデータ
データを利用
- 9. © 2023 NTT DATA Group Corporation 9
pgvector
https://github.com/pgvector/pgvector
PostgreSQLでベクトル類似性検索ができるようになる
vector型を含むテーブルを作成し、データが保存できる
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
近いベクトルを探す
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Supabase、RDS(15.2以降)、Azureでも対応済み
- 10. © 2023 NTT DATA Group Corporation 10
事前準備
• Python 3.10をインストール
• PostgreSQLとpgvectorをインストール
• CREATE EXTENSION vector;
• chatgpt-retrieval-plugin をクイックスタートの通りにインストール
• https://github.com/openai/chatgpt-retrieval-plugin
• localhost:3333にサーバが起動された!
- 11. © 2023 NTT DATA Group Corporation 11
PostgreSQLでドキュメントテーブルを用意
create table if not exists documents (
id text primary key default gen_random_uuid()::text,
source text,
source_id text,
content text, ※原文
document_id text,
author text,
url text,
created_at timestamptz default now(),
embedding vector(1536) ※ベクトルデータ
);
- 12. © 2023 NTT DATA Group Corporation 12
PDFデータをPostgreSQLに挿入
upsert-fileエンドポイントに対して、PDF(今回はPostgreSQLドキュメント)を送る
curl -X POST -F file=@postgresql-15.0-A4.pdf http://localhost:3333/upsert-file
id | 8fc5de86-712f-43dc-b8d6-e56ccb582351_0
source | file
source_id |
content | PostgreSQL 15.0文書 PostgreSQL 15.0文書 PostgreSQLグローバル開発グループ 製作著作
c 1996?2022 The PostgreSQL Global Development Group, (翻訳)日本PostgreSQLユーザ 会 法的告知
Copyright c 1996?2022 PostgreSQLはPostgreSQLグローバル開発チームが著作権を有します。 Copyright c
1994?1995 Postgres95はカリ フォルニア大学評議員が著作権を有します。 日本PostgreSQLユーザ会(Japan
PostgreSQL User Group)は翻訳の著作権を有します。 Permission to use, copy, modify, and distribute
this software and its documentation
document_id | 8fc5de86-712f-43dc-b8d6-e56ccb582351
author |
url |
created_at | 2023-06-26 04:51:02.296534+00
embedding | [0.008476984,-0.012449941,0.006924103,……(略)
- 13. © 2023 NTT DATA Group Corporation 13
あとはプラグインを利用するだけ!
Develop your own plugin のボタンがなかった…プラグイン開発のwaitlist承認されないとダメな模様…。
続きは承認されてから…( ;∀;)
- 14. © 2023 NTT DATA Group Corporation 14
せっかくなので別のプラグインを使ってみた