📝

経験談:ベクターデータベースは不要──SQL + LLM だけで実現する RAG

に公開

ベクターデータベースは不要──SQL + LLM だけで実現する RAG

ドキュメントは不可欠ですが、必要なときに正しい答えを見つけるのは想像以上に難しいものです。では、ドキュメント自体が人間の専門家のように質問に答えてくれるとしたらどうでしょうか?

今日はその最もシンプルな方法を紹介します。LLM API と RisingWave(オープンソースのストリーミングデータベース)を使えば、静的なドキュメントを理解できるインテリジェントアシスタントに変換し、コンテキストに基づいた正確な回答を数秒で返せるようになります。

アーキテクチャ:生テキストからスマートな回答へ

RAG システムを構築するには通常、ベクターデータベース、LLM、独自のオーケストレーションロジックなど、複数の異なるツールを組み合わせる必要があります。強力ではありますが、複雑で壊れやすい仕組みです。

RisingWave は、この複雑なアーキテクチャをストリーミング SQL エンジンに統合することで簡素化します。ベクトル埋め込みと類似検索をネイティブに処理し、高速データ取得のためのマテリアライズドビューを管理し、SQL と Python UDF の両方をサポートして柔軟なカスタムロジックを実現します。さらに、OpenAI API との直接統合によりワークフロー全体を合理化し、RAG アプリケーションのための統一された効率的なプラットフォームを提供します。

実際の動作を大まかに見てみましょう。次のセクションでは、これを自分で構築する方法を 3 ステップで解説します。

  • ドキュメントを RisingWave のテーブルに取り込む
  • OpenAI を使って各ドキュメントのベクトル埋め込みを自動生成
  • ユーザーが質問すると、そのクエリの埋め込みを生成
  • カスタム cosine_similarity UDF を使って意味的に最も類似したドキュメントを検索
  • 結果を LLM に渡し、簡潔でコンテキストに沿った回答を生成

これにより、別途ベクターデータベースや独自のバックエンドを立ち上げることなく、セマンティック検索と AI による回答が可能になります。

自分で構築する 3 ステップ

パイプラインをセットアップする

documents テーブルと、OpenAI の埋め込み API を呼び出す UDF を用いた document_embeddings マテリアライズドビューを作成します。このビューは RisingWave 2.5.0 で新しく導入された SQL UDF openai_embedding を使用します。詳細は openai_embedding 関数のドキュメントを参照してください。

CREATE FUNCTION text_embedding(t VARCHAR) RETURNS REAL[] LANGUAGE sql AS $$
     SELECT openai_embedding('your-openai-api-key', 'text-embedding-3-small', t)
 $$;

ドキュメントをロードする

RisingWave ドキュメントのリポジトリをクローンし、その内容を documents テーブルに挿入します。

質問する

クエリ埋め込みを生成し、cosine_similarity UDF を使って保存済みの埋め込みと比較し、上位の一致を取得します。

詳細なステップごとのガイドについては、Building a RAG system on RisingWave を参照してください。

検索のその先へ

この新しい機能は、いくつかの強力な応用例への扉を開きます。

  • セルフサービス型の開発者サポート: オンボーディングや利用に関する質問に自動回答
  • 社内ツール向け AI アシスタント: 開発者ダッシュボードや CLI に自然言語 Q&A を組み込み
  • 意味を理解するプロダクト検索: 単なる全文検索ではなく、本物の知能を持つヘルプセンターを実現

そして何より素晴らしいのは、これらがすべて標準 SQL と RisingWave に組み込まれた機能だけで実現できるという点です。システム同士をつなぎ合わせるのではなく、本来の開発に集中できます。

触ってみよう

「際限のない検索」から「本当に見つかる検索」へ進む準備はできていますか?完全なチュートリアルはこちらで公開されています: Building a RAG system with Just SQL + LLM

RisingWave は、リアルタイムイベントデータを 処理分析管理 する最も シンプルコスト効率に優れた 方法を提供するストリーム処理・管理プラットフォームです。Apache Iceberg™ オープンテーブルフォーマットをネイティブにサポートし、Postgres 互換の SQL インターフェース と DataFrame スタイルの Python インターフェース を備えています。

RisingWave は 1 秒間に数百万件のイベントを 取り込み、リアルタイムストリームと履歴データを継続的に 結合・分析 し、低レイテンシでアドホッククエリに 応答 し、常に最新かつ一貫性のある結果を Apache Iceberg™ またはその他の下流システムに 永続化 します。

エンドツーエンドのリアルタイムデータスタック(著者作成の図)

Discussion