다음을 통해 공유


OpenAI를 사용하여 ai_generate_text() 고객 리뷰 분석

Important

이 기능은 공개 미리 보기 상태입니다.

Warning

AI 함수 ai_generate_text() 는 더 이상 사용되지 않습니다. Databricks는 외부 모델에서 ai_query 사용하는 것이 좋습니다.

이 문서에서는 기본 제공 Databricks SQL 함수 ai_generate_text() 를 사용하여 고객 검토를 검사하고 응답을 생성해야 하는지 확인하는 방법을 보여 줍니다. 함수에 대한 자세한 내용은 Azure Databricks의 AI Functions를 참조하세요.

이 가이드의 데이터 세트 및 명령은 Databricks SQL AI Functions를 사용한 대규모 Databricks 데모 작업 고객 검토에서 제공됩니다. 데모는 전자 상거래 웹 사이트에 제출된 식료품에 대한 고객 리뷰를 모방하는 OpenAI에서 생성된 가짜 데이터를 사용합니다.

Customer reviews

이 예제에서는 다음 단계를 안내합니다.

  • 자유 형식 고객 검토 텍스트를 해당 구성 엔터티로 구분합니다.
  • 각 엔터티에 대해 감정 및 응답이 고객에게 다시 필요한지 여부를 결정합니다.
  • 고객을 만족시킬 수 있는 대체 제품을 멘션 응답을 생성합니다.

ai_generate_text data flow

필수 조건

  • 이 가이드에서 명령을 실행하려면 데이터 세트를 실행해야 합니다. AI Functions Notebook을 사용하여 가짜 데이터 생성에서 가짜 데이터 세트를 만들 수 있습니다 .
  • 이 가이드의 SQL 명령은 Databricks SQL 쿼리 편집기에서 실행해야 합니다. 대화형 클러스터를 사용하여 Azure Databricks Notebook에서 직접 실행할 수 없습니다.
  • ai_generate_text() 함수는 pro 또는 서버리스 SQL 웨어하우스의 공개 미리 보기에서만 사용할 수 있습니다.
    • 공개 미리 보기등록하려면 AI Functions 공개 미리 보기 등록 양식을 채우고 제출하세요.
  • Azure OpenAI 키입니다.
  • Databricks 비밀키를 저장합니다. 이 예제에서는 범위 및 비밀azure-openaiAPI 키를 저장합니다.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 리소스 이름() 및 모델의 배포 이름(resourceNamedeploymentName)을 전달할 수도 있습니다.

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;