ai_generate_text()
とOpenAIで顧客レビューを分析
プレビュー
この機能は パブリック プレビュー段階です。
AI 関数 ai_generate_text()
は非推奨です。 Databricks では 、外部モデルで ai_query を使用することをお勧めします。
この記事では、組み込みの Databricks SQL 関数 ai_generate_text()
を使用して、顧客のレビューを調査し、応答を生成する必要があるかどうかを判断する方法について説明します。関数の詳細については 、を使用したデータへの の適用 を参照してください。AIDatabricksAI Functions
このガイドのデータセットとコマンドは、Databricksブログ Action 顧客 Reviews at Scale with Databricks SQL AI Functionsからのものです。
この例では、以下の手順を実行します。
- 自由形式の顧客レビュー テキストをその構成要素に分解します。
- エンティティごとに、センチメントを判断し、顧客に対して応答が必要かどうかを判断します。
- 顧客を満足させる可能性のある代替製品に言及した応答を生成する。
前提 条件
-
このガイドのコマンドを実行する場合は、コマンドを実行するためのデータセットが必要です。 合成データを生成する方法を学びます。
-
このガイドの SQL コマンドは、Databricks SQL クエリ エディターで実行する必要があります。 対話型クラスターを使用して Databricks ノートブックで直接実行することはできません。
-
ai_generate_text()
機能は、プロまたはサーバレス SQLウェアハウスのパブリックプレビューでのみ使用できます。- パブリック プレビューに登録するには、AI Functions パブリック プレビュー登録フォームに入力して送信してください。
-
キーを Databricks シークレットに格納します。この例では、 API キーをスコープ
tokens
に格納し、 シークレット を格納azure-openai
。ai_generate_text()
の設定と考慮事項を参照してください。
プロンプト設計
GPTモデルから有用な結果を得るための鍵は、以下の通りです。
- それにまとまった質問をします。
- あなたが期待している答えのタイプについて具体的であること。
テーブルに簡単に格納できる形式で結果を取得するために、 JSON
表現を反映した文字列で結果を返すようにモデルに要求し、期待されるスキーマを指定できます。
次に、このシナリオのプロンプトの例を示します。
顧客がレビューを残しました。 不幸そうに見える人はフォローアップします。
言及されているすべてのエンティティを抽出します。 各エンティティについて、次の操作を行います。
- センチメントを ["POSITIVE","NEUTRAL","NEGATIVE"] として分類します。
- 顧客に対してフォローアップが必要かどうか : Y または N
- フォローアップが必要な理由
JSONのみを返します。 JSON の外部にある他のテキストはありません。
JSON 形式:
{
"entities": [
{
"entity_name": "entity_name",
"entity_type": "entity_type",
"entity_sentiment": "entity_sentiment",
"followup": "Y or N for follow up",
"followup_reason": "reason for followup"
}
]
}
レビュー :
<'insert_review_text_here'>
SQL 関数の作成
Databricks では、質問を詳細な SQL 関数に分解して、組織内の他のシナリオで再利用できるようにすることをお勧めします。
このセクションでは、エンド ユーザーからの ai_generate_text()
呼び出しの詳細を抽象化するために SQL 関数を作成し、それらの関数を Azure OpenAI と対話するためのインターフェイスとして使用します。
Azure OpenAI への呼び出しを処理する
次のラッパー関数 prompt_handler()
は、Azure OpenAI へのすべての呼び出しを処理します。Azure OpenAI API キーは Databricks シークレットに格納され、 secret()
関数で参照できます。Azure OpenAI リソース名 (resourceName
) とモデルのデプロイ名 (deploymentName
) を渡すこともできます。
CREATE OR REPLACE FUNCTION PROMPT_HANDLER(prompt STRING)
RETURNS STRING
RETURN AI_GENERATE_TEXT(prompt,
"azure_openai/gpt-35-turbo",
"apiKey", SECRET("tokens", "azure-openai"),
"temperature", CAST(0.0 AS DOUBLE),
"deploymentName", "llmbricks",
"apiVersion", "2023-03-15-preview",
"resourceName", "llmbricks"
);
顧客レビューデータの分析
annotate_review()
機能は、エンティティ、エンティティのセンチメント、フォローアップが必要かどうか、およびその理由でレビューに注釈を付けます。プロンプトは整形式の json
表現を返すため、Delta テーブルへの挿入など、ダウンストリームでのクエリを容易にするために、 struct
型を返すように関数に指示できます。
CREATE OR REPLACE FUNCTION ANNOTATE_REVIEW(review STRING)
RETURNS STRUCT<entities: ARRAY<STRUCT<entity_name: STRING, entity_type: STRING, entity_sentiment: STRING, followup: STRING, followup_reason: STRING>>>
RETURN FROM_JSON(
PROMPT_HANDLER(CONCAT(
'A customer left a review. Follow up with anyone who appears unhappy.
Extract all entities mentioned. For each entity:
- classify sentiment as ["POSITIVE","NEUTRAL","NEGATIVE"]
- whether customer requires a follow-up: Y or N
- reason for requiring followup
Return JSON ONLY. No other text outside the JSON. JSON format:
{
entities: [{
"entity_name": <entity name>,
"entity_type": <entity type>,
"entity_sentiment": <entity sentiment>,
"followup": <Y or N for follow up>,
"followup_reason": <reason for followup>
}]
}
Review:
', review)),
"STRUCT<entities: ARRAY<STRUCT<entity_name: STRING, entity_type: STRING, entity_sentiment: STRING, followup: STRING, followup_reason: STRING>>>"
);
顧客 reviews データセットからデータを渡して、 annotate_review()
関数が自由形式の顧客レビューをどのように分類するかを確認できます。
SELECT review_body,
ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;
レコメンデーションを含む回答を生成する
顧客の応答を確認した後、 generate_response()
機能を使用して、顧客の苦情に基づいて顧客への応答を生成し、試用する代替製品の推奨事項を含めることができます。
CREATE OR REPLACE FUNCTION GENERATE_RESPONSE(product STRING, entity STRING, reason STRING)
RETURNS STRING
RETURN PROMPT_HANDLER(
CONCAT("What alternative products can you recommend for ", product,
" when a customer had a complaint about ", entity, " because ", reason,
"Give me a response in the tone of an empathetic message back to the customer; only provide the body")
);
次の例は、Country Choice Snacking Cookiesに関する顧客のレビューに対するメッセージ応答のサンプルを生成しています。
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response
アドホック クエリ
また、新しく作成した prompt_handler()
関数を使用してアドホッククエリを作成することもできます。
たとえば、レビューで飲料について言及しているかどうかを理解することに関心があるかもしれません。
SELECT review_id,
PROMPT_HANDLER(
CONCAT(
"Does this review discuss beverages? Answer Y or N only, no explanations or notes. Review: ", review_body)
) AS discusses_beverages,
review_body
FROM dbdemos.openai_demo.fake_reviews
WHERE review_id IN ("R9LEFDWWXPDEY", "R27UON10EV9FSV", "R299ZTEFIAHRQD")
ORDER BY discusses_beverages DESC;