---
title: パッケージマネージャー dbdev があらわれた！ので、LangChain のパッケージ embedding_search を試してみた
tags:  #supabase #postgresql #pgunconf #langchain #dbdev  
author: [hmatsu47(まつ)](https://www.docswell.com/user/hmatsu47)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/2JVM1969JQ.jpg?width=480
description: 第 41 回 PostgreSQL アンカンファレンス@オンライン 2023/4/24
published: April 23, 23
canonical: https://www.docswell.com/s/hmatsu47/K4QV9Y-2023-04-23-123311
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/2JVM1969JQ.jpg)

パッケージマネージャー dbdev があらわれた！
ので、LangChain のパッケージ
embedding_search を試してみた
第 41 回 PostgreSQL アンカンファレンス@オンライン
2023/4/24
まつひさ（hmatsu47）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/5EGG2ZN4EL.jpg)

自己紹介
松久裕保（@hmatsu47）
●
https://qiita.com/hmatsu47
● 現在のステータス：
○ 名古屋で Web インフラのお守り係をしています
○ DB 移行関連のお仕事は一段落して、コンテナ管理周りの内部
ツールをちまちまと作っています
○ #pgunconf ゆるふわ勢
■
本日は遠征先の東京・大井町より参加中
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4JQXPLQREP.jpg)

今回の発表ネタ
● dbdev というパッケージマネージャーが登場
https://database.dev/
● その中にあった LangChain の embedding_search を試
してみた
○ pgvector を使って文書のベクトル化データを生成・保管
○ OpenAI の API を使って関連度の高い文書を検索・抽出
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/K746YDNQE1.jpg)

今回もやっぱり Supabase ネタだった
● dbdev は Supabase が提供
○ サイトのフッター
https://supabase.com/blog/dbdev
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJ1V6Z5LEG.jpg)

dbdev が目指すもの
● 前掲 URL の記事によると
dbdev fills the same role for PostgreSQL as npm for JavaScript, pip for Python and
cargo for Rust in that it enables publishing libraries and applications for repeatable
deployment. We&#039;ll be releasing the tooling necessary for third-parties to publish pglets
to the registry once we’ve collected some community feedback and incorporate any
great new ideas. Our goal is to create an open ecosystem for packaging and
discovering SQL.
【注】2023/4 時点でパッケージリリースは関係者のみ可
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/GJWLW95QE2.jpg)

dbdev のパッケージを使うには
● pg_tle と pgsql-http が必要
https://github.com/aws/pg_tle
https://github.com/pramsey/pgsql-http
● pg_tle といえば…
○ Trusted Language Extentions For PostgreSQL
○ AWS が re:Invent 2022 期間中に GA を発表（オープンソース）
https://aws.amazon.com/jp/about-aws/whats-new/2022/11/trusted-language-extensions-postgr
esql-amazon-aurora-rds/
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4EZM59N3J3.jpg)

残念ながら
● AWS の RDS/Aurora は pgsql-http 未サポート
https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLRelease
Notes/AuroraPostgreSQL.Extensions.html
https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/
postgresql-extensions.html
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/Y76N9K8Z7V.jpg)

LangChain の embedding_search とは
● PostgreSQL を Vector Store として使うもの
https://database.dev/langchain/embedding_search
● Vector Store とは
○ LLM（大規模言語モデル）を使う際、効率的にプロンプトの文脈
を与える目的で使う
https://speakerdeck.com/os1ma/puronputoenziniaringukarashi-merulangchainru-men?slide=4
9
○ pgvector と OpenAI Embeddings API を使用
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/G755NP9974.jpg)

手順 https://github.com/hmatsu47/dbdev-langchain-test （1/5）
● Supabase プロジェクトを作成
● dbdev を利用可能に
○ 具体的な手順は省略
■
拡張機能 pgsql-http と pg_tle を有効化
■
dbdev（supabase-dbdev）インストール・有効化
● 拡張機能 pgvector 有効化
create extension if not exists vector;
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/9J2N5625ER.jpg)

手順 https://github.com/hmatsu47/dbdev-langchain-test （2/5）
● embedding_search インストール・有効化
○ documents テーブル生成（Vector Store）
○ match_documents ストアドファンクション生成（検索）
【注】documents テーブルは RLS 無効状態で生成（サンプル用）
select dbdev.install(&#039;langchain-embedding_search&#039;);
create extension &quot;langchain-embedding_search&quot;
version &#039;1.0.0&#039;;
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/DEYPK9Y6EM.jpg)

手順 https://github.com/hmatsu47/dbdev-langchain-test （3/5）
● Supabase プロジェクトの URL・匿名キーを確認
● OpenAI API キーを取得（発行）・確認
● サンプルコードをダウンロード（clone）
https://github.com/hmatsu47/dbdev-langchain-test.git
○ langchainjs を使うコード
https://github.com/hwchase17/langchainjs
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/VJN5RLR178.jpg)

手順 https://github.com/hmatsu47/dbdev-langchain-test （4/5）
● サンプルコード実行
○
npm install
○ .env に Supabase のプロジェクト URL / 匿名キーと OpenAI の
API キーを記述
○
npm run dev
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/YE9YM4MYJ3.jpg)

手順 https://github.com/hmatsu47/dbdev-langchain-test （5/5）
● テストデータを Vector Store に登録
curl -X POST -H &#039;Content-Type: application/json; charset=UTF-8&#039; http://localhost:【起動
ポート番号】 -d &#039;{&quot;contents&quot;:【ドキュメント配列】, &quot;metadata&quot;:【メタデータ配列】}&#039;
https://github.com/hmatsu47/dbdev-langchain-test/blob/master/test-data.json
【注】データは技術評論社・インプレスの書籍紹介ページより引用
● 検索
curl http://localhost:【起動ポート番号】/【検索キーワード】/【結果の最大数】
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GE86LQLK7D.jpg)

参考コード（1/2）
● データ登録（ドキュメント追加）
// ドキュメント追加
const postDocuments = async (body: { contents: string[]; metadata: Embeddings; }) =&gt; {
await SupabaseVectorStore.fromTexts(
body.contents,
body.metadata,
new OpenAIEmbeddings({
openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
}),
{
client: supabaseClient,
tableName: &quot;documents&quot;,
queryName: &quot;match_documents&quot;,
}
);
const results = {
message: &quot;OK&quot;
}
return results;
}
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/LEL9LXLPJR.jpg)

参考コード（2/2）
● 検索
// 検索
const search = async (keyword: string, count: number) =&gt; {
const vectorStore = await SupabaseVectorStore.fromExistingIndex(
new OpenAIEmbeddings({
openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
}),
{
client: supabaseClient,
tableName: &quot;documents&quot;,
queryName: &quot;match_documents&quot;,
}
);
const results = await vectorStore.similaritySearch(keyword, count);
return results;
};
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4JMZMLM2EW.jpg)

デモ（1/3）
● データ登録（ドキュメント追加）
% curl -X POST -H &#039;Content-Type: application/json; charset=UTF-8&#039; http://localhost:3699 -d @./test-data.json
{&quot;message&quot;:&quot;OK&quot;}%
● v
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/PJR6VKV579.jpg)

デモ（2/3）
● 検索
% curl http://localhost:3699/初心者/2 | jq
% Total
% Received % Xferd Average Speed
Time
Time
Time Current
Dload Upload
Total
Spent
Left Speed
100
966 100
966
0
0
1355
0 --:--:-- --:--:-- --:--:-- 1364
[
{
&quot;pageContent&quot;: &quot;本書はデータベース初心者およびPostgreSQL初心者向けの入門書です。データベースとは何か？から
PostgreSQLのイ
ンストール、SQLの実行、トランザクションについて、レプリケーション、バックアップまでを解説しています。
&quot;,
&quot;metadata&quot;: {
&quot;title&quot;: &quot;データベース初心者のためのPostgreSQL教室&quot;,
&quot;author&quot;: [
&quot;目黒 聖&quot;
]
}
},
{
&quot;pageContent&quot;: &quot;本書は，データベース初学者を対象にPostgreSQLを使って，データベース操作の基本から運用までを学ぶための本で
す。付属DVD収録のファイルを利用することで，自宅のWindowsパソコンやMacで実際にデータの検索や更新などを行いながら，
PostgreSQLによる
リレーショナルデータベースの操作をマスターすることができます。
&quot;,
（以降省略）
● v
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/PEXMZLZX7X.jpg)

デモ（3/3）
● 検索
% curl http://localhost:3699/辛い/1 | jq
% Total
% Received % Xferd Average Speed
Time
Time
Time Current
Dload Upload
Total
Spent
Left Speed
100
914 100
914
0
0
701
0 0:00:01 0:00:01 --:--:-703
[
{
&quot;pageContent&quot;: &quot;「データベースがよく落ちる」「前任者が残したテーブル，
SQLが読み解けない」「RDBMSを入れ替えたら予期せぬバグ
が」――MySQLやPostgreSQLといったRDBMS（リレーショナルデータベース管理システム）を使った業務システム，
Webサービスを設計・運用してい
ると，こういった問題によく直面するのではないでしょうか。本書は
RDB（リレーショナルデータベース）の間違った使い方（＝アンチパターン）を
紹介しながら，アンチパターンを生まないためのノウハウを解説します。それぞれの章では，問題解決に必要な
RDBやSQLの基礎知識も押さえるので
，最近RDBMSを触り始めた新人の方にもお勧めです。&quot;,
&quot;metadata&quot;: {
&quot;title&quot;: &quot;失敗から学ぶ RDBの正しい歩き方&quot;,
&quot;author&quot;: [
&quot;曽根壮大&quot;
]
}
}
]
● v
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/3EKG8L89JD.jpg)

個人の感想
● 簡単
● はたしてメジャーになれるのか？
● せっかくなので AWS の RDS/Aurora でも使えるように
なってほしい
19


