SQL 演算子で自然言語を使用する

このページでは、AlloyDB AI クエリエンジンで提供される演算子関数を使用して、SQL 演算子で自然言語を使用する方法について説明します。ai.ifai.if による結合、ai.scoreai.generate 演算子を使用して、自然言語と SQL クエリを組み合わせることができます。

このページの手順は、AlloyDB for PostgreSQL と生成 AI のコンセプトに詳しい方向けのものです。

AlloyDB は ai スキーマを予約し、google_ml_integration 拡張機能をインストールするときにこのスキーマを作成しようとします。スキーマの作成に失敗した場合は、google_ml スキーマの同じ名前の関数を使用します。

始める前に

クエリでフィルタと結合を使用する

自然言語で指定された条件が満たされているかどうかを評価するには、ai.if/google_ml.if 演算子を使用します。この関数はブール値 true または false を返します。出力が明確に検出されなかった場合は NULL を返します。

次のサンプルクエリは、駐車スペースに言及しているレストランのレビューを見つける方法を示しています。

    SELECT review AS talks_about_parking
    FROM user_reviews
    WHERE
      ai.if(
        prompt => 'the following review talks about parking at the restaurant. review: ' || review);

結合オペレーションを実行する

結合オペレーションを実行するには、結合で ai.if/google_ml.if 演算子を使用します。次のサンプルクエリは、レストランのメニューの各メニュー アイテムに言及しているレビューの数を検索します。

    SELECT item_name, COUNT(*)
    FROM menu_items JOIN user_reviews
      ON ai.if(
        prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
    GROUP BY item_name;

クエリ結果をスコアリングする

自然言語で指定されたセマンティック条件に基づいてクエリ内のアイテムのリストを並べ替えるには、ai.rank/google_ml.rank 演算子を使用します。

次のサンプルクエリは、最も好意的なレストランのレビューの上位 20 件を取得します。ai.rank/google_ml.rank 関数呼び出しで設定された条件に基づいてレスポンスを並べ替えます。

    SELECT review AS top20
    FROM user_reviews
    ORDER BY ai.rank('Score the following review according to these rules: score of 8 to 10 if the review says the food is excellent, 4 to 7 if the review says the food is and 1 to 3 if the review says the food is not good. Here is the review: ' || review)
    LIMIT 20;

自然言語で SQL 演算子のテキストを生成する

自然言語で指定されたプロンプトに基づいてテキストを生成する場合は、ai.generate/google_ml.generate 関数を使用します。

次のクエリは、ai.generate 関数呼び出しで指定された条件に基づいて、各ユーザー レビューの概要を生成します。

    SELECT
      ai.generate(
        prompt => 'Summarize the review in 20 words or less. Review: ' || review_text) AS review_summary
    FROM user_reviews;

次のステップ