ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Managed Agents 结果驱动会话(Outcomes)实战指南:从对话到可验收的交付物

Managed Agents 结果驱动会话(Outcomes)实战指南:从对话到可验收的交付物 人工智能AI 技能AI 评测【免费下载链接】skillsPublic repository for Agent Skills项目地址https://gitcode.com/GitHub_Trending/skills3/skills点击查看免费下载本篇技术指南围绕 Claude API 文档仓库中 managed-agents-outcomes.md 的核心内容展开讲解如何用Outcomes结果目标将 Managed Agents 会话从对话升级为工作声明完成的标准由独立的 grader评分器在独立上下文窗口中对每次迭代评分驱动 iterate → grade → revise 循环直到产出物满足 rubric。读完本文你将掌握user.define_outcome事件的完整参数与调用形态、rubric 的编写方法、span.outcome_evaluation_*事件流的语义、产出物deliverables的检索方式以及多轮 outcome 串联、中断、预算暂停等边界场景下的正确交互姿势。什么是 Outcome让会话为验收标准工作在 Managed Agents 中一个outcome将会话从conversation对话提升为work工作你描述完成的样子harness调度框架运行一个iterate - grade - revise的循环直到产出物满足 rubric、达到max_iterations上限或被中断。整个过程中有一个独立的grader拥有独立上下文窗口对每一次迭代按你的 rubric 打分并把每个准则criterion的差距反馈给 agent 驱动下一轮修订。user.define_outcome任务描述 rubric 迭代上限 │ ▼ ┌───────────────┐ 不满足 ┌───────────────┐ │ Agent 工作 │ ────────▶ │ Grader 评分 │ └───────────────┘ └───────────────┘ ▲ │ 满足/终止 └───────────────────────────┘ 携带逐准则差距反馈进入下一轮迭代这一点在仓库的 managed-agents-overview.md 中被列为独立的一节Define an outcome / rubric-graded iterate loop说明它是 Managed Agents 事件体系中的一个一等公民能力。Beta 头beta header说明SDK 会在所有client.beta.sessions.*调用上自动设置managed-agents-2026-04-01beta 头outcome 功能无需额外添加任何 header。这一点在 managed-agents-overview.md 的 Beta Headers 表格中有明确记录。核心事件user.define_outcomeOutcome不是sessions.create()上的字段。正确流程是先创建一个普通会话再向会话发送一个user.define_outcome事件。agent 收到事件即开始工作——不要再额外发送user.message去启动它否则会产生两个并发指令。session client.beta.sessions.create( agentAGENT_ID, environment_idENVIRONMENT_ID, titleFinancial analysis on Costco, ) client.beta.sessions.events.send( session_idsession.id, events[ { type: user.define_outcome, description: Build a DCF model for Costco in .xlsx, rubric: {type: text, content: RUBRIC_MD}, # or: rubric: {type: file, file_id: rubric.id} max_iterations: 5, # optional; default 3, max 20 } ], )事件字段速查FieldTypeNotestypeuser.define_outcome事件类型标识descriptionstring任务本身。这就是 agent 为之工作的目标——无需单独的user.messagerubric{type: text, content}|{type: file, file_id}必填。Markdown 格式、明确且可独立打分的准则。可先通过client.beta.files.upload(...)betafiles-api-2025-04-14上传一次跨会话复用max_iterationsint可选。默认3最大20事件会被回显到事件流上并携带服务器分配的outcome_id和processed_at时间戳。仓库的 managed-agents-api-reference.md 给出了该事件的原始 HTTP JSON 形态可作为字段的对照参考{ type: user.define_outcome, description: Build a DCF model for Costco in .xlsx, rubric: { type: file, file_id: file_01... }, max_iterations: 5 }关键约束rubric是必填字段缺省会被拒绝max_iterations默认 3、最大 20事件在收到时即被处理区别于普通的user.message排队语义回显时processed_at已填充。这一点在 managed-agents-events.md 的 Receiving Events 一节有明确说明user.define_outcome、user.custom_tool_result、user.tool_result三类事件跳过排队阶段、按收到即处理并回显。用initial_events将两次调用合并为一次你可以通过将会话的initial_events数组里放入单个user.define_outcome把创建会话 发送事件两个步骤折叠成一次往返——同一事件、同一规则、一次 round trip。依据 managed-agents-core.md 的Seeding a session withinitial_events一节传入非空initial_events数组会在同一次调用中启动 agent 循环会话直接以running状态创建不会经过idle。因此如果你用initial_events启动 outcome 会话不要等待idle - running转换它永远不会发生而应检查 create 响应的status字段。同时注意以下校验规则全部为 400 拒绝该数组中超过一个user.define_outcome→ 整个 create 请求被拒绝一个user.define_outcome缺少rubric→ 整个 create 请求被拒绝整个列表超过 50 个事件 → 400超过 100 个 file-sourceddocumentcontent block → 400请求体超过 32 MB → 413。校验是全有或全无的任一事件失败整个请求被拒且不创建会话。另外initial_events只接受user.message和user.define_outcome不接受 tool-result 类事件此时还没有 agent turn 存在和user.interrupt。编写高质量 rubric明确、可独立打分rubric 是 outcome 循环的灵魂。文档明确建议使用显式、可打分的准则CSV has a numericpricecolumn而不是模糊的感觉data looks good——因为 grader 是对每条准则独立打分的模糊准则会产生噪音循环。## RubricCostco DCF 模型 - [ ] 产出文件为 .xlsx 格式包含至少 3 个工作表假设、现金流、估值 - [ ] 历史财务数据覆盖最近 5 个财年来源可追溯 - [ ] DCF 计算使用显式假设单元格WACC、增长率可被修改后重新计算 - [ ] 最终估值结果与敏感性分析表格在同一工作簿内如果一开始没有 rubric文档给出的实用建议是让 Claude 分析一份已知良好的产出物把分析结果转写成 rubric——以好结果反推验收标准比凭空设计更贴合任务。Outcome 专属事件span.outcome_evaluation_*outcome 的执行过程会出现在标准事件流上sessions.events.stream/.list与常规的agent.*/session.*事件并存。仓库的 managed-agents-events.md 的事件类型表中也列出了这三类 grader 事件。EventPayload highlightsMeaningspan.outcome_evaluation_startoutcome_id,iteration0 起始Grader 开始对第N次迭代评分span.outcome_evaluation_ongoingoutcome_idGrader 运行期间的心跳。Grader 的推理过程是不透明的——你只能看到它在工作看不到它在想什么span.outcome_evaluation_endoutcome_evaluation_start_id,outcome_id,iteration,result,explanation,usageGrader 完成一次迭代。result决定下一步行为见下表span.outcome_evaluation_end.result状态机result下一步行为satisfied会话进入idle。对该 outcome 而言是终止态needs_revisionAgent 开始另一轮迭代max_iterations_reached不再有新的 grader 循环。Agent 可能执行最后一轮修订然后会话进入idlefailed会话进入idle。Rubric 与任务根本性不匹配例如 description 和 rubric 相互矛盾interrupted只要 outcome 处于活动状态时有user.interrupt到达就会发出——即使评分尚未开始。此时outcome_evaluation_start_id是空字符串而非事件 ID因此不要不加检查就把它当查找键使用。例外在会话预算暂停状态下发送的 interrupt 会被接受并忽略见 managed-agents-events.md 的Reaching a session budget一节事件负载示例{ type: span.outcome_evaluation_end, id: sevt_01jkl..., outcome_evaluation_start_id: sevt_01def..., outcome_id: outc_01a..., result: satisfied, explanation: All 12 criteria met: revenue projections use 5 years of historical data, ..., iteration: 0, usage: { input_tokens: 2400, output_tokens: 350, cache_creation_input_tokens: 0, cache_read_input_tokens: 1800 }, processed_at: 2026-03-25T14:03:00Z }注意usage字段携带了 grader 的 token 消耗明细含缓存命中可用于成本归因与效率分析——这与事件流中span.model_request_end携带model_usage用于成本跟踪的设计是一脉相承的。检查状态与获取交付物状态流式监听或轮询两种方式要么监听流中的span.outcome_evaluation_end要么轮询会话并读取outcome_evaluations字段session client.beta.sessions.retrieve(session.id) for ev in session.outcome_evaluations: print(f{ev.outcome_id}: {ev.result}) # outc_01a...: satisfiedsession.outcome_evaluations聚合了该会话历史上所有 outcome 的评分结果便于在会话结束或恢复时做整体复盘。交付物从/mnt/session/outputs/取回Agent 在会话期间把产出文件写入/mnt/session/outputs/。会话进入idle后通过 Files API 以scope_idsession.id列出并下载。这正是 managed-agents-environments.mdSession outputs一节所描述的双向文件桥机制上传参考数据进、下载 agent 产出出。// After the turn completes, list output files scoped to this session: for await (const f of client.beta.files.list({ scope_id: session.id, betas: [managed-agents-2026-04-01], })) { console.log(f.filename, f.size_bytes); const resp await client.beta.files.download(f.id); const text await resp.text(); }关键注意点来自 environments 文档使用 session-scopedfiles.list/files.download需要满足双 beta 头要求SDK 的 files 资源默认只自动添加files-api-2025-04-14头而scope_id是 Managed Agents 的参数因此必须显式传betas: [managed-agents-2026-04-01]原生 HTTP 下则两个头都要带否则 API 可能把scope_id当作未知字段拒绝需要 SDK 版本anthropic-ai/sdk 0.88.0或 Pythonanthropic 0.92.0旧版本不类型化scope_idantCLI 目前未暴露该 flag请用 SDK 或 curl传入的 session ID 必须是sessions.create()原样返回的值如sesn_011CZx...API 会校验前缀session.status_idle与输出文件出现在files.list之间约有 1~3 秒的索引延迟遇到空结果重试一两次即可agent 要能创建输出文件其write工具或bash必须已启用。兜底方案如果 SDK 太旧或端点报错导致scope_id过滤不可用可以发送一个后续user.message让 agent 逐个read/mnt/session/outputs/下的文件并把内容作为agent.message文本返回。该方案只适用于文本文件且消耗输出 token用于应急解堵而非主路径。交互规则与常见陷阱以下规则决定了 outcome 驱动的生产级应用能否正确工作全部来自关联文档的Interaction rules pitfalls一节并与事件系统文档相互印证一次只处理一个 outcome。链式串联的方法是只有在前一个 outcome 出现终止性span.outcome_evaluation_endsatisfied/max_iterations_reached/failed/interrupted之后才发送下一个user.define_outcome。会话会在串联的多个 outcome 之间保留历史。中途引导steering是允许但可选的。你可以在 outcome 进行中发送user.message调整方向但 agent 已知晓要继续工作直到终止所以不要发送继续干之类的催促。例外会话因预算暂停、stop_reason: budget_reached时只接受 settle 事件——此时发送 steeringuser.message或链式的user.define_outcome都会得到 400见 managed-agents-events.md 的Reaching a session budget一节。user.interrupt会暂停当前 outcome。它将结果标记为result: interrupted使会话回到idle随时可以开始新的 outcome 或回到对话式交互。例外在预算暂停状态下发送的 interrupt 会被接受并忽略outcome 保持活动出处同上。终止后会话可复用。既可以继续对话式交互也可以定义一个新的 outcome。Outcome ≠ 会话创建字段。不要把outcome、rubric或description放在sessions.create()上——outcome 永远作为user.define_outcome事件发送。Idle-break 门控不变。在你的 drain 循环中继续使用event.type session.status_idle event.stop_reason?.type ! requires_action作为跳出条件——不要单独以span.outcome_evaluation_end作为门控在needs_revision时会话仍在运行单独门控会提前退出。这一点在 managed-agents-client-patterns.md 的 Pattern 5Correct idle-break gate中有完整的 TypeScript 示例session.status_idle会在并行工具执行之间、等待user.tool_confirmation、等待user.custom_tool_result时短暂出现只有带非requires_actionstop_reason 的 idle 或session.status_terminated才应跳出循环。for await (const event of stream) { handle(event) if (event.type session.status_terminated) break if (event.type session.status_idle) { if (event.stop_reason.type requires_action) continue // waiting on you - handle it break // end_turn, retries_exhausted, or budget_reached } }与事件系统的其他衔接点outcome 并非孤岛它与 Managed Agents 事件体系中的多个机制联动user.interrupt跳队语义在 managed-agents-events.md 的 Interrupt 一节说明若 outcome 处于活动状态interrupt 还会把span.outcome_evaluation_end.result标记为interrupted预算暂停时除外此时 interrupt 被接受并忽略。processed_at的特殊语义在 managed-agents-client-patterns.md 的 Pattern 2 中user.define_outcome与user.custom_tool_result、user.tool_result一样跳过排队阶段按收到即处理并回显processed_at在首次出现时已填充——如果你的 UI 假设首次出现processed_at一定是 null这三类事件永远不会清除pending状态。预算暂停边界若会话创建时设置了预算managed-agents-core.md 的Session budgets一节触顶后会话以stop_reason: budget_reached暂停只接受 settle 事件outcome 的相关行为interrupt 被忽略、steering 被 400都以此为前提。参考与进一步阅读本文基于仓库中的 managed-agents-outcomes.md 展开。Outcome 只是 Managed Agents 的一个能力面若要构建完整的生产级流程建议按需阅读以下关联文档managed-agents-core.md会话生命周期、initial_events播种、会话预算、agent 版本化与会话级覆盖managed-agents-events.md完整事件类型表、流式/轮询接收方式、interrupt 与预算暂停的边界语义managed-agents-environments.md环境配置、Session outputs 与 Files API 双 beta 头要求managed-agents-client-patterns.mddrain 循环、断线合并、tool_confirmation 往返等客户端模式managed-agents-overview.mdBeta 头矩阵、必选流程Agent 一次、Session 每次与常见陷阱managed-agents-api-reference.md原始 HTTP 事件形态与错误处理格式。Python/TypeScript/Go/Java/等语言的具体 SDK 绑定可查看对应语言目录如 python/claude-api/README.mdcURL 与 C# 的等价写法见 curl/managed-agents.md。对于超出本文的原始 HTTP 形态与多语言 SDK 绑定细节可查阅 live-sources.md 获取最新权威来源。赞分享人工智能AI 技能AI 评测【免费下载链接】skillsPublic repository for Agent Skills项目地址https://gitcode.com/GitHub_Trending/skills3/skills点击查看免费下载相关推荐Claude Managed Agents Outcomes 实战rubric 驱动的 iterate-grade-revise 自动化交付循环Claude Managed Agents Outcomes 实战rubric 驱动的 iterate grade revise 自动化交付循环 本文以 Ri人工智能大模型AI 应用移动开发交互助手Anthropic Managed Agents Java SDK 实战指南Agent 创建、会话流式驱动与凭据管理Anthropic Managed Agents Java SDK 实战指南Agent 创建、会话流式驱动与凭据管理 本文是 RikkaHub 仓库中 .ag人工智能大模型AI 应用移动开发交互助手Claude Managed Agents cURL 实战用原始 HTTP 请求驱动 Agent 会话无 SDK 环境Claude Managed Agents cURL 实战用原始 HTTP 请求驱动 Agent 会话无 SDK 环境 本篇技术指南以本仓库 claude人工智能AI 技能AI 评测上一篇D2L项目解读深度学习服务器与GPU选型指南下一篇Paper2GUI 全景指南把论文算法变成人人可用的 AI 桌面工具箱创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表