使用 Outcome 的推荐方式:编写任务与验收标准、选择评估轮次、判断完成并取回产物。
本文介绍使用 Outcome 的推荐方式,并给出一个完整示例。字段与机制说明见 Outcome 验收判定。
一次通过评估的 Outcome 按以下顺序执行:
每条标准只描述一件事。把「完整」「可运行」「有证据」拆成三条,而不是合并为一条。
建议先用
Outcome 运行期间 Session 持续处于
读取
rubric 要求文件产物时,在
本示例让 Agent 根据一份订单 CSV 计算订单数、总金额和消费金额最高的客户,写入
评估线程继承 Agent 的工具权限。将评估所需的工具配置为
任务和源数据写在
响应示例:
输出:
本示例一轮评估通过时的事件顺序(省略
Agent 的首次产出未通过评估时,
流程概览
一次通过评估的 Outcome 按以下顺序执行:
- 客户端发送
user.define_outcome,任务写在description,验收标准写在rubric。 - Agent 按
description工作,Session 进入running。 - 评估线程评估产出,事件流发送
span.outcome_evaluation_start、span.outcome_evaluation_ongoing和span.outcome_evaluation_end。 span.outcome_evaluation_end.result为satisfied,Session 对象的outcome_evaluations[].completed_at写入。- Agent 输出最终回复,Session 回到
idle。
任务与验收标准
description 是 Agent turn 的输入,rubric 仅供评估线程使用,两者互不可见:
| 内容 | 位置 | 可见方 |
|---|---|---|
| 任务内容、产物路径、输出格式、源数据 | description | Agent |
| 验收标准、期望值、失败条件 | rubric | 评估线程 |
- 任务内容只写在
rubric中时,Agent 无法读取任务。 - 评估线程无法读取
description。标准依赖的期望值或源数据需要写进rubric,不要使用「按任务描述核对」这类标准。
| 类型 | 示例 |
|---|---|
| 产物位置 | 存在 /data/report.html |
| 具体内容 | 包含吞吐与延迟两组数据,各至少 1 个图表 |
| 证据 | 每个瓶颈附代码位置或 profiling 数据 |
| 失败条件 | 沙箱中没有该文件,且 Agent 声明无法完成时判定为 failed |
评估轮次
max_iterations 是评估次数的上限,每次评估都会消耗 credits。
| 取值 | 适用场景 |
|---|---|
1 | 只需要通过或不通过的结论。评估未通过时,Outcome 进入 max_iterations_reached |
2–3(默认 3) | 需要 Agent 根据评估结论修订。needs_revision 后自动开始修订 turn |
大于 3 | 任务需要多轮修订才能收敛 |
max_iterations: 1 调整 rubric,确认一轮评估即可得出正确结论后,再按需增加轮次。
发送时机
user.define_outcome 需要单独发送,并且只能在 Session 为 idle 且没有活跃 Outcome 时发送:
status 为 idle 且 active_outcomes 为 0 时可以发送。约束说明见请求约束。
判断完成
Outcome 运行期间 Session 持续处于 running。按目的选择判断条件:
| 目的 | 判断条件 |
|---|---|
| 读取评估结论 | outcome_evaluations[].completed_at 不为 null |
| 读取 Agent 的最终回复,或发送下一个事件 | Session status 回到 idle |
result 的同时读取 explanation。explanation 包含逐条标准的评估说明,可以展示给用户或写入日志。
使用事件流时,session.status_idle 的 stop_reason.type 为 requires_action 表示工具调用等待确认,不表示 Outcome 结束,见工具确认。
取回产物
rubric 要求文件产物时,在 description 中要求 Agent 将文件写入 /data/ 并通过 DeliverArtifacts 交付。交付成功时事件流发送 agent.artifact_delivered。
- 修订 turn 重新交付时会生成新的 File。使用最后一条
agent.artifact_delivered的file_id获取最终版本。 - 文件可能在交付数秒后才出现在文件列表中。
- Agent 也可能直接在回复中给出结果,客户端应同时处理这两种情况。
示例:订单汇总
本示例让 Agent 根据一份订单 CSV 计算订单数、总金额和消费金额最高的客户,写入 /data/summary.json 并交付,再由 Outcome 评估结果是否正确。
1. 创建 Agent
评估线程继承 Agent 的工具权限。将评估所需的工具配置为 always_allow,Outcome 运行期间不需要人工确认。
2. 创建 Session
3. 定义 Outcome
任务和源数据写在 description 中,期望值写在 rubric 中。max_iterations 设为 2,允许 Agent 根据评估结论修订一次。
4. 读取评估结论
5. 读取最终回复
completed_at 写入时收尾 turn 可能尚未结束。等待 Session 回到 idle 后读取最后一条 agent.message:
6. 取回产物
7. 归档 Session
事件流
本示例一轮评估通过时的事件顺序(省略 span.model_request_* 和 agent.thinking):
span.outcome_evaluation_end 的 result 为 needs_revision,随后依次出现修订 turn 的 agent.tool_use、新的 agent.artifact_delivered 和 iteration=1 的评估事件。此时 Session 下有两个 summary.json,最后一条 agent.artifact_delivered 对应最终版本。
检查清单
- 任务内容、产物路径和输出格式写在
description中,验收标准写在rubric中。 rubric不依赖description的内容,期望值或源数据已写入rubric。- 每条标准可以独立核验,并写明失败条件。
- 首次上线使用
max_iterations: 1,确认一轮评估即可得出正确结论。 - 评估所需的只读工具配置为
always_allow,或客户端已处理requires_action。 - 只在 Session 为
idle且没有活跃 Outcome 时发送user.define_outcome,并单独发送。 - 重试同一请求时携带
Idempotency-Key。 - 通过
completed_at判断 Outcome 是否结束;读取最终回复或发送下一个事件前,等待 Session 回到idle。 - 读取并记录
explanation。 - 使用最后一条
agent.artifact_delivered的file_id取回产物。

