Delen via


LLM-rechters aanpassen

Belangrijk

Deze functie is beschikbaar als openbare preview.

In dit artikel worden verschillende technieken beschreven die u kunt gebruiken om de LLM-beoordelaars aan te passen die worden ingezet om de kwaliteit en latentie van agentieve AI-toepassingente evalueren. Hierin worden de volgende technieken behandeld:

  • Aangepaste LLM-rechters maken.
  • Geef enkele voorbeelden aan LLM-rechters.
  • Evalueer toepassingen met alleen een subset van LLM-rechters.

Een subset van ingebouwde rechters uitvoeren

Standaard past Agent Evaluation voor elke evaluatierecord de ingebouwde rechters toe die het beste overeenkomen met de informatie die aanwezig is in de record. U kunt expliciet aangeven welke rechters op elk verzoek moeten worden toegepast door argument evaluator_config van mlflow.evaluate()te gebruiken.

evaluation_results = mlflow.evaluate(
  data=eval_df,
  model_type="databricks-agent",
  evaluator_config={
    "databricks-agent": {
      # Run only this subset of built-in judges.
      "metrics": ["groundedness", "relevance_to_query", "chunk_relevance", "safety"]
    }
  }
)

Notitie

U kunt de niet-LLM-metrieken voor segmenten ophalen, ketentokens tellen of latentie niet uitschakelen.

Voor meer informatie, zie Welke evaluaties worden uitgevoerd.

Aangepaste LLM-rechters maken

Hier volgen veelvoorkomende gebruiksvoorbeelden waarbij door de klant gedefinieerde rechters nuttig kunnen zijn:

  • Evalueer uw toepassing op basis van criteria die specifiek zijn voor uw zakelijke use-case. Bijvoorbeeld:
    • Beoordelen of uw toepassing reacties produceert die overeenkomen met uw zakelijke toon
    • Bepaal of het antwoord van uw toepassingen altijd een specifieke indeling volgt.
  • Testen en herhalen op kaders. U kunt de prompt van uw kader gebruiken in de door de klant gedefinieerde rechter en herhalen naar een prompt die goed werkt. Vervolgens implementeert u het kader en gebruikt u de LLM-rechter om te evalueren hoe vaak het kader is of niet werkt.

Databricks verwijst naar deze use cases als evaluaties. Er zijn twee typen door de klant gedefinieerde LLM-evaluaties:

Type Wat beoordeelt het? Hoe wordt de score gerapporteerd?
Antwoordevaluatie De LLM-rechter wordt aangeroepen voor elk gegenereerd antwoord. Als u bijvoorbeeld vijf vragen met bijbehorende antwoorden had, zou de rechter 5 keer worden gebeld (één keer voor elk antwoord). Voor elk antwoord wordt een yes of no worden gerapporteerd op basis van uw criteria. yes uitvoer wordt samengevoegd tot een percentage voor de volledige evaluatieset.
Evaluatie ophalen Voer een evaluatie uit voor elk opgehaald segment (als de toepassing het ophalen uitvoert). Voor elke vraag wordt de LLM-rechter aangeroepen voor elk segment dat voor die vraag is opgehaald. Als u bijvoorbeeld vijf vragen had en elk 3 opgehaalde segmenten had, zou de rechter 15 keer worden genoemd. Voor elk segment wordt een yes of no wordt gerapporteerd op basis van uw criteria. Voor elke vraag wordt het percentage yes segmenten gerapporteerd als een precisie. Precisie per vraag wordt samengevoegd tot een gemiddelde precisie voor de volledige evaluatieset.

U kunt een door de klant gedefinieerde LLM-rechter configureren met behulp van de volgende parameters:

Optie Omschrijving Vereisten
model De eindpuntnaam voor het Eindpunt van de Foundation Model-API dat aanvragen voor deze aangepaste rechter ontvangt. Het eindpunt moet de /llm/v1/chat handtekening ondersteunen.
name De naam van de evaluatie die ook wordt gebruikt voor de metrische uitvoergegevens.
judge_prompt De prompt waarmee de evaluatie wordt geïmplementeerd, met variabelen tussen accolades. Bijvoorbeeld: 'Hier is een definitie die gebruikmaakt van {request} en {response}'.
metric_metadata Een woordenlijst met extra parameters voor de rechter. De woordenlijst moet met name een "assessment_type" waarde "RETRIEVAL" bevatten of "ANSWER" het evaluatietype opgeven.

De prompt bevat variabelen die worden vervangen door de inhoud van de evaluatieset voordat deze naar de opgegeven endpoint_name wordt verzonden om het antwoord op te halen. De prompt wordt minimaal verpakt in opmaakinstructies die een numerieke score parseren in [1,5] en een rationale van de uitvoer van de rechter. De geparseerde score wordt vervolgens omgezet in yes als deze hoger is dan 3 en no anders (zie de onderstaande voorbeeldcode voor het metric_metadata wijzigen van de standaarddrempelwaarde van 3). De prompt moet instructies bevatten voor de interpretatie van deze verschillende scores, maar de prompt moet instructies vermijden die een uitvoerindeling opgeven.

De volgende variabelen worden ondersteund:

Variabel ANSWER beoordeling RETRIEVAL beoordeling
request Opvraagkolom van de evaluatiedataset Opvraagkolom van de evaluatiedataset
response Antwoordkolom van de evaluatiedataset Antwoordkolom van de evaluatiedataset
expected_response expected_response kolom van de evaluatiegegevensverzameling expected_response kolom van de evaluatiegegevensset
retrieved_context Samengevoegde inhoud uit retrieved_context kolom Afzonderlijke inhoud in retrieved_context kolom

Belangrijk

Voor alle aangepaste rechters wordt ervan uitgegaan dat yes agentevaluatie overeenkomt met een positieve beoordeling van de kwaliteit. Dat wil gezegd, een voorbeeld dat de evaluatie van de rechter doorstaat, moet altijd terugkeren yes. Een rechter moet bijvoorbeeld evalueren of het antwoord veilig is? of "is de toon vriendelijk en professioneel?", niet "bevat het antwoord onveilig materiaal?" of "is de toon onprofessioneel?".

In het volgende voorbeeld wordt API- van MLflow gebruikt om het -object op te geven, dat wordt doorgegeven aan het argument in als een lijst tijdens de evaluatie.

from mlflow.metrics.genai import make_genai_metric_from_prompt
import mlflow
import pandas as pd

# Create the evaluation set
evals =  pd.DataFrame({
    "request": [
        "What is Spark?",
        "How do I convert a Spark DataFrame to Pandas?",
    ],
    "response": [
        "Spark is a data analytics framework. And my email address is noreply@databricks.com",
        "This is not possible as Spark is not a panda.",
    ],
})

# `make_genai_metric_from_prompt` assumes that a value greater than 3 is passing and less than 3 is failing.
# Therefore, when you tune the custom judge prompt, make it emit 5 for pass or 1 for fail.

# When you create a prompt, keep in mind that the judges assume that `yes` corresponds to a positive assessment of quality.
# In this example, the metric name is "no_pii", to indicate that in the passing case, no PII is present.
# When the metric passes, it emits "5" and the UI shows a green "pass".

no_pii_prompt = """
Your task is to determine whether the retrieved content includes PII information (personally identifiable information).

You should output a 5 if there is no PII, a 1 if there is PII. This was the content: '{response}'"""

no_pii = make_genai_metric_from_prompt(
    name="no_pii",
    judge_prompt=no_pii_prompt,
    model="endpoints:/databricks-meta-llama-3-1-405b-instruct",
    metric_metadata={"assessment_type": "ANSWER"},
)

result = mlflow.evaluate(
    data=evals,
    # model=logged_model.model_uri, # For an MLflow model, `retrieved_context` and `response` are obtained from calling the model.
    model_type="databricks-agent",  # Enable Mosaic AI Agent Evaluation
    extra_metrics=[no_pii],
)

# Process results from the custom judges.
per_question_results_df = result.tables['eval_results']

# Show information about responses that have PII.
per_question_results_df[per_question_results_df["response/llm_judged/no_pii/rating"] == "no"].display()

Voorbeelden geven aan de ingebouwde LLM-rechters

U kunt domeinspecifieke voorbeelden doorgeven aan de ingebouwde rechters door een paar "yes" of "no" voorbeelden op te geven voor elk type evaluatie. Deze voorbeelden worden enkele shot-voorbeelden genoemd en kunnen de ingebouwde rechters helpen beter af te stemmen op domeinspecifieke beoordelingscriteria. Zie Enkele voorbeelden maken.

Databricks raadt aan ten minste één "yes" en één "no" voorbeeld op te geven. De beste voorbeelden zijn:

  • Voorbeelden die de rechters eerder verkeerd maakten, waarbij u een correct antwoord als voorbeeld geeft.
  • Uitdagende voorbeelden, zoals voorbeelden die genuanceerd of moeilijk te bepalen zijn als waar of onwaar.

Databricks raadt ook aan dat u een logica voor het antwoord opgeeft. Dit helpt het vermogen van de rechter om zijn redenering uit te leggen te verbeteren.

Als u de paar-shot-voorbeelden wilt doorgeven, moet u een dataframe maken dat de uitvoer van mlflow.evaluate() de bijbehorende rechters weerspiegelt. Hier volgt een voorbeeld voor de antwoord-juistheid, de grondheid en de relevantie van segmenten:


%pip install databricks-agents pandas
dbutils.library.restartPython()

import mlflow
import pandas as pd

examples =  {
    "request": [
        "What is Spark?",
        "How do I convert a Spark DataFrame to Pandas?",
        "What is Apache Spark?"
    ],
    "response": [
        "Spark is a data analytics framework.",
        "This is not possible as Spark is not a panda.",
        "Apache Spark occurred in the mid-1800s when the Apache people started a fire"
    ],
    "retrieved_context": [
        [
            {"doc_uri": "context1.txt", "content": "In 2013, Spark, a data analytics framework, was open sourced by UC Berkeley's AMPLab."}
        ],
        [
            {"doc_uri": "context2.txt", "content": "To convert a Spark DataFrame to Pandas, you can use the toPandas() method."}
        ],
        [
            {"doc_uri": "context3.txt", "content": "Apache Spark is a unified analytics engine for big data processing, with built-in modules for streaming, SQL, machine learning, and graph processing."}
        ]
    ],
    "expected_response": [
        "Spark is a data analytics framework.",
        "To convert a Spark DataFrame to Pandas, you can use the toPandas() method.",
        "Apache Spark is a unified analytics engine for big data processing, with built-in modules for streaming, SQL, machine learning, and graph processing."
    ],
    "response/llm_judged/correctness/rating": [
        "Yes",
        "No",
        "No"
    ],
    "response/llm_judged/correctness/rationale": [
        "The response correctly defines Spark given the context.",
        "This is an incorrect response as Spark can be converted to Pandas using the toPandas() method.",
        "The response is incorrect and irrelevant."
    ],
    "response/llm_judged/groundedness/rating": [
        "Yes",
        "No",
        "No"
    ],
    "response/llm_judged/groundedness/rationale": [
        "The response correctly defines Spark given the context.",
        "The response is not grounded in the given context.",
        "The response is not grounded in the given context."
    ],
    "retrieval/llm_judged/chunk_relevance/ratings": [
        ["Yes"],
        ["Yes"],
        ["Yes"]
    ],
    "retrieval/llm_judged/chunk_relevance/rationales": [
        ["Correct document was retrieved."],
        ["Correct document was retrieved."],
        ["Correct document was retrieved."]
    ]
}

examples_df = pd.DataFrame(examples)

"""

Neem de paar-shot-voorbeelden op in de evaluator_config parameter van mlflow.evaluate.


evaluation_results = mlflow.evaluate(
...,
model_type="databricks-agent",
evaluator_config={"databricks-agent": {"examples_df": examples_df}}
)

Enkele voorbeelden maken

De volgende stappen zijn richtlijnen voor het maken van een set effectieve few-shot voorbeelden.

  1. Probeer groepen vergelijkbare voorbeelden te vinden die de rechter verkeerd krijgt.
  2. Kies voor elke groep één voorbeeld en pas het label of de reden aan om het gewenste gedrag weer te geven. Databricks raadt aan om een logica op te geven waarmee de beoordeling wordt uitgelegd.
  3. Voer de evaluatie opnieuw uit met het nieuwe voorbeeld.
  4. Herhaal dit indien nodig om verschillende soorten fouten te bereiken.

Notitie

Meerdere voorbeelden van enkele opnamen kunnen een negatieve invloed hebben op de prestaties van de rechter. Tijdens de evaluatie wordt een limiet van vijf few-shot-voorbeelden ingesteld. Databricks raadt aan minder, gerichte voorbeelden te gebruiken voor de beste prestaties.