一次请求先拥有身份,再拥有答案

在 2026-09-08 本地基线 c1609dd12523e780149ec7ac546a34509f907757,认证请求准入形成私有 answer_execution_request/v1 与追加事件,先绑定准确的用户消息身份,之后才运行。它不是永久公共知识记录,会随所有者的对话删除或保留期到期一起清理。1

admitted -> queued -> running
                    -> completed + exactly one outcome
                    -> stopped / failed / throttled / rejected

只有 completed 执行有四种封闭 outcome 之一。停止、失败、限流或拒绝没有伪造的“完整答案”。本次未重跑上游测试或网络故障验收,以下是源码与合同解析。

QCS 和消息绑定一起防止回答串线

每次执行保存归一化问题、QCS、条件来源及精确消息绑定。继承上一轮条件,是为新问题生成新 QCS;不是重用上一轮身份,更不能从另一个会话继承。1

完成记录包含答案文本、outcome、证据集合、ordered item、snapshot 和 knowledge-version 身份。ChatMessage.answer_execution_id 只是可变查找索引,还须验证不可变绑定;清空索引不能绕回宽松的 legacy trace 路径。

这种设计多存了关联事实,但能区分另一条消息、同一问题重试与同一答案不同投影。仅比较正文相似或展示编号相同,不足以证明属于同一次执行。

普通响应与历史校验,而不是重建含义

ChatService 从保留结果形成公开消息,校验正文、outcome、evidence summary 与冻结记录一致。历史不重新检索、不调用 Provider、不重新选择引用,也不从 gate flag 或来源数量推断结果。2

保存事实投影负责什么不允许做什么
完整答案和 outcome呈现准确结果根据文案猜成功或不足
QCS 与来源执行显示适用条件用新条件改写旧结论
证据集合及引用身份打开当时依据用当前搜索结果替换
assistant binding确认消息归属只信任可变索引

当前 generation_unavailable 的公开闭合投影没有知识主张、引用、source 或 evidence preview。内部保留证据身份说明尝试边界,不是让界面把失败包装成答案。1

SSE 有进度,但正文仍不是 token 透传

当前入口可以先保留 assistant identity 并发送阶段进度。正文仍在执行形成并持久化闭合结果后,经 refresh_pending_stream_message() 得到投影,再按 28 字符分块发送。3

admission + stream_delivery_pending
  -> progress / stage events
  -> closed answer execution persisted
  -> frozen execution + outcome + content chunks
  -> evidence summary
  -> done frame
  -> transport observation and finalization
  -> stream_delivery_completed

进度改善了等待的可解释性,但不能写成 Provider 实时 token 流。stream_delivery_completed 也是服务端传输观察,不证明用户实际看见、理解或阅读了内容。

done 不能由应用生成器提前认领

终态必须是完整 framing 的 event: done,payload 为原样 [DONE]。缺失、重复、矛盾终态,或终态后又出现语义帧,都会破坏完成投影。外层 ASGI observer 在 terminal body 成功写出并完成响应收尾后,才追加 delivery completed。134

连接中断留下 interruption。当前合同对 pending 或 interrupted 的完成执行采取保守投影:刷新或历史不能直接展示为完整回答,也不改写原闭合结果为“证据不足”。

这是一次取舍:历史可能出现需要处理的应用失败,而不是顺滑地显示一份服务器已有的答案;换来的是不同出口不对同一交付作出矛盾的成功承诺。

兼容 trace 不再拥有回答语义

对于绑定新执行的消息,rag_trace 只保留有界操作诊断,不保存问题、QCS、答案预览、证据正文或完整 Provider envelope。结果读取不依赖它。旧消息在保留期内通过限定兼容投影读取,不能因此成为新式 Answer Execution。12

管理员诊断也不等于用户私人会话。删除和保留期清理使用执行锁与会话锁协调准入和事件追加,避免只删一半留下孤立私有记录。这是应用边界,不是任意数据库操作者都无法读取数据的沙箱保证。

撤回通过追加事件改变可见性

来源 tombstone 可以追加 evidence-redaction 事件。历史摘录隐藏,但原集合、item、snapshot 与 knowledge-version 身份保留,不把旧答案换成新来源。完成与撤回锁住相同文档,处理生成期间来源已撤回的竞态。1

“不变”指原执行事实不可重写,“不可见”指后来的公开投影规则。两者不冲突,也不证明日志、备份和用户过去取得的副本都被物理擦除。

用户最终能够信赖什么

目标是每轮问题有可检查的条件,每条成功建议有固定依据;重载不会更换引用,失败不被翻译成貌似正常的答案,撤回说明依据已不可用。

实际可靠性还须跨普通接口、SSE、刷新、历史、取消、删除与角色边界验证。当前集成测试包含多种反例,但文章不把静态阅读计为本次 PASS,更不推导所有网络环境已验证。5

来源与范围

问题如何获得证据见证据执行全文,来源生命周期见知识发布全文。评测证据全文区分代码断言、历史运行和目标效果。

参考资料

  1. 闭合执行与私人对话合同。 ↩ ↩ ↩ ↩ ↩ ↩

  2. 消息绑定与投影校验。 ↩ ↩

  3. SSE 分块与交付生命周期。 ↩ ↩

  4. 外层 stream delivery observer。 ↩

  5. 闭合执行持久化集成测试。 ↩