Udostępnij za pośrednictwem


Syntetyzowanie zestawów oceny

Ważny

Ta funkcja jest dostępna w publicznej wersji testowej.

Na tej stronie opisano, jak generować syntetyczny zestaw oceny wysokiej jakości do mierzenia jakości Twojego agenta.

Ręczne tworzenie zestawu oceny jest często czasochłonne i trudno jest upewnić się, że obejmuje ona wszystkie funkcje agenta. Ocena agenta Mosaic AI usuwa tę barierę, automatycznie generując reprezentatywny zestaw ewaluacyjny z twoich dokumentów, co pozwala szybko ocenić agenta, zapewniając dobre pokrycie przypadków testowych.

Generowanie zestawu oceny

Aby zsyntetyzować oceny agenta korzystającego z pobierania dokumentów, użyj metody generate_evals_df, która jest częścią pakietu databricks-agents Python. Aby uzyskać szczegółowe informacje na temat interfejsu API, zobacz odwołanie do zestawu SDK języka Python.

Ta metoda wymaga podania dokumentów jako DataFrame Pandas lub DataFrame Spark.

Ramka danych wejściowych musi zawierać następujące kolumny:

  • content: przeanalizowana zawartość dokumentu jako ciąg.
  • doc_uri: identyfikator URI dokumentu.

Aby kontrolować generowanie, możesz użyć trzech dodatkowych parametrów:

  • num_evals: łączna liczba ocen do wygenerowania we wszystkich dokumentach. Funkcja próbuje dystrybuować wygenerowane oceny na wszystkie dokumenty, biorąc pod uwagę ich rozmiar. Jeśli num_evals jest mniejsza niż liczba dokumentów, nie wszystkie dokumenty zostaną uwzględnione w zestawie oceny.

    Aby uzyskać szczegółowe informacje na temat sposobu użycia num_evals do dystrybucji ocen w dokumentach, zobacz Jak num_evals jest używany.

  • agent_description: opis zadania agenta

  • question_guidelines: zestaw wytycznych, które ułatwiają generowanie syntetycznych pytań. To jest ciąg tekstowy w dowolnym formacie, który będzie używany do wywołania generacji. Zobacz poniższy przykład.

Dane wyjściowe generate_evals_df to ramka danych z następującymi kolumnami:

  • request_id: unikatowy identyfikator żądania.
  • request: Syntetyzowane żądanie.
  • expected_facts: lista oczekiwanych faktów w odpowiedzi. Ta kolumna ma listę dtype[string].
  • expected_retrieved_context: kontekst, z którego ta ocena została zsyntetyzowana, w tym zawartość dokumentu i doc_uri.

Przykład

W poniższym przykładzie użyto generate_evals_df do wygenerowania zestawu ewaluacyjnego, a następnie bezpośrednio wywołuje mlflow.evaluate(), aby zmierzyć wydajność Meta Llama 3.1 na tym zestawie ewaluacyjnym. Model Llama 3.1 nigdy nie widział Twoich dokumentów, więc prawdopodobnie będzie to halucynować. Mimo to ten eksperyment jest dobrym punktem odniesienia dla agenta niestandardowego.


%pip install mlflow mlflow[databricks] databricks-agents
dbutils.library.restartPython()

import mlflow
from databricks.agents.evals import generate_evals_df
import pandas as pd
import math

# `docs` can be a Pandas DataFrame or a Spark DataFrame with two columns: 'content' and 'doc_uri'.
docs = pd.DataFrame.from_records(
    [
      {
        'content': f"""
            Apache Spark is a unified analytics engine for large-scale data processing. It provides high-level APIs in Java,
            Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set
            of higher-level tools including Spark SQL for SQL and structured data processing, pandas API on Spark for pandas
            workloads, MLlib for machine learning, GraphX for graph processing, and Structured Streaming for incremental
            computation and stream processing.
        """,
        'doc_uri': 'https://spark.apache.org/docs/3.5.2/'
      },
      {
        'content': f"""
            Spark’s primary abstraction is a distributed collection of items called a Dataset. Datasets can be created from Hadoop InputFormats (such as HDFS files) or by transforming other Datasets. Due to Python’s dynamic nature, we don’t need the Dataset to be strongly-typed in Python. As a result, all Datasets in Python are Dataset[Row], and we call it DataFrame to be consistent with the data frame concept in Pandas and R.""",
        'doc_uri': 'https://spark.apache.org/docs/3.5.2/quick-start.html'
      }
    ]
)

agent_description = """
The Agent is a RAG chatbot that answers questions about using Spark on Databricks. The Agent has access to a corpus of Databricks documents, and its task is to answer the user's questions by retrieving the relevant docs from the corpus and synthesizing a helpful, accurate response. The corpus covers a lot of info, but the Agent is specifically designed to interact with Databricks users who have questions about Spark. So questions outside of this scope are considered irrelevant.
"""

question_guidelines = """
# User personas
- A developer who is new to the Databricks platform
- An experienced, highly technical Data Scientist or Data Engineer

# Example questions
- what API lets me parallelize operations over rows of a delta table?
- Which cluster settings will give me the best performance when using Spark?

# Additional Guidelines
- Questions should be succinct, and human-like
"""

num_evals = 10

evals = generate_evals_df(
    docs,
    # The total number of evals to generate. The method attempts to generate evals that have full coverage over the documents
    # provided. If this number is less than the number of documents, is less than the number of documents,
    # some documents will not have any evaluations generated. See "How num_evals is used" below for more details.
    num_evals=num_evals,
    # A set of guidelines that help guide the synthetic generation. These are free-form strings that will be used to prompt the generation.
    agent_description=agent_description,
    question_guidelines=question_guidelines
)

display(evals)

# Evaluate the model using the newly generated evaluation set. After the function call completes, click the UI link to see the results. You can use this as a baseline for your agent.
results = mlflow.evaluate(
  model="endpoints:/databricks-meta-llama-3-1-405b-instruct",
  data=evals,
  model_type="databricks-agent"
)

# Note: To use a different model serving endpoint, use the following snippet to define an agent_fn. Then, specify that function using the `model` argument.
# MODEL_SERVING_ENDPOINT_NAME = '...'
# def agent_fn(input):
#   client = mlflow.deployments.get_deploy_client("databricks")
#   return client.predict(endpoint=MODEL_SERVING_ENDPOINT_NAME, inputs=input)

W poniższych przykładowych danych wyjściowych kolumny request_id i expected_retrieved_context nie są wyświetlane.

wniosek oczekiwane_fakty
Co to jest język Spark SQL używany na platformie Apache Spark? — Język Spark SQL jest używany do przetwarzania SQL na platformie Apache Spark.
— Język Spark SQL jest używany do przetwarzania danych strukturalnych na platformie Apache Spark.
Jakie są niektóre narzędzia wysokiego poziomu obsługiwane przez platformę Apache Spark i jakie są ich cele? — Spark SQL do przetwarzania danych SQL oraz danych ustrukturyzowanych.
— interfejs API pandas na platformę Spark do obsługi zestawów zadań pandas.
- MLlib do uczenia maszynowego.
- GraphX do przetwarzania grafu.
- Przesyłanie strumieniowe ze strukturą na potrzeby obliczeń przyrostowych i przetwarzania strumienia.
Jaka jest podstawowa abstrakcja na platformie Spark i jak zestawy danych są reprezentowane w języku Python? — Podstawową abstrakcją na platformie Spark jest zestaw danych.
— W języku Python zestawy danych platformy Spark są nazywane ramkami danych.
— W języku Python, zestawy danych są reprezentowane jako Dataset[Row]
Dlaczego wszystkie zestawy danych w języku Python są nazywane ramkami danych na platformie Spark? — Zestawy danych w języku Python są nazywane ramkami danych na platformie Spark, aby zachować spójność z koncepcją ramki danych.
- Ramka danych jest standardem w Pandas i R.

Jak jest używana num_evals

num_evals jest łączną liczbą ocen wygenerowanych dla zestawu dokumentów. Funkcja dystrybuuje te oceny w dokumentach, starając się uwzględniać różnice w rozmiarze dokumentów. Oznacza to, że próbuje zachować w przybliżeniu taką samą liczbę pytań na stronę w zestawie dokumentów.

Jeśli num_evals jest mniejsza niż liczba dokumentów, niektóre dokumenty nie będą miały wygenerowanych ocen. Ramka danych zwrócona przez funkcję zawiera kolumnę z source_doc_ids, które zostały użyte do wygenerowania ocen. Możesz użyć tej kolumny, aby ponownie połączyć się z oryginalną ramką danych i wygenerować wyniki dla dokumentów, które zostały pominięte.

Aby ułatwić oszacowanie num_evals dla żądanego pokrycia, udostępniamy metodę estimate_synthetic_num_evals:


from databricks.agents.evals import estimate_synthetic_num_evals

num_evals = estimate_synthetic_num_evals(
  docs, # Same docs as before.
  eval_per_x_tokens = 1000 # Generate 1 eval for every x tokens to control the coverage level.
)

Tworzenie syntetycznego zestawu ewaluacji — przykładowy notatnik

Zobacz poniższy notes, aby uzyskać przykładowy kod na stworzenie syntetycznego zestawu do oceny.

Przykładowy notatnik z ocenami syntetycznymi

Weź notes

10-minutowa demonstracja zwiększająca wydajność agenta

W poniższym przykładowym notesie pokazano, jak poprawić jakość agenta. Obejmuje on następujące kroki:

  1. Generowanie syntetycznego zestawu danych oceny.
  2. Zbuduj i oceń agenta bazowego.
  3. Porównaj agenta bazowego w różnych konfiguracjach (takich jak różne monity) i modelach podstawowych, aby znaleźć właściwą równowagę między jakością, kosztami a opóźnieniami.
  4. Wdróż agenta w internetowym interfejsie użytkownika, aby umożliwić uczestnikom projektu testowanie i przekazywanie dodatkowych opinii.

Poprawa wydajności agenta przy użyciu notatnika z danymi syntetycznymi

Weź notes

Informacje o modelach zasilających syntetyczne dane

  • Syntetyczne dane mogą używać usług innych firm do oceny aplikacji GenAI, w tym usług Azure OpenAI obsługiwanych przez firmę Microsoft.
  • W przypadku usługi Azure OpenAI usługa Databricks zrezygnowała z monitorowania nadużyć, więc w usłudze Azure OpenAI nie są przechowywane żadne monity ani odpowiedzi.
  • W przypadku obszarów roboczych Unii Europejskiej (UE) syntetyczne dane używają modeli hostowanych w UE. Wszystkie inne regiony używają modeli hostowanych w Stanach Zjednoczonych.
  • Wyłączenie asystujących funkcji bazujących na AI platformy Azure uniemożliwia wywoływanie modeli wykorzystujących sztuczną inteligencję na platformie Azure.
  • Dane wysyłane do usługi danych syntetycznych nie są używane do trenowania modelu.
  • Syntetyczne dane mają pomóc klientom ocenić swoje aplikacje agentów, a dane wyjściowe nie powinny być używane do trenowania, ulepszania ani dostosowywania funkcji LLM.