View a markdown version of this page

Avaliador personalizado baseado em código - Base da Amazônia AgentCore

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Avaliador personalizado baseado em código

Os avaliadores personalizados baseados em código permitem que você use sua própria função do 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 da empresa.

Pré-requisitos

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

  • Uma função do AWS Lambda implantada na mesma região que seus recursos de AgentCore avaliação.

  • Uma função de execução do IAM que concede ao serviço AgentCore Evaluations permissão para invocar sua função do Lambda.

  • A função Lambda deve retornar uma resposta JSON em conformidade com o esquema de resposta descrito em Esquema de resposta. Esquema de resposta

Permissões do IAM

Sua função de execução de serviço precisa da seguinte permissão adicional para invocar funções do 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 da função Lambda é de 5 minutos (300 segundos). O tamanho máximo da carga útil de entrada enviada para a função Lambda é de 6 MB.

Esquema de entrada

Sua função do 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 básica no 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 da avaliação. Presente para avaliações em nível de rastreamento e em nível de ferramenta.

evaluationTarget.spanIds

Lista

Os IDs de amplitude da meta 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 necessários: um nome exclusivo do avaliador, nível de avaliação (TRACE,TOOL_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 add evaluator \ --name "MyCodeEvaluator" \ --level TRACE \ --type code-based \ --lambda-arn "arn:aws:lambda:us-east-1:123456789012:function:my-eval-function" \ --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, a distribuição paralela 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 acontece 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 básica no avaliador baseado em código

Quando as entradas de referência da verdade básica são configuradas, sua função do 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 o 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 é habilitada, 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 de avaliação on-line ou clone o avaliador e crie uma nova configuração.