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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark