View a markdown version of this page

カスタムコードベースの評価者 - Amazon Bedrock AgentCore

カスタムコードベースの評価者

カスタムコードベースの評価者を使用すると、LLM を審査員として使用する代わりに、独自の AWS Lambda 関数を使用してプログラムでエージェントのパフォーマンスを評価できます。これにより、評価ロジックを完全に制御できます。確定的なチェックを実装したり、外部 APIs呼び出したり、正規表現マッチングを実行したり、カスタムメトリクスを計算したり、ビジネス固有のルールを適用したりできます。

前提条件

カスタムコードベースの評価者を使用するには、以下が必要です。

  • AgentCore評価リソースと同じリージョンにデプロイされた AWS Lambda 関数。

  • AgentCore評価サービスに Lambda 関数を呼び出すアクセス許可を付与する IAM 実行ロール。

  • Lambda 関数は、レスポンススキーマで説明されているレスポンススキーマに準拠した JSON レスポンススキーマレスポンスを返す必要があります。

IAM アクセス許可

サービス実行ロールには、コードベースの評価のために Lambda 関数を呼び出すための次の追加のアクセス許可が必要です。

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

Lambda 関数契約

注記

Lambda 関数の最大ランタイムタイムアウトは 5 分 (300 秒) です。Lambda 関数に送信される入力ペイロードの最大サイズは 6 MB です。

入力スキーマ

Lambda 関数は、次の構造を持つ JSON ペイロードを受け取ります。

{ "schemaVersion": "1.0", "evaluatorId": "my-evaluator-abc1234567", "evaluatorName": "MyCodeEvaluator", "evaluationLevel": "TRACE", "evaluationInput": { "sessionSpans": [...] }, "evaluationReferenceInputs": [], "evaluationTarget": { "traceIds": ["trace123"], "spanIds": ["span123"] } }
フィールド タイプ 説明

schemaVersion

文字列

ペイロードのスキーマバージョン。現在 "1.0"

evaluatorId

String

コードベースの評価者の ID。

evaluatorName

String

コードベースの評価者の名前。

evaluationLevel

String

評価レベル: TRACETOOL_CALL、または SESSION

evaluationInput

オブジェクト

評価用のセッションスパンが含まれます。

evaluationInput.sessionSpans

リスト

評価するセッションは にまたがります。元のペイロードが 6 MB を超える場合、切り捨てられることがあります。

evaluationReferenceInputs

リスト

評価レベルに基づいてフィルタリングされた、評価者に提供されるリファレンス入力。「コードベースの評価者でのグラウンドトゥルースの使用」を参照してください。

evaluationTarget

オブジェクト

評価する特定のトレースまたはスパンを識別します。セッションレベルの評価者の場合、この値は ですNone

evaluationTarget.traceIds

リスト

評価ターゲットのトレース IDs。トレースレベルとツールレベルの評価に存在します。

evaluationTarget.spanIds

リスト

評価ターゲットのスパン IDs。ツールレベルの評価に存在します。

レスポンススキーマ

Lambda 関数は、次の 2 つの形式のいずれかに一致する JSON オブジェクトを返す必要があります。

成功レスポンス

{ "label": "PASS", "value": 1.0, "explanation": "All validation checks passed." }
フィールド 必要 [Description] (説明)

label

はい

String

評価結果のカテゴリラベル (「PASS」、「FAIL」、「Good」、「Poor」など)。

value

いいえ

Number

数値スコア (0.0~1.0 など)。

explanation

いいえ

String

人間が読める評価結果の説明。

エラーレスポンス

{ "errorCode": "VALIDATION_FAILED", "errorMessage": "Input spans missing required tool call attributes." }
フィールド 必要 [Description] (説明)

errorCode

はい

String

エラーを識別するコード。

errorMessage

はい

String

人が読み取り可能なエラーの説明。

コードベースの評価者を作成する

CreateEvaluator API は、Lambda 関数 ARN とオプションのタイムアウトを指定して、コードベースの評価者を作成します。

必須パラメータ: 一意の評価者名、評価レベル (TRACETOOL_CALL、または SESSION )、および Lambda ARN を含むコードベースの評価者設定。

コードベースの評価者設定:

{ "codeBased": { "lambdaConfig": { "lambdaArn": "arn:aws:lambda:region:account-id:function:function-name", "lambdaTimeoutInSeconds": 60 } } }
フィールド [Required] (必須) デフォルト [Description] (説明)

lambdaArn

はい

呼び出す Lambda 関数の ARN。

lambdaTimeoutInSeconds

いいえ

60

Lambda 呼び出しの秒単位のタイムアウト (1~300)。

次のコードサンプルは、さまざまな開発アプローチを使用してコードベースの評価者を作成する方法を示しています。

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

コードベースの評価者を使用してオンデマンド評価を実行する

作成したら、他の評価者を使用するのと同じ方法で、EvaluateAPI でカスタムコードベースの評価者を使用します。このサービスは、Lambda 呼び出し、並列ファンアウト、結果マッピングを自動的に処理します。

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

評価ターゲットの使用

LLM ベースの評価者と同様に、特定のトレースまたはスパンをターゲットにできます。

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

コードベースの評価者でのグラウンドトゥルースの使用

Ground Truth リファレンス入力が設定されている場合、Lambda 関数は evaluationReferenceInputs フィールドでそれらを受け取ります。含まれるリファレンス入力は、評価レベルによって異なります。

評価レベル Lambda が受信する

SESSION

すべてのリファレンス入力。

TRACE

セッションレベルのリファレンス入力と、ターゲット traceId に一致するリファレンス入力。

TOOL_CALL

セッションレベルのリファレンス入力と、ターゲット spanId に一致するリファレンス入力。

注記

グラウンドトゥルース評価の使用の詳細については、「グラウンドトゥルース評価」を参照してください。

コードベースの評価者を使用してオンライン評価を実行する

オンライン評価設定でカスタムコードベースの評価者を使用して、エージェントのライブトラフィックを継続的にモニタリングできます。を呼び出すときにevaluators、リスト内の評価者 ID を渡しますCreateOnlineEvaluationConfig

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

    このコマンドは、オンライン評価設定をローカル agentcore.json に追加します。agentcore deploy を実行して、 AWS アカウントに作成します。

    注記

    AgentCoreプロジェクトディレクトリ内 ( で作成) agentcore 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
注記

コードベースの評価者を参照するオンライン評価設定が有効になっている場合、評価者は自動的にロックされ、設定が無効または削除されるまで変更または削除することはできません。評価者を変更するには、最初にオンライン評価設定を無効にするか、評価者のクローンを作成して新しい設定を作成します。