Udostępnij przez


Wbudowani sędziowie AI (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 omówiono szczegółowe informacje dotyczące poszczególnych ocen sztucznej inteligencji wbudowanych w Mosaic AI Agent Evaluation, w tym wymagane dane wejściowe i metryki wyników.

Zobacz również:

Przegląd systemów oceniających AI

Notatka

Nie wszyscy sędziowie wymagają etykiet ground-truth. Sędziowie, którzy nie wymagają etykiet, są przydatni, gdy masz tylko zestaw żądań ocenienia agenta.

Nazwisko sędziego Aspekt jakości oceniany przez sędziego Wymagane dane wejściowe Wymaga podstawowej prawdy
global_guideline_adherence Czy wygenerowana odpowiedź jest zgodna z globalnymi wytycznymi? request, response, global_guidelines (z evaluator_config) Nie, ale wymaga global_guidelines
guideline_adherence Czy wygenerowana odpowiedź jest zgodna z podanymi wytycznymi dotyczącymi poszczególnych pytań? request, lub response, guidelines_contextguidelines Tak
correctness Czy wygenerowana odpowiedź jest dokładna (w porównaniu z rzeczywistym stanem)? request, response, expected_facts[] lub expected_response Tak
relevance_to_query Czy odpowiedź odnosi się do (czy jest ona istotna dla) żądania użytkownika? request, response Nie.
context_sufficiency Czy program retriever znalazł dokumenty z wystarczającą ilością informacji, aby wygenerować oczekiwaną odpowiedź? request retrieved_context, expected_response Tak
safety Czy w odpowiedzi występuje szkodliwa lub toksyczna treść? request, response Nie.
chunk_relevance Czy retriever znalazł fragmenty, które są przydatne (istotne) w odpowiedzi na żądanie użytkownika?
Uwaga: Ocena jest stosowana oddzielnie do każdego pobranego fragmentu, tworząc wynik i uzasadnienie dla każdego fragmentu. Te wyniki są zebrane jako chunk_relevance/precision wynik dla każdego wiersza, który reprezentuje % istotnych fragmentów.
request, retrieved_context Nie.
groundedness Czy wygenerowana odpowiedź jest uziemiona w pobranym kontekście (nie halucynacja)? request response, trace[retrieved_context] Nie.
document_recall Ile znanych istotnych dokumentów znalazło program retriever? retrieved_context, expected_retrieved_context[].doc_uri Tak

Notatka

W przypadku konwersacji obejmujących wiele kolei sędziowie sztucznej inteligencji oceniają tylko ostatni wpis w konwersacji.

wyjściowe dane sztucznej inteligencji działającej jako sędzia

Każdy sędzia używany w ocenie generuje następujące kolumny:

Pole danych Typ Opis
response/llm_judged/{judge_name}/rating string yes, jeśli sędzia zda, no, jeśli sędzia nie zda.
response/llm_judged/{judge_name}/rationale string Pisemne uzasadnienie LLM dla yes lub no.
response/llm_judged/{judge_name}/error_message string Jeśli wystąpił błąd podczas obliczania tej oceny, szczegółowe informacje o błędzie znajdują się tutaj. Jeśli nie wystąpi błąd, jest to wartość NULL.

Każdy sędzia utworzy również zagregowaną metrykę dla całego przebiegu.

Nazwa metryki Typ Opis
response/llm_judged/{judge_name}/rating/average float, [0, 1] Procent wszystkich ocen, które zostały ocenione jako yes.

Przestrzeganie wytycznych

Definicja: Czy odpowiedź jest zgodna z podanymi wytycznymi?

Wymaga danych rzeczywistych: Nie w przypadku korzystania z global_guidelines. Tak, przy korzystaniu z guidelinesna wiersz.

Przestrzeganie wytycznych ocenia, czy odpowiedź agenta jest zgodna z określonymi ograniczeniami lub instrukcjami podanymi w wytycznych.

Wytyczne można zdefiniować na jeden z następujących sposobów:

  • per-row: odpowiedź na konkretne żądanie musi być zgodna z wytycznymi zdefiniowanymi w tym wierszu oceny.
  • globalnie: wszystkie odpowiedzi na każde żądanie muszą być zgodne z globalnymi wytycznymi.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • response, jeśli nie określono parametru model dla mlflow.evaluate().
  • guidelines lub global_guidelines dla każdego wiersza zdefiniowane w konfiguracji.
  • [Tylko sędziowie z możliwością rozmowy] guidelines_context w celu zapewnienia sędziego dowolnego kontekstu.
    • Ta funkcja wymaga elementu databricks-agents>=0.20.0.

Przykłady

Użyj przestrzegania wytycznych dotyczących poszczególnych wierszy z zestawu oceny:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  # You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
  "guidelines": {
    "english": ["The response must be in English"],
    "clarity": ["The response must be clear, coherent, and concise"],
  }
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["guideline_adherence"]
      }
  }
)

Użyj stosowania się do globalnych wytycznych z zestawu oceniającego.

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["guideline_adherence"],
          "global_guidelines": ["The response must be in English", "The response must be concise"]
      }
  }
)

Użyj zgodności wytycznych z zestawem SDK wywoływanego sędziego:

from databricks.agents.evals import judges

assessment = judges.guideline_adherence(
  request="What is the capital of France?",
  response="The capital of France is Paris.",
  # You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
  guidelines={
    "english": ["The response must be in English"],
    "clarity": ["The response must be clear, coherent, and concise"],
    "grounded": ["The response must be grounded in the tool call result"],
  },
  # `guidelines_context` requires `databricks-agents>=0.20.0`
  guidelines_context={
    "tool_call_result": "{'country': 'France', 'capital': 'Paris'}",
  },
)
print(assessment)

Co zrobić, gdy odpowiedź nie jest zgodna z wytycznymi?

Gdy odpowiedź narusza wytyczne:

  • Zidentyfikuj, które wytyczne zostały naruszone, i przeanalizuj, dlaczego agent nie zastosował się do niego.
  • Dostosuj monit, aby podkreślić przestrzeganie określonych wytycznych lub ponownie wytrenować model przy użyciu dodatkowych przykładów, które są zgodne z żądanym zachowaniem.
  • W przypadku wytycznych globalnych upewnij się, że zostały one poprawnie określone w konfiguracji ewaluatora.

Dokładność

definicja: Czy odpowiedź agenta była faktycznie poprawna?

Wymaga prawdy podstawowej: Tak, expected_facts[] lub expected_response.

Poprawność porównuje rzeczywistą odpowiedź agenta z etykietą prawdy i jest dobrym sposobem wykrywania błędów faktycznych.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

Ważne

Usługa Databricks zaleca używanie expected_facts[] zamiast expected_response. expected_facts[] reprezentują minimalny zestaw faktów wymaganych w poprawnej odpowiedzi i łatwiej je opracować ekspertom w danej dziedzinie.

Jeśli musisz użyć expected_response, powinna zawierać tylko minimalny zestaw faktów wymaganych do poprawnej odpowiedzi. Jeśli skopiujesz odpowiedź z innego źródła, zmodyfikuj ją, aby usunąć tekst, który nie jest wymagany, aby odpowiedź została uznana za poprawną.

Uwzględnienie tylko wymaganych informacji i pomijanie informacji, które nie są ściśle wymagane w odpowiedzi, umożliwia Ocena Agenta dostarczenie bardziej wiarygodnego sygnału dotyczącego jakości wyników.

Przykłady

Użyj dokładności z zestawu oceny

import mlflow

eval_set = [{
  "request": "What is the difference between reduceByKey and groupByKey in Spark?",
  "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
  "expected_facts": [
    "reduceByKey aggregates data before shuffling",
    "groupByKey shuffles all data",
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["correctness"]
      }
  }
)

Użyj zestawu SDK do oceny poprawności z sędzią wywołanym.

from databricks.agents.evals import judges

assessment = judges.correctness(
  request="What is the difference between reduceByKey and groupByKey in Spark?",
  response="reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
  expected_facts=[
    "reduceByKey aggregates data before shuffling",
    "groupByKey shuffles all data",
  ]
)
print(assessment)

Co zrobić, gdy odpowiedź jest niepoprawna?

Kiedy agent udziela odpowiedzi, która jest niedokładną faktograficznie, należy:

  • Zrozum, czy jakikolwiek kontekst pobrany przez agenta jest nieistotny lub niedokładny. W przypadku aplikacji RAG można użyć sędziego kontekstu, aby określić, czy kontekst jest wystarczający do wygenerowania expected_facts lub expected_response.
  • Jeśli jest wystarczający kontekst, dostosuj polecenie, aby uwzględnić odpowiednie informacje.

istotność zapytania

Definicja: Czy odpowiedź jest odpowiednia dla żądania wejściowego?

Wymaga prawdy podstawowej: Nie.

Istotność gwarantuje, że odpowiedź agenta bezpośrednio odpowiada na dane wejściowe użytkownika bez wprowadzania niepowiązanych tematów.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • response, jeśli nie określono parametru model dla mlflow.evaluate().

Przykłady

Użyj relewancji z zestawu ewaluacyjnego.

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris."
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["relevance_to_query"]
      }
  }
)

Skorzystaj z istotności w ramach wywoływanego zestawu SDK sędziego.

from databricks.agents.evals import judges

assessment = judges.relevance_to_query(
  request="What is the capital of France?",
  response="The capital of France is Paris."
)
print(assessment)

Co zrobić, gdy odpowiedź nie jest odpowiednia?

Jeśli agent udostępnia nieistotną odpowiedź, należy wziąć pod uwagę następujące kroki:

  • Oceń zrozumienie żądania przez model i odpowiednio dostosuj jego moduł pobierania, dane szkoleniowe lub instrukcje podpowiedzi.

Wystarczalność kontekstu

definicja: czy pobrane dokumenty są wystarczające, aby uzyskać oczekiwaną odpowiedź?

Wymaga prawdy podstawowej: Tak, expected_facts lub expected_response.

Ocena wystarczalności kontekstu ocenia, czy pobrane dokumenty zawierają wszystkie niezbędne informacje do wygenerowania oczekiwanej odpowiedzi.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • response, jeśli nie określono parametru model dla mlflow.evaluate().
  • expected_facts lub expected_response. Zapoznaj się z wytycznymi expected_facts i wytycznymi expected_response.
  • retrieved_context[].content, jeśli nie określono parametru model dla mlflow.evaluate().

Przykłady

Użyj wystarczającego kontekstu z zestawu oceny:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."}
  ],
  "expected_facts": [
    "Paris"
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["context_sufficiency"]
      }
  }
)

Użyj wystarczającego kontekstu z wywoływanego sędziego SDK:

from databricks.agents.evals import judges

assessment = judges.context_sufficiency(
  request="What is the capital of France?",
  retrieved_context=[
    {"content": "Paris is the capital city of France."}
  ]
)
print(assessment)

Co zrobić, gdy kontekst jest niewystarczający?

Gdy kontekst jest niewystarczający:

  • Rozszerz mechanizm pobierania, aby upewnić się, że wszystkie niezbędne dokumenty są uwzględnione.
  • Zmodyfikuj monit modelu, aby jawnie odwoływać się do brakujących informacji lub określić priorytety odpowiedniego kontekstu.

Bezpieczeństwo

Definicja: Czy odpowiedź unika szkodliwej lub toksycznej zawartości?

Wymaga prawdy podstawowej: Nie.

Bezpieczeństwo zapewnia, że odpowiedzi agenta nie zawierają szkodliwej, obraźliwej ani toksycznej zawartości.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • response, jeśli nie określono parametru model dla mlflow.evaluate().

Przykłady

Użyj bezpieczeństwa z zestawu ewaluacyjnego:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris."
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["safety"]
      }
  }
)

Zachowaj bezpieczeństwo przy użyciu zestawu sędziego SDK do wywoływania.

from databricks.agents.evals import judges

assessment = judges.safety(
  request="What is the capital of France?",
  response="The capital of France is Paris."
)
print(assessment)

Co zrobić, gdy odpowiedź jest niebezpieczna?

Gdy odpowiedź zawiera szkodliwą zawartość:

  • Przeanalizuj żądanie, aby ustalić, czy może przypadkowo prowadzić do niebezpiecznych odpowiedzi. W razie potrzeby zmodyfikuj dane wejściowe.
  • Uściślij model lub monituj, aby jawnie uniknąć generowania szkodliwej lub toksycznej zawartości.
  • Zastosowanie dodatkowych mechanizmów bezpieczeństwa, takich jak filtry zawartości, w celu przechwycenia niebezpiecznych odpowiedzi przed dotarciem do użytkownika.

Uziemienie

Definicja: Czy odpowiedź jest spójna z pobranym kontekstem?

Wymaga prawdy podstawowej: Nie.

Groundedness ocenia, czy odpowiedź agenta jest zgodna z informacjami podanymi w pobranym kontekście.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • response, jeśli nie określono parametru model dla mlflow.evaluate().
  • retrieved_context[].content, jeśli nie używasz argumentu model w wywołaniu metody mlflow.evaluate().

Przykłady

Użyj uziemioności z zestawu ewaluacyjnego:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."}
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["groundedness"]
      }
  }
)

Użyj uziemienia z zestawem SDK wywoływanego sędziego:

from databricks.agents.evals import judges

assessment = judges.groundedness(
  request="What is the capital of France?",
  response="The capital of France is Paris.",
  retrieved_context=[
    {"content": "Paris is the capital city of France."}
  ]
)
print(assessment)

Co zrobić, gdy odpowiedź nie ma uziemioności?

Gdy odpowiedź nie jest uziemiona:

  • Przejrzyj pobrany kontekst, aby upewnić się, że zawiera on informacje niezbędne do wygenerowania oczekiwanej odpowiedzi.
  • Jeśli kontekst jest niewystarczający, popraw mechanizm pobierania lub zestaw danych, aby uwzględnić odpowiednie dokumenty.
  • Zmodyfikuj monit, aby poinstruować model o priorytetowym wykorzystaniu pobranego kontekstu podczas generowania odpowiedzi.

Istotność fragmentów

Definicja: Czy pobrane fragmenty są istotne dla żądania wejściowego?

Wymaga prawdy podstawowej: Nie.

Istotność fragmentu ocenia, czy każdy fragment jest istotny dla żądania wejściowego.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi zawierać następujące kolumny:

  • request
  • retrieved_context[].content, jeśli nie określono parametru model dla mlflow.evaluate().

Jeśli nie używasz argumentu model przy wywołaniu mlflow.evaluate(), należy również podać retrieved_context[].content lub trace.

Przykłady

W tym przykładzie użyto oceny trafności fragmentu z niestandardową metryką dokładności, aby obliczyć wynik precyzji na poziomie wiersza. Aby uzyskać więcej informacji na temat metryk niestandardowych, zobacz Metryki niestandardowe (MLflow 2)

import mlflow
from mlflow.evaluation import Assessment

eval_set = [{
  "request": "What is the capital of France?",
  "response": "The capital of France is Paris.",
  "retrieved_context": [
    {"content": "Paris is the capital city of France."},
    {"content": "The best baguettes are in Nice."},
    {"content": "Mount Everest is  the highest mountain in the world."},
  ],
}]

def judged_precision_at_k(request, retrieved_context, k):
  judged_precisions = [judges.chunk_relevance(request, [doc]) for doc in retrieved_context[:k]]
  precision_at_k = sum([1 if judgement[0].value =='yes' else 0 for judgement in judged_precisions]) / k

  rationales = [
    f"""## Chunk ID {i+1}: `{retrieved_context[i]['doc_uri']}`
    - **{judged_precisions[i][0].value}**: `{judged_precisions[i][0].rationale}`"""
    for i in range(0, k-1)]

  return Assessment(name=f'judged_precision_at_{k}', value=precision_at_k, rationale='\n'.join(rationales))

@metric
def judged_precision_at_3(request, retrieved_context):
  k = 3
  return judged_precision_at_k(request=request, retrieved_context=retrieved_context,  k=k)

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["chunk_relevance"]
      }
  },
  extra_metrics=[judged_precision_at_3]
)

Użyj chunk_relevance z SDK dla wywoływanego sędziego:

from databricks.agents.evals import judges

# NOTE: This callable judge returns an assessment per item in the retrieved context.
assessments = judges.chunk_relevance(
  request="What is the capital of France?",
  retrieved_context=[
    {"content": "Paris is the capital city of France."},
    {"content": "The chicken crossed the road."},
  ]
)
print(assessments)

Co zrobić, gdy pobrane fragmenty są nieistotne?

Gdy pobierane są nieistotne fragmenty:

  • Oceń konfigurację programu retriever i dostosuj parametry, aby określić priorytety istotności.
  • Uściślij dane szkoleniowe programu retriever, aby uwzględnić bardziej zróżnicowane lub dokładne przykłady.

Cofnięcie dokumentu

Definicja: Ile spośród znanych istotnych dokumentów znalazł program wyszukujący?

Wymaga rzeczywistych wartości: Tak expected_retrieved_context[].doc_uri.

Wskaźnik trafności dokumentu mierzy proporcję dokumentów istotnych w rzeczywistości wzorcowej, które zostały odzyskane w porównaniu z całkowitą liczbą dokumentów istotnych w rzeczywistości wzorcowej.

Wymagane dane wejściowe

Zestaw oceny danych wejściowych musi mieć następującą kolumnę:

  • expected_retrieved_context[].doc_uri

Ponadto, jeśli nie używasz argumentu model w wywołaniu mlflow.evaluate(), musisz również podać retrieved_context[].doc_uri lub trace.

Przykłady

Użyj przywołania dokumentów z zestawu ewaluacyjnego:

import mlflow

eval_set = [{
  "request": "What is the capital of France?",
  "expected_retrieved_context": [
    {"doc_uri": "doc_123"},
    {"doc_uri": "doc_456"}
  ],
  "retrieved_context": [
    {"doc_uri": "doc_123"}
  ]
}]

mlflow.evaluate(
  data=eval_set,
  model_type="databricks-agent",
  evaluator_config={
      "databricks-agent": {
          "metrics": ["document_recall"]
      }
  }
)

Nie ma zestawu SDK dla sędziów dla tej metryki, ponieważ nie korzysta ona z sędziego opartego na sztucznej inteligencji.

Co zrobić, gdy przypominanie dokumentów jest niskie?

Gdy przypominanie jest niskie

  • Sprawdź, czy dane prawdy podstawowej dokładnie odzwierciedlają odpowiednie dokumenty.
  • Popraw narzędzie wyszukiwania lub dostosuj parametry wyszukiwania, aby zwiększyć przypominanie.

Niestandardowi sędziowie AI

Możesz również utworzyć niestandardowy mechanizm oceny do przeprowadzania ocen specyficznych dla twojego przypadku użycia.

Aby uzyskać szczegółowe informacje, zobacz: