View a markdown version of this page

Avaliador personalizado baseado em código - Amazon Bedrock AgentCore

Avaliador personalizado baseado em código

Os avaliadores personalizados baseados em código permitem que você use sua própria função AWS Lambda para avaliar programaticamente o desempenho do agente, em vez de usar um LLM como juiz. Isso lhe dá controle total sobre a lógica de avaliação — você pode implementar verificações determinísticas, chamar APIs externas, executar correspondência de regex, calcular métricas personalizadas ou aplicar quaisquer regras específicas de negócios.

Pré-requisitos

Para usar avaliadores personalizados baseados em código, você precisa:

Permissões do IAM

Sua função de execução de serviço precisa da seguinte permissão adicional para invocar funções Lambda para avaliação baseada em código:

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

Contrato de função Lambda

nota

O tempo limite máximo de tempo de execução para a função Lambda é de 5 minutos (300 segundos). O tamanho máximo do payload de entrada enviado para a função Lambda é de 6 MB.

Esquema de entrada

Sua função Lambda recebe uma carga JSON com a seguinte estrutura:

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

schemaVersion

String

Versão do esquema da carga útil. Atualmente"1.0".

evaluatorId

String

O ID do avaliador baseado em código.

evaluatorName

String

O nome do avaliador baseado em código.

evaluationLevel

String

O nível de avaliação:TRACE,TOOL_CALL, ouSESSION.

evaluationInput

Objeto

Contém os períodos de sessão para avaliação.

evaluationInput.sessionSpans

Lista

A sessão se estende para avaliar. Pode ser truncado se a carga original exceder 6 MB.

evaluationReferenceInputs

Lista

Entradas de referência fornecidas ao avaliador, filtradas com base no nível de avaliação. Consulte Usando a verdade fundamental em um avaliador baseado em código.

evaluationTarget

Objeto

Identifica os traços ou extensões específicos a serem avaliados. Para avaliadores em nível de sessão, esse valor é. None

evaluationTarget.traceIds

Lista

Os IDs de rastreamento do alvo de avaliação. Presente para avaliações em nível de rastreamento e em nível de ferramenta.

evaluationTarget.spanIds

Lista

Os IDs de intervalo do alvo de avaliação. Presente para avaliações em nível de ferramenta.

Esquema de resposta

Sua função Lambda deve retornar um objeto JSON que corresponda a um dos dois formatos:

Resposta de sucesso

{ "label": "PASS", "value": 1.0, "explanation": "All validation checks passed." }
Campo Obrigatório Tipo Description

label

Sim

String

Um rótulo categórico para o resultado da avaliação (por exemplo, “APROVADO”, “FALHA”, “Bom”, “Ruim”).

value

Não

Número

Uma pontuação numérica (por exemplo, 0,0 a 1,0).

explanation

Não

String

Uma explicação legível por humanos do resultado da avaliação.

Resposta de erro

{ "errorCode": "VALIDATION_FAILED", "errorMessage": "Input spans missing required tool call attributes." }
Campo Obrigatório Tipo Description

errorCode

Sim

String

Um código identificando o erro.

errorMessage

Sim

String

Uma descrição do erro legível por humanos.

Crie um avaliador baseado em código

A CreateEvaluator API cria um avaliador baseado em código especificando um ARN da função Lambda e um tempo limite opcional.

Parâmetros obrigatórios: um nome de avaliador exclusivo, nível de avaliação (TRACETOOL_CALL, ouSESSION) e uma configuração de avaliador baseada em código contendo o ARN do Lambda.

Code-based configuração do avaliador:

{ "codeBased": { "lambdaConfig": { "lambdaArn": "arn:aws:lambda:region:account-id:function:function-name", "lambdaTimeoutInSeconds": 60 } } }
Campo Obrigatório Padrão Description

lambdaArn

Sim

O ARN da função Lambda a ser invocada.

lambdaTimeoutInSeconds

Não

60

Tempo limite em segundos para a invocação do Lambda (1—300).

Os exemplos de código a seguir demonstram como criar avaliadores baseados em código usando diferentes abordagens de desenvolvimento.

exemplo
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 } } }'

Execute uma avaliação sob demanda com um avaliador baseado em código

Depois de criado, use o avaliador personalizado baseado em código com a Evaluate API da mesma forma que você usaria qualquer outro avaliador. O serviço processa automaticamente a invocação do Lambda, o fan-out paralelo e o mapeamento de resultados.

exemplo
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

Usando metas de avaliação

Você pode segmentar traços ou extensões específicas, assim como com os LLM-based avaliadores:

# 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"]} )

Usando a verdade fundamental em um avaliador baseado em código

Quando as entradas de referência de verdade básica são configuradas, sua função Lambda as recebe no evaluationReferenceInputs campo. As entradas de referência incluídas dependem do nível de avaliação:

Nível de avaliação Lambda recebe

SESSION

Todas as entradas de referência.

TRACE

Session-level entradas de referência mais entradas de referência correspondentes ao TraceID de destino.

TOOL_CALL

Session-level entradas de referência mais entradas de referência correspondentes ao SpanID de destino.

nota

Para obter mais informações sobre o uso de avaliações da verdade básica, consulte Avaliações da verdade básica.

Execute uma avaliação on-line com um avaliador baseado em código

Você pode usar um avaliador personalizado baseado em código em uma configuração de avaliação on-line para monitorar continuamente o tráfego ao vivo do seu agente. Passe o ID do avaliador na evaluators lista ao ligarCreateOnlineEvaluationConfig.

exemplo
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

    Esse comando adiciona a configuração de avaliação on-line ao seu localagentcore.json. Corra agentcore deploy para criá-lo em sua AWS conta.

    nota

    Execute isso de dentro de um diretório de AgentCore projeto (criado comagentcore 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
nota

Quando uma configuração de avaliação on-line que faz referência a um avaliador baseado em código é ativada, o avaliador é automaticamente bloqueado e não pode ser modificado ou excluído até que a configuração seja desativada ou excluída. Para fazer alterações no avaliador, primeiro desative a configuração da avaliação on-line ou clone o avaliador e crie uma nova configuração.