メインコンテンツまでスキップ

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からのものです。

顧客レビュー

この例では、以下の手順を実行します。

  • 自由形式の顧客レビュー テキストをその構成要素に分解します。
  • エンティティごとに、センチメントを判断し、顧客に対して応答が必要かどうかを判断します。
  • 顧客を満足させる可能性のある代替製品に言及した応答を生成する。

AI_generate_text データ フロー

前提 条件

プロンプト設計

GPTモデルから有用な結果を得るための鍵は、以下の通りです。

  • それにまとまった質問をします。
  • あなたが期待している答えのタイプについて具体的であること。

テーブルに簡単に格納できる形式で結果を取得するために、 JSON 表現を反映した文字列で結果を返すようにモデルに要求し、期待されるスキーマを指定できます。

次に、このシナリオのプロンプトの例を示します。

顧客がレビューを残しました。 不幸そうに見える人はフォローアップします。

言及されているすべてのエンティティを抽出します。 各エンティティについて、次の操作を行います。

  • センチメントを ["POSITIVE","NEUTRAL","NEGATIVE"] として分類します。
  • 顧客に対してフォローアップが必要かどうか : Y または N
  • フォローアップが必要な理由

JSONのみを返します。 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) を渡すこともできます。

SQL
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 型を返すように関数に指示できます。

SQL
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() 関数が自由形式の顧客レビューをどのように分類するかを確認できます。

SQL
SELECT review_body,
ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;

レコメンデーションを含む回答を生成する

顧客の応答を確認した後、 generate_response() 機能を使用して、顧客の苦情に基づいて顧客への応答を生成し、試用する代替製品の推奨事項を含めることができます。

SQL
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に関する顧客のレビューに対するメッセージ応答のサンプルを生成しています。

SQL
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response

アドホック クエリ

また、新しく作成した prompt_handler() 関数を使用してアドホッククエリを作成することもできます。

たとえば、レビューで飲料について言及しているかどうかを理解することに関心があるかもしれません。

SQL
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;