十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

DeepSeek-Reasonix 读取证据生命周期:分页、源版本观察与写入授权三分离机制详解

DeepSeek-Reasonix 读取证据生命周期:分页、源版本观察与写入授权三分离机制详解 DeepSeek-Reasonix 读取证据生命周期分页、源版本观察与写入授权三分离机制详解【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Reasonix导读本文以 DeepSeek-Reasonix 仓库中 docs/READ_EVIDENCE_LIFECYCLE.zh-CN.md 为骨架完整讲解该项目如何把「分页pagination」「源版本观察observed source versions」与「写入授权write authorization」拆解为三种相互独立的事实并以回执receipt、源令牌source token、操作账本operation ledger等机制端到端守护一次编辑从读取、落地到验证结算的完整生命周期。读完本文你将掌握读取协调器如何记账与续读、操作状态机的全部状态与转移规则、拒绝诊断的机器可执行恢复协议以及新旧版本数据的双向兼容契约并能在源码层面定位每一处机制的实现文件。本文继承并扩充了原文档的全部契约表、状态清单与兼容矩阵并补充了 internal/readcoord/coordinator.go、internal/evidence/operation.go、internal/evidence/receipt.go、internal/tool/operation_diagnostic.go 等源码级证据供读者对照验证。一、设计前提三件独立的事实原文档开篇即点明核心立场分页、源版本观察与写入授权是不同的事实Pagination, observed source versions and write authorization are separate facts。这一划分是整个读取证据体系的地基分页事实模型是否真的读完了一个文件的全部行、读到哪个范围、是否触及 EOF。源版本观察事实模型展示给它的内容是哪一个快照snapshot该快照在写入执行时是否仍然有效。写入授权事实模型声称的基于某次读取的编辑是否真的有那次读取作为证据支撑以及该次写入是否已被验证覆盖。三件事互相独立意味着读了几页不能自动推导出源版本没变源版本没变也不能自动推导出写入被授权。DeepSeek-Reasonix 用四个运行时归属方分别管理这些事实见下表。二、运行时归属四个组件各管一摊归属契约readcoord记录范围ranges、源快照source snapshot、EOF 与续读预算continuation budget。普通inspect/range缺口不阻塞终答finalization已附加的 Stop 仍会阻塞。观察账本observation ledger记录已送达行的哈希及序号。同批次provider batch内的读取不授权写入。去重逻辑在旧观察早于最近一次写入时重新送达原文re-deliver text。操作守卫operation guard冻结每个被拒操作的目标、版本、范围/哈希与 provider 边界。不再重放旧替换参数来清除拒绝状态。操作账本operation ledger端到端拥有一次意图变更支撑它的读取、落地它的写入、结算它的验证以及失败时的有界恢复预算。其中readcoord对应源码包 internal/readcoord其核心是Coordinator结构体见 internal/readcoord/coordinator.go负责登记需求Begin、折叠观察Observe、施加预算策略enforcePolicy并发布状态转移Transition操作账本对应 internal/evidence/operation.go 中的OperationLedgerinternal/evidence/operation.go它区分于回执列表回执记录发生了什么操作记录意图是什么、是否结束。readcoord 的续读预算Policyreadcoord用Policy限制一次逻辑读取的自动续读internal/readcoord/coordinator.go参数默认值含义MaxPages64单次逻辑读取最多自动续读 64 页MaxActiveTime120s单次逻辑读取最多累计 120 秒活动读取时间PivotAfter2连续 2 页无进展触发一次策略切换建议pivotPauseAfter2切换策略后再停滞 2 页则暂停读取预算一旦触顶读取进入StateBlocked并附加带Code与Recovery提示的Block如page_budget、time_budget、no_progress见 internal/readcoord/coordinator.go。关键约束是内容版本变化不会重置预算只有满足satisfied或取消cancelled才会结束预算并且不同内容版本的碎片永远不会被拼接成一条覆盖声明——版本变化会清空已累计的Covered区间internal/readcoord/coordinator.go。操作账本的稳定身份OperationID操作的身份来自这次调用要做什么——真实目标与参数而不是 provider 每轮的 call ID。源码中OperationID由toolName与规范化参数canonicalArguments做 SHA-256 派生internal/evidence/operation.go键序、空白等纯外观差异不会把一个操作拆成两个因此同一处编辑换新 call ID 重新提交仍会被识别为同一个操作。同时source_token、receipt_ids、call_id、cursor等执行级字段会被从规范化参数中剔除internal/evidence/operation.go确保一次执行的句柄不会绕过操作的恢复预算。三、操作生命周期七个状态与两个终态一次操作的状态为prepared已准备、applied已落地、verification_pending待验证、settled已结算、failed失败、unknown未知与needs_user需要用户。其中settled与needs_user是终态不会二次转移源码Terminal()判断见 internal/evidence/operation.go。状态机的要点模型永远不能直接写状态源码注释明确every transition is a real tool result即每个转移都必须由真实工具结果驱动完成声明completion claim永远无法移动一个宿主未曾观察到的操作internal/evidence/operation.go。普通任务按真实工具结果结算写入落地Apply后进入applied成功验证按目标路径覆盖绑定AttachVerification后进入settledinternal/evidence/operation.go。只有交付底线delivery floor会保持变更开放直到覆盖其路径的验证通过为止。未结算unsettled即改动了东西却没到终态的操作会出现在 Delivery gap 列表Unsettled()internal/evidence/operation.go。恢复预算两次相同失败是循环不是自我纠正operationRecoveryBudget 2internal/evidence/operation.go同一个操作以相同失败代码失败第二次时宿主停止提供自动恢复将其置为needs_user并拒绝再次执行它Fail逻辑见 internal/evidence/operation.go。只有真实的新信息才会开启新的恢复轮次epoch源版本变化source version changed新证据fresh evidence成功写入使原源失效a successful write superseding the source用户开启新一轮对话a new user turn。源码中的NewEpochinternal/evidence/operation.go会清空该操作的失败计数、重置恢复次数并把needs_user/failed重新拉回prepared或applied。只有宿主拒绝会消耗这份预算真正执行并报告失败的工具属于信息information仍由既有的重复失败与循环守卫处理。旧要求的退役原要求被证据满足、新观察确认不同版本或不存在、或完成的写入使旧操作失效时结束retire旧 requirement。未来每次写入独立验证当前目标。预检缓存键memo key包含调用 ID、工具名、参数及观察边界随批次结束清理延迟清理只移除完全相同的 requirement keyinternal/readcoord/coordinator.go 中的Begin展示了要求注册与覆盖保留逻辑。四、回执与源令牌精确引用拒绝文本猜测回执Receipt与源令牌Source Token每个成功的工具结果都会带上宿主自己的回执 ID形如[receipt r_1a2b3c4d]read_file结果额外带上它的源令牌[source_token r_…]——同一个 ID用作它所展示版本的句柄complete_step接受receipt_idsedit_file、write_file与multi_edit接受可选的source_token。源码中回执模型为 internal/evidence/receipt.go 的Receiptinternal/evidence/receipt.go记录工具名、参数、成功与否、命令、路径、输出字节数与输出摘要OutputDigest、退出码与验证分类ReceiptRefinternal/evidence/receipt.go是有界、模型安全的投影——只够按 ID 引用事实不足以泄漏本地路径、内部状态或原始输出。回执按工具结果归类为read/mutation/verification/review/commandReceiptKind*常量与Kind()见 internal/evidence/receipt.go 与 internal/evidence/receipt.go命令只有在宿主识别为验证器时才被归类为 verification未分类的命令保持为 command记录成功而非拒绝。写工具侧citedSourceToken从参数中提取source_token并由checkCitedSourceToken对照观察账本解析见 internal/agent/source_token.go。引用 ID 是精确的重打命令文本不是匹配模型重新键入的命令文本不是证据少一个cd前缀、换一种引号风格、调换一个参数顺序或换一个工作目录都会让真实跑过的验证被拒。命令文本仅作为未提供 ID 时的兼容路径保留其余场合只用于展示这正是ReceiptRef.Summary被注释为 display-only绝不能作为身份键 的原因见 internal/evidence/receipt.go。源令牌的核对与引用可选性被引用的源令牌会与宿主自己的记录核对。指向另一个文件、更旧的快照、只覆盖本次写入所替换内容一部分的窗口或宿主从未签发过的令牌都不构成证明会带着具体恢复动作被拒绝一次。引用是可选的不带令牌时既有的快照匹配仍然权威普通的读后编辑路径保持不变。intentfull只有显式参数才建立全文终答约束只有显式工具参数intentfull建立全文终答约束不机械验证自然语言声称也不解析其生成新约束普通终答成功不是全文审查证明全文要求必须到达已验证 EOF或者在既有预算内暂停定向搜索/读取策略回执不能证明全文已读完。源码侧evaluateWholeFileinternal/readcoord/coordinator.go印证了这一严格性全文读取只有可信源结束 从第 0 行起在同一版本上连续覆盖才算满足缺少 EOF 或SourceEnd时一律StateNeedsMore。而inspect意图下一个有界页面即完成要求文件剩余内容不是未偿债务internal/readcoord/coordinator.gorange意图则需要覆盖请求区间或在 EOF 落在请求窗口内时以已验证 EOF 满足internal/readcoord/coordinator.go。五、写入边界在既有安全边界内收紧证据原文档强调本次工作不放宽权限或沙箱边界does not relax permission or sandbox boundaries承接 #9966/#9992 的读取证据工作并处理 #9994/#9995 的重复编辑报告。具体写入边界如下编辑使用实际预览的受影响范围和源身份执行时再次核对。没有完整版本身份的有界窗口可以用当前行哈希证明局部范围但不能跨版本拼接也不能证明整文件覆盖。全文件替换需要当前完整证据或既有宿主记录的重建授权。创建绑定确认不存在预检后、执行前出现的文件不会被直接覆盖。既有锚定删除保留 anchor audit不新增delete_file工具。移动保持原始字节包括二进制文件验证宿主观察的源身份不要求文本覆盖。目标及平台移动检查保留原实现不宣称在最后身份检查之后还能对任意外部写进程提供原子 CAS。纯元数据形式的git commit -m不要求正文证据可能修改正文的形式保持保守。共享分类器识别git --no-pager diff/status/log重定向、外部 diff 和任意-c覆盖不获得只读豁免。本次仅证明字面量echo/printf输出重定向的写范围。不相交目标不继承另一文件的阻塞。脚本、动态展开、通配符目标、命令链、hooks 和未知范围仍不透明opaque。缺失证据的预检拒绝允许同批次内已预检通过、不相交的单文件写入继续。已经执行的失败、hooks、不明确范围和有依赖的验证保留原有依赖屏障。六、恢复与兼容机器可执行的拒绝协议诊断码全集诊断使用以下 11 个机器可读代码源码常量定义见 internal/tool/operation_diagnostic.go诊断码语义READ_PARTIAL读取不完整READ_CURSOR_INVALID续读游标无效READ_SOURCE_CHANGED读取期间源版本变化READ_HARD_STOP硬停止预算耗尽等WRITE_EVIDENCE_MISSING写入缺少证据WRITE_EVIDENCE_STALE写入证据已过期WRITE_TARGET_ABSENT写入目标缺失WRITE_TARGET_AMBIGUOUS写入目标不明确VERIFICATION_RECEIPT_MISSING引用的验证回执缺失VERIFICATION_RECEIPT_MISMATCH回执存在但不覆盖该操作OPERATION_NEEDS_USER操作移交用户诊断携带可得的路径、操作、版本/范围及恢复信息不携带文件正文。对应的OperationDiagnostic结构internal/tool/operation_diagnostic.go明确是无正文、宿主专有的恢复元数据绝不可作为授权依据也不可从模型书写的文本中重建。封闭动作集合模型只需选择不必猜测措辞拒绝是机器可执行的而不是自然语言建议它会列出真实存在的回执 ID、宿主接受的封闭动作集合以及剩余重试预算。宿主接受的封闭动作源码常量见 internal/tool/operation_diagnostic.go动作含义use_receipt:id引用某个真实存在的回执 IDreread_target重新读取目标run_verifier运行验证器mark_manual标记为人工处理abandon_edit放弃该编辑ModelFacing()方法将这些选项渲染为紧凑 JSONrecovery: {...}含code、operation_id、path、available_receipts、allowed_recovery、retryable、retry_budget模型从中选择动作即可不必猜宿主接受哪种写法。预算耗尽后该操作连同下一步动作交给用户而不是再退回给模型下一步动作是continue_verification继续验证已暂停的操作则是resolve_with_user由用户裁决。交付底线之外的complete_step只是注释在交付底线之外complete_step是一条注释evidence 可选宿主无法确认的内容随签收一并报告而不是拒绝参数结构仍然校验宿主不认识的成功命令在两种模式下都记为未分类——各项目本就通过 Makefile、包装脚本和私有脚本做验证——同时交付门禁仍独立要求已识别的验证变更才能终答。双向兼容矩阵数据新版本读旧数据旧版本读新数据Read envelope v2保留字段语义协议不变分页文本同时接受旧尾标及PARTIAL view仅显示文本可选tool_diagnostic缺失安全忽略未知可选字段LocalOnlyread_completion缺失安全仅供诊断既有孤立工具哨兵防止进入模型请求Read status verdict、pause code/snapshot原有 State/Reason 可用忽略可选字段被拒操作及预检缓存新 Run 为空不持久化、不迁移操作账本、回执 ID、源令牌按轮次作用域新一轮为空不持久化、不迁移complete_step.receipt_ids、写工具source_token可选不填保持原行为忽略未知可选属性诊断中的恢复字段缺失安全忽略未知可选字段语义澄清与 Schema 变更partial_read_sufficient表示允许终答不表示宿主验证了模型理解原始会话中的覆盖回执仅用于诊断不能授权恢复后的写入模型与压缩投影剥离这些字段完整短文件字节不变部分结果及追加续读提示文本会变化complete_step不再要求evidence并新增receipt_ids文件写工具新增可选source_token这些 schema 变更在升级时改变一次稳定系统前缀会话内前缀仍逐字节稳定这对依赖前缀缓存prefix-cache的 DeepSeek-Reasonix 至关重要——正是项目简介中围绕 prefix-cache 稳定性设计、保持运行的工程含义。七、可观测性无正文计数器与真正的问题答案状态转移会向愿意接收的 sink 发布无正文计数器源码常量定义见 internal/evidence/operation_audit.go计数器含义operation_settled_total操作结算次数operation_needs_user_total操作移交用户次数operation_recovery_attempt_total自动恢复尝试次数operation_duplicate_block_total重复操作被拦截次数verification_auto_attached_total验证自动绑定次数verification_unclassified_total未分类命令次数read_source_changed_total读取中源版本变化次数complete_step_optional_call_total可选式complete_step调用次数它们只携带宿主标识不含路径、参数、命令或工具输出。真正回答这次改动是否奏效的是三个派生指标同一操作的平均恢复次数average recoveries per operationneeds_user占比theneeds_usershare未分类命令占比the unclassified-command share。八、验证矩阵回归覆盖与证据分层回归覆盖范围回归测试涵盖三次连续编辑/重读/重试循环旧锚点变化确认删除confirmed deletion源版本/存在性竞态冻结批次边界不相交写入不透明 shellopaque shell阻塞部分/全文终答Stop 优先级元数据投影。对应测试可进一步查阅 internal/evidence/operation_test.go、internal/agent/operation_lifecycle_test.go、internal/readcoord/coordinator_test.go、internal/agent/read_pipeline_regression_test.go 与 internal/agent/live_read_evidence_matrix_test.go 等。真实 Build 回归从 #9992 的测试改进而来的真实 Build 回归在临时仓库暂存文件、读取大文件、提交并验证真实的 Git commit——用真实仓库操作而不是桩数据来验证提交并验证链路。证据分层本地测试、race 检查、lint 与交叉编译属于第一层证据必须与以下第二层证据分开报告远程 CI、Windows 原生交互以及真实供应商live-provider资格验证。两层证据不可互相替代。九、总结以证据链终结重复编辑循环DeepSeek-Reasonix 的读取证据生命周期把一次编辑拆成三条可独立验证的事实链readcoord记账读取覆盖与续读预算操作账本端到端拥有意图变更回执与源令牌提供精确可引用的证据句柄。其设计精髓在于身份与执行分离操作身份派生自要做什么与 call ID 解耦使重复提交可被识别同时用规范化参数防止外观差异伪造操作。恢复有界且由用户终裁同一失败两次即needs_user预算耗尽移交用户只有真实新信息开启新恢复轮次。拒绝可执行封闭动作集合use_receipt:id/reread_target/run_verifier/mark_manual/abandon_edit取代了再试一次式的自然语言建议。兼容保守新旧版本数据双向兼容矩阵完整schema 变更只改变一次稳定前缀会话内前缀逐字节稳定不破坏 prefix-cache 稳定性。写入边界不放松在既有权限与沙箱边界内收紧证据要求杜绝 #9994/#9995 报告的重复编辑与旧替换参数重放。对于希望深入源码的读者建议从 internal/readcoord/coordinator.go读取协调、internal/evidence/operation.go操作生命周期、internal/evidence/receipt.go回执模型、internal/tool/operation_diagnostic.go诊断协议与 internal/agent/operation_lifecycle.goagent 侧接线五处入口开始配合各自对应的*_test.go验证矩阵即可完整还原这套以证据为中心的读写治理体系。【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Reasonix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表