结构化生成恢复

共享 Agent 与 Runtime 调用的实现契约。产品行为与证据分别记录。

输出参数

Workflow 执行默认不设累计 token 配额。用户显式限制仍具约束力。上下文预留是规划估计,不是 provider 输出上限。默认请求使用受可用上下文约束的模型输出容量;显式限制经过验证,不静默缩减。未知模型限制仍由适配器处理。正常模型推理不能仅因耗时较长而判定超时。

失败处理

失败处理
结构化输出长度截断从最后一个完整工具边界进行有界重新生成;不得执行不完整工具参数或拼接部分 JSON。
无效 JSON 或 schema 值在同一恢复额度内进行有界修复。
暂时传输故障遵循 provider 分类和 Retry-After;不叠乘重试额度。
取消、拒绝、无效配置不自动重试。
外部操作结果未知重复产生副作用前先核对实际状态。

默认恢复允许额外尝试两次。显式设为零禁用修复。每次重试通过现有结构化输出与执行流事件报告原因和尝试标识。重新生成指令请求完整值,并排除无效的部分候选。已完成工具结果保留在上下文中。达到模型容量时,由 Workflow 显式进行特定任务分解,不由通用运行时猜测。

持久化与可观察行为

必须区分实际请求、生效参数、停止原因、可用用量数据和重试。未知用量保持未知。错误路径保留元数据,不要求保留推理或敏感的部分文本。暂停与正在重试是不同状态。重启和副作用核对由现有持久执行与副作用记录负责,不引入并行调度器。

报告 Workflow 各阶段保留已确定范围、提供材料、检索证据和已验证草稿。纯文本 resume_task 是重启请求,不是持久续执行。验收仅观察页面并准备本地草稿,不发送报告。

实施顺序与验收

  1. 通过 agent_loop 和 Runtime 公开调用复现截断。
  2. 分离请求输出限制与压缩预留。
  3. 恢复结构化截断而不重放已完成工具;验证同步与异步调用。
  4. 整合实际请求诊断与共享恢复计数。
  5. 按现有执行生命周期验证持久报告阶段及 UI。
  6. 先进行独立规格和质量审查,再运行最终受影响检查。
限定任务说明与检查清单

主要文件:context/request_compaction.py、agent/agent_loop.py、providers/structured_output.py、agentic_programming/runtime/providers.py 和 execution.py、provider 重试工具及现有流持久化。排除无关 provider 重写、权限修改和远程发布。

测试顺序:先针对性回归,再运行 tests/unit/agent/execution、tests/component/programs/tools、tests/component/context、tests/component/providers、tests/contracts、文档链接检查和 git diff --check。修改其他生产边界时扩大受影响测试范围。必要场景包括首次截断后成功、恢复耗尽、混合失败计数、取消、不重放已完成工具、显式输出上限、默认模型容量、上下文合法性、缺失终止事件、重启及未知外部副作用核对。真实报告验收与模拟 provider 测试保持独立。

EOF 恢复与终态

结构化流结束但没有终止事件时,消耗与长度截断相同的恢复额度。不得提交或执行部分内容。结构化恢复耗尽后,在错误进入 Runtime 持久化之前标记为暂停;取消标记为 cancelled。正常返回本身不能证明生成成功,以规范执行状态为准。公开入口验收覆盖空 EOF、部分 EOF、混合验证失败、禁用恢复、取消和不重放已完成工具。

修复检查:结构化流测试、受影响 Agent 执行、provider 工具、Runtime 工具与上下文组件、仓库契约、文档链接及 diff 检查;在当前 main 快照本地集成,随后验证已安装 App 源码。

浏览器 Workflow 可靠性

浏览器阶段仅暴露真实 web_use 工具,并采用基于 command 的 schema。检查必须基于真实浏览器观察;文本 JSON 示例不是工具回执。提示词依据当前工具契约描述 list_pages、observe 和 act。缺少工具、登录或权限失败保持为显式失败,不授权其他传输方式或写入。

Workflow 启动时有来源窗口但未绑定 Page,调用 web_use(command="list_pages") 时保留来源上下文。在子进程中,Page 清单通过父进程 webtab 桥接获取,仅接受来源窗口及该次执行获准的绑定。子进程维护自己的 Page token 注册表,并在同一进程中使用 token;token 不在父子注册表间转移。没有授权来源上下文时,不回退为列举所有桌面窗口。

通过 web_use 自动打开 URL(包括直接 MCP 入口和页面恢复)时,显式通过 Resources 创建后台 Page。不依赖前台聊天路由、已挂载 Browser 面板或已有页面。窗口注册和原生 Page 目标可用性属于不同失败阶段。直接 MCP 入口将显式浏览器失败结果保留为 ToolReturn(is_error=True);HTTP 派发成功不意味着浏览器操作成功。验收从空页面清单开始,无需手动创建 Browser 即可打开并观察 URL。

Desktop 桥接在启动和重连时立即注册确切窗口标识,然后才等待保留视图或资源恢复。恢复完成后可以重复幂等注册。等待恢复不得阻止 Workflow 打开首个页面。注册不得选择其他窗口或扩大归属范围。

desktop_unavailable 表示 worker 当前无法使用已注册 Desktop WebTab。它不同于模型模仿工具调用的响应,也不同于浏览器页面网络或文档内容问题。已安装默认服务只有在公开 /api/web-use 边界列出并观察页面、返回标题和观察标识,且未提交或保存外部记录后,才算通过验收。

观察到的失败要求行为验收
模仿工具调用的文本拒绝将其作为检查证据;通过经过验证的公开工具边界取得真实观察。未观察验证的声明不得触发表单操作。
重复模型输出在不设总 token 或总时长配额的情况下检测病态重复输出;仅停止失败响应,保留已完成工具轮次。恢复使用共享失败额度并公开原因。重复流可恢复;正常长输出可完成;取消和恢复耗尽仍为失败。
固定浏览器阶段截止时间移除任意设置的 Workflow 总体限制。保留单次浏览器操作边界、调用方取消、用户显式限制和失败重试计数。检查和写入不使用硬编码 300/600 秒累计截止时间。
异常转成成功文本让类型化错误通过 Workflow 和 dispatcher 传播。即使 Python 正常返回,Function DAG 持久化及子进程 IPC 也保留失败的 ToolReturn 和 AgentToolResult。未知写入结果属于不可重试失败,再次写入前必须观察,不得视为成功返回或重复操作许可。公开函数节点以 error 结束;失败诊断保留已完成的同级结果。

修复使用现有 Agent 恢复和执行生命周期原语。不引入第二调度器,不从字符串推断持久检查点,不绕过浏览器权限,也不在验收时自动提交报告。新建持久报告状态机不属于此次修复;在存在显式持久步骤前,失败必须如实保留。

修复说明与验证清单

文件:共享 Agent 流式/恢复边界及测试;独立 personal_weekly_report 和 weekly_report 包及其浏览器提示词、异常路径和公开入口测试。先建立失败回归,再运行受影响 Agent/provider/runtime/report 测试、仓库契约、完整 Python 套件、文档链接及 diff 检查。最终验证前进行独立规格审查和新的质量审查。使用 refresh-local-app.sh 安装经审查的 main 修订,确认默认 18100 浏览器能列出、打开和观察页面,不提交或保存任何外部记录。浏览器/provider 实机验证与确定性测试分开。

实现包含浏览器来源转发、Desktop 窗口立即注册、重复响应恢复、工具回执保留和真实错误传播。公开回归覆盖这些边界。报告写入要求真实观察到的保存/提交操作,以及对应操作后观察中的明确成功证据;显式失败或缺少确认仍属于结果未知、不可重试的状态。独立报告包维护各自修订。审查结果、完整验证和已安装修订记录在任务交接中;仅通过确定性检查不能证明线上外部写入成功。

模型路由与组报告恢复

订阅 provider 必须在请求正文与路由头中保留显式选择的模型标识。Grok 代理通过 x-grok-model-override 路由;具名模型不得静默替换为 grok-build。显式选择的别名仍保持别名。原生函数调用仅从 provider function-call 事件执行,不解析模仿工具的普通文本。

read 工具将显式 null offset 或 limit 视为省略分页参数。严格工具 schema 将可选字段表示为必填但可空字段,因此此边界仅在选择文本或 PDF 处理前规范化这两个读取参数。文本默认仍为第 1 行、2000 行;PDF 默认仍为第 1 页、20 页。显式数值分页不变。不引入全局 null 移除或权限修改。公开适配工具回归对文本和 PDF 输入验证严格 schema 参数。该兼容缺陷已独立复现,但尚未证明是历史组报告失败原因。

目标恢复契约将 provider 派发次数作为诊断信息,而非第二套失败额度。结构化验证、重复输出和暂时传输恢复消耗现有调用内恢复状态。成功工具轮次不消耗失败恢复。provider 请求经暂时传输重试后成功,会把这些重试归还给恢复状态:传输恢复按单次请求计限,结构化与重复输出修复仍在整个调用内累计,长 Agent 循环不会因为前面请求已经恢复过的网络抖动而提前结束。取消、调用方显式截止时间和不可重试外部副作用仍有约束力。恢复耗尽时保留原始原因和终止恢复阶段。

当 provider 无法精确表达所需 schema 时,组报告解析可以使用基于提示词的 schema 验证。实机验收使用只读工具验证该实际模式,不仅验证更简单的原生 schema 请求。Runtime 错误作为执行错误传播,不转为成功的 BLOCKED 字符串。成员归属确实缺失时仍应请求澄清,不得编造作者。生成本地草稿不授权发送消息或外部提交。

验证覆盖真实 provider 路由对比、原生只读工具调用、原始提供材料解析,以及使用明确归属测试数据生成完整本地草稿。确定性公开 Runtime 测试覆盖组合传输与格式修复、恢复耗尽和已完成工具保留。最终完整验证及安装前进行独立规格与质量审查。权限策略修改和无关 UI 重设计不属于此次修复。

实现状态

AgentSession 在每次自动重试前预留现有调用内恢复状态。因此,传输和格式恢复共享一个失败恢复计数。有此状态时,它是会话唯一重试计数依据:较大的调用方恢复额度不会遭遇隐藏本地重试上限,也不会重启已完成工具。仍遵循显式禁用重试。恢复耗尽后保留原始 provider 失败,并标记 transport-exhausted,使 Runtime 无法重启整个调用。已完成工具结果保留在同一个 AgentSession 上下文中。没有外层恢复状态的独立 AgentSession 调用方保留现有重试设置。公开 Runtime 回归覆盖内部错误与无效 JSON 组合、超出独立调用限制的恢复、耗尽及已完成工具只执行一次。兼容请求计数器仍存在,本页不声称已移除。独立规格与质量审查、完整自动验证及真实 provider 只读验收记录在任务交接中。

本地实现包括共享恢复计数、输出上限分离、结构化长度截断与 EOF 重新生成,以及 paused/cancelled 失败状态。公开入口回归覆盖空和部分 EOF、耗尽、取消、保留已完成工具、拒绝部分工具参数及返回的 provider 错误。周报配额移除和解析检查点由独立 Workflow 包维护。真实端到端周报提交仍不属于只读验收;单元/组件检查不能证明外部写入结果。本地 main 集成、默认 App 浏览器验收和已安装运行时验证分别记录在任务交接中。