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 na temat MLflow 3 dotyczące tego zagadnienia, zobacz Sędziowie i oceniający LLM.
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ż:
- Jak jakość, koszt i opóźnienie są oceniane przez ocenę agenta (MLflow 2)
- Dostosuj sędziów AI (MLflow 2)
- Odwoływalni sędziowie - dokumentacja SDK dla Pythona
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 parametrumodeldlamlflow.evaluate(). -
guidelineslubglobal_guidelinesdla każdego wiersza zdefiniowane w konfiguracji. - [Tylko sędziowie z możliwością rozmowy]
guidelines_contextw celu zapewnienia sędziego dowolnego kontekstu.- Ta funkcja wymaga elementu
databricks-agents>=0.20.0.
- Ta funkcja wymaga elementu
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:
request-
response, jeśli nie określono parametrumodeldlamlflow.evaluate(). - oczekiwane_fakty lub oczekiwana_odpowiedź
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_factslubexpected_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 parametrumodeldlamlflow.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 parametrumodeldlamlflow.evaluate(). -
expected_factslubexpected_response. Zapoznaj się z wytycznymiexpected_factsi wytycznymiexpected_response. -
retrieved_context[].content, jeśli nie określono parametrumodeldlamlflow.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 parametrumodeldlamlflow.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 parametrumodeldlamlflow.evaluate(). -
retrieved_context[].content, jeśli nie używasz argumentumodelw wywołaniu metodymlflow.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 parametrumodeldlamlflow.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: