Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Important
Databricks doporučuje používat MLflow 3 k vyhodnocení a monitorování aplikací GenAI. Tato stránka popisuje vyhodnocení agenta MLflow 2.
- Úvod k vyhodnocení a monitorování na MLflow 3 najdete v tématu Vyhodnocení a monitorování agentů AI.
- Informace o migraci na MLflow 3 najdete v tématu Migrace na MLflow 3 z vyhodnocení agenta.
- Informace o MLflow 3 najdete v části Názory odborníků na doménu.
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.
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:
- 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.
- 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-agentsSDK, aby nastavili oprávnění a nakonfigurovali aplikaci pro kontrolu.
%pip install databricks-agents==0.16.0
dbutils.library.restartPython()
- Chatování s robotem:
- Tabulky odvozování musí být povolené na koncovém bodu, který obsluhuje agenta.
- Každý kontrolor musí mít přístup k pracovnímu prostoru aplikace pro kontrolu nebo musí být synchronizovaný s vaším účtem Azure Databricks pomocí SCIM. Podívejte se na další část Nastavení oprávnění k používání aplikace pro kontrolu.
- 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í.
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
- Vytvořte relaci popisování a odešlete ke kontrole pro označení hodnotící datové sady.
- Shromážděte zpětnou vazbu k trasám pro jejich označení. Mějte na paměti, že pro to není nutný živý agent.
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:
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.
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_factslze použít jako popisekexpectationpředstavující fakta, která by měla být přítomna v ideální odpovědi. Tyto popiskyexpectationje možné synchronizovat zpět do testovací datové sady, aby je bylo možné použít smlflow.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.Assessmenttypufeedbacknejsou 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.