Why: The approved r0.5 design needs an auditable zero-paid execution sequence after the failed r0.4 model sample. Evidence: The approved design object is Documents 0d473fe; current source seams, file ownership, relative links, and whitespace were checked before drafting this plan. Impact: Add five test-first work units and explicit stage, budget, privacy, and stop gates. This commit contains no product implementation or model call. Refs: U3 r0.5 design; Dev task feature-fast-slow-u2-u3-plan
13 KiB
U3 r0.5:安全终态证据与可信快通道反馈
状态:书面设计已获人工评审通过。批准对象为 Documents 0d473fe866703eab32f715ddf12d1b25913b822b、Dev c7ff687c1de6911b43163433bc19e4e55df24eed;用户于 2026-10-14(Asia/Shanghai)答复“批准设计,继续实施计划”。此前用户认可的方向是“保持不完整工具流的安全拒绝,增加无原始内容或凭据的终态/传输诊断与零付费重放;快通道数字和分期归属缺少依据时标待确认”。这两次答复只授权写设计及详细实施计划,不授权产品代码、付费模型请求、合入或部署。负责人 weichen;实施候选与验收主记录为 Dev feature/fast-slow-u2-u3-plan 任务卡,历史结果见核验报告,前版见 r0.4 设计和实施计划。
目标与已知事实
用户上传材料后应立即知道“已收到、正在做什么、何处看结果”;阶段发现和最终整理仍由同一张工作卡逐级呈现,并且数量、分期、审批状态与来源一致。非专业用户默认只看简短状态、有用发现和待确认问题,不看 SSE、脚本或 token 细节。沿用左侧上下文、中间对话、右侧工作/文件,不增加页面或独立模型回合。
r0.4 唯一获批 A01 固定在 Dev d38dbdc396b7b8c6a9e34142ea8e6018abbed1fc、Backend 37e2cb7adb6202902345d38bc591e12be7aa79c0、Agent-Native a5e3c7c817166865d75b764337b15ca7d505d131。原始样本和独立只读评估(原件路径见核验报告)确认:两个付费 run、三次调用、29,062 已返回 Usage tokens;工具回合有 finishReason=tool_calls、合法 JSON 参数片段和 Usage,但解析器未观察到 [DONE],所以没有工具执行、运行中检查点或最终整理正文。三次终态的 streamComplete 均为 false,前两次纯文本仍被当作正常结束。没有保存原始 SSE,无法区分服务端未发结束标记、连接中途结束或适配器遗漏;不能把“JSON 可解析”当成完整工具调用的证明。
快通道问题中的“剩余 4 项(含 3 项依赖接口)”也没有材料依据:原文只给总 12、第一期 8、总量中接口依赖 3,未给依赖项与分期的交集。问号不撤销括号内的肯定关系。r0.3 的结构化检查点守卫没有覆盖前台自由文本;r0.4 materialStartedNote 仍要求模型即时给“初步判断、需要澄清的问题”。这条未经来源校验的可见路径必须收敛。
原候选还漏记失败子 run 的 7,148 tokens。Backend 0637547cc5640d51e2d67b65ab07b184269f8371 已在 r0.4 授权诊断范围内完成零付费修复并通过独立复审(原件 /tmp/fast-slow-u3-r04-20261014/usage-fix-final-review.md)及准确 HEAD CI;该修复晚于样本,不改写原结果,也不证明流终态或快通道质量已通过。八个相关 PR 仍是草稿,r0.4 质量出口为 FAIL。
方案取舍
| 路线 | 收益 | 代价与风险 | 取舍 |
|---|---|---|---|
| 仅修改提示词,要求模型“谨慎” | 改动小 | 前台自由文本已出现无依据归属;提示不能构成发布门禁,也不能解释缺 [DONE] |
不选 |
| 保留严格工具门禁,补不含内容的终态诊断;自动材料入口用宿主确认反馈,来源判断进任务卡 | 不执行不完整工具;即时反馈不依赖模型推断;零新增模型调用 | 暂不使缺 [DONE] 的工具请求成功;复杂材料的首条实质发现仍取决于慢通道 |
推荐 |
将“干净 EOF+结束原因+合法 JSON”直接视作 [DONE],或自动让模型补发工具参数 |
可能减少一次失败 | 缺失尾帧也可能是截断;无本次原始流可证等价,补发增加付费回合并违反停止条件 | 不选;未来如有证据须另审 |
本修订先补“为什么终止”和“哪些话可以立即显示”的可靠边界。它不是宣布供应商终态已兼容,也不以更宽松的模型质量标准换取通过。
用户可见行为与快通道边界
系统已确定性启动或复用材料整理任务时,立即由宿主在原对话给一条短确认,并保持同一张任务卡:例如“已收到 3 份材料,正在核对;有依据的发现会陆续出现在‘材料整理’中,尚不能确认的关系会明确标注”。材料数量、文件名及任务状态只能来自当前授权的附件快照与任务卡,不能由模型猜测。任务排队、已有活动任务、失败启动和已完成复用分别读实际状态,不把“已启动”发给启动失败的任务,不重派同一批材料。
对于这个自动材料入口的首个可见快通道回复,模型自由文本不作为已核对的材料结论直接流给用户。若要显示实质数量、分期、决定或跨文件关系,必须走已有来源、原句、范围和归属校验后成为 material_record/needs_user 等阶段条目;在此之前,只给宿主确认与“待确认”状态。样本中的正确表达是“总量、首期和接口依赖数量分别有记载;依赖项属于哪一期待确认”,不能写“剩余 4 项含 3 项依赖接口”。不凭单独的问号、免责声明或“可能”放行前面的肯定关系。这个选择减少即时推断,但用户会更早得到真实进度,稍后通过右侧卡片查看带来源的内容。
方案优先覆盖 系统预启动材料整理的首回合:无文字上传及达到材料阈值的文字+材料。后者原用户工作重点已由 buildMaterialTaskFor 带给慢通道;短确认应说明稍后将结合该重点汇报,而非假称当场已经回答。文字+小材料仍走普通对话与既有 stop 兜底,不把它伪装成本方案已验收的路径;实施计划须列出这一路径的风险与回归,并评估是否需要后续独立范围。原始模型候选若被抑制,不得进入用户可见事件、会话持久转录或后续模型上下文。实现时若不能保证这一点,选择直接跳过该首回合模型请求,由宿主正常落一条确认消息;不得先流出不可信片段再撤回。省略首回合模型请求是少一次请求,不是新增模型摘要或审核调用;对预算和 A01 基线的影响仍须如实记录。
后台成果不因快通道收敛而降格:首条仍须真实、短、有连续原文来源的 reading 事实,第二批是不同且有用的 crosscheck 发现,最终有准确完整正文。未验证阶段不得显示虚构的进度百分比、ETA 或“全部完成”;失败沿用 r0.4 的零成果/部分成果分流,不生成无依据的交付物选择卡。
终态诊断与安全契约
Agent-Native 是 SSE 读取与工具执行边界的所有者。保留现有规则:工具调用只有在受支持的完成原因、完整终止标记及 ID/名称/对象 JSON 参数全部满足时才交给执行器;缺 [DONE]、读取错误、取消或参数不完整时继续安全失败,已返回的 Usage 仍计入预算,不因失败自动补发请求。文本回合当前在缺 [DONE] 时可正常结束的事实需要单列诊断,不能借此推断工具回合也安全。Backend 的受控评测 wrapper 仍在终态故障、检查点拒绝、缺 Usage 或额度边界后阻断后继 provider 请求;不改模型路由、轮数、工具数、时间与输出上限。
新增有界、无内容的每次调用终态收据,与既有 runId、调用序号和逐调用 Usage 关联。字段建议为:HTTP 状态与可判定的响应完成类型、读结果(正常 EOF/读错误/取消)、[DONE] 是否观察到、最后一个 SSE 事件是否完整 JSON、已观察到的 finishReason、是否含工具片段及片段数量、参数总字节数与 JSON 对象有效性、Usage 是否出现与 token 数、最终是否放行工具。只记录枚举、计数、布尔值及受限错误类别;不保存原始 SSE、prompt、正文、推理文本、工具名/参数、API key 或请求头。不可从无内容收据反推出尾帧原文;读取错误细节需脱敏并限长,日志与归档采用任务自有权限。模型失败时诊断与失败状态同一调用保存,不让观测失败触发重试。
bufio.Scanner.Err()==nil 的 EOF 仅说明读取器没有报告错误,不证明供应商发送了所有预期事件;完整 finishReason、Usage 和合法 JSON 也不能独立补足 [DONE]。诊断先回答“解析器看到了什么、底层读取如何结束、工具是否被执行”。若零付费重放显示解析器漏认合法终止形式,或未来经单独批准的受限真实试验取得足够的供应商终态证据,才提出按路由受限的等价终态定义及正反例,回到方案评审;r0.5 本身不放宽工具门禁。
Backend 只消费 Agent-Native 的终态分类和 Usage,保留 run/card/source 版本权威;Frontend/UI 只显示“整理中/未完成/待确认”等用户可行动状态,不展示诊断字段。核心 TaskSnapshot、公开工具契约、数据库结构、权限和服务配置保持现有版本。若需持久诊断,优先落在已受控的评测记录/运行诊断面,实施计划须说明清理期限与是否需要新增内部字段;不得以完整原始流作为默认遥测。
零付费验证与阶段出口
- 传输/解析重放。 用
httptest和人工 SSE 帧覆盖有[DONE]、正常 EOF 却无[DONE]、半个 JSON 帧、结束原因与工具片段不一致、读错误、取消、缺 Usage、纯文本缺终止标记。逐一断言收据分类、工具执行次数、返回及持久 Usage、后继 provider 请求数。特别验证“干净 EOF+合法工具 JSON”仍为 0 次工具执行。 - 快通道投影。 对附件仅发送、文字+长材料预启动、排队、活动任务复用、启动失败、已完成复用分别用真实 HTTP/浏览器核对首条确认、卡片与会话转录。以 A01 的 12/8/3 和跨文档改写变体作反例,断言首回合任何可见文字均不包含未经证明的交集关系,明确标“待确认”;原用户文字仍在慢任务重点中,普通文字+小材料路径没有被误改。
- 渐进成果与失败。 零付费假流核对第一条
reading、第二批不同crosscheck、终态完整正文、零成果/部分成果失败,以及刷新、来源跳转和后台不抢阅读焦点;不能把宿主确认算成一个阶段发现。SQLite 与隔离 PostgreSQL 分别核对事件 seq、任务快照及已返回 Usage。 - 组合与审阅。 Agent-Native、Backend、适用的 Frontend/UI 和 Dev 固定准确 SHA 后做组件测试、
make test && make build、真实浏览器、独立最小重放与准确 HEAD 平台 CI。源码、收据和独立审阅按SELF/REPLAY/GATE标识;没有运行的项目写NOT_RUN。界面若确需修改,先读 DevDESIGN.md并只用@ui令牌、动效与折叠原语。
正式 A01 质量标准仍是至少两条真正有用且终态前可感知的不同阶段成果、完整准确最终正文、原文来源和数字/决定状态正确,逐调用核对实际 run ID、Usage、工具数和停止规则。宿主确认不计入两条;零付费重放只证明机制,不证明模型会完成任务。r0.4 的一次性资源已用尽;新的真实模型调用必须在本设计与详细实施计划分别获批、零付费候选固定和单独资源提案获批后才可运行。任何安全、语义或质量 FAIL 保持八个 PR 草稿,不进入阶段 7、合入或部署。
风险与待评审决定
- 诊断不等于修复供应商行为。 当前原件缺原始 SSE,因此只能证明“未观察到
[DONE]”;本版保守失败可能继续导致零阶段成果。是否再做受限供应商探针或提出等价终态,必须依据新证据和单独资源审批,不在本设计中偷渡。 - 快通道即时信息减少。 宿主先确认真实状态,实质判断等来源核验后再上卡。若用户更看重未经核实的即时概览,需要另行决定风险,而不能把模型自由文本称为已核对结论。
- 首回合跳过/隔离的实现选择。 两者都不得让候选文本先进入事件或持久转录;实施计划应以最小零付费探针比较对已有会话、通知、计费、重入和用户文字重点的影响,推荐更小且可证明的路径。若探针显示需要改变公开消息契约或异步所有者,返回设计评审。
- 范围边界。 本版优先关闭预启动材料入口的快通道错误;普通文字+小附件问答仍需单列验证,不从 A01 推断全路径正确。若评审要求覆盖该路径,应在计划前扩展设计和验收矩阵。
请人工重点审阅:是否接受“先可信确认、实质判断稍后上卡”的体验取舍;是否同意缺 [DONE] 的工具流继续严格拒绝,并先以无内容诊断求证;以及短文字+小材料是否纳入同一增量。书面设计批准后才写详细实施计划,批准计划后才进行零付费代码实施;真实模型资源仍单独批准。