SupabaseのHeadless vector search試してみた
Supabaseの勉強も兼ねてGitHubのデモアプリを試しています。今回はベクトル検索のデモを触りました。プロジェクトをローカルにダウンロードし、Supabaseのアカウントでプロジェクトを作成。CLIコマンドでプロジェクトとサンプルアプリを紐付け、データベースのプッシュやAPIキーの設定、エッジファンクションのデプロイを行いました。最後にデプロイされたAPIを呼び出した結果も確認しました。このデモアプリは自動生成されたドキュメントなどからRAGを作る際に使えるようです。
目次
Supabaseの勉強も兼ねて、GitHubに公開されているデモアプリなどもいろいろ触っています。今回はRAGなどに使えそうなベクトル検索のデモを触ってみました。
プロジェクトをローカルにDLする
サンプルプロジェクトをダウンロードしましょう。
$ git clone https://github.com/supabase/headless-vector-search.git
$ cd headless-vector-search
Supabaseのプロジェクトを作成する
database.newにアクセスして、デモアプリ用のプロジェクトを作りましょう。プロジェクトの数に制限がないっぽいので、課金を気にすることなくプロジェクトを作っていけるのはありがたいですね。
なお、無料プランでは、一定期間利用されていないプロジェクトはsuspendされますのでご注意ください。
Supabase CLIでサンプルとプロジェクトを紐付ける
CLIを使ってプロジェクトとサンプルアプリを紐付けましょう。まずprojects list
コマンドでプロジェクトの一覧を表示させます。
% npx supabase projects list
LINKED │ ORG ID │ REFERENCE ID │ NAME │ REGION │ CREATED AT (UTC)
─────────┼──────────────────────┼──────────────────────┼────────────────────────┼────────────────────────┼──────────────────────
│ eairkgncwshmtocyglhu │ vgkufqrgmhctvgzhkxnh │ stripe-nextjs │ Northeast Asia (Tokyo) │ 2023-09-24 12:47:44
│ eairkgncwshmtocyglhu │ zcffmbecqgibgossrapl │ flutter-stripe-example │ Northeast Asia (Tokyo) │ 2023-09-19 13:18:16
│ eairkgncwshmtocyglhu │ ntqsneagxkqxjcehmbhv │ Headless Vector Search │ Northeast Asia (Tokyo) │ 2023-12-26 00:16:52
search系が2023/12時点では提供されていない様子です。そのためプロジェクトの数が多い場合は、grepかけることになりそうです。
% npx supabase projects list | grep "Headless Vector Search"
● │ eairkgncwshmtocyglhu │ ntqsneagxkqxjcehmbhv │ Headless Vector Search │ Northeast Asia (Tokyo) │ 2023-12-26 00:16:52
projects list
の結果から、REFERENCE ID
の値をコピーしておきましょう。この値とDBパスワードを利用して、supabase link
コマンドを実行します。
% npx supabase link --project-ref ntqsneagxkqxjcehmbhv
Enter your database password (or leave blank to skip):
これでこのサンプルアプリのあるディレクトリからsupabase
コマンドを実行すると、Linkしたプロジェクトに対する操作が行われます。
DBをpushする
npx supabase db push
を実行して、サンプル用のデータベースをpushしましょう。
Connecting to remote database...
Applying migration 20230525043454_init.sql...
Finished supabase db push.
OpenAI APIのAPIキーをSupabaseにpushする
SupabaseからOpenAI APIを呼び出せるようにするため、supabase secrets set
でOpenAIのAPIキーをpushしておきます。
supabase secrets set OPENAI_KEY=sk-xxx
Finished supabase secrets set.
Edge functionをデプロイする
検索に使うEdge functionsをデプロイしましょう。これもCLIコマンドで一発です。
% npx supabase functions deploy --no-verify-jwt
Bundling vector-search
v1.29.1: Pulling from supabase/edge-runtime
...
Download https://esm.sh/v135/node_events.js
Deploying vector-search (script size: 712.5kB)
Deployed Function vector-search on project ntqsneagxkqxjcehmbhv
You can inspect your deployment in the Dashboard: https://supabase.com/dashboard/project/ntqsneagxkqxjcehmbhv/functions/vector-search/details
ただしDockerが必要です。もしこのようなメッセージが出た場合は、Dockerが利用できるようにアプリなどを立ち上げておきましょう。
Bundling vector-search
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Try rerunning the command with --debug to troubleshoot the error.
管理画面に表示されれば、デプロイ成功です。
URLもダッシュボードから確認できます。次のようにレスポンスが返ってきていればOKです。
% curl https://xxxxxx.supabase.co/functions/v1/vector-search
{"error":"Missing query in request data","data":{}}%
プロジェクトの設定を変更する
プロジェクトの設定を少し変更しておきましょう。Settings > API
のAPI Settings
にあるExposed schemas
にdocs
を追加します。
APIを呼び出してみる
デプロイされたAPIを呼び出してみましょう。コードを見ていないのでこれが成功なのかはわかっていないのですが、少なくとも動いてはいそうです。
% curl "https://xxxxxx.supabase.co/functions/v1/vector-search?query=What%27s+Supabase%3F"
data: {"id":"cmpl-8ZpufTSftR85yxhjmpAb4Aw4Me0Ci","object":"text_completion","created":1703551725,"choices":[{"text":"\n\n","index":0,"logprobs":null,"finish_reason":null}],"model":"gpt-3.5-turbo-instruct"}
data: {"id":"cmpl-8ZpufTSftR85yxhjmpAb4Aw4Me0Ci","object":"text_completion","created":1703551725,"choices":[{"text":"Sup","index":0,"logprobs":null,"finish_reason":null}],"model":"gpt-3.5-turbo-instruct"}
data: {"id":"cmpl-8ZpufTSftR85yxhjmpAb4Aw4Me0Ci","object":"text_completion","created":1703551725,"choices":[{"text":"ab","index":0,"logprobs":null,"finish_reason":null}],"model":"gpt-3.5-turbo-instruct"}
data: {"id":"cmpl-8ZpufTSftR85yxhjmpAb4Aw4Me0Ci","object":"text_completion","created":1703551725,"choices":[{"text":"ase","index":0,"logprobs":null,"finish_reason":null}],"model":"gpt-3.5-turbo-instruct"}
data: {"id":"cmpl-8ZpufTSftR85yxhjmpAb4Aw4Me0Ci","object":"text_completion","created":1703551725,"choices":[{"text":" is","index":0,"logprobs":null,"finish_reason":null}],"model":"gpt-3.5-turbo-instruct"}
触ってみての感想
GitHub ActionでEmbeddingを作成できるものを公開されています。Markdownで生成したサイトやTypeDocなどから自動生成したドキュメントなどをソースにしたRAGを作りたい時、これと組みわせて使えそうです。
後片付け
Projectごと消せばOKです。
% npx supabase projects delete ntqsneagxkqxjcehmbhv
Do you want to delete project ntqsneagxkqxjcehmbhv? This action is irreversible. [Y/n] y
Deleted project: Headless Vector Search