Udostępnij przez


Użyj aplikacji do przeglądu do ludzkich recenzji gen AI aplikacji (MLflow 2)

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.

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.

Przegląd głównego obrazu wersji zapoznawczej aplikacji.

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:

  1. 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ę.
  2. 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:
  • 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.

Link do oceny aplikacji na podstawie danych wyjściowych polecenia notesu.

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

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 jest zbiorem przykładów używanych do oceny aplikacji generatywnej sztucznej inteligencji. Rekordy zestawów danych zawierają dane wejściowe do aplikacji generatywnej AI i opcjonalnie oczekiwania (etykiety rzeczywiste, takie jak 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.

Sesja etykietowania

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_facts można użyć jako etykietę expectation, reprezentując fakty, które powinny być obecne w idealnej odpowiedzi. Te etykiety expectation można zsynchronizować z zestawem danych oceny, aby mogły być używane z mlflow.evaluate().
  • feedback: Etykiety reprezentujące proste opinie na temat śladu, takie jak "kciuki w górę" i "kciuki w dół", lub luźne komentarze. Assessmenttypu feedback nie 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.

Przegląd przykładowego notatnika aplikacji

Zdobądź notatnik

Metryki niestandardowe oceny agentów, wytyczne i etykiety ekspertów dziedzinowych - notes

Zdobądź notatnik