JavaScriptNode.jsSaaS / FaaSSupabase

Supabase-jsでのDB操作と、Postgre functionの実行

SupabaseのJS SDKの使い方を調べた結果を共有します。データの取得は、SQLのfromとselectを組み合わせて行います。全てのデータを取得する場合はfromでテーブル名を指定し、selectを呼び出します。特定のカラムだけ取得する場合は、selectの第一引数にカラム名を指定します。また、SupabaseのSDKからPostgreSQLの関数を呼び出すこともできます。関数の実行結果はrpc()メソッドで取得できます。ベクトル検索を行う場合は、配列の長さに注意する必要があります。詳細は公式ドキュメントを参照してください。

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

Supabaseを触り始めたので、JS SDKの使い方などを調べてみました。

データの取得は、fromselectを使う

SQLをメソッドチェーン的に組み上げるイメージで、SDKを使う様子です。

全てのデータを取得する

全てのデータを取得する場合は、fromでテーブル名を指定してから、selectを引数なしで呼び出します。

 await client.from('documents').select()

特定のカラムだけ取り出す

SELECT embedding idのようなクエリを書きたい場合は、selectの第一引数に書きます。

 await client.from('documents').select("embedding, id")

Postgre functionをSDKから呼び出す

LangChainのサンプルで作った関数を動かしてみます。

-- Create a function to search for documents
create function match_documents (
  query_embedding vector(1536),
  match_count int DEFAULT null,
  filter jsonb DEFAULT '{}'
) returns table (
  id bigint,
  content text,
  metadata jsonb,
  embedding jsonb,
  similarity float
)
language plpgsql

rpc()の第一引数で呼び出す関数を、第二引数で渡すパラメータを指定します。

    const targetVectorString = [0.0055157384,-0.009889425,0.016879791,-0.008615596,-0.030847976,0.00419171, ...] // 長さ1536の配列を、OpenAIやClaudeのEmbedding APIで生成しておく
    const privateKey = c.env.SUPABASE_PRIVATE_KEY;
    const url = c.env.SUPABASE_URL;
    const client = createClient(url, privateKey);
    const data = await client.rpc("match_documents", {
        query_embedding: targetVectorString
    })
    console.log(data)

実行すると、関数の実行結果が取得できます。

{
  error: null,
  data: [
    {
      id: 3,
      content: "What's this?",
      metadata: [Object],
      embedding: [Array],
      similarity: 1
    },
    {
      id: 1,
      content: 'Hello world',
      metadata: [Object],
      embedding: [Array],
      similarity: 0.796101617580761
    },
    {
      id: 2,
      content: 'Bye bye',
      metadata: [Object],
      embedding: [Array],
      similarity: 0.789771054955852
    }
  ],
  count: null,
  status: 200,
  statusText: 'OK'
}

ベクトル検索系については、Dimensions(配列)の長さが足りないとエラーになるのでご注意ください。

{
  "error": {
    "code": "22000",
    "details": null,
    "hint": null,
    "message": "different vector dimensions 1536 and 6"
  },
  "data": null,
  "count": null,
  "status": 400,
  "statusText": "Bad Request"
}

参考

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

WP Kyotoサポーター募集中

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

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

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

Related Category posts