OpenAI를 사용하여 ai_generate_text()
고객 리뷰 분석
Important
이 기능은 공개 미리 보기 상태입니다.
Warning
AI 함수 ai_generate_text()
는 더 이상 사용되지 않습니다. Databricks에서는 외부 모델에 ai_query를 사용하는 것이 좋습니다.
이 문서에서는 기본 제공 Databricks SQL 함수 ai_generate_text()
를 사용하여 고객 검토를 검사하고 응답을 생성해야 하는지 확인하는 방법을 보여 줍니다. 함수에 대한 자세한 내용은 Azure Databricks의 AI Functions를 참조하세요.
이 가이드의 데이터 세트와 명령은 Databricks 블로그의 Action Customer Reviews at Scale with Databricks SQL AI Functions에서 나온 것입니다.
이 예제에서는 다음 단계를 안내합니다.
- 자유 형식 고객 검토 텍스트를 해당 구성 엔터티로 구분합니다.
- 각 엔터티에 대해 감정 및 응답이 고객에게 다시 필요한지 여부를 결정합니다.
- 고객을 만족시킬 수 있는 대체 제품을 언급하는 응답을 생성합니다.
필수 조건
- 이 가이드에서 명령을 실행하려면 데이터 세트를 실행해야 합니다. 가상 데이터를 생성하는 방법을알아봅니다.
- 이 가이드의 SQL 명령은 Databricks SQL 쿼리 편집기에서 실행해야 합니다. 대화형 클러스터를 사용하여 Azure Databricks Notebook에서 직접 실행할 수 없습니다.
- 이
ai_generate_text()
함수는 pro 또는 서버리스 SQL 웨어하우스의 공개 미리 보기에서만 사용할 수 있습니다. - Azure OpenAI 키입니다.
- Databricks 비밀에 키를 저장합니다. 이 예제에서는 범위.
tokens
ai_generate_text() 대한설정 및 고려 사항을 참조하세요.
프롬프트 디자인
GPT 모델에서 유용한 결과를 다시 가져오는 키는 다음과 같습니다.
- 그것은 잘 형성 된 질문을.
- 예상하는 답변 유형에 대해 구체적으로 설명합니다.
테이블에 쉽게 저장할 수 있는 형식으로 결과를 가져오기 위해 모델에 JSON
표현을 반영하는 문자열로 결과를 반환하고 예상 스키마를 지정하도록 요청할 수 있습니다.
다음은 이 시나리오에 대한 프롬프트 예제입니다.
고객이 리뷰를 남겼습니다. 불행해 보이는 사람과 후속 조치를 수행합니다.
언급된 모든 엔터티를 추출합니다. 각 엔터티에 대해 다음을 수행합니다.
- 감정을 ["긍정","중립","부정"]으로 분류합니다.
- 고객에게 후속 작업이 필요한지 여부: 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
표현을 반환하므로 델타 테이블에 삽입하는 등 다운스트림을 더 쉽게 쿼리할 수 있도록 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>>>"
);
고객 리뷰 데이터 세트의 데이터를 전달하여 함수가 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 스낵 쿠키에 대한 고객의 리뷰에 대한 샘플 메시지 응답을 생성합니다.
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;