Použijte aplikaci pro recenzování pomocí lidí k hodnocení aplikace gen AI (MLflow 2)

Important

Databricks doporučuje používat MLflow 3 k vyhodnocení a monitorování aplikací GenAI. Tato stránka popisuje vyhodnocení agenta MLflow 2.

Tento článek popisuje, jak pomocí aplikace pro kontrolu shromáždit zpětnou vazbu od odborníků na danou problematiku (MSP). Aplikaci pro kontrolu můžete použít k provedení následujících kroků:

  • Poskytněte zúčastněným stranám možnost chatovat s předprodukční aplikací AI a poskytnout zpětnou vazbu.
  • Vytvořte vyhodnocovací datovou sadu, která je zajištěna tabulkou Delta v katalogu Unity.
  • Využijte msp k rozšíření a iteraci této testovací datové sady.
  • Využijte odborníky z oboru k označení produkčních stop, abyste porozuměli kvalitě vaší generativní AI aplikace.

Obrázek hrdiny náhledu aplikace.

Co obnáší hodnocení prováděné lidmi?

Aplikace Databricks vytváří testovací prostředí, ve kterém mohou účastníci s ním interagovat – jinými slovy, mohou vést rozhovor, klást otázky, poskytovat zpětnou vazbu a podobně.

Aplikaci pro kontrolu můžete použít dvěma hlavními způsoby:

  1. Chat s robotem: Shromážděte otázky, odpovědi a zpětnou vazbu v tabulce inferencí, abyste mohli dále analyzovat výkon aplikace generativní AI. Tímto způsobem aplikace pro kontrolu pomáhá zajistit kvalitu a bezpečnost odpovědí, které vaše aplikace poskytuje.
  2. Odpovědi popisků v relaci: Shromážděte zpětnou vazbu a očekávání od msp v relaci popisování, která jsou uložená v rámci spuštění MLFLow. Tyto popisky můžete volitelně synchronizovat s testovací datovou sadou.

Požadavky

  • Vývojáři musí nainstalovat sadu databricks-agents SDK, aby nastavili oprávnění a nakonfigurovali aplikaci pro kontrolu.
  %pip install databricks-agents==0.16.0
  dbutils.library.restartPython()
  • Chatování s robotem:
  • Pro označování relací
    • Každý kontrolor musí mít přístup k pracovnímu prostoru aplikace pro kontrolu.

Nastavení oprávnění k používání aplikace pro kontrolu

Note

  • Pokud chce kontrolor chatovat s robotem, nevyžaduje přístup k pracovnímu prostoru.
  • U relace popisování vyžaduje kontrolor přístup k pracovnímu prostoru.

Nastavení oprávnění pro chat s robotem

  • Pro uživatele, kteří nemají přístup k pracovnímu prostoru, správce účtu používá zřizování SCIM na úrovni účtu k automatické synchronizaci uživatelů a skupin z vašeho zprostředkovatele identity s vaším účtem Azure Databricks. Tyto uživatele a skupiny můžete také ručně zaregistrovat, abyste jim mohli udělit přístup při nastavování identit v Databricks. Viz Synchronizace uživatelů a skupin z Microsoft Entra ID pomocí SCIM.
  • Pro uživatele, kteří už mají přístup k pracovnímu prostoru, který obsahuje aplikaci pro kontrolu, není nutná žádná další konfigurace.

Následující příklad kódu ukazuje, jak udělit uživatelům oprávnění k modelu, který byl nasazen prostřednictvím agents.deploy. Parametr users přebírá seznam e-mailových adres.

from databricks import agents

# Note that <user_list> can specify individual users or groups.
agents.set_permissions(model_name=<model_name>, users=[<user_list>], permission_level=agents.PermissionLevel.CAN_QUERY)

Note

Pokud chcete udělit oprávnění všem uživatelům v pracovním prostoru, nastavte users=["users"].

Nastavení oprávnění pro relace označování

Uživatelům se automaticky udělí příslušná oprávnění (přístup k zápisu do experimentu a přístup pro čtení k datové sadě), když vytvoříte popisovací relaci a zadáte argument assigned_users. Pro více informací níže naleznete Vytvoření relace popisování a odeslání pro kontrolu.

Vytvoření aplikace pro kontrolu

Automatické používání agents.deploy()

Když nasadíte aplikaci generativní umělé inteligence pomocí agents.deploy(), aplikace pro kontrolu se automaticky povolí a nasadí. Výstup z příkazu zobrazuje adresu URL aplikace pro kontrolu. Informace o nasazení aplikace gen AI (označované také jako agent) najdete v tématu Nasazení agenta pro generování aplikací AI (obsluha modelů).

Note

Agent se v uživatelském rozhraní aplikace pro kontrolu nezobrazí, dokud se koncový bod plně nenasadí.

Odkaz na kontrolu aplikace z výstupu příkazu poznámkového bloku

Pokud ztratíte odkaz na uživatelské rozhraní aplikace pro kontrolu, můžete ho najít pomocí get_review_app().

import mlflow
from databricks.agents import review_app

# The review app is tied to the current MLFlow experiment.
mlflow.set_experiment("same_exp_used_to_deploy_the_agent")
my_app = review_app.get_review_app()
print(my_app.url)
print(my_app.url + "/chat") # For "Chat with the bot".

Ruční použití rozhraní Python API

Následující fragment kódu ukazuje, jak vytvořit aplikaci pro kontrolu a přidružit ji k modelu obsluhujícímu koncový bod pro chatování s robotem. Pro vytváření relací popisků viz

from databricks.agents import review_app

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# TODO: Replace with your own serving endpoint.
my_app.add_agent(
    agent_name="llama-70b",
    model_serving_endpoint="databricks-meta-llama-3-3-70b-instruct",
)
print(my_app.url + "/chat") # For "Chat with the bot".

Concepts

Datové sady

Datová sada je soubor příkladů, které slouží pro vyhodnocení aplikace generativní AI. Záznamy datových sad obsahují vstupy do aplikace AI genu a volitelně očekávání (popisky základní pravdy, například expected_facts nebo guidelines). Datové sady jsou propojené s experimentem MLFlow a lze je použít přímo jako vstupy pro mlflow.evaluate(). Datové sady jsou podporovány tabulkami Delta v Katalogu Unity a dědí oprávnění definovaná tabulkou Delta. Pokud chcete vytvořit datovou sadu, přečtěte si téma Vytvoření datové sady.

Příklad vyhodnocovací datové sady zobrazující pouze vstupy a očekávané sloupce:

Příklad datové sady

Testovací datové sady mají následující schéma:

Column Datový typ Description
ID záznamu datové sady řetězec Jedinečný identifikátor záznamu.
inputs řetězec Vstupy pro vyhodnocení jako serializovaný JSON dict<str, Any>.
očekávání řetězec Očekávané hodnoty jako serializované json dict<str, Any>. expectations má rezervované klíče, které se používají pro soudce LLM, například guidelines, expected_factsa expected_response.
čas vytvoření časové razítko Čas vytvoření záznamu
vytvořeno kým řetězec Uživatel, který záznam vytvořil.
čas poslední aktualizace časové razítko Čas poslední aktualizace záznamu.
naposledy aktualizováno kým řetězec Uživatel, který záznam naposledy aktualizoval.
odeslat k provedení struktura Zdroj záznamu datové sady.
zdroj.lidský struktura Definuje se, kdy zdroj pochází od člověka.
source.human.uživatelské_jméno řetězec Jméno uživatele přidruženého k záznamu.
zdrojový dokument řetězec Definuje se, kdy byl záznam syntetizován z dokumentu.
source.document.doc_uri řetězec URI dokumentu.
obsah dokumentu zdroje řetězec Obsah dokumentu.
zdroj.stopa řetězec Definuje se, kdy byl záznam vytvořen z trasování.
source.trace.trace_id řetězec Jedinečný identifikátor stopy.
tags mapa Štítky klíč-hodnota záznamu datové sady.

Relace označování

LabelingSession je konečná sada stop nebo datových záznamů, které mají být označeny odborníkem na danou oblast v uživatelském rozhraní kontrolní aplikace. Trasování může pocházet z tabulek odvozování pro aplikaci v produkčním prostředí nebo z offline trasování v experimentech MLFlow. Výsledky jsou uloženy jako běh MLFlow. Popisky se ukládají jako Assessmenty v záznamech MLFlow. Štítky s "očekáváními" je možné synchronizovat zpět do hodnotící datové sady.

Označovací sezení

Posouzení a štítky

Když SME označí trasování, hodnoceníse zapíše do trasování pod polem Trace.info.assessments . Assessment může mít dva typy:

  • expectation: Štítky, které představují, co má mít správná stopa. Například: expected_facts lze použít jako popisek expectation představující fakta, která by měla být přítomna v ideální odpovědi. Tyto popisky expectation je možné synchronizovat zpět do testovací datové sady, aby je bylo možné použít s mlflow.evaluate().
  • feedback: Označení, která představují jednoduchou zpětnou vazbu na záznam, jako jsou "palce nahoru" a "palce dolů" nebo volně formulované komentáře. Assessmenttypu feedback nejsou použitelné s evaluačními datovými sadami, protože se jedná o lidské hodnocení konkrétního MLFlow Trace. Tato hodnocení lze číst pomocí mlflow.search_traces().

Datové sady

V této části se dozvíte, jak postupovat následovně:

  • Vytvořte datovou sadu a použijte ji k vyhodnocení bez msp.
  • Požádejte o popisovací relaci od odborníka na danou problematiku pro efektivnější kurátorování hodnotící datové sady.

Vytvoření datové sady

Následující příklad vytvoří datovou sadu a vloží vyhodnocení. Pokud chcete datovou sadu sesít pomocí syntetických vyhodnocení, přečtěte si téma Syntetizovat sady vyhodnocení.

from databricks.agents import datasets
import mlflow

# The following call creates an empty dataset. To delete a dataset, use datasets.delete_dataset(uc_table_name).
dataset = datasets.create_dataset("cat.schema.my_managed_dataset")

# Optionally, insert evaluations.
# The `guidelines` specified here are saved to the `expectations` field in the dataset.
eval_set = [{
  "request": {"messages": [{"role": "user", "content": "What is the capital of France?"}]},
  "guidelines": ["The response must be in English", "The response must be clear, coherent, and concise"],
}]

dataset.insert(eval_set)

Data z této datové sady jsou podporována tabulkou Delta v katalogu Unity a jsou viditelná v Průzkumníku katalogu.

Note

Pojmenované pokyny (pomocí slovníku) se v relaci popisování v současné době nepodporují.

Použití datové sady k vyhodnocení

Tento příklad načte datovou sadu z katalogu Unity a použije vyhodnocovací datovou sadu pro vyhodnocení jednoduchého agenta systémové výzvy.

import mlflow
from mlflow.deployments import get_deploy_client

# Define a very simple system-prompt agent to test against our evaluation set.
@mlflow.trace(span_type="AGENT")
def llama3_agent(request):
  SYSTEM_PROMPT = """
    You are a chatbot that answers questions about Databricks.
    For requests unrelated to Databricks, reject the request.
  """
  return get_deploy_client("databricks").predict(
    endpoint="databricks-meta-llama-3-3-70b-instruct",
    inputs={
      "messages": [
        {"role": "system", "content": SYSTEM_PROMPT},
        *request["messages"]
      ]
    }
  )

evals = spark.read.table("cat.schema.my_managed_dataset")

mlflow.evaluate(
  data=evals,
  model=llama3_agent,
  model_type="databricks-agent"
)

Vytvořte sezení pro popisování a pošlete ke kontrole

Následující příklad vytvoří LabelingSession z výše uvedené datové sady pomocí ReviewApp.create_labeling_session a nakonfiguruje relaci tak, aby se shromažďování guidelines a expected_facts z msp používalo pole ReviewApp.label_schemas . Pomocí ReviewApp.create_label_schema můžete také vytvořit vlastní schémata popisků.

Note

  • Při vytváření relace označování jsou uživatelé přiřazení:
    • Poskytnutí oprávnění pro zápis k experimentu MLFlow
    • Udělte oprávnění pro dotazování na jakýkoli model, který obsluhuje koncové body spojené s kontrolní aplikací.
  • Při přidávání datové sady do relace značkování získají uživatelé oprávnění SELECT k rozdílovým tabulkám datových sad použitých k inicializaci relace značkování.

Pokud chcete udělit oprávnění všem uživatelům v pracovním prostoru, nastavte assigned_users=["users"].

from databricks.agents import review_app
import mlflow

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# You can use the following code to remove any existing agents.
# for agent in list(my_app.agents):
#     my_app.remove_agent(agent.agent_name)

# Add the llama3 70b model serving endpoint for labeling. You should replace this with your own model serving endpoint for your
# own agent.
# NOTE: An agent is required when labeling an evaluation dataset.
my_app.add_agent(
    agent_name="llama-70b",
    model_serving_endpoint="databricks-meta-llama-3-3-70b-instruct",
)

# Create a labeling session and collect guidelines and/or expected-facts from SMEs.
# Note: Each assigned user is given QUERY access to the serving endpoint above and write access.
# to the MLFlow experiment.
my_session = my_app.create_labeling_session(
  name="my_session",
  agent="llama-70b",
  assigned_users = ["email1@company.com", "email2@company.com"],
  label_schemas = [review_app.label_schemas.GUIDELINES, review_app.label_schemas.EXPECTED_FACTS]
)

# Add the records from the dataset to the labeling session.
# Note: Each assigned user above is given SELECT access to the UC delta table.
my_session.add_dataset("cat.schema.my_managed_dataset")

# Share the following URL with your SMEs for them to bookmark. For the given review app linked to an experiment, this URL never changes.
print(my_app.url)

# You can also link them directly to the labeling session URL, however if you
# request new labeling sessions from SMEs there will be new URLs. Use the review app
# URL above to keep a permanent URL.
print(my_session.url)

V tomto okamžiku můžete adresy URL výše posílat vašim odborníkům.

I když váš odborník provádí označování, můžete zobrazit stav štítkování pomocí následujícího kódu:

mlflow.search_traces(run_id=my_session.mlflow_run_id)

Synchronizace očekávání z označovací relace zpět do datové sady

Jakmile SME dokončí označování, můžete synchronizovat popisky expectation zpět do datové sady s LabelingSession.sync_expectations. Příklady popisků s typem expectation zahrnují GUIDELINES, EXPECTED_FACTSnebo vlastní schéma popisků, které má typ expectation.

my_session.sync_expectations(to_dataset="cat.schema.my_managed_dataset")
display(spark.read.table("cat.schema.my_managed_dataset"))

Teď můžete použít tuto zkušební datovou sadu:

eval_results = mlflow.evaluate(
    model=llama3_agent,
    data=dataset.to_df(),
    model_type="databricks-agent"
)

Shromažďujte zpětnou vazbu k trasám

Tato část popisuje, jak shromažďovat popisky u trasovacích objektů MLFlow, které můžou pocházet z některého z následujících zdrojů:

  • Experiment nebo spuštění MLFlow.
  • Odvozovací tabulka.
  • Jakýkoliv objekt typu Trace v Pythonu pro MLFlow.

Shromažďujte zpětnou vazbu z experimentu MLFlow nebo z běhu.

Tento příklad vytvoří sadu stop, které budou označeny vašimi odborníky na danou problematiku.

import mlflow
from mlflow.deployments import get_deploy_client

@mlflow.trace(span_type="AGENT")
def llama3_agent(messages):
  SYSTEM_PROMPT = """
    You are a chatbot that answers questions about Databricks.
    For requests unrelated to Databricks, reject the request.
  """
  return get_deploy_client("databricks").predict(
    endpoint="databricks-meta-llama-3-3-70b-instruct",
    inputs={"messages": [{"role": "system", "content": SYSTEM_PROMPT}, *messages]}
  )

# Create a trace to be labeled.
with mlflow.start_run(run_name="llama3") as run:
    run_id = run.info.run_id
    llama3_agent([{"content": "What is databricks?", "role": "user"}])
    llama3_agent([{"content": "How do I set up a SQL Warehouse?", "role": "user"}])

Můžete získat popisky pro stopu a vytvořit z nich relaci označování. Tento příklad nastaví relaci označování s jedním schématem značení, aby shromáždil zpětnou vazbu o formálnosti odpovědi agenta. Štítky z SME se ukládají jako posouzení v trasování MLFlow.

Další typy vstupů schématu najdete v sadě SDK databricks-agents .

# The review app is tied to the current MLFlow experiment.
my_app = review_app.get_review_app()

# Use the run_id from above.
traces = mlflow.search_traces(run_id=run_id)

formality_label_schema = my_app.create_label_schema(
  name="formal",
  # Type can be "expectation" or "feedback".
  type="feedback",
  title="Is the response formal?",
  input=review_app.label_schemas.InputCategorical(options=["Yes", "No"]),
  instruction="Please provide a rationale below.",
  enable_comment=True
)

my_session = my_app.create_labeling_session(
  name="my_session",
  # NOTE: An `agent` is not required. If you do provide an Agent, your SME can ask follow up questions in a converstion and create new questions in the labeling session.
  assigned_users=["email1@company.com", "email2@company.com"],
  # More than one label schema can be provided and the SME will be able to provide information for each one.
  # We use only the "formal" schema defined above for simplicity.
  label_schemas=["formal"]
)
# NOTE: This copies the traces into this labeling session so that labels do not modify the original traces.
my_session.add_traces(traces)

# Share the following URL with your SMEs for them to bookmark. For the given review app, linked to an experiment, this URL will never change.
print(my_app.url)

# You can also link them directly to the labeling session URL, however if you
# request new labeling sessions from SMEs there will be new URLs. Use the review app
# URL above to keep a permanent URL.
print(my_session.url)

Po dokončení označování SME se výsledné stopy a hodnocení stanou součástí běhu, který je přidružený k relaci označování.

mlflow.search_traces(run_id=my_session.mlflow_run_id)

Tato posouzení teď můžete použít ke zlepšení modelu nebo aktualizaci testovací datové sady.

Vyhledání odpovědí na zpětnou vazbu v tabulce odvození

Pokud má váš koncový bod povolené tabulky odvozování , Databricks také zapisuje odpovědi na zpětnou vazbu do zobrazení protokolů posouzení na adrese:

{catalog_name}.{schema_name}.{model_name}_payload_assessment_logs_view

Toto zobrazení nahrazuje zastaralou _payload_assessment_logs tabulku. Úplné schéma a stav vyřazení najdete v tabulkách odvozování agenta: Protokoly žádostí a posouzení (zastaralé).

Shromáždění zpětné vazby z tabulky odvozování

Tento příklad ukazuje, jak přidat stopy přímo z tabulky inferencí (záznamy datové části požadavku) do označovací relace.

# CHANGE TO YOUR PAYLOAD REQUEST LOGS TABLE
PAYLOAD_REQUEST_LOGS_TABLE = "catalog.schema.my_agent_payload_request_logs"
traces = spark.table(PAYLOAD_REQUEST_LOGS_TABLE).select("trace").limit(3).toPandas()

my_session = my_app.create_labeling_session(
  name="my_session",
  assigned_users = ["email1@company.com", "email2@company.com"],
  label_schemas=[review_app.label_schemas.EXPECTED_FACTS]
)

# NOTE: This copies the traces into this labeling session so that labels do not modify the original traces.
my_session.add_traces(traces)
print(my_session.url)

Příkladové poznámkové bloky

Následující poznámkové bloky ilustrují různé způsoby použití datových sad a sezení pro štítkování v hodnocení agenta.

Příklad kontrolního poznámkového bloku aplikace

Pořiďte si notebook

Hodnocení agentů: vlastní metriky, pokyny a hodnocení odborníků v oblasti.

Pořiďte si notebook