このページでは、embedding()
関数がテーブルに保存されたデータと pgvector
特徴と連携する方法を示したワークフローの例を示します。この例では、プレーンテキストの入力を使用して、テキストの意味の解析を大規模言語モデル(LLM)に依存するデータベースから結果を取得します。
シナリオの例
AlloyDB で次の条件を満たすデータベースを実行します。
データベースに
items
というテーブルが存在する。このテーブルの各行には、販売する商品が記録されています。items
テーブルにcomplaints
という列がある。このTEXT
列には、各商品について記録された購入者からの苦情が保存されます。データベースが Vertex AI Model Garden と統合され、
textembedding-gecko
英語モデルにアクセスできる。
このデータベースには商品に関する苦情が記録されていますが、苦情はプレーンテキストとして保存されているため、クエリで照会するのは容易ではありません。たとえば、色違いの商品を受け取った顧客からの苦情が最も多い商品を確認したい場合は、テーブルに対して通常の SQL クエリを実行し、さまざまなキーワードで照合を行います。ただし、この方法では、指定したキーワードが含まれている行のみが一致します。
たとえば、SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
などの基本的な SQL クエリでは、complaints
フィールドに The picture shows a blue one, but the one I received was red
のみが含まれる行は返されません。
このギャップを埋めるのに、LLM ベースのエンベディングを使用する SQL クエリが役立ちます。エンベディングを適用すると、この例のテーブルで、苦情が特定のテキスト プロンプト(「色が間違っていた」など)と意味的に類似している項目をクエリできます。
以下では、前述の設定例でこの方法を実現する手順について説明します。
始める前に
次の要件を満たしていることを確認してください。
必要なデータベース拡張機能
AlloyDB データベースに次の拡張機能がインストールされていることを確認します。
google_ml_integration
個の拡張機能vector
拡張機能、バージョン0.5.0.google-1
以降
拡張機能のインストールと管理の詳細については、データベース拡張機能を構成するをご覧ください。
google_ml_integration.enable_model_support
データベース フラグをoff
に設定します。
モデルへのアクセスを設定する
AlloyDB データベースからエンベディングを生成するには、テキスト エンベディング モデルを使用するように AlloyDB を構成する必要があります。
クラウドベースの textembeddings-gecko
モデルを使用するには、データベースを Vertex AI と統合する必要があります。
テーブルを準備する
items
テーブルのコンテンツに対して LLM ベースのクエリを実行する前に、既存のデータに基づいてエンベディングを保存し、インデックスに登録するためのテーブルを用意する必要があります。
エンベディングを格納する列を作成する
エンベディングを格納する列をテーブルに追加します。
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
この例では、textembedding-gecko
英語モデルでサポートされているディメンション数である 768
を引数として指定しています。詳細については、エンベディングを生成するをご覧ください。
この例では、値で pgvector
関数と演算子を簡単に使用できるように、列に vector
データ型を適用します。
新しい列にデータを入力する
CSV
形式のエンベディングがすでにある場合は、ベクトル エンベディングを保存するの手順に沿ってエンベディングを保存します。
必要に応じて、complaints
列にテキストが保存されている場合は、embedding()
関数を使用してこの新しい列にエンベディングを入力します。この例の設定では、AlloyDB は textembedding-gecko
モデル(バージョン 003
)を使用してエンベディングを生成します。
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);
この例では、embedding()
の real[]
戻り値を暗黙的に vector
値にキャストし、先ほど作成した vector
列に値を格納します。
インデックスを作成する
パフォーマンスを向上させるには、スカラー量子化手法を使用するインデックスを items
に追加します。
CREATE INDEX complaint_embed_idx ON items
USING ivf (complaint_embedding vector_l2_ops)
WITH (lists = 20, quantizer = 'SQ8');
近似最近傍インデックスの作成の詳細については、インデックスの作成をご覧ください。
テキストを渡して LLM を利用したクエリを実行する
items
テーブルでセマンティック最近傍クエリを実行できるようになりました。次のクエリでは、pgvector
で提供される <->
演算子を使用して、テキスト It was the wrong color
との意味的な近さに基づいてテーブルの行を並べ替え、上位 10 件の苦情を返します。このクエリでは、最初に並べ替えられた行の id
値と name
値が表示されます。
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;
次のステップ
- AlloyDB と
pgvector
を含む別のワークフローの例については、pgvector、LLM、LangChain を使用して Google Cloud データベースで AI 搭載アプリを構築するをご覧ください。