Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Usługa Databricks zaleca używanie platformy MLflow 3 do oceniania i monitorowania aplikacji GenAI. Na tej stronie opisano ocenę agenta MLflow 2.
- Aby zapoznać się z wprowadzeniem do oceny i monitorowania w usłudze MLflow 3, zobacz Ocena i monitorowanie agentów sztucznej inteligencji.
- Aby uzyskać informacje na temat migracji do platformy MLflow 3, zobacz Migrowanie do platformy MLflow 3 z wersji ewaluacyjnej agenta.
- Aby uzyskać informacje dotyczące MLflow 3 na ten temat, zobacz Opinie ekspertów dziedzinowych.
W tym artykule opisano sposób używania aplikacji do przeglądu w celu zbierania opinii od ekspertów z danej dziedziny (MŚP). Aby wykonać następujące czynności, możesz użyć aplikacji do przeglądu:
- Przekaż uczestnikom projektu możliwość czatu z aplikacją sztucznej inteligencji przedprodukcyjnej i prześlij opinię.
- Utwórz zestaw danych oceny oparty na tabeli Delta w Unity Catalog.
- Wykorzystanie MŚP do rozszerzania i iterowania tego zestawu danych oceny.
- Wykorzystaj MŚP, aby oznaczyć ślady produkcji, aby zrozumieć jakość aplikacji sztucznej inteligencji generacji.
Co się dzieje w ocenie ludzkiej?
Aplikacja przeglądowa Databricks tworzy środowisko, w którym interesariusze mogą z nią wchodzić w interakcje – innymi słowy, mogą prowadzić rozmowy, zadawać pytania, przekazywać opinie itd.
Istnieją dwa główne sposoby korzystania z aplikacji do przeglądu:
- czat z botem: zbieraj pytania, odpowiedzi i opinie w tabeli wnioskowania, aby umożliwić dalsze analizowanie wydajności aplikacji sztucznej inteligencji. W ten sposób aplikacja do przeglądu pomaga zapewnić jakość i bezpieczeństwo odpowiedzi zapewnianych przez aplikację.
- Odpowiedzi na etykiety w sesji: Zbierz opinie i oczekiwania od ekspertów MŚP w sesji etykietowania, przechowywane w ramach przebiegu MLFlow. Możesz opcjonalnie zsynchronizować te etykiety z zestawem danych oceny.
Wymagania
- Deweloperzy muszą zainstalować zestaw SDK
databricks-agents, aby skonfigurować uprawnienia i skonfigurować aplikację do przeglądu.
%pip install databricks-agents
dbutils.library.restartPython()
- Aby porozmawiać z botem:
- Tabele wnioskowania należy włączyć w punkcie końcowym, który obsługuje agenta.
- Każdy recenzent musi mieć dostęp do obszaru roboczego przeglądu aplikacji lub być zsynchronizowany z kontem usługi Azure Databricks za pomocą rozwiązania SCIM. Zobacz następną sekcję, Skonfiguruj uprawnienia do korzystania z aplikacji do recenzji.
- W przypadku sesji etykietowania:
- Każdy recenzent musi mieć dostęp do przestrzeni roboczej aplikacji przeglądowej.
Konfigurowanie uprawnień do korzystania z aplikacji przeglądu
Uwaga
- Aby porozmawiać z botem, recenzent nie wymaga dostępu do obszaru roboczego.
- W przypadku sesji etykietowania człowiek recenzujący wymaga dostępu do obszaru roboczego.
Konfigurowanie uprawnień do czatu z botem
- W przypadku użytkowników, którzy nie mają dostępu do obszaru roboczego, administrator konta używa aprowizacji SCIM na poziomie konta, aby automatycznie synchronizować użytkowników i grupy z dostawcy tożsamości do konta usługi Azure Databricks. Możesz również ręcznie zarejestrować tych użytkowników i grupy w celu udzielenia im dostępu podczas konfigurowania tożsamości w usłudze Databricks. Zobacz Synchronizuj użytkowników i grupy z Microsoft Entra ID za pomocą SCIM.
- W przypadku użytkowników, którzy mają już dostęp do obszaru roboczego zawierającego aplikację do przeglądu, nie jest wymagana żadna dodatkowa konfiguracja.
Poniższy przykład kodu pokazuje, jak udzielić użytkownikom uprawnień do modelu wdrożonego za pośrednictwem agents.deploy. Parametr users przyjmuje listę adresów e-mail.
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)
Uwaga
Aby nadać uprawnienia wszystkim użytkownikom w obszarze roboczym, ustaw wartość users=["users"].
Ustaw uprawnienia dla sesji etykietowania
Użytkownicy otrzymują automatycznie odpowiednie uprawnienia (prawo zapisu do eksperymentu i prawo odczytu zestawu danych) podczas tworzenia sesji etykietowania i podawania argumentu assigned_users.
Aby uzyskać więcej informacji, zobacz poniżej Tworzenie sesji etykietowania oraz Wysyłanie do przeglądu.
Tworzenie aplikacji do przeglądu
Automatyczne używanie agents.deploy()
Podczas wdrażania aplikacji AI generacyjnej przy użyciu agents.deploy(), aplikacja przeglądu jest automatycznie wdrażana i włączana. Dane wyjściowe polecenia zawierają adres URL aplikacji do przeglądu. Aby uzyskać informacje o wdrażaniu aplikacji generatywnej sztucznej inteligencji (nazywanej również "agentem"), zobacz Wdrażanie agenta dla aplikacji generatywnej sztucznej inteligencji.
Uwaga
Agent nie pojawia się w interfejsie użytkownika aplikacji przeglądu, dopóki punkt końcowy nie zostanie w pełni wdrożony.
Jeśli utracisz link do interfejsu użytkownika aplikacji do przeglądu, możesz go znaleźć przy użyciu 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".
Ręczne używanie interfejsu API języka Python
Poniższy fragment kodu pokazuje, jak utworzyć aplikację do przeglądu i skojarzyć ją z modelem obsługującym punkt końcowy na potrzeby czatowania z botem. Aby utworzyć sesje etykietowania, zobacz
- Utwórz sesję etykietowania, a następnie wyślij ją do przeglądu w celu etykietowania zestawu danych oceny.
- Zbieranie opinii na temat śladów do etykietowania śladów. Należy pamiętać, że agent na żywo nie jest w tym celu wymagany.
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".
Pojęcia
Zestawy danych
Zestaw danych expected_facts lub guidelines). Zestawy danych są powiązane z eksperymentem MLFlow i mogą być bezpośrednio użyte jako dane wejściowe do mlflow.evaluate(). Zestawy danych opierają się na tabelach Delta w Katalogu Unity i dziedziczą uprawnienia określone przez te tabele. Aby utworzyć zestaw danych, zobacz Tworzenie zestawu danych.
Przykładowy zestaw danych oceny przedstawiający tylko kolumny danych wejściowych i oczekiwań:
przykład zestawu danych 
Zestawy danych oceny mają następujący schemat:
| Kolumna | Typ danych | Opis |
|---|---|---|
| identyfikator_rekordu_datasetu (dataset_record_id) | ciąg | Unikatowy identyfikator rekordu. |
| Wejścia | ciąg | Dane wejściowe do oceny w formacie JSON serializowane dict<str, Any>. |
| Oczekiwania | ciąg | Oczekiwane wartości w formacie json serializowane dict<str, Any>.
expectations ma zastrzeżone klucze, które są używane dla sędziów LLM, takich jak guidelines, expected_factsi expected_response. |
| create_time | sygnatura czasowa | Godzina utworzenia rekordu. |
| utworzone_przez | ciąg | Użytkownik, który utworzył rekord. |
| czas_ostatniej_aktualizacji | sygnatura czasowa | Czas ostatniej aktualizacji rekordu. |
| ostatnio_zaktualizowane_przez | ciąg | Użytkownik, który ostatnio zaktualizował rekord. |
| przesłać źródło | struktura | Źródło rekordu zestawu danych. |
| źródło człowiek | struktura | Zdefiniowane, gdy źródło pochodzi od człowieka. |
| source.human.nazwa_użytkownika | ciąg | Nazwa użytkownika skojarzonego z rekordem. |
| dokument źródłowy | ciąg | Zdefiniowano, gdy rekord został zsyntetyzowany z dokumentu. |
| source.document.doc_uri | ciąg | Identyfikator URI dokumentu. |
| zawartość dokumentu źródłowego | ciąg | Zawartość dokumentu. |
| źródło.ślad | ciąg | Zdefiniowano, kiedy rekord został utworzony z śladu. |
| źródło.ślad.trace_id | ciąg | Unikatowy identyfikator śladu. |
| Etykiety | mapa | Tagi rekordu zestawu danych w formacie klucz-wartość. |
Sesje etykietowania
LabelingSession to skończony zestaw śladów lub rekordów danych, które mają być oznaczone przez eksperta ds. merytorycznych w interfejsie użytkownika aplikacji do przeglądów. Ślady mogą pochodzić z tabel wnioskowania dla aplikacji w środowisku produkcyjnym lub z offline'owego śladu w eksperymentach MLFlow. Wyniki są przechowywane jako eksperyment MLFlow. Etykiety są przechowywane jako Assessment w MLFlow Traces. Etykiety z "oczekiwaniami" można synchronizować z powrotem z zestawem danych oceny.
Oceny i etykiety
Kiedy ekspert oznaczy ślad, oceny są zapisywane w śladzie w polu .
Assessments mogą występować w dwóch typach
-
expectation: Etykiety reprezentujące, jak powinien wyglądać poprawny ślad. Na przykład:expected_factsmożna użyć jako etykietęexpectation, reprezentując fakty, które powinny być obecne w idealnej odpowiedzi. Te etykietyexpectationmożna zsynchronizować z zestawem danych oceny, aby mogły być używane zmlflow.evaluate(). -
feedback: Etykiety reprezentujące proste opinie na temat śladu, takie jak "kciuki w górę" i "kciuki w dół", lub luźne komentarze.Assessmenttypufeedbacknie są używane z zestawami danych do oceny, ponieważ są ludzką oceną konkretnego śladu MLflow. Te oceny można odczytywać za pomocąmlflow.search_traces().
Zestawy danych
W tej sekcji wyjaśniono, jak wykonać następujące czynności:
- Utwórz zestaw danych i użyj go do oceny bez eksperta ds. tematycznych.
- Poproś o sesję oznaczania od eksperta, aby utworzyć lepszy zbiór danych do oceny.
Tworzenie zestawu danych
Poniższy przykład tworzy Dataset i wstawia oceny. Aby uzupełnić zestaw danych syntetycznymi ewaluacjami, zobacz Syntetyzuj zestawy ewaluacyjne.
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)
Dane z tego zestawu danych są wspierane przez tabelę Delta w Unity Catalog i są widoczne w Eksploratorze Katalogu.
Uwaga
Wytyczne z nazwami (przy użyciu słownika) obecnie nie są obsługiwane w sesji etykietowania.
Używanie zestawu danych do oceny
Poniższy przykład odczytuje zestaw danych z Unity Catalog, wykorzystując zestaw danych testowych do oceny prostego agenta systemowego.
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"
)
Stwórz sesję etykietowania i wyślij do przeglądu
Poniższy przykład tworzy LabelingSession z powyższego zestawu danych przy użyciu ReviewApp.create_labeling_session, konfigurując sesję w celu zbierania guidelines i expected_facts od MŚP przy użyciu pola ReviewApp.label_schemas. Możesz również tworzyć schematy etykiet niestandardowych za pomocą ReviewApp.create_label_schema
Uwaga
- Podczas tworzenia sesji etykietowania przypisani użytkownicy są:
- Nadano uprawnienie WRITE do eksperymentu MLFlow.
- Nadano uprawnienie QUERY na dowolny model obsługujący punkty końcowe skojarzone z aplikacją przeglądową.
- Podczas dodawania zestawu danych do sesji etykietowania przypisani użytkownicy otrzymują uprawnienia SELECT do tabel różnicowych zestawów danych używanych w celu rozpoczęcia sesji etykietowania.
Aby nadać uprawnienia wszystkim użytkownikom w obszarze roboczym, ustaw wartość 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)
W tym momencie możesz wysłać powyższe adresy URL do MŚP.
Kiedy MŚP etykietuje, możesz wyświetlić stan etykietowania przy użyciu następującego kodu:
mlflow.search_traces(run_id=my_session.mlflow_run_id)
Synchronizuj oczekiwania dotyczące sesji etykietowania z zestawem danych
Po zakończeniu etykietowania przez MŚP można zsynchronizować etykiety expectation z zestawem danych za pomocą LabelingSession.sync_expectations. Przykłady etykiet o typie expectation obejmują GUIDELINES, EXPECTED_FACTSlub własny schemat etykiety niestandardowej, który ma typ expectation.
my_session.sync_expectations(to_dataset="cat.schema.my_managed_dataset")
display(spark.read.table("cat.schema.my_managed_dataset"))
Teraz możesz użyć tego zestawu danych oceny:
eval_results = mlflow.evaluate(
model=llama3_agent,
data=dataset.to_df(),
model_type="databricks-agent"
)
Zbieranie opinii na temat śladów
W tej sekcji opisano sposób zbierania etykiet na obiektach śledzenia MLFlow, które mogą pochodzić z dowolnego z następujących elementów:
- Eksperyment MLFlow lub wykonanie.
- Tabela wnioskowania.
- Dowolny obiekt śladu MLFlow w języku Python.
Zbierz informacje zwrotne z eksperymentu MLFlow lub przebiegu
W tych przykładach tworzony jest zestaw śladów, które mają być oznaczone przez MŚP.
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"}])
Możesz uzyskać etykiety dla śladu i na ich podstawie utworzyć sesję etykietowania. W tym przykładzie skonfigurowano sesję etykietowania z jednym schematem etykiety, aby zebrać informację zwrotną na temat "formalności" odpowiedzi agenta. Etykiety od eksperta ds. SME są przechowywane jako ocena w śledzeniu MLFlow.
Aby uzyskać więcej typów danych wejściowych schematu, zobacz databricks-agents SDK.
# 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 tym, jak ekspert ds. danego tematu zakończy etykietowanie, wynikowe ślady i oceny stają się częścią procesu skojarzonego z sesją etykietowania.
mlflow.search_traces(run_id=my_session.mlflow_run_id)
Teraz możesz użyć tych ocen, aby ulepszyć model lub zaktualizować zestaw danych oceny.
Zbieranie opinii z tabeli wnioskowania
W tym przykładzie pokazano, jak dodać ślady bezpośrednio z tabeli wnioskowania (logi ładunków zapytań) do sesji etykietowania.
# 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)
Przykładowe notatniki
Poniższe notesy ilustrują różne sposoby korzystania z zestawów danych i sesji etykietowania w narzędziu Mosaic AI Agent Evaluation.