

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 模型评测
<a name="model-customize-mtrl-evaluation"></a>

 评估会根据提示集运行你的特工，并报告奖励、pass @k 和轨迹指标。在部署之前，使用它可以将经过微调的模型与其基础进行比较，或者对候选模型进行基准测试。

 **注意：**评估作业使用`JobCategory: AgentRFTEvaluation`（不`AgentRFT`像训练中那样使用）。使用此类别`CreateJob`并`DescribeJob`要求进行评估工作。

## 准备评估数据
<a name="model-customize-mtrl-evaluation-preparing-data"></a>

 评估数据集使用与训练数据集相同的格式和架构。请参阅[提示数据集格式](model-customize-mtrl-assets.md#model-customize-mtrl-assets-prompt-dataset-format)。以下指南是针对评估的。

1. **保留训练数据集中的评估数据。**切勿根据训练提示进行评估，因为分数会夸大表现。将一部分数据保留给被搁置的集合，或者维护一个单独的评估数据集。在迭代中保持相同的评估集，以便结果具有可比性。

1. **匹配训练提示格式。**代理必须像解析训练提示一样解析 eval 提示。如果您在训练期间使用了编码或加密，请在此处使用相同的结构。从相同的代码路径生成两者可以避免偏差。

1. **掩盖你关心的行为。**使用您的代理使用的每种工具和工具组合。包括以前导致失败的提示，这样回归就会浮出水面。

1. **保护敏感内容的方式与培训中的方法相同**，因为服务无需检查即可通过提示。

## 启动评估作业
<a name="model-customize-mtrl-evaluation-launching"></a>

训练完成后，使用以下方法之一评估您的模型。

### SageMaker 人工智能工作室
<a name="model-customize-mtrl-evaluation-launching-studio"></a>
+ 导航至您的自定义模型的详细信息页面（**模型 > **我的模型**** > 选择您的 MTRL 型号）。
+ 选择**评估**以打开评估配置页面。
+ 选择 **Multi-Turn RL** 作为评估类型。
+ 配置您的代理环境 — 选择您的 Bedrock AgentCore 运行时或提供您的 Lambda 转发器 ARN。
+ 提供您的评估数据集（S3 URI 或包含已保留评估提示的注册数据集）。
+ 选择 “**提交**” 以开始评估作业。

### SageMaker AI Python SD
<a name="model-customize-mtrl-evaluation-launching-sdk"></a>

`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}")
```

### Amazon CLI 和 boto3
<a name="model-customize-mtrl-evaluation-launching-agentcore"></a>

您也可以使用 `CreateJob` API 直接创建评估任务。

**创建评估作业（Bedrock AgentCore）**

 要创建评估作业，请在`JobCategory`设置为`CreateJob`的情况下调用 API `AgentRFTEvaluation`。代理的设置和配置遵循与训练作业相同的过程。

**使用 Amazon 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"
    }
}
```

## 评估超参数
<a name="model-customize-mtrl-evaluation-hyperparameters"></a>


| 类别 | 参数 | 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 | 在将评估部署失败标记为永久失败之前，对其进行重试的次数。 | 

## 监测评估
<a name="model-customize-mtrl-evaluation-monitoring"></a>

```
aws sagemaker describe-job \
  --job-name "my-agent-rft-eval-job" \
  --job-category AgentRFTEvaluation \
  --region us-west-2
```

## 解释评估结果
<a name="model-customize-mtrl-evaluation-results"></a>

 打开您的 mlFlow 应用程序，查看评估运行中记录的指标、奖励分配和轨迹可视化。有关每个指标含义的说明，请参阅下文。

### 奖励指标 (`eval/reward/`)
<a name="model-customize-mtrl-evaluation-results-reward"></a>


| 指标 | 说明 | 
| --- | --- | 
| 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/`)
<a name="model-customize-mtrl-evaluation-results-token"></a>


| 指标 | 说明 | 
| --- | --- | 
| eval/tokens/prompt\_mean | 以令牌为单位的平均提示长度（包括系统提示、工具描述和多回合上下文）。 | 
| eval/tokens/response\_mean | 模型每回合的平均响应长度（以令牌为单位）。 | 
| eval/tokens/response\_min | 以令牌为单位的最短模型响应。 | 
| eval/tokens/response\_max | 以代币为单位的最长模型响应。 | 
| eval/tokens/response\_std | 响应长度的标准差。高差异可能表示代理行为不一致。 | 

### 转向指标 (`eval/turns/`)
<a name="model-customize-mtrl-evaluation-results-turn"></a>


| 指标 | 说明 | 
| --- | --- | 
| eval/turns/mean | 每次部署的平均回合数。较高的值可能表示代理正在循环或重试过度。 | 
| eval/turns/min | 任何推出的上线次数最少。 | 
| eval/turns/max | 大多数轮流出现在任何推出中。值非常高表示代理在未解决任务的情况下陷入困境。 | 

### 记录概率指标 (`eval/logprob/`)
<a name="model-customize-mtrl-evaluation-results-logprob"></a>


| 指标 | 说明 | 
| --- | --- | 
| 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/）
<a name="model-customize-mtrl-evaluation-results-timing"></a>


| 指标 | 说明 | 
| --- | --- | 
| timing\_s/eval | 评估的挂钟总时间（以秒为单位）。除eval/reward/num\_prompts以每个提示的平均时间。 | 

### 如何诊断常见模式
<a name="model-customize-mtrl-evaluation-results-diagnose"></a>


| 模式 | 可能的原因 | 
| --- | --- | 
| 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`。

## 限制评估&amp;配额
<a name="model-customize-mtrl-evaluation-limits"></a>

 使用 Amazon 服务配额来请求提高并发评估任务的最大数量的限制。


| 配额 | 默认 | 
| --- | --- | 
| rft-评估任务最大并发作业 | 1 | 