🕌

LangChain JSを参考にしつつ、Supabaseで作成したベクトルデータベースの検索を実装してみる(補足編)

2023/07/22に公開

はじめに

LangChain JSを参考にしつつ、Supabaseで作成したベクトルデータベースの検索を実装してみる
が長くなったので省いた部分をまとめました。

上記記事は主に実装面について記載しています。
今回の記事は、そもそもベクトルデータベースとは、なぜベクトルデータベースを使うのか、Supabaseについてなど、前提知識に関する内容となります。

ベクトルデータベースについて

まずベクトルデータベースについて説明し、なぜベクトルデータベースを利用するかについて書きたいと思います。

ベクトルデータベースとはデータをベクトル化して保存するDBです。
そして、ベクトル化は、データを多次元のベクトル(数値や方向性を持つデータ)に変換することです。
(OpenAIのAPIを扱っていて、よく耳にするembeddingsはベクトル化の中でも自然言語処理に特化した方法を示します)

ある質問の答えになる情報を検索したい場合は、質問文自体をベクトル化し、ベクトルデータベースから類似度が高いベクトルデータ(格納した資料)を抽出します。これにより、スキーマに対応した一定のパターンを必要とするRDSよりも柔軟性があります。

こうして抽出した情報は、OpenAIのAPIで様々なChat系のツールを作成する際に、LLMが標準で持ち合わせてない情報や、質問への回答に利用して欲しい情報を明示的に提供するために使います。

RDSを使う場合でも、例えば質問文からLLMにSQL文を作成してもらう方法や、質問文を分かち書きして検索するなど、代替案の実現自体は可能ですが、手間に見合った優位性は感じられず、まずはベクトルデータベースを選択したいと思います。

似た目的で Fine-tuningもあります。しかし、拡張できるOpen AI の modelが古いものばかりな上、拡張するための料金が高くなり、現実的ではありません。近々 Fine-tuning可能なmodelが増えるという話もあり、その時まで様子見しています。
実際、最近はあまりFine-tuningの検証事例もあまり見かけません。
今後対応モデルが増えた際にたくさんの事例が出てくるのを楽しみにしています。

Supabaseについて

次は、今回利用するSupabaseについて触れておきます。

Supabase is an open source Firebase alternative.
Start your project with a Postgres database, Authentication, instant APIs, Edge Functions, Realtime subscriptions, Storage, and Vector embeddings.

翻訳

Supabaseは、オープンソースのFirebaseの代替プラットフォームです。
Postgresデータベース、認証、インスタントAPI、エッジ関数、リアルタイムサブスクリプション、ストレージ、およびベクトル埋め込みを備えたプロジェクトを開始してください。

上記はSupabaseのトップページにあるキャッチコピーです。あえて付け足すとしたら、Firebaseなどのクラウドサービスが提供していないRDS(PostgresSQL)を、比較的安価・かつ平易に利用できることがきっかけで、人気が出たサービスです。
※普段利用しているクラウドサービス側がNoSQLを推奨している理由を考慮せず、安易にRDSを採用するべきではないと思いますが。

Supabseではpgvectorという拡張機能を提供することでPostgresSQLをベクトルデータベースとして利用することを可能としており、ベクトルデータベースを提供しているサービスとしても注目されています。

個人開発をしている私が今回Supabaseを選択した理由ですが、

  • Langchainでも採用されており、ソースコードを参考にできる
  • Langchainの他にも参考にできる事例が多い
  • 単純に私がsupabaseを使ったことがある
  • 無料枠がある、無料枠を超えた後のプランも比較的安価

となります。

サービスとして利用するならPinecone、自前でサーバーを構築するならRedisやFaiss、Chromaなどもあります。
またAWS RDSもpgvectorを提供しているようです。

いずれも構築・維持運用に手間がかかったり、維持費が気になりました。

いつでも使える状態でサービスを待機させておきたい一方で、個人開発はどうしても隙間時間になってしまいます。仮に良いものが作れたとしても、有料プランに切り替えると急にコストが上がるのも困ります。

またベクトルデータベース自体機能・性能面ですが、あまり気にしていません。現在次々新しいサービスが出てきており、ここで迷うより、まずは癖のないサービスを選んでおいて、落ち着くのを待とうと思っています。

そういうわけで当面はSupabaseを利用していく予定です。

なお、料金プランや無料枠の制限については、今後変更になることもあると思うので直接Supabaseのサイトで確認してください。
https://supabase.com/pricing

Discussion