View a markdown version of this page

Benutzerdefinierter codebasierter Evaluator - Amazon Grundgestein AgentCore

Benutzerdefinierter codebasierter Evaluator

Mit benutzerdefinierten codebasierten Evaluatoren können Sie Ihre eigene AWS Lambda-Funktion verwenden, um die Agentenleistung programmgesteuert zu bewerten, anstatt einen LLM als Richter zu verwenden. Auf diese Weise haben Sie die volle Kontrolle über die Bewertungslogik — Sie können deterministische Prüfungen implementieren, externe APIs aufrufen, einen Regex-Abgleich ausführen, benutzerdefinierte Metriken berechnen oder beliebige geschäftsspezifische Regeln anwenden.

Voraussetzungen

Um benutzerdefinierte, auf Code basierende Evaluatoren zu verwenden, benötigen Sie:

IAM-Berechtigungen

Ihre Dienstausführungsrolle benötigt die folgende zusätzliche Berechtigung, um Lambda-Funktionen für die codebasierte Auswertung aufzurufen:

{ "Sid": "LambdaInvokeStatement", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" }

Lambda-Funktionsvertrag

Anmerkung

Das maximale Laufzeit-Timeout für die Lambda-Funktion beträgt 5 Minuten (300 Sekunden). Die maximale Größe der Eingabe-Payload, die an die Lambda-Funktion gesendet wird, beträgt 6 MB.

Eingabeschema

Ihre Lambda-Funktion empfängt eine JSON-Nutzlast mit der folgenden Struktur:

{ "schemaVersion": "1.0", "evaluatorId": "my-evaluator-abc1234567", "evaluatorName": "MyCodeEvaluator", "evaluationLevel": "TRACE", "evaluationInput": { "sessionSpans": [...] }, "evaluationReferenceInputs": [], "evaluationTarget": { "traceIds": ["trace123"], "spanIds": ["span123"] } }
Feld Typ Description

schemaVersion

Zeichenfolge

Schemaversion der Nutzlast. Derzeit"1.0".

evaluatorId

Zeichenfolge

Die ID des codebasierten Evaluators.

evaluatorName

Zeichenfolge

Der Name des codebasierten Evaluators.

evaluationLevel

Zeichenfolge

Die Bewertungsebene:TRACE,, TOOL_CALL oder. SESSION

evaluationInput

Objekt

Enthält die Sitzungsspannen für die Bewertung.

evaluationInput.sessionSpans

Auflisten

Die Sitzung dauert bis zur Auswertung. Kann gekürzt werden, wenn die ursprüngliche Nutzlast 6 MB überschreitet.

evaluationReferenceInputs

Auflisten

Referenzeingaben, die dem Evaluator zur Verfügung gestellt wurden und nach der Bewertungsebene gefiltert wurden. Weitere Informationen finden Sie unter Verwendung von Ground Truth in einem codebasierten Evaluator.

evaluationTarget

Objekt

Identifiziert die spezifischen Spuren oder Spannweiten, die ausgewertet werden sollen. Für Evaluatoren auf Sitzungsebene ist dieser Wert. None

evaluationTarget.traceIds

Auflisten

Die Trace-IDs des Bewertungsziels. Vorhanden für Evaluierungen auf Trace-Ebene und Tool-Ebene.

evaluationTarget.spanIds

Auflisten

Die Span-IDs des Bewertungsziels. Vorhanden für Evaluierungen auf Tool-Ebene.

Antwortschema

Ihre Lambda-Funktion muss ein JSON-Objekt zurückgeben, das einem von zwei Formaten entspricht:

Erfolgreiche Antwort

{ "label": "PASS", "value": 1.0, "explanation": "All validation checks passed." }
Feld Erforderlich Typ Description

label

Ja

Zeichenfolge

Eine kategorische Bezeichnung für das Bewertungsergebnis (z. B. „BESTANDEN“, „FEHLGESCHLAGEN“, „Gut“, „Schlecht“).

value

Nein

Zahl

Eine numerische Punktzahl (z. B. 0,0 bis 1,0).

explanation

Nein

Zeichenfolge

Eine für Menschen lesbare Erklärung des Bewertungsergebnisses.

Reaktion auf Fehler

{ "errorCode": "VALIDATION_FAILED", "errorMessage": "Input spans missing required tool call attributes." }
Feld Erforderlich Typ Description

errorCode

Ja

Zeichenfolge

Ein Code, der den Fehler identifiziert.

errorMessage

Ja

Zeichenfolge

Eine menschenlesbare Beschreibung des Fehlers.

Erstellen Sie einen codebasierten Evaluator

Die CreateEvaluator API erstellt einen codebasierten Evaluator, indem sie einen Lambda-Funktions-ARN und ein optionales Timeout angibt.

Erforderliche Parameter: Ein eindeutiger Evaluatorname, eine Evaluierungsebene (TRACETOOL_CALL, oderSESSION) und eine codebasierte Evaluatorkonfiguration, die den Lambda-ARN enthält.

Code-based Evaluator-Konfiguration:

{ "codeBased": { "lambdaConfig": { "lambdaArn": "arn:aws:lambda:region:account-id:function:function-name", "lambdaTimeoutInSeconds": 60 } } }
Feld Erforderlich Standard Description

lambdaArn

Ja

Der ARN der aufzurufenden Lambda-Funktion.

lambdaTimeoutInSeconds

Nein

60

Timeout in Sekunden für den Lambda-Aufruf (1—300).

Die folgenden Codebeispiele zeigen, wie codebasierte Evaluatoren mithilfe verschiedener Entwicklungsansätze erstellt werden.

Beispiel
AgentCore CLI
  1. agentcore eval evaluator create \ --name "MyCodeEvaluator" \ --level TRACE \ --lambda-arn "arn:aws:lambda:us-east-1:123456789012:function:my-eval-function" \ --lambda-timeout 120
AgentCore SDK
  1. from bedrock_agentcore.evaluation.code_based_evaluators import ( EvaluatorInput, EvaluatorOutput, code_based_evaluator, ) import json as _json @code_based_evaluator() def json_response_evaluator(input: EvaluatorInput) -> EvaluatorOutput: """Check if the agent response in the target trace contains valid JSON.""" for span in input.session_spans: if span.get("traceId") != input.target_trace_id: continue if span.get("name", "").startswith("Model:") or span.get("name") == "Agent.invoke": output = span.get("attributes", {}).get("gen_ai.completion", "") try: _json.loads(output) return EvaluatorOutput( value=1.0, label="Pass", explanation="Response contains valid JSON" ) except (ValueError, TypeError): pass return EvaluatorOutput( value=0.0, label="Fail", explanation="No valid JSON found in agent response" )
AWS SDK
  1. import boto3 client = boto3.client('bedrock-agentcore-control') response = client.create_evaluator( evaluatorName="MyCodeEvaluator", level="TRACE", evaluatorConfig={ "codeBased": { "lambdaConfig": { "lambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:my-eval-function", "lambdaTimeoutInSeconds": 120 } } } ) print(f"Evaluator ID: {response['evaluatorId']}") print(f"Evaluator ARN: {response['evaluatorArn']}")
AWS CLI
  1. aws bedrock-agentcore-control create-evaluator \ --evaluator-name 'MyCodeEvaluator' \ --level TRACE \ --evaluator-config '{ "codeBased": { "lambdaConfig": { "lambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:my-eval-function", "lambdaTimeoutInSeconds": 120 } } }'

Führen Sie eine On-Demand-Evaluierung mit einem codebasierten Evaluator durch

Nach der Erstellung können Sie den benutzerdefinierten codebasierten Evaluator mit der Evaluate API genauso verwenden, wie Sie jeden anderen Evaluator verwenden würden. Der Service verarbeitet Lambda-Aufrufe, paralleles Fan-Out und Ergebnis-Mapping automatisch.

Beispiel
AgentCore CLI
  1. agentcore run eval \ --runtime "your_runtime_name" \ --session-id "your_session_id" \ --evaluator "code-based-evaluator-id"
AgentCore SDK
  1. from bedrock_agentcore.evaluation.client import EvaluationClient client = EvaluationClient( region_name="region" ) results = client.run( evaluator_ids=[ "code-based-evaluator-id", ], session_id="session-id", log_group_name="log-group-name", )
AWS SDK
  1. import boto3 client = boto3.client('bedrock-agentcore') response = client.evaluate( evaluatorId="code-based-evaluator-id", evaluationInput={"sessionSpans": session_span_logs} ) for result in response["evaluationResults"]: if "errorCode" in result: print(f"Error: {result['errorCode']} - {result['errorMessage']}") else: print(f"Label: {result['label']}, Value: {result.get('value')}") print(f"Explanation: {result.get('explanation', '')}")
AWS CLI
  1. aws bedrock-agentcore evaluate \ --cli-input-json file://session_span_logs.json

Verwendung von Bewertungszielen

Sie können, genau wie bei LLM-based Evaluatoren, auf bestimmte Traces oder Spans abzielen:

# Trace-level evaluation response = client.evaluate( evaluatorId="code-based-evaluator-id", evaluationInput={"sessionSpans": session_span_logs}, evaluationTarget={"traceIds": ["trace-id-1", "trace-id-2"]} ) # Tool-level evaluation response = client.evaluate( evaluatorId="code-based-evaluator-id", evaluationInput={"sessionSpans": session_span_logs}, evaluationTarget={"spanIds": ["span-id-1", "span-id-2"]} )

Verwendung von Ground Truth in einem codebasierten Evaluator

Wenn Ground-Truth-Referenzeingänge konfiguriert sind, empfängt Ihre Lambda-Funktion sie vor evaluationReferenceInputs Ort. Die enthaltenen Referenzeingaben hängen von der Evaluierungsebene ab:

Auswertungsdaten Lambda erhält

SESSION

Alle Referenzeingaben.

TRACE

Session-level Referenzeingaben plus Referenzeingaben, die der Ziel-TraceID entsprechen.

TOOL_CALL

Session-level Referenzeingaben plus Referenzeingaben, die der Ziel-SpanID entsprechen.

Anmerkung

Weitere Informationen zur Verwendung von Ground-Truth-Evaluationen finden Sie unter Ground-Truth-Evaluationen.

Führen Sie eine Online-Bewertung mit einem codebasierten Evaluator durch

Sie können einen benutzerdefinierten codebasierten Evaluator in einer Online-Testkonfiguration verwenden, um den Live-Traffic Ihres Agenten kontinuierlich zu überwachen. Übergeben Sie beim Anruf die Evaluator-ID in der evaluators Liste. CreateOnlineEvaluationConfig

Beispiel
AgentCore CLI
  1. agentcore add online-eval \ --name "your_config_name" \ --runtime "your_runtime_name" \ --evaluator "code-based-evaluator-id" \ --sampling-rate 1.0 \ --enable-on-create

    Dieser Befehl fügt die Online-Evaluierungskonfiguration zu Ihrer lokalen agentcore.json Konfiguration hinzu. Führen Sie es ausagentcore deploy, um es in Ihrem AWS Konto zu erstellen.

    Anmerkung

    Führen Sie dies in einem AgentCore Projektverzeichnis aus (erstellt mitagentcore create).

AgentCore SDK
  1. from bedrock_agentcore_starter_toolkit import Evaluation eval_client = Evaluation() config = eval_client.create_online_config( config_name="my_online_eval_config", agent_id="agent-id", sampling_rate=1.0, evaluator_list=["code-based-evaluator-id"], enable_on_create=True ) print(f"Config ID: {config['onlineEvaluationConfigId']}")
AWS SDK
  1. import boto3 client = boto3.client('bedrock-agentcore-control') response = client.create_online_evaluation_config( onlineEvaluationConfigName="my_online_eval_config", rule={"samplingConfig": {"samplingPercentage": 100.0}}, dataSourceConfig={ "cloudWatchLogs": { "logGroupNames": ["/aws/agentcore/my-agent-traces"], "serviceNames": ["my-agent.DEFAULT"] } }, evaluators=[{"evaluatorId": "code-based-evaluator-id"}], evaluationExecutionRoleArn="arn:aws:iam::account-id:role/AgentCoreEvaluationRole", enableOnCreate=True ) print(f"Config ID: {response['onlineEvaluationConfigId']}")
AWS CLI
  1. aws bedrock-agentcore-control create-online-evaluation-config \ --online-evaluation-config-name "my_online_eval_config" \ --rule '{"samplingConfig": {"samplingPercentage": 100.0}}' \ --data-source-config '{"cloudWatchLogs": {"logGroupNames": ["/aws/agentcore/my-agent-traces"], "serviceNames": ["my-agent.DEFAULT"]}}' \ --evaluators '[{"evaluatorId": "code-based-evaluator-id"}]' \ --evaluation-execution-role-arn "arn:aws:iam::account-id:role/AgentCoreEvaluationRole" \ --enable-on-create
Anmerkung

Wenn eine Online-Evaluierungskonfiguration aktiviert ist, die auf einen codebasierten Evaluator verweist, wird der Evaluator automatisch gesperrt und kann erst geändert oder gelöscht werden, wenn die Konfiguration deaktiviert oder gelöscht wird. Um Änderungen am Evaluator vorzunehmen, deaktivieren Sie zuerst die Online-Evaluierungskonfiguration oder klonen Sie den Evaluator und erstellen Sie eine neue Konfiguration.