SaaS / FaaSSupabase

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 > APIAPI SettingsにあるExposed schemasdocsを追加します。

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

Docs

https://github.com/supabase/headless-vector-search

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts