本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
模型評估
評估會根據提示集執行您的代理程式,並報告獎勵、Pass@k 和軌跡指標。使用它在部署之前,將微調後的模型與其基礎或候選項目的基準進行比較。
注意:評估任務使用 AgentRFT JobCategory: AgentRFTEvaluation(不適用於訓練)。在評估任務的 CreateJob和 DescribeJob呼叫上使用此類別。
準備評估資料
評估資料集使用與訓練資料集相同的格式和結構描述。請參閱 提示資料集格式。以下指引是 eval 特定的。
-
從訓練資料集保留評估資料。永遠不要評估訓練提示,因為分數會高估效能。為保留集保留一部分資料,或維護單獨的評估資料集。在反覆運算之間保持相同的評估集,以便結果相當。
-
符合訓練提示格式。代理程式必須剖析 eval 提示,與其剖析訓練提示的方式相同。如果您在訓練期間使用編碼或加密,請在此處使用相同的結構。從相同的程式碼路徑產生兩者可避免偏離。
-
涵蓋您關心的行為。練習代理程式使用的每個工具和工具組合。包含先前導致失敗的提示,以便迴歸浮現。
-
如同在訓練中一樣保護敏感內容,因為服務會在未經檢查的情況下通過提示。
啟動評估任務
訓練完成後,請使用下列其中一種方法來評估您的模型。
SageMaker AI Studio
-
導覽至自訂模型的詳細資訊頁面 (模型 > 我的模型 > 選取您的 MTRL 模型)。
-
選擇評估以開啟評估組態頁面。
-
選取多轉 RL 做為評估類型。
-
設定您的代理程式環境 — 選取您的 Bedrock AgentCore 執行時間,或提供您的 Lambda 轉送器 ARN。
-
提供您的評估資料集 (S3 URI 或包含保留評估提示的已註冊資料集)。
-
選擇提交以開始評估任務。
SageMaker AI Python SDK
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)
若要建立評估任務,請呼叫 CreateJob API,並將 JobCategory設定為 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 Forwarder 自訂代理程式)
使用與 Bedrock AgentCore 評估相同的方法,但在 CustomAgentLambdaConfig中指定 AgentConfig:
"AgentConfig": { "CustomAgentLambdaConfig": { "LambdaArn": "arn:aws:lambda:us-west-2:account-id:function:rft-agent-forwarder" } }
評估超參數
| Category | 參數 | Type | 預設 | 說明 |
|---|---|---|---|---|
| 批次 | eval_group_size | integer | 1 | 每個提示的推展。注意:若要計算 pass@k,請設定 eval_group_size >= k。 |
| eval_metrics_config | pass_k_values | 陣列 | 【1、2、4、8、16、32】 | 運算 pass@k 和 pass^k 指標的 k 值清單。 pass@k = 至少 1 個 k 抽樣推展成功的機率。 pass^k = 所有 k 推展成功的機率。 |
| eval_metrics_config | success_threshold | float | 1 | 當獎勵 >= success_threshold 時,推展為「成功」。請注意,這適用於 pass@k、pass^k、成功/失敗的計數指標。 |
| eval_sampling_params | 溫度 | float | 0 | 評估推展的取樣溫度。注意:建議將 pass@k 和 pass^k 指標的此值增加到 0 以上,以避免決定性的行為。 |
| eval_sampling_params | sampling_top_p | float | 1 | 評估推展的「Nucleus 取樣截止」。 |
| eval_sampling_params | sampling_max_tokens | integer | 4096 | 模型在評估推展期間每圈可產生的最大權杖數。 |
| 推展 | timeout | float | 600 | 評估推展被視為失敗並可能重試的時間 (秒)。 |
| 推展 | max_concurrency | 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_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 |
零 logprob 權杖的總計數。 |
eval/logprob/zero_per_group |
每個提示群組的平均零 logprob 權杖數。 |
計時指標 (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-evaluation-job 並行任務上限 | 1 |