本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
模型评测
评估会根据提示集运行你的特工,并报告奖励、pass @k 和轨迹指标。在部署之前,使用它可以将经过微调的模型与其基础进行比较,或者对候选模型进行基准测试。
注意:评估作业使用JobCategory: AgentRFTEvaluation(不AgentRFT像训练中那样使用)。使用此类别CreateJob并DescribeJob要求进行评估工作。
准备评估数据
评估数据集使用与训练数据集相同的格式和架构。请参阅提示数据集格式。以下指南是针对评估的。
-
保留训练数据集中的评估数据。切勿根据训练提示进行评估,因为分数会夸大表现。将一部分数据保留给被搁置的集合,或者维护一个单独的评估数据集。在迭代中保持相同的评估集,以便结果具有可比性。
-
匹配训练提示格式。代理必须像解析训练提示一样解析 eval 提示。如果您在训练期间使用了编码或加密,请在此处使用相同的结构。从相同的代码路径生成两者可以避免偏差。
-
掩盖你关心的行为。使用您的代理使用的每种工具和工具组合。包括以前导致失败的提示,这样回归就会浮出水面。
-
保护敏感内容的方式与培训中的方法相同,因为服务无需检查即可通过提示。
启动评估作业
训练完成后,使用以下方法之一评估您的模型。
SageMaker 人工智能工作室
-
导航至您的自定义模型的详细信息页面(模型 > 我的模型 > 选择您的 MTRL 型号)。
-
选择评估以打开评估配置页面。
-
选择 Multi-Turn RL 作为评估类型。
-
配置您的代理环境 — 选择您的 Bedrock AgentCore 运行时或提供您的 Lambda 转发器 ARN。
-
提供您的评估数据集(S3 URI 或包含已保留评估提示的注册数据集)。
-
选择 “提交” 以开始评估作业。
SageMaker AI Python SD
MultiTurnRLEvaluator提供了用于启动评估作业的高级界面。当您通过已完成的训练器时,评估者会自动解析模型包 ARN、代理配置和代理限定词。
评估经过微调的模型
from sagemaker.train.evaluate import MultiTurnRLEvaluator from sagemaker.train.multi_turn_rl_trainer import MultiTurnRLTrainer # Attach to a completed training job trainer = MultiTurnRLTrainer.attach(job_name="my-mtrl-job-20260512082005") # Minimal evaluator — everything else inferred from trainer evaluator = MultiTurnRLEvaluator( model=trainer, dataset="s3://my-bucket/eval-prompts.parquet", s3_output_path="s3://my-bucket/eval-output/", ) execution = evaluator.evaluate() print(f"Evaluation started: {execution.arn}") # Wait for completion execution.wait() print(f"Status: {execution.status.overall_status}") print(f"S3 Output: {execution.s3_output_path}") print(f"MLflow: {execution.mlflow_url}")
评估基础模型(不进行训练)
在直接评估基础模型agent_config时,需要这样做,因为没有训练器可以继承:
from sagemaker.train.evaluate import MultiTurnRLEvaluator # With Bedrock AgentCore evaluator_base = MultiTurnRLEvaluator( model="openai-reasoning-gpt-oss-20b", dataset="s3://my-bucket/eval-prompts.parquet", agent_config="arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent", s3_output_path="s3://my-bucket/eval-output/base/", mlflow_resource_arn="arn:aws:sagemaker:us-west-2:123456789012:mlflow-tracking-server/my-mlflow", role="arn:aws:iam::123456789012:role/SageMakerRole", accept_eula=True, ) execution = evaluator_base.evaluate() execution.wait()
Side-by-side 比较(基础与微调)
在一个管evaluate()道中同时评估基础模型和微调模型的单个调用:
comparison_evaluator = MultiTurnRLEvaluator( model=trainer, dataset="s3://my-bucket/eval-prompts.parquet", s3_output_path="s3://my-bucket/eval-output/comparison/", evaluate_base_model=True, ) execution = comparison_evaluator.evaluate() execution.wait() print(f"Status: {execution.status.overall_status}")
监控和检索结果
# Refresh status execution.refresh() print(f"Status: {execution.status.overall_status}") # Step-level detail for step in execution.status.step_details: print(f" {step.name}: {step.status}") if step.job_arn: print(f" Job ARN: {step.job_arn}") # MLflow URL print(f"MLflow: {execution.mlflow_url}")
AWS CLI 和 boto3
您也可以使用 CreateJob API 直接创建评估任务。
创建评估作业(Bedrock AgentCore)
要创建评估作业,请在JobCategory设置为CreateJob的情况下调用 API AgentRFTEvaluation。代理的设置和配置遵循与训练作业相同的过程。
使用 AWS CLI
aws sagemaker create-job \ --job-category AgentRFTEvaluation \ --job-name "my-agent-rft-eval-job" \ --role-arn "arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole" \ --job-config-schema-version "1.0.0" \ --job-config-document '{ "AgentConfig": { "BedrockAgentCoreConfig": { "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" } }, "InputDataConfig": [{ "ChannelName": "evaluation", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://your-bucket-name/eval-prompts/" } } }], "OutputDataConfig": { "S3OutputPath": "s3://your-bucket-name/eval-output/", "MlflowConfig": { "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app" } }, "EvaluationConfig": { "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b", "AcceptEula": true, "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }} } }' \ --region us-west-2
使用 SageMaker AI Python SDK (boto3)
import json import boto3 sm = boto3.client("sagemaker") response = sm.create_job( JobName="my-agent-rft-eval-job", RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole", JobCategory="AgentRFTEvaluation", JobConfigSchemaVersion="1.0.0", JobConfigDocument=json.dumps({ "AgentConfig": { "BedrockAgentCoreConfig": { "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" } }, "InputDataConfig": [{ "ChannelName": "evaluation", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://your-bucket-name/eval-prompts/" } } }], "OutputDataConfig": { "S3OutputPath": "s3://your-bucket-name/eval-output/", "MlflowConfig": { "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app" } }, "EvaluationConfig": { "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b", "AcceptEula": True, "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }} } }) ) print(f"Eval Job ARN: {response['JobArn']}")
评估经过微调的模型
要评估训练作业生成的模型ModelPackageConfig,请将InputModelPackageArn:
import json import boto3 sm = boto3.client("sagemaker") response = sm.create_job( JobName="my-agent-rft-eval-finetuned", RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole", JobCategory="AgentRFTEvaluation", JobConfigSchemaVersion="1.0.0", JobConfigDocument=json.dumps({ "AgentConfig": {...}, "InputDataConfig": [...], "OutputDataConfig": {...}, "ModelPackageConfig": { "InputModelPackageArn": "arn:aws:sagemaker:us-west-2:123456789012:model-package/my-final-models/1" }, "EvaluationConfig": {...} }) ) print(f"Eval Job ARN: {response['JobArn']}")
创建评估任务(使用 Lambda 转发器的自定义代理)
使用与 Bedrock AgentCore 评估相同的方法,但在以下内容CustomAgentLambdaConfig中指AgentConfig定:
"AgentConfig": { "CustomAgentLambdaConfig": { "LambdaArn": "arn:aws:lambda:us-west-2:account-id:function:rft-agent-forwarder" } }
评估超参数
| 类别 | 参数 | Type | 默认值 | 说明 |
|---|---|---|---|---|
| 批处理 | 评估组大小 | integer | 1 | 每个提示的推出次数。注意:要计算 pass @k,请将 eval_group_size 设置为 >= k。 |
| 评估_metrics_config | pass_k _values | array | [1、2、4、8、16、32] | 计算 pass @k 和 pass^k 指标的 k 个值列表。pass @k = k 个采样推出中至少 1 个成功的概率。pass^k = 所有 k 个部署成功的概率。 |
| 评估_metrics_config | 成功阈值 | 浮点数 | 1 | 当奖励 >= 成功阈值时,推出就是 “成功”。请注意,这适用于 pass @k、pass^k、 succeeded/failed 计数指标。 |
| eval_sampling_params | temperature | 浮点数 | 0 | 用于评估部署的采样温度。注意:建议将 pass @k 和 pass^k 指标的此值增加到 0 以上,以避免确定性行为。 |
| eval_sampling_params | sampling_top_p | 浮点数 | 1 | 用于评估部署的 Nucleus 采样截止时间。 |
| eval_sampling_params | 采样_max_tokens | integer | 4096 | 在评估推出期间,模型每回合可以生成的最大代币数量。 |
| 推出 | timeout | 浮点数 | 600 | 评估部署被视为失败并可以重试的时间(秒)。 |
| 推出 | 最大并发度 | int | 96 | 可以并行执行的最大评估部署数量。 |
| 推出 | max_retries | int | 3 | 在将评估部署失败标记为永久失败之前,对其进行重试的次数。 |
监测评估
aws sagemaker describe-job \ --job-name "my-agent-rft-eval-job" \ --job-category AgentRFTEvaluation \ --region us-west-2
解释评估结果
打开您的 mlFlow 应用程序,查看评估运行中记录的指标、奖励分配和轨迹可视化。有关每个指标含义的说明,请参阅下文。
奖励指标 (eval/reward/)
| 指标 | 说明 |
|---|---|
eval/reward/mean |
所有推出的平均奖励分数。 |
eval/reward/min |
所有推出的最低奖励分数。 |
eval/reward/max |
所有推出的最大奖励分数。 |
eval/reward/std |
所有推出的奖励分数的标准差。 |
eval/reward/zero_frac |
得分恰好为 0 的上线次数(完全失败)。 |
eval/reward/pass_at_1 |
每个提示中至少有 1 个样本成功的可能性。这是主要的成功指标。 |
eval/reward/pass_power_1 |
按功率加权计算的合格率。 |
eval/reward/succeeded_rollouts |
获得正奖励的上线总数。 |
eval/reward/failed_rollouts |
得分为 0 的上线总数。 |
eval/reward/num_prompts |
评估的不同提示数。 |
eval/reward/rollouts_per_prompt |
每个提示生成的尝试次数(样本)。 |
eval/reward/success_threshold |
将推出计为 “成功” 所需的奖励价值。 |
eval/reward/mean_within_groups |
每个提示组的平均奖励(需要将 rollouts_per_per_prompt 设置为 > 1)。 |
eval/reward/std_within_groups |
每个提示组内奖励的标准差。 |
eval/reward/min_within_groups |
每个提示组内的最低奖励。 |
eval/reward/max_within_groups |
每个提示组内的最大奖励。 |
代币指标 (eval/tokens/)
| 指标 | 说明 |
|---|---|
eval/tokens/prompt_mean |
以令牌为单位的平均提示长度(包括系统提示、工具描述和多回合上下文)。 |
eval/tokens/response_mean |
模型每回合的平均响应长度(以令牌为单位)。 |
eval/tokens/response_min |
以令牌为单位的最短模型响应。 |
eval/tokens/response_max |
以代币为单位的最长模型响应。 |
eval/tokens/response_std |
响应长度的标准差。高差异可能表示代理行为不一致。 |
转向指标 (eval/turns/)
| 指标 | 说明 |
|---|---|
eval/turns/mean |
每次部署的平均回合数。较高的值可能表示代理正在循环或重试过度。 |
eval/turns/min |
任何推出的上线次数最少。 |
eval/turns/max |
大多数轮流出现在任何推出中。值非常高表示代理在未解决任务的情况下陷入困境。 |
记录概率指标 (eval/logprob/)
| 指标 | 说明 |
|---|---|
eval/logprob/nz_mean |
非零(非填充)标记的平均对数概率。值接近 0 表示模型置信度高。 |
eval/logprob/nz_min |
最低对数概率标记(最不自信的预测)。 |
eval/logprob/nz_max |
对数概率最高标记(最有信心的预测)。 |
eval/logprob/nz_std |
非零对数概率的标准差。低值意味着可信度始终很高。 |
eval/logprob/zero_frac |
对数概率完全为零的代币分数(概率为1.0),通常是填充或强制令牌。 |
eval/logprob/zero_count |
零日志探测令牌的总数。 |
eval/logprob/zero_per_group |
每个提示组的平均零日志探测令牌。 |
计时指标(timing_ s/)
| 指标 | 说明 |
|---|---|
timing_s/eval |
评估的挂钟总时间(以秒为单位)。除eval/reward/num_prompts以每个提示的平均时间。 |
如何诊断常见模式
| 模式 | 可能的原因 |
|---|---|
pass_at_1 = 0,高 turns/mean |
代理在没有解决任务的情况下循环播放。检查轨迹中的工具使用情况和动作模式。 |
pass_at_1 = 0,低 tokens/response_mean |
代理生成非常短(可能为空或格式错误)的响应。检查提示格式和型号兼容性。 |
从turns/max高到低 turns/min |
代理在各个提示中表现出不一致的行为。有些任务可能会困难得多,或者代理在特定的工具交互中可能失败。 |
信心高(logprob/nz_mean接近 0)但回报低 |
模型自信地产生了错误的输出。它可能需要更多的训练数据多样性或奖励信号的完善。 |
zero_frac = 1.0作为奖励 |
完全失败。验证代理部署、工具连接以及评估数据集格式是否正确。 |
要获得原始结果,请查看写入中S3OutputPath指定内容的对象OutputDataConfig。
限制评估&配额
使用 AWS 服务配额来请求提高并发评估任务的最大数量的限制。
| 配额 | 默认 |
|---|---|
| rft-评估任务最大并发作业 | 1 |