Sdílet prostřednictvím


Syntetizujte hodnotící sady

Důležitý

Tato funkce je ve verzi Public Preview.

Tato stránka popisuje, jak synteticky vygenerovat vysoce kvalitní sadu hodnocení pro měření kvality vašeho agenta.

Ruční sestavení sady hodnocení je často časově náročné a je obtížné zajistit, aby zahrnovala všechny funkce vašeho agenta. Hodnocení agenta Mosaic AI odstraní tuto bariéru tím, že automaticky vygeneruje reprezentativní hodnoticí sadu z vašich dokumentů, což vám umožní rychle vyhodnotit agenta s dobrým pokrytím testovacích případů.

Vygenerovat sadu vyhodnocení

K syntetizaci vyhodnocení pro agenta, který používá načítání dokumentů, použijte metodu generate_evals_df, která je součástí balíčku databricks-agents Pythonu. Podrobnosti o rozhraní API najdete v referenčních informacích k Python SDK.

Tato metoda vyžaduje, abyste dokumenty zadali jako datový rámec Pandas nebo datový rámec Spark.

Vstupní datový rámec musí mít následující sloupce:

  • content: Analyzovaný obsah dokumentu jako řetězec.
  • doc_uri: Identifikátor URI dokumentu.

K řízení generování můžete použít tři další parametry:

  • num_evals: Celkový počet vyhodnocení, která se mají vygenerovat ve všech dokumentech. Funkce se snaží distribuovat vygenerované hodnoty ve všech dokumentech s ohledem na jejich velikost. Pokud je num_evals menší než počet dokumentů, nebudou v sadě hodnocení zahrnuty všechny dokumenty.

    Podrobnosti o tom, jak se num_evals používá k distribuci vyhodnocení napříč dokumenty, najdete v tématu Jak se num_evals používá.

  • agent_description: Popis úlohy agenta

  • question_guidelines: Sada pokynů, které pomáhají při generování syntetických otázek. Toto je volně strukturovaný řetězec, který se použije k podpoře generování. Podívejte se na následující příklad.

Výstupem generate_evals_df je datový rámec s následujícími sloupci:

  • request_id: Jedinečné ID požadavku.
  • request: Syntetizovaný požadavek.
  • expected_facts: Seznam očekávaných faktů v odpovědi. Tento sloupec obsahuje seznam dtype[string].
  • expected_retrieved_context: Kontext, ze kterého bylo toto vyhodnocení syntetizováno, zahrnuje obsah dokumentu a doc_uri.

Příklad

Následující příklad používá generate_evals_df k vygenerování vyhodnocovací sady a pak přímo volá mlflow.evaluate() k měření výkonu Meta Llama 3.1 v této zkušební sadě. Model Llama 3.1 nikdy neviděl vaše dokumenty, takže pravděpodobně bude halucinovat. I tak je tento experiment dobrým základem pro vašeho vlastního agenta.


%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)

V následujícím příkladu výstupu se sloupce request_id a expected_retrieved_context nezobrazují.

prosba očekávaná_fakta
K čemu se používá Spark SQL v Apache Sparku? – Spark SQL se používá ke zpracování SQL v Apache Sparku.
– Spark SQL se používá ke strukturovanému zpracování dat v Apache Sparku.
Jaké nástroje na vysoké úrovni podporuje Apache Spark a jaké účely slouží? – Spark SQL pro SQL a strukturované zpracování dat.
– rozhraní PANDAS API ve Sparku pro zpracování úloh pandas.
– MLlib pro strojové učení.
- GraphX pro zpracování grafů.
– Strukturované streamování pro přírůstkové výpočty a zpracování datových proudů.
Co je primární abstrakce Sparku a jak jsou datové sady reprezentované v Pythonu? – Primární abstrakce ve Sparku je datová sada.
– V Pythonu se datové sady Sparku označují jako datový rámec.
– V Pythonu jsou datové sady reprezentovány jako datová sada[řádek]
Proč se všechny datové sady v Pythonu nazývají datové rámce ve Sparku? – Datové sady v Pythonu se nazývají datové rámce ve Sparku, aby se zachovala konzistence s konceptem datového rámce.
– Datový rámec je standardem v Pandas a R.

jak se používá num_evals

num_evals je celkový počet vyhodnocení vygenerovaných pro sadu dokumentů. Funkce distribuuje tato vyhodnocení napříč dokumenty a snaží se zohlednit rozdíly v velikosti dokumentu. To znamená, že se snaží udržovat přibližně stejný počet otázek na stránce v sadě dokumentů.

Pokud je num_evals menší než počet dokumentů, některé dokumenty nebudou mít vygenerované žádné vyhodnocení. Datový rámec (DataFrame) vrácený funkcí obsahuje sloupec s source_doc_ids, které byly použity pro generování vyhodnocení. Tento sloupec můžete použít k připojení zpět k původnímu datovému rámci a vygenerovat hodnoty pro dokumenty, které byly vynechány.

Abychom mohli odhadnout num_evals požadovaného pokrytí, poskytujeme metodu 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.
)

Vytvoření syntetické sady vyhodnocení – ukázkový poznámkový blok

Příklad kódu pro vytvoření syntetické sady vyhodnocení najdete v následujícím poznámkovém bloku.

Ukázkový poznámkový blok pro syntetické vyhodnocení

Pořiďte si poznámkový blok

10minutová ukázka pro zvýšení výkonu agenta

Následující ukázkový poznámkový blok ukazuje, jak zlepšit kvalitu agenta. Zahrnuje následující kroky:

  1. Vygenerujte syntetickou datovou sadu vyhodnocení.
  2. Sestavte a vyhodnoťte základního agenta.
  3. Porovnejte základního agenta napříč několika konfiguracemi (například různými výzvami) a základními modely, abyste našli správnou rovnováhu mezi kvalitou, náklady a latencí.
  4. Nasaďte agenta do webového uživatelského rozhraní, aby zúčastněné strany mohly testovat a poskytovat další zpětnou vazbu.

Vylepšení výkonu agenta pomocí syntetického datového poznámkového bloku

Pořiďte si poznámkový blok

Informace o modelech, které pohánějí syntetická data

  • Syntetická data můžou používat služby třetích stran k vyhodnocení aplikací GenAI, včetně Azure OpenAI provozovaných Microsoftem.
  • Pro Azure OpenAI se Databricks odhlásila z monitorování zneužití, takže se v Azure OpenAI neukládají žádné výzvy ani odpovědi.
  • V pracovních prostorech Evropské unie (EU) používají syntetická data modely hostované v EU. Všechny ostatní oblasti používají modely hostované v USA.
  • Zakázání funkcí usnadnění umělé inteligence Azure AI brání syntetické datové službě v použití modelů využívajících umělou inteligenci Azure.
  • Data odesílaná do syntetické datové služby se nepoužívají pro trénování modelu.
  • Syntetická data jsou určená k tomu, aby zákazníkům pomohla vyhodnotit jejich aplikace agentů a výstupy by se neměly používat k trénování, vylepšování ani vyladění LLM.