SlideShare a Scribd company logo
1 of 61
© 2023 NTT DATA Group Corporation
© 2023 NTT DATA Group Corporation
ChatGPTのデータソースにPostgreSQLを使う
[詳細版]
2023/8/26 オープンデベロッパーズカンファレンス2023
株式会社NTTデータグループ 技術開発本部 石井愛弓
© 2023 NTT DATA Group GROUP Corporation 2
自己紹介
• NTTデータグループ 技術開発本部
• 石井 愛弓(いしい あゆみ)
• 主にPostgreSQLの人です
• 子への英才教育を企んでいます
© 2023 NTT DATA Group GROUP Corporation 3
目次
• はじめに
• システムの全体像
• 各プロダクトの説明
• 作ってみる!
• パフォーマンスの向上の取り組み
© 2023 NTT DATA Group GROUP Corporation 4
はじめに
© 2023 NTT DATA Group Corporation 5
ある日思った。ズボラ母(私)にもできる安上がりな教育コンテンツはないか。
• 毎日、親が小学生新聞を読み込み、その内容を題材にした穴埋め問題を作成し、ホワイトボードに出題。
• 子は毎朝起きたら新聞を読んでその穴埋め問題に取り組む…という素晴らしい話を聞いた。
• すばらしい…新聞を楽しみながら読む習慣がつきそう…だが、ズボラ母にはできる気がしない…
• ChatGPTに問題作成をお願いしてみようかな!
© 2023 NTT DATA Group Corporation 6
4歳向けの問題を作成してもらう
…いまいちすぎる!
© 2023 NTT DATA Group Corporation 7
© 2023 NTT DATA Group Corporation 8
最新情報も取得できなかった
© 2023 NTT DATA Group Corporation 9
ChatGPTに感じた問題
通常のChatGPTでは、既存のインプットからしか、回答を得ることができない。
最新情報をデータソースにできないか?
自分で質の高いデータセットを作り、それを参照させることはできないか?
ChatGPTにPostgreSQLを使いたい!
そうすれば以下のようなものもデータソースにできるかも?
• 社内のマニュアル・ドキュメント
• プライベートなデータ
• 2021年9月以降の最新情報
© 2023 NTT DATA Group Corporation 10
ChatGPT Retrieval Plugin
• ChatGPTでプライベートなドキュメントにアクセスできるプラグイン
• FastAPI(Pythonフレームワーク)で開発されている
プラグイン自体は、OSS
ただしChatGPTでプラグイン機能を使うためには、ChatGPT Plus月額20ドル必要
かつ、プラグイン開発者のwaitlistで承認される必要あり。
© 2023 NTT DATA Group Corporation 11
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
© 2023 NTT DATA Group Corporation 12
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
① 私が、PDFのオリジナルデータをプラグインのエンドポイントへ送信する
© 2023 NTT DATA Group Corporation 13
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
② プラグインが、PDFデータからテキストを抽出
③ プラグインが、OpenAI Embeddings APIで自然言語をベクトルデータに変換
© 2023 NTT DATA Group Corporation 14
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
④ プラグインが、ベクトルデータをPostgreSQLにUPSERTする。
(データがあれば更新、なければ挿入)
© 2023 NTT DATA Group Corporation 15
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
⑤ ユーザが、ChatGPTに自然言語で問い合わせを行う
⑥ ChatGPTが、プラグインのqueryエンドポイントにクエリ(自然言語)とフィルタを送信
© 2023 NTT DATA Group Corporation 16
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
⑦プラグインが、Embeddings APIを使ってクエリをベクトルデータに変換
⑧プラグインが、ベクトルデータと類似度の高いものをPostgreSQLで検索
© 2023 NTT DATA Group Corporation 17
全体像:これを作りたい!
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③・⑦ベクトル化
④upsert
① ⑤問い合わせ
ChatGPT
⑧query
⑥query
(自然言語、フィルタ)
⑨テキスト・類似度スコア
等 ⑩回答
⑨プラグインが、テキスト・類似度スコア等をChatGPTに返却
⑩ChatGPTが、スニペットを元に回答をユーザに返却
© 2023 NTT DATA Group GROUP Corporation 18
ChatGPT Retrieval Plugin
© 2023 NTT DATA Group Corporation 19
ChatGPT Retrieval Pluginで利用可能なデータベース一覧
• Pinecone
• Waviate
• Zilliz
• Milvus
• Qdrant
• Redis
• LlamaIndex
• Chroma
• Axure Cognitive Search
• Supabase
• Postgres
• AnalyticDB
• Elasticsearch
• ドキュメントの保存には、ベクトルデータベースを使用する
• 様々なデータベースに対応
• PostgreSQLも、pgvectorを使って、データソースにすることができる!
© 2023 NTT DATA Group Corporation 20
chatgpt-retrieval-plugin エンドポイント
• /upsert →開発者が使う (メモリ機能を使う場合は、ChatGPTも)
• 1 つ以上のドキュメントをアップロードし、そのテキストとメタデータをベクター データベースに保存
• /upsert-file→開発者が使う
• 単一のファイル (PDF、TXT、DOCX、PPTX、または MD) をアップロードする
• /query →ChatGPTが使う
• 1 つ以上の自然言語クエリを実行して、最も関連性の高いドキュメントチャンクの、テキスト、メタデータ、類似度スコアととも
に返す
• 問い合わせ文と併せて、author/source/dateなどで絞り込むことも可能
• /delete →開発者が使う
• ベクター データベースから 1 つ以上のドキュメントを削除
© 2023 NTT DATA Group Corporation 21
メモリ機能
• ChatGPTでの会話を記録する機能
• ChatGPTがプラグインのupsertエンドポイントにアクセスし、会話のスニペットをデータベースに保存
• 過去の会話を以降の回答に使用することができるようになる。
upsertのエンドポイントへのアクセスについて
• プラグインの初期状態では、upsertエンドポイントはChatGPTからアクセスできるようになっていない。
• ChatGPTは、プラグインのOpenAPIスキーマ(.well-known/openapi.yaml)を参照することで、プラグインの使い方を把握
している。
• 初期状態では、queryエンドポイントしか記載されていないので、upsertも含めたopenapi.yaml及び、ai-plugin.jsonに
書き換える
• 詳細は以下を参照
• https://github.com/openai/chatgpt-retrieval-plugin/tree/main/examples/memory
© 2023 NTT DATA Group Corporation 22
オリジナルの絞り込み条件も追加できる
• ChatGPTが、queryエンドポイントで問い合わせを行う際、問い合わせ文の他に、author/source/dateなどで絞り込みが
可能。
→author/source/dateなどは、メタデータとしてモデルに組み込み済み。
• 既存のメタデータにない、オリジナルのメタデータを追加して絞り込みたい場合は、カスタムメタデータフィールドを追加できる。
• OpenAPIスキーマ及び、ソースコードの一部編集が必要
• 詳細は以下
• https://github.com/openai/chatgpt-retrieval-plugin/tree/main
© 2023 NTT DATA Group Corporation 23
認証機能
以下の認証方法を設定可能
• 認証なし
• 誰でもプラグインを利用可能
• データの中身が公開情報のときなど
• HTTP Bearer
• ユーザレベル
• ユーザごとに一意のアクセストークンが必要。これを採用する場合は追加実装が必要
• サービスレベル
• 事前に登録したトークン(すべてのユーザ共通)が必要。
• OAuth
• OAuthプロバイダーを使用してユーザの認証を行う。これを採用する場合は追加実装が必要。
© 2023 NTT DATA Group Corporation 24
ディレクトリの説明
ディレクトリ名 説明
.well-known OpenAPIスキーマやプラグインのマニフェストファイル
datastore 様々なデータベースを扱うための処理
docs ドキュメント
examples 設定例、認証方法など
local_server localhostテスト用に構成されたプラグインの実装
models ドキュメントモデル、メタデータモデルなど
scripts ドキュメントを処理及びアップロードするためのスクリプト
server メインのFastAPIサーバの実装
services チャンキング、メタデータ抽出などのユーティリティ
test データベース接続のテスト
© 2023 NTT DATA Group GROUP Corporation 25
OpenAI Embeddings API
© 2023 NTT DATA Group GROUP Corporation 26
OpenAI Embeddings API
• 自然言語をベクトルに変換することができるAPI
• 「text-embedding-ada-002」モデルでは、1536次元のベクトルを返却
私はPostgreSQLが好きです
[0.00058671045, -
0.004581401, .......]
使用例
https://openai.com/blog/new-and-improved-embedding-model
より。
© 2023 NTT DATA Group GROUP Corporation 27
pgvector
© 2023 NTT DATA Group Corporation 28
pgvector
https://github.com/pgvector/pgvector
PostgreSQLでベクトル類似性検索ができるようになる拡張機能
最新バージョンはv0.4.4
vector型を含むテーブルを作成し、データが保存できる
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
→3次元のベクトル列を作成
contrib(PostgreSQLの本体のソースコードと一緒にコミュニティで開発されている拡張機能群)ではないが、
Supabase、RDS(15.2以降)、Azure、AlloyDBなどでも対応済み
CREATE EXTENSION でインストール可能
© 2023 NTT DATA Group Corporation 29
vector型
通常の列と同じようにデータのINSERT/UPDATE/DELETEできる
Insert vectors
Upsert vectors
Update vectors
Delete vectors
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
UPDATE items SET embedding = '[1,2,3]' WHERE id = 1;
DELETE FROM items WHERE id = 1;
© 2023 NTT DATA Group Corporation 30
近いベクトルを探す
例)近いベクトルを探す(ユークリッド距離の算出)
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
→[3,1,2]と距離が近いベクトルを順に5つ探す
演算子 説明
+ 要素ごとの加算
- 要素ごとの減算
* 要素ごとの乗算 [未リリース]
<-> ユークリッド距離
<#> 負の内積
<=> コサイン距離
pgvectorの演算子
・
・
ユークリッド距離
x
y
(x1, y1)
(x2, y2)
© 2023 NTT DATA Group Corporation 31
内積から計算する類似度
以下はわかりやすさのため、長さ1のベクトルとする
*イメージ*
公式のReadMeによると、類似度検索は内積を使っている
・ ・ ・
1
似てる
0
似ていない
1/√2
45°
・
-1
逆方向
© 2023 NTT DATA Group GROUP Corporation 32
作ってみる!
© 2023 NTT DATA Group Corporation 33
主な手順
• Python 3.10をインストール
• PostgreSQLとpgvectorをインストール
• CREATE EXTENSION vector;
• OpenAIでAPI keyを作成
• chatgpt-retrieval-plugin をインストール
© 2023 NTT DATA Group Corporation 34
OpenAI でAPI keyを発行
OpenAIでアカウントを登録してログイン
API keyを発行して保存しておく
※Free trialが終わるとクレジット登録が必要になった。$0.0001 / 1K tokens
1トークンとは?
TOKENIZERの種類によって異なる
今回は、 「text-embedding-ada-002」モデルを使用。
このモデルでは、「cl100k_base」のTOKENIZERを使用。
日本語の場合、頻出単語は1トークン、それ以外は
複数トークンとなる。
「こんにちは」→ 1
「石井です」 →5
「今日もよろしくお願いします。」→13
ざっと1000万字で1ドル位?
© 2023 NTT DATA Group Corporation 35
chatgpt-retrieval-plugin をインストール
https://github.com/openai/chatgpt-retrieval-plugin のクイックスタートを参照
PostgreSQLを使う場合は、以下も参考になる
https://github.com/openai/chatgpt-retrieval-plugin/blob/main/docs/providers/postgres/setup.md
以下の手順を実施する
1. Python3.10をインストール
2. レポジトリをclone
3. ディレクトリ移動
4. poetryをインストール
git clone https://github.com/openai/chatgpt-retrieval-plugin.git
cd /path/to/chatgpt-retrieval-plugin
pip install poetry
© 2023 NTT DATA Group Corporation 36
chatgpt-retrieval-plugin をインストール 続き
5. 新規のPython3.10の仮想環境を作成
6. 仮想環境をアクティベートする
7. 依存関係のあるアプリをインストール
8. 任意のツールでトークンを発行
• 今回はhttps://jwt.io/ で作成
9. 環境変数を設定(Retrieval app関連)
poetry shell
poetry install
poetry env use python3.10
export DATASTORE=postgres
export BEARER_TOKEN=<8で発行したトークン>
export OPENAI_API_KEY=<OpenAIで発行したKey>
© 2023 NTT DATA Group Corporation 37
chatgpt-retrieval-plugin をインストール 続き
10. 環境変数を設定(PostgreSQL関連)
11. サーバを起動
12. APIエンドポイントの確認
• http://localhost:8000/docsにアクセスすると、エンドポイントが確認できる
poetry run start
export PG_HOST=<postgres_host>
export PG_PORT=<postgres_port>
export PG_USER=<postgres_user>
export PG_PASSWORD=<postgres_password>
export PG_DB=<postgres_database>
ReadMeではPG_DATABASEになっているので注意。※PRしようとしたけど別の人が出してた。
→localhost:8000でサーバが起動!
© 2023 NTT DATA Group Corporation 38
ドキュメントの確認
※スクリーンショット貼ります
© 2023 NTT DATA Group Corporation 39
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) ※ベクトルデータ
);
© 2023 NTT DATA Group Corporation 40
PDFデータをPostgreSQLに挿入
upsert-fileエンドポイントに対して、PDF(今回はPostgreSQLドキュメント)を送る
curl -X POST -F file=@postgresql-15.0-A4.pdf http://localhost:8000/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,……(略)
© 2023 NTT DATA Group Corporation 41
ここまでのシステム
オリジナルデータをアップロードすることできた。
ただし、手動でAPIを実行してデータを入れている。
毎日更新されるようなデータを利用したければ、自動でデータを最新化する仕組みが必要。
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③ベクトル化
④upsert
①
初期データ準備OK!
© 2023 NTT DATA Group Corporation 42
常に最新のデータを入れるべく改良する
upsert API
Google Apps
Script
毎日、新規のメール( PostgreSQLメーリングリストのアナウンス)を
チェックして、本文をデータベースに追加する
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③ベクトル化
④upsert
①
テキスト抽出
© 2023 NTT DATA Group Corporation 43
メール本文を取得して、upsertのAPIを実行する仕組み
• 今回は、Google Apps Scriptを使って、自分のGmailに届いたメールから本文を取得し、upsertのAPIを使ってデータベー
スを更新する関数を実装。
• この関数を毎日0時に実施するようなトリガーを設定。
→これにより、自動でベクトルデータベースを毎日最新化することができる。
プラグイン公式では、
• ZapierやMakeなどでwebhookを構成する方法が紹介されている。
• ZapierやMakeはノーコードでワークフローの自動化を実現できるアプリケーション。
• イベントやスケジュールに基づいて、処理を実行可能
© 2023 NTT DATA Group Corporation 44
サンプルコード(本文取得)
var FindSubject = 'to:(pgsql-announce@lists.postgresql.org) ';
function getMail(){
var myThreads = GmailApp.search(FindSubject, 0, 10);
var myMessages = GmailApp.getMessagesForThreads(myThreads);
for(var i in myMessages){
for(var j in myMessages[i]){
if(!myMessages[i][j].isStarred()){
var strMessage = myMessages[i][j].getPlainBody().slice(0,200);
upsertData(strDate,strSubject,strMessage);
myMessages[i][j].star();
}
}
}
}
© 2023 NTT DATA Group Corporation 45
サンプルコード(本文をupsertする)
function upsertData(strDate,strSubject,strMessage){
var strToken = “ xxx";
var data = {
"documents": [{
"text": strMessage,
"metadata": {
"source": "email",
}}]
}
var options ={
"method" : "post",
'contentType': 'application/json',
"payload" : JSON.stringify(data),
"headers" : {"Authorization" : "Bearer "+ strToken}
};
UrlFetchApp.fetch("http://xxxxxx:8000/upsert",options);
}
© 2023 NTT DATA Group Corporation 46
トリガーの設定
© 2023 NTT DATA Group Corporation 47
動作確認
© 2023 NTT DATA Group Corporation 48
動作確認
PostgreSQLにメールの本文がベクトル化されて保存されていた。
© 2023 NTT DATA Group Corporation 49
ここまで完成!
upsert API
Google Apps
Script
PostgreSQL
pgvector
オリジナルデータ
(PDF)
②テキスト抽出
chatgpt-
retrieval-plugin
OpenAI
Embeddings
API
upsert-file API
③ベクトル化
④upsert
①
© 2023 NTT DATA Group GROUP Corporation 50
パフォーマンス向上
の取り組み
データが増えた場合に備える
© 2023 NTT DATA Group Corporation 51
パフォーマンスの改善:インデックスの付与
• pgvectorでは、vector型の列にivfflatという種類のインデックスを付与することができる
• 最大2000次元までの列に付与可能
• ivfflat(Inverted File with Flat Compression) あいびーえふ ふらっと
• 近似最近傍 (ANN) 検索の方法
• データセット内の各ベクトルを最も近いクラスターに割り当てる
• 最近傍を検索する際は、まず、最も近いクラスターを特定し、その中から最近傍を検索する
• 検索範囲が全体でなく一部となるため、パフォーマンス向上
・
・
・
・ ・
・
・
・
・
・・
・
・
・
・
・・
・ ・
・
★
・
・ ・
・ ・
・
・
★
★
→近似インデックスを利用すると、必ず最近傍である保証はできない。
→インデックス追加後と前では、クエリの結果が変わる可能性がある
© 2023 NTT DATA Group Corporation 52
ivfflatのクラスタの数について
• インデックス作成時に、クラスタ数(リスト数:lists)を指定する
• クラスタ数が多いほど…
• クラスタ内のデータ数が少なくなるので、より高速に検索できる。
• ただし、最も近いデータが、最も近いクラスタに入っておらず、取りこぼす可能性も高くなる(再現率が低くなる)
• トレードオフなので、アプリケーションに合わせて設定する
• 目安
• 100万レコード以下のとき→records/1000 からやってみる
• 100万レコードより多いとき→ sqrt(records) からやってみる
• クラスタ数は少なくとも10個以上が好ましい。
create index on documents using ivfflat (embedding vector_ip_ops) with (lists = 100);
内積
© 2023 NTT DATA Group Corporation 53
probesパラメータについて
• 取りこぼしを減らすために、最も近い重心を持つクラスタだけでなく、他にも近いクラスタの中も検索する
• デフォルト probes=1 →最も近い重心のクラスタのみ
• probesを増やすと、より多くのクラスタ内で検索するので、再現率が向上(取りこぼしにくい)
• 当然ながら、増やすほど速度は低下する。
• 目安:probes = sqrt(lists)
・
・
・
・ ・
・
・
・
・
・・
・
・
・
・
・
・ ・
・
★
・
・ ・
・ ・
・
・
★
★
▲
クラスタとしては上のクラスタだが、一番近いデータは右のクラスタに
あるので、取りこぼしてしまう例
SET文でトランザクション内で設定可能:
例)
SET ivfflat.probes = 10;
© 2023 NTT DATA Group Corporation 54
ivfflatインデックスの注意点
• データ(少なくとも数千レコード)が挿入されたあとでインデックスを追加すること。
• 実際のデータがない状態で作成するとクラスタの重心を適切に決めることができない。(ランダムになる)
• インデックス作成後に、データを追加・削除・更新しても、インデックスは更新されるが、クラスタの重心は更新されない。
• データの更新がある場合、定期的なREIDEXが推奨
• CONCURRENTLY オプションを使えばテーブルへの書き込みをロックせず再作成できる
• 1000以下の小さなデータセットの場合、性能向上のメリットは薄いのでインデックス不要かも。
© 2023 NTT DATA Group Corporation 55
部分インデックスも可能
CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)
WHERE (category_id = 123);
列のすべてのデータではなく、WHERE句で絞った行を対象にインデックスを作成可能。
全ての行に対してインデックスを作成するのに比べ、ディスク容量を削減、対象行の検索は高速になる。
© 2023 NTT DATA Group Corporation 56
パラレルクエリの活用
• PostgreSQLで複数CPUを活用する「パラレルクエリ」を利用可能
• インデックスを使用しなくても高速化が期待できる
• max_parallel_workers_per_gather を増やす
• 一つのGatherまたはGather Mergeノードに対して起動できるワーカー数の最大値
• デフォルト:2 → 4など
© 2023 NTT DATA Group GROUP Corporation 57
ChatGPTからプラグインを利用する
© 2023 NTT DATA Group Corporation 58
あとはプラグインを利用するだけ!
Develop your own plugin のボタンがなかった…プラグイン開発のwaitlist承認されないとダメな模様…。
続きは承認されてから…( ;∀;)
© 2023 NTT DATA Group Corporation 59
さいごに
• 比較的簡単な手順で、ChatGPTに外部データを接続できることがわかった
• 外部データを接続することで、さらにChatGPTの使い方も広がりそう
• 今回は使用しなかったが、LangChainというライブラリを使用して外部データを使用する方法もあるので、試してみたい
© 2023 NTT DATA Group Corporation 60
参考URL
• https://github.com/openai/chatgpt-retrieval-
plugin/blob/main/docs/providers/postgres/setup.md
• https://github.com/pgvector/pgvector/tree/ed20d98777a07d77a748b1085a3ee0a408f33e6c
• https://supabase.com/blog/chatgpt-plugins-support-postgres
• https://medium.com/@mauricio/optimizing-ivfflat-indexing-with-pgvector-in-postgresql-
755d142e54f5
• https://learn.microsoft.com/ja-jp/azure/postgresql/flexible-server/howto-optimize-
performance-pgvector
• https://www.timescale.com/blog/nearest-neighbor-indexes-what-are-ivfflat-indexes-in-
pgvector-and-how-do-they-work/
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot

MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめKenichi Sonoda
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)株式会社MonotaRO Tech Team
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43Preferred Networks
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)NTT DATA Technology & Innovation
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 

Similar to ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)

PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)NTT DATA Technology & Innovation
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマットAkihiro Suda
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用de:code 2017
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...NTT DATA Technology & Innovation
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructurePreferred Networks
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
Realizling Dapr Observability Using Elastic Stack
Realizling Dapr Observability Using Elastic StackRealizling Dapr Observability Using Elastic Stack
Realizling Dapr Observability Using Elastic StackShotaro Suzuki
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APIAkira Hatsune
 
猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdfHirooKatoh
 

Similar to ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料) (20)

PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Hyperledger Besuの動向
Hyperledger Besuの動向Hyperledger Besuの動向
Hyperledger Besuの動向
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
Realizling Dapr Observability Using Elastic Stack
Realizling Dapr Observability Using Elastic StackRealizling Dapr Observability Using Elastic Stack
Realizling Dapr Observability Using Elastic Stack
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
 
猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf
 

More from NTT DATA Technology & Innovation

COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)NTT DATA Technology & Innovation
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)

  • 1. © 2023 NTT DATA Group Corporation © 2023 NTT DATA Group Corporation ChatGPTのデータソースにPostgreSQLを使う [詳細版] 2023/8/26 オープンデベロッパーズカンファレンス2023 株式会社NTTデータグループ 技術開発本部 石井愛弓
  • 2. © 2023 NTT DATA Group GROUP Corporation 2 自己紹介 • NTTデータグループ 技術開発本部 • 石井 愛弓(いしい あゆみ) • 主にPostgreSQLの人です • 子への英才教育を企んでいます
  • 3. © 2023 NTT DATA Group GROUP Corporation 3 目次 • はじめに • システムの全体像 • 各プロダクトの説明 • 作ってみる! • パフォーマンスの向上の取り組み
  • 4. © 2023 NTT DATA Group GROUP Corporation 4 はじめに
  • 5. © 2023 NTT DATA Group Corporation 5 ある日思った。ズボラ母(私)にもできる安上がりな教育コンテンツはないか。 • 毎日、親が小学生新聞を読み込み、その内容を題材にした穴埋め問題を作成し、ホワイトボードに出題。 • 子は毎朝起きたら新聞を読んでその穴埋め問題に取り組む…という素晴らしい話を聞いた。 • すばらしい…新聞を楽しみながら読む習慣がつきそう…だが、ズボラ母にはできる気がしない… • ChatGPTに問題作成をお願いしてみようかな!
  • 6. © 2023 NTT DATA Group Corporation 6 4歳向けの問題を作成してもらう …いまいちすぎる!
  • 7. © 2023 NTT DATA Group Corporation 7
  • 8. © 2023 NTT DATA Group Corporation 8 最新情報も取得できなかった
  • 9. © 2023 NTT DATA Group Corporation 9 ChatGPTに感じた問題 通常のChatGPTでは、既存のインプットからしか、回答を得ることができない。 最新情報をデータソースにできないか? 自分で質の高いデータセットを作り、それを参照させることはできないか? ChatGPTにPostgreSQLを使いたい! そうすれば以下のようなものもデータソースにできるかも? • 社内のマニュアル・ドキュメント • プライベートなデータ • 2021年9月以降の最新情報
  • 10. © 2023 NTT DATA Group Corporation 10 ChatGPT Retrieval Plugin • ChatGPTでプライベートなドキュメントにアクセスできるプラグイン • FastAPI(Pythonフレームワーク)で開発されている プラグイン自体は、OSS ただしChatGPTでプラグイン機能を使うためには、ChatGPT Plus月額20ドル必要 かつ、プラグイン開発者のwaitlistで承認される必要あり。
  • 11. © 2023 NTT DATA Group Corporation 11 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答
  • 12. © 2023 NTT DATA Group Corporation 12 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ① 私が、PDFのオリジナルデータをプラグインのエンドポイントへ送信する
  • 13. © 2023 NTT DATA Group Corporation 13 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ② プラグインが、PDFデータからテキストを抽出 ③ プラグインが、OpenAI Embeddings APIで自然言語をベクトルデータに変換
  • 14. © 2023 NTT DATA Group Corporation 14 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ④ プラグインが、ベクトルデータをPostgreSQLにUPSERTする。 (データがあれば更新、なければ挿入)
  • 15. © 2023 NTT DATA Group Corporation 15 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ⑤ ユーザが、ChatGPTに自然言語で問い合わせを行う ⑥ ChatGPTが、プラグインのqueryエンドポイントにクエリ(自然言語)とフィルタを送信
  • 16. © 2023 NTT DATA Group Corporation 16 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ⑦プラグインが、Embeddings APIを使ってクエリをベクトルデータに変換 ⑧プラグインが、ベクトルデータと類似度の高いものをPostgreSQLで検索
  • 17. © 2023 NTT DATA Group Corporation 17 全体像:これを作りたい! PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③・⑦ベクトル化 ④upsert ① ⑤問い合わせ ChatGPT ⑧query ⑥query (自然言語、フィルタ) ⑨テキスト・類似度スコア 等 ⑩回答 ⑨プラグインが、テキスト・類似度スコア等をChatGPTに返却 ⑩ChatGPTが、スニペットを元に回答をユーザに返却
  • 18. © 2023 NTT DATA Group GROUP Corporation 18 ChatGPT Retrieval Plugin
  • 19. © 2023 NTT DATA Group Corporation 19 ChatGPT Retrieval Pluginで利用可能なデータベース一覧 • Pinecone • Waviate • Zilliz • Milvus • Qdrant • Redis • LlamaIndex • Chroma • Axure Cognitive Search • Supabase • Postgres • AnalyticDB • Elasticsearch • ドキュメントの保存には、ベクトルデータベースを使用する • 様々なデータベースに対応 • PostgreSQLも、pgvectorを使って、データソースにすることができる!
  • 20. © 2023 NTT DATA Group Corporation 20 chatgpt-retrieval-plugin エンドポイント • /upsert →開発者が使う (メモリ機能を使う場合は、ChatGPTも) • 1 つ以上のドキュメントをアップロードし、そのテキストとメタデータをベクター データベースに保存 • /upsert-file→開発者が使う • 単一のファイル (PDF、TXT、DOCX、PPTX、または MD) をアップロードする • /query →ChatGPTが使う • 1 つ以上の自然言語クエリを実行して、最も関連性の高いドキュメントチャンクの、テキスト、メタデータ、類似度スコアととも に返す • 問い合わせ文と併せて、author/source/dateなどで絞り込むことも可能 • /delete →開発者が使う • ベクター データベースから 1 つ以上のドキュメントを削除
  • 21. © 2023 NTT DATA Group Corporation 21 メモリ機能 • ChatGPTでの会話を記録する機能 • ChatGPTがプラグインのupsertエンドポイントにアクセスし、会話のスニペットをデータベースに保存 • 過去の会話を以降の回答に使用することができるようになる。 upsertのエンドポイントへのアクセスについて • プラグインの初期状態では、upsertエンドポイントはChatGPTからアクセスできるようになっていない。 • ChatGPTは、プラグインのOpenAPIスキーマ(.well-known/openapi.yaml)を参照することで、プラグインの使い方を把握 している。 • 初期状態では、queryエンドポイントしか記載されていないので、upsertも含めたopenapi.yaml及び、ai-plugin.jsonに 書き換える • 詳細は以下を参照 • https://github.com/openai/chatgpt-retrieval-plugin/tree/main/examples/memory
  • 22. © 2023 NTT DATA Group Corporation 22 オリジナルの絞り込み条件も追加できる • ChatGPTが、queryエンドポイントで問い合わせを行う際、問い合わせ文の他に、author/source/dateなどで絞り込みが 可能。 →author/source/dateなどは、メタデータとしてモデルに組み込み済み。 • 既存のメタデータにない、オリジナルのメタデータを追加して絞り込みたい場合は、カスタムメタデータフィールドを追加できる。 • OpenAPIスキーマ及び、ソースコードの一部編集が必要 • 詳細は以下 • https://github.com/openai/chatgpt-retrieval-plugin/tree/main
  • 23. © 2023 NTT DATA Group Corporation 23 認証機能 以下の認証方法を設定可能 • 認証なし • 誰でもプラグインを利用可能 • データの中身が公開情報のときなど • HTTP Bearer • ユーザレベル • ユーザごとに一意のアクセストークンが必要。これを採用する場合は追加実装が必要 • サービスレベル • 事前に登録したトークン(すべてのユーザ共通)が必要。 • OAuth • OAuthプロバイダーを使用してユーザの認証を行う。これを採用する場合は追加実装が必要。
  • 24. © 2023 NTT DATA Group Corporation 24 ディレクトリの説明 ディレクトリ名 説明 .well-known OpenAPIスキーマやプラグインのマニフェストファイル datastore 様々なデータベースを扱うための処理 docs ドキュメント examples 設定例、認証方法など local_server localhostテスト用に構成されたプラグインの実装 models ドキュメントモデル、メタデータモデルなど scripts ドキュメントを処理及びアップロードするためのスクリプト server メインのFastAPIサーバの実装 services チャンキング、メタデータ抽出などのユーティリティ test データベース接続のテスト
  • 25. © 2023 NTT DATA Group GROUP Corporation 25 OpenAI Embeddings API
  • 26. © 2023 NTT DATA Group GROUP Corporation 26 OpenAI Embeddings API • 自然言語をベクトルに変換することができるAPI • 「text-embedding-ada-002」モデルでは、1536次元のベクトルを返却 私はPostgreSQLが好きです [0.00058671045, - 0.004581401, .......] 使用例 https://openai.com/blog/new-and-improved-embedding-model より。
  • 27. © 2023 NTT DATA Group GROUP Corporation 27 pgvector
  • 28. © 2023 NTT DATA Group Corporation 28 pgvector https://github.com/pgvector/pgvector PostgreSQLでベクトル類似性検索ができるようになる拡張機能 最新バージョンはv0.4.4 vector型を含むテーブルを作成し、データが保存できる CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3)); →3次元のベクトル列を作成 contrib(PostgreSQLの本体のソースコードと一緒にコミュニティで開発されている拡張機能群)ではないが、 Supabase、RDS(15.2以降)、Azure、AlloyDBなどでも対応済み CREATE EXTENSION でインストール可能
  • 29. © 2023 NTT DATA Group Corporation 29 vector型 通常の列と同じようにデータのINSERT/UPDATE/DELETEできる Insert vectors Upsert vectors Update vectors Delete vectors INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]') ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding; UPDATE items SET embedding = '[1,2,3]' WHERE id = 1; DELETE FROM items WHERE id = 1;
  • 30. © 2023 NTT DATA Group Corporation 30 近いベクトルを探す 例)近いベクトルを探す(ユークリッド距離の算出) SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5; →[3,1,2]と距離が近いベクトルを順に5つ探す 演算子 説明 + 要素ごとの加算 - 要素ごとの減算 * 要素ごとの乗算 [未リリース] <-> ユークリッド距離 <#> 負の内積 <=> コサイン距離 pgvectorの演算子 ・ ・ ユークリッド距離 x y (x1, y1) (x2, y2)
  • 31. © 2023 NTT DATA Group Corporation 31 内積から計算する類似度 以下はわかりやすさのため、長さ1のベクトルとする *イメージ* 公式のReadMeによると、類似度検索は内積を使っている ・ ・ ・ 1 似てる 0 似ていない 1/√2 45° ・ -1 逆方向
  • 32. © 2023 NTT DATA Group GROUP Corporation 32 作ってみる!
  • 33. © 2023 NTT DATA Group Corporation 33 主な手順 • Python 3.10をインストール • PostgreSQLとpgvectorをインストール • CREATE EXTENSION vector; • OpenAIでAPI keyを作成 • chatgpt-retrieval-plugin をインストール
  • 34. © 2023 NTT DATA Group Corporation 34 OpenAI でAPI keyを発行 OpenAIでアカウントを登録してログイン API keyを発行して保存しておく ※Free trialが終わるとクレジット登録が必要になった。$0.0001 / 1K tokens 1トークンとは? TOKENIZERの種類によって異なる 今回は、 「text-embedding-ada-002」モデルを使用。 このモデルでは、「cl100k_base」のTOKENIZERを使用。 日本語の場合、頻出単語は1トークン、それ以外は 複数トークンとなる。 「こんにちは」→ 1 「石井です」 →5 「今日もよろしくお願いします。」→13 ざっと1000万字で1ドル位?
  • 35. © 2023 NTT DATA Group Corporation 35 chatgpt-retrieval-plugin をインストール https://github.com/openai/chatgpt-retrieval-plugin のクイックスタートを参照 PostgreSQLを使う場合は、以下も参考になる https://github.com/openai/chatgpt-retrieval-plugin/blob/main/docs/providers/postgres/setup.md 以下の手順を実施する 1. Python3.10をインストール 2. レポジトリをclone 3. ディレクトリ移動 4. poetryをインストール git clone https://github.com/openai/chatgpt-retrieval-plugin.git cd /path/to/chatgpt-retrieval-plugin pip install poetry
  • 36. © 2023 NTT DATA Group Corporation 36 chatgpt-retrieval-plugin をインストール 続き 5. 新規のPython3.10の仮想環境を作成 6. 仮想環境をアクティベートする 7. 依存関係のあるアプリをインストール 8. 任意のツールでトークンを発行 • 今回はhttps://jwt.io/ で作成 9. 環境変数を設定(Retrieval app関連) poetry shell poetry install poetry env use python3.10 export DATASTORE=postgres export BEARER_TOKEN=<8で発行したトークン> export OPENAI_API_KEY=<OpenAIで発行したKey>
  • 37. © 2023 NTT DATA Group Corporation 37 chatgpt-retrieval-plugin をインストール 続き 10. 環境変数を設定(PostgreSQL関連) 11. サーバを起動 12. APIエンドポイントの確認 • http://localhost:8000/docsにアクセスすると、エンドポイントが確認できる poetry run start export PG_HOST=<postgres_host> export PG_PORT=<postgres_port> export PG_USER=<postgres_user> export PG_PASSWORD=<postgres_password> export PG_DB=<postgres_database> ReadMeではPG_DATABASEになっているので注意。※PRしようとしたけど別の人が出してた。 →localhost:8000でサーバが起動!
  • 38. © 2023 NTT DATA Group Corporation 38 ドキュメントの確認 ※スクリーンショット貼ります
  • 39. © 2023 NTT DATA Group Corporation 39 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) ※ベクトルデータ );
  • 40. © 2023 NTT DATA Group Corporation 40 PDFデータをPostgreSQLに挿入 upsert-fileエンドポイントに対して、PDF(今回はPostgreSQLドキュメント)を送る curl -X POST -F file=@postgresql-15.0-A4.pdf http://localhost:8000/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,……(略)
  • 41. © 2023 NTT DATA Group Corporation 41 ここまでのシステム オリジナルデータをアップロードすることできた。 ただし、手動でAPIを実行してデータを入れている。 毎日更新されるようなデータを利用したければ、自動でデータを最新化する仕組みが必要。 PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③ベクトル化 ④upsert ① 初期データ準備OK!
  • 42. © 2023 NTT DATA Group Corporation 42 常に最新のデータを入れるべく改良する upsert API Google Apps Script 毎日、新規のメール( PostgreSQLメーリングリストのアナウンス)を チェックして、本文をデータベースに追加する PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③ベクトル化 ④upsert ① テキスト抽出
  • 43. © 2023 NTT DATA Group Corporation 43 メール本文を取得して、upsertのAPIを実行する仕組み • 今回は、Google Apps Scriptを使って、自分のGmailに届いたメールから本文を取得し、upsertのAPIを使ってデータベー スを更新する関数を実装。 • この関数を毎日0時に実施するようなトリガーを設定。 →これにより、自動でベクトルデータベースを毎日最新化することができる。 プラグイン公式では、 • ZapierやMakeなどでwebhookを構成する方法が紹介されている。 • ZapierやMakeはノーコードでワークフローの自動化を実現できるアプリケーション。 • イベントやスケジュールに基づいて、処理を実行可能
  • 44. © 2023 NTT DATA Group Corporation 44 サンプルコード(本文取得) var FindSubject = 'to:(pgsql-announce@lists.postgresql.org) '; function getMail(){ var myThreads = GmailApp.search(FindSubject, 0, 10); var myMessages = GmailApp.getMessagesForThreads(myThreads); for(var i in myMessages){ for(var j in myMessages[i]){ if(!myMessages[i][j].isStarred()){ var strMessage = myMessages[i][j].getPlainBody().slice(0,200); upsertData(strDate,strSubject,strMessage); myMessages[i][j].star(); } } } }
  • 45. © 2023 NTT DATA Group Corporation 45 サンプルコード(本文をupsertする) function upsertData(strDate,strSubject,strMessage){ var strToken = “ xxx"; var data = { "documents": [{ "text": strMessage, "metadata": { "source": "email", }}] } var options ={ "method" : "post", 'contentType': 'application/json', "payload" : JSON.stringify(data), "headers" : {"Authorization" : "Bearer "+ strToken} }; UrlFetchApp.fetch("http://xxxxxx:8000/upsert",options); }
  • 46. © 2023 NTT DATA Group Corporation 46 トリガーの設定
  • 47. © 2023 NTT DATA Group Corporation 47 動作確認
  • 48. © 2023 NTT DATA Group Corporation 48 動作確認 PostgreSQLにメールの本文がベクトル化されて保存されていた。
  • 49. © 2023 NTT DATA Group Corporation 49 ここまで完成! upsert API Google Apps Script PostgreSQL pgvector オリジナルデータ (PDF) ②テキスト抽出 chatgpt- retrieval-plugin OpenAI Embeddings API upsert-file API ③ベクトル化 ④upsert ①
  • 50. © 2023 NTT DATA Group GROUP Corporation 50 パフォーマンス向上 の取り組み データが増えた場合に備える
  • 51. © 2023 NTT DATA Group Corporation 51 パフォーマンスの改善:インデックスの付与 • pgvectorでは、vector型の列にivfflatという種類のインデックスを付与することができる • 最大2000次元までの列に付与可能 • ivfflat(Inverted File with Flat Compression) あいびーえふ ふらっと • 近似最近傍 (ANN) 検索の方法 • データセット内の各ベクトルを最も近いクラスターに割り当てる • 最近傍を検索する際は、まず、最も近いクラスターを特定し、その中から最近傍を検索する • 検索範囲が全体でなく一部となるため、パフォーマンス向上 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・・ ・ ・ ・ ・ ・・ ・ ・ ・ ★ ・ ・ ・ ・ ・ ・ ・ ★ ★ →近似インデックスを利用すると、必ず最近傍である保証はできない。 →インデックス追加後と前では、クエリの結果が変わる可能性がある
  • 52. © 2023 NTT DATA Group Corporation 52 ivfflatのクラスタの数について • インデックス作成時に、クラスタ数(リスト数:lists)を指定する • クラスタ数が多いほど… • クラスタ内のデータ数が少なくなるので、より高速に検索できる。 • ただし、最も近いデータが、最も近いクラスタに入っておらず、取りこぼす可能性も高くなる(再現率が低くなる) • トレードオフなので、アプリケーションに合わせて設定する • 目安 • 100万レコード以下のとき→records/1000 からやってみる • 100万レコードより多いとき→ sqrt(records) からやってみる • クラスタ数は少なくとも10個以上が好ましい。 create index on documents using ivfflat (embedding vector_ip_ops) with (lists = 100); 内積
  • 53. © 2023 NTT DATA Group Corporation 53 probesパラメータについて • 取りこぼしを減らすために、最も近い重心を持つクラスタだけでなく、他にも近いクラスタの中も検索する • デフォルト probes=1 →最も近い重心のクラスタのみ • probesを増やすと、より多くのクラスタ内で検索するので、再現率が向上(取りこぼしにくい) • 当然ながら、増やすほど速度は低下する。 • 目安:probes = sqrt(lists) ・ ・ ・ ・ ・ ・ ・ ・ ・ ・・ ・ ・ ・ ・ ・ ・ ・ ・ ★ ・ ・ ・ ・ ・ ・ ・ ★ ★ ▲ クラスタとしては上のクラスタだが、一番近いデータは右のクラスタに あるので、取りこぼしてしまう例 SET文でトランザクション内で設定可能: 例) SET ivfflat.probes = 10;
  • 54. © 2023 NTT DATA Group Corporation 54 ivfflatインデックスの注意点 • データ(少なくとも数千レコード)が挿入されたあとでインデックスを追加すること。 • 実際のデータがない状態で作成するとクラスタの重心を適切に決めることができない。(ランダムになる) • インデックス作成後に、データを追加・削除・更新しても、インデックスは更新されるが、クラスタの重心は更新されない。 • データの更新がある場合、定期的なREIDEXが推奨 • CONCURRENTLY オプションを使えばテーブルへの書き込みをロックせず再作成できる • 1000以下の小さなデータセットの場合、性能向上のメリットは薄いのでインデックス不要かも。
  • 55. © 2023 NTT DATA Group Corporation 55 部分インデックスも可能 CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100) WHERE (category_id = 123); 列のすべてのデータではなく、WHERE句で絞った行を対象にインデックスを作成可能。 全ての行に対してインデックスを作成するのに比べ、ディスク容量を削減、対象行の検索は高速になる。
  • 56. © 2023 NTT DATA Group Corporation 56 パラレルクエリの活用 • PostgreSQLで複数CPUを活用する「パラレルクエリ」を利用可能 • インデックスを使用しなくても高速化が期待できる • max_parallel_workers_per_gather を増やす • 一つのGatherまたはGather Mergeノードに対して起動できるワーカー数の最大値 • デフォルト:2 → 4など
  • 57. © 2023 NTT DATA Group GROUP Corporation 57 ChatGPTからプラグインを利用する
  • 58. © 2023 NTT DATA Group Corporation 58 あとはプラグインを利用するだけ! Develop your own plugin のボタンがなかった…プラグイン開発のwaitlist承認されないとダメな模様…。 続きは承認されてから…( ;∀;)
  • 59. © 2023 NTT DATA Group Corporation 59 さいごに • 比較的簡単な手順で、ChatGPTに外部データを接続できることがわかった • 外部データを接続することで、さらにChatGPTの使い方も広がりそう • 今回は使用しなかったが、LangChainというライブラリを使用して外部データを使用する方法もあるので、試してみたい
  • 60. © 2023 NTT DATA Group Corporation 60 参考URL • https://github.com/openai/chatgpt-retrieval- plugin/blob/main/docs/providers/postgres/setup.md • https://github.com/pgvector/pgvector/tree/ed20d98777a07d77a748b1085a3ee0a408f33e6c • https://supabase.com/blog/chatgpt-plugins-support-postgres • https://medium.com/@mauricio/optimizing-ivfflat-indexing-with-pgvector-in-postgresql- 755d142e54f5 • https://learn.microsoft.com/ja-jp/azure/postgresql/flexible-server/howto-optimize- performance-pgvector • https://www.timescale.com/blog/nearest-neighbor-indexes-what-are-ivfflat-indexes-in- pgvector-and-how-do-they-work/