Analizowanie recenzji klientów za pomocą interfejsu ai_generate_text() OpenAI

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Ostrzeżenie

Funkcja ai_generate_text() sztucznej inteligencji jest przestarzała. Usługa Databricks zaleca używanie ai_query z modelami zewnętrznymi.

W tym artykule pokazano, jak używać wbudowanej funkcji SQL usługi Databricks w celu sprawdzenia recenzji klientów i określenia, ai_generate_text() czy należy wygenerować odpowiedź. Aby uzyskać więcej szczegółowych informacji na temat funkcji, zobacz AI Functions on Azure Databricks (Funkcje sztucznej inteligencji w usłudze Azure Databricks ).

Zestaw danych i polecenia w tym przewodniku pochodzą z pokazu Databricks Action Customer Reviews at Scale with Databricks SQL AI Functions (Przeglądy klientów usługi Databricks na dużą skalę za pomocą usługi SQL AI Functions usługi Databricks). W pokazie używane są fałszywe dane generowane przez platformę OpenAI, które naśladują opinie klientów dotyczące produktów spożywczych przesłanych do witryny internetowej handlu elektronicznego.

Customer reviews

W tym przykładzie wykonasz następujące czynności:

  • Podział tekstu przeglądu wolnego formularza klienta na jednostki składowe.
  • Dla każdej jednostki określenie tonacji i określenie, czy odpowiedź jest wymagana z powrotem do klienta.
  • Generowanie odpowiedzi z informacją o alternatywnych produktach, które mogą być zgodne z klientem.

ai_generate_text data flow

Wymagania wstępne

  • Jeśli chcesz uruchomić polecenia w tym przewodniku, potrzebujesz zestawu danych, aby go uruchomić. Możesz utworzyć fałszywy zestaw danych w notesie Generowanie fałszywych danych za pomocą usługi AI Functions .
  • Polecenia SQL w tym przewodniku muszą być uruchamiane w edytorze zapytań SQL usługi Databricks. Nie można ich uruchamiać bezpośrednio w notesie usługi Azure Databricks przy użyciu klastrów interaktywnych.
  • Funkcja ai_generate_text() jest dostępna tylko w publicznej wersji zapoznawczej w usługach SQL Warehouse pro lub bezserwerowych.
  • Klucz usługi Azure OpenAI.
  • Zapisz klucz w wpisach tajnych usługi Databricks. W tym przykładzie klucz interfejsu API jest przechowywany w zakresie i wpisie tajnymazure-openai.tokens Zobacz Konfigurowanie i zagadnienia dotyczące ai_generate_text().

Projekt monitu

Klucze do uzyskiwania przydatnych wyników z modelu GPT to:

  • Zadając mu dobrze sformułowane pytanie.
  • Konkretne informacje o typie oczekiwanej odpowiedzi.

Aby uzyskać wyniki w formularzu, który można łatwo przechowywać w tabeli, możesz poprosić model o zwrócenie wyniku w ciągu, który odzwierciedla JSON reprezentację, i określić oczekiwany schemat.

Poniżej przedstawiono przykładowy monit dotyczący tego scenariusza:

Klient opuścił przegląd. Postępuj zgodnie z każdym, kto wydaje się niezadowolony.

Wyodrębnij wszystkie wymienione jednostki. Dla każdej jednostki:

  • Klasyfikowanie tonacji jako ["POSITIVE","NEUTRAL","NEGATIVE"]
  • Czy klient wymaga kontynuacji: Y czy N
  • Przyczyna wymagania kontynuacji

Zwraca tylko kod JSON. Brak innego tekstu poza formatem JSON.

Format 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"
  }]
}

Przegląd:

<"insert_review_text_here">

Tworzenie funkcji SQL

Usługa Databricks zaleca oddzielenie pytań od szczegółowych funkcji SQL, dzięki czemu mogą być ponownie używane w innych scenariuszach w organizacji.

W tej sekcji utworzysz funkcje SQL, aby wyodrębnić szczegóły ai_generate_text() wywołania od użytkowników końcowych i użyć tych funkcji jako interfejsu do interakcji z usługą Azure OpenAI.

Obsługa wywołań do usługi Azure OpenAI

Następująca funkcja prompt_handler()otoki obsługuje wszystkie wywołania usługi Azure OpenAI. Klucz interfejsu API usługi Azure OpenAI jest przechowywany w kluczu tajnym usługi Databricks i można go odwołać z funkcją secret() . Możesz również przekazać nazwę zasobu Usługi Azure OpenAI (resourceName) i nazwę wdrożenia modelu (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"
);

Analizowanie danych przeglądu klienta

Funkcja annotate_review() dodawać adnotacje do przeglądu za pomocą jednostek, tonacji jednostek i określa, czy jest wymagana kontynuacja i dlaczego. Zwróć uwagę, że monit zwraca dobrze sformułowaną json reprezentację, aby można było poinstruować funkcję o zwracaniu typu w celu łatwiejszego struct wykonywania zapytań podrzędnych, takich jak wstawianie jej do tabeli delty.

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>>>"
);

Możesz przekazać dane z zestawu danych przeglądów klientów, aby zobaczyć, jak annotate_review() funkcja klasyfikuje bezpłatne przeglądy klientów.

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

Generowanie odpowiedzi przy użyciu zaleceń

Po przejrzeniu odpowiedzi klientów możesz użyć generate_response() funkcji , aby wygenerować odpowiedź na klienta w oparciu o ich skargę i uwzględnić zalecenia dotyczące alternatywnych produktów do wypróbowania.

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")
);

Poniższe polecenie generuje przykładową odpowiedź na wiadomość dla recenzji klienta w sprawie country choice snacking cookies.

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

Zapytania adhoc

Zapytania ad hoc można również tworzyć przy użyciu nowo utworzonej prompt_handler() funkcji.

Na przykład możesz zainteresować się zrozumieniem, czy przegląd omawia napoje.

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;