context-infra 检查与复盘infra.guiming.net · 全内容自包含呈现 · 生成于 2026-07-21 16:28 UTC

locate/read 两阶段正交

Z2 条目↑ Z1 版块 ↓ Z3 全文

方法论道层 · context-infra 处理逻辑

← 返回方法论区 · context-infra 处理逻辑 →

locate/read 两阶段正交

viewtype=流程图 · 答:locate 与 read 为什么要正交分离 · 不答:具体 agent prompt

病根:conflation定位与阅读压进同一 agent passlocate 阶段枚举先行 · 方向 cap=5 · 召回 oracleread 阶段深读 + 动态增派独立判级交叉验证 / solid-decision / 对抗 skeptic晋升 workflow_recall_first_locateCodex 反转证伪后:结论 = model × task 条件性viewtype=流程图 · 答:locate 与 read 为什么要正交分离 · 不答:具体 agent prompt原问题两阶段/判级已晋升
真源:contexts/methodology/locate_read_two_phase_info_collection_20260530_manual.md §4

信息收集的定位与阅读分离

真源路径:contexts/methodology/locate_read_two_phase_info_collection_20260530_manual.md · 图型:流程图 · 域:context-infra 处理逻辑


真源正文

报告元数据(frontmatter)
name: locate_read_two_phase_info_collection_20260530_manual
description: 定位/读取两阶段收集
domain: infra
consumption:
  surface: memory_index
  trigger: "记忆索引召回"
  consumer: orchestrator
status: library
promoted_to: rules/skills/drafts/workflow_recall_first_locate.md

信息收集 face 的 locate / read 两阶段正交机制:诊断与设计

2026-05-30。Opus 亲写最终综合,证据来自一次自演示 workflow(locate 内联 → budget 受限的 7 路深读 + 2 路冗余增派 → opus 交叉验证 + solid-decision 判级 + 3 路对抗 skeptic)。run wf_39e88e76-518,14 agent,约 100 万 token。

方法本身就是被设计对象的活体演示:先定位、后阅读、动态增派、独立判级。


1. 直接结论(含对原假设的两处修正)

真正的问题不是"方向超过 5 个就失准",而是信息收集 face 把"定位"和"阅读判断"压进了同一个 agent pass。两处需要修正原来的判断:

第一,"方向数有时超过健康上限(>5)"这个说法,对真正的信息收集 face 是站不住的。专用信息收集 loop(large_context_compression_method_loop_20260523)实测每批 first-layer 的方向数最高就是 5、零次超限,subagent_direction_cap_first_layer: 5 这条 cap 被遵守了。之前看到的 21 / 23 个方向,来自 AAU 测试候选池的 triage(action=structured_pool_triage,loop 自己标了 status=CLASSIFICATION_ONLY_NOT_EXECUTION_COVERAGE),那是测试执行的候选分类,不是信息收集 sub-agent 的方向。把它当成"信息收集方向超限"是构造性误配。

第二,机制不是从零设计的新东西。locate / read 的正交分离在系统里已经存在两个可运行实例(都在 AAU 的 runner.py),并且在矩阵设计里已经被命名(information_collection_matrix_v0_1.md 的 L2 Bridge/Locator、P1 Universe Map)。所以缺口不是"没有这个概念",而是这个概念从没被操作化成一个独立的、带召回 oracle 的 agent pass,并且被默认合并进了阅读步骤。

因此正确的问法从"怎么设计一个 locate 阶段"变成:怎么把已经存在但寄生在阅读里的 locate,提成一个独立的、以召回为唯一硬指标的前置阶段,并给它一个能证明"没漏位置"的 oracle。这是用户说的"large context 处理矩阵里缺的那一格",也是 guidance_skill_matrix §7 #1 记录的"环节 3/4 承重墙缺口"的第一块具体砖。


2. 诊断:conflation 是什么、在哪、有什么代价

2.1 conflation 的确证(证据等级 bounded)

两个独立 reader 读了两个不同的 loop,结论一致:first-layer scanning agent 在同一个 prompt 里既枚举并定位原始单位,又深读它们、还判断有用性、再产出方法蕴含。

最干净的样例是 large_context_compression_method_loop_20260523/first_layer/C001_target_session_raw_audit.md:单个 agent 在同一轮里先列 Covered Units(定位 4 条 rollout 路径 + 量文件大小),再在同一份输出里写 Coverage / Usefulness / Candidate Method Implications。它服从的 rubric(prompts/first_layer_common.md:33-43)把五个方向并列成一组:Coverage / Usefulness / Method defect / Boundary / Candidate rule。这里有一个被对抗验证纠正的细节:rubric 里的 "Coverage" 定义是"实际读了哪些原始单位",它是读后的覆盖核查(coverage receipt),不是读前的高召回定位。也就是说,first-layer rubric 有一格"读后核查",却没有一格"读前的候选位置召回",定位是隐式发生、和阅读纠缠在一起的。

设计层确实分出了这一格,但从未落地为独立 pass:information_collection_matrix_v0_1.md:82-85 把 P1 Universe Map(过滤前先枚举源族)和 P2 Scent Scan(按信息气味排序)列为两个读前操作;method_v0_2.md:42-44 第一次把"枚举源单位"排成骨架里的独立一步(step 3,在 first-layer 提取 step 5 之前)。但这两处都只是清单项或 schema 字段,没有自己的 budget、退出条件或召回 oracle,执行时仍由做阅读的同一个 agent 顺手完成。source_frontier/ 经确定性 ls 核验是一个 symlink 目录(指向若干源根的静态 scope alias),功能是冻结源边界,不产候选位置图、不做召回核验,把它等同于 locate 阶段是范畴误配。

2.2 为什么 architecturally 必须拆(证据等级 bounded,确定性)

token_budget.json:22-78 显示语料 26 个单位约 768 万 token,单个 raw rollout 就 26.4 万到 44 万 token。单个 agent 连一份 rollout 都装不下。这把 locate / read 拆分从"更好"推到"架构必需":locate 在元数据 / manifest 层可以一个 context 扫完,read 在 26 万 token 的 chunk 上必须有自己的有界 context。

2.3 代价:有指向、但未经对照证实(证据等级 observational / partial)

有两处指向 conflation 真的造成了下游危害,但都不是受控实验,只能算 observational:

诚实边界:没有任何"拆分 vs 合并、同源比 recall/质量差异"的对照实验。所以"conflation 导致漏读"目前是有指向的假设,不是被测出来的因果。


3. 为什么 locate 与 read 必须正交:理论与失败模式

3.1 能力边界数字(来自既有调研,原始论文未在本轮复核,等级 observational)

我们之前的能力边界调研给出的量化天花板,正好把 locate 和 read 分到 LLM 的强项和弱项两侧:

3.2 风险方向正交(来自近期综述,等级 bounded-to-observational)

subagent_failure_modes_and_entropy_control_survey_20260529.md 把失败分成两类不同底层:variety 型(context 有损传递、注意力稀释、误差复合)可由架构解决;激励-语义型(假共识、自报不可信、规格模糊)需要 independent critic 和确定性检查。locate 的主要失败是 variety 型(漏位置),read 的主要失败是激励-语义型(深读不准、自报 completed 不可信)。两个阶段的风险方向正交,正好用对应机制分别防御,这本身就是拆分的理由。

3.3 bad behavior catalog 的对应(等级 observational)

catalog 里多条目都能归到 locate / read 混淆:IB-02 上下文衰减(混合 pass 下任务锚点随证据堆积而丢失)、IB-03 sub-agent 背景缺失(没拿到 locate 输出就在阅读里重做定位、浪费预算)、IB-06 / IB-08 范围扩张与覆盖最大化(没有"你只负责找位置"的边界,阅读就向相邻领域膨胀)、IB-29 单视角 closure(单 agent 单视角定位没有覆盖界)。注意 IB-29 最强样例 bad_behavior_loop_scan_20260502 已从 working tree 删除,该条只能到 observational。


4. 机制设计

4.1 两个阶段的契约

Locate(定位,前置):目标是高召回、低精确。输入是用户需求 + 源边界(哪些目录 / 仓 / session 在范围内)。输出是一张候选位置图,只含"信息可能在哪"的指针(文件路径、章节、session id、行区间),不含深读内容、不做精确相关性裁决。单个 locate agent 是 L0×S0 的单点分类任务,读轻量元数据(文件名、标题、目录树、grep 命中行、摘要),判"这里可能有"。方向上限可以放到 1,因为它只做一件事。

Read(阅读,后置):消费 locate 的候选位置图作为 scope 边界,在已定位的位置上 budget 分片深读、提取真正相关内容、做精确筛选。这就是现成的 workflow_long_context_scale_up:先预算后派发、第一层覆盖原文、第二层 ≤3 关注点、方向 ≤5、覆盖证明、residual ledger、null baseline。read 不再自己做 ad-hoc 的源发现,它信任 locate 的图。

4.2 正交边界(这是设计的核心,不能含糊)

locate 优化召回,read 优化精确与覆盖。locate 的产物是"位置",read 的产物是"内容判断"。locate 失败 = 漏位置(variety 型,靠多 scanner 投票 + 确定性枚举防御);read 失败 = 深读不准 / 自报不可信(激励-语义型,靠 independent critic + 确定性核验防御)。两者之间有一道硬交接:locate 输出一张可被确定性命令(find / grep / SHA 清单)核验的候选清单,read 只在这张清单内工作。任何让 read agent 回头自己去全仓搜索的做法,都是把 conflation 偷偷放回来。

4.3 召回 oracle(locate 阶段的承重墙,当前真正缺的一格)

locate 阶段不要求精确,但必须能证明"没漏"。这正是当前体系缺的:phase_aware .../PHASES.md 的 CLP001(信息搜索阶段)退出条件只查"存了用户 prompt、SOURCE_MANIFEST.tsv 列了三个 loop、T001 任务卡存在、round_001 review 存在",没有任何一条测召回,而且 SOURCE_MANIFEST.tsv 是人工声明的清单,不是系统扫描的产物。

召回 oracle 的可操作形式:locate 的 SOURCE_MANIFEST 必须是机械枚举的产物(bash / SQL 全量 SHA 清单),不是人工声明;附一份 dropped-unit / NO_KEYWORD 反向抽样 receipt(被丢弃的候选里抽样核一遍,确认丢得对);关键定位用多个轻量 independent scanner 投票(不同检索角度,差异本身是漏位置的信号);候选清单为空时,不能直接声称"无相关信息",要用确定性命令独立核验(这条直接来自 loop_update_connected_synthesis_20260529_manual.md:163-166 的 Done 谓词镜像条款)。

4.4 budget 与冗余 budget

locate 用最廉价的估算和模型:CC 的 roughTokenCountEstimationcontent.length/4,JSON/JSONL 用 /2,纯本地零 API,见 tokenEstimation.ts:203-224)足够给候选清单定预算;判断"可能在哪"用 Haiku 档即可。read 用 CC 的分层预留思路:autoCompact.ts:62-91 的三层 buffer(20k 预警 / 13k 主动 compact / 3k 硬阻断)和 getEffectiveContextWindowSize(有效窗口 = 原始窗口 − min(最大输出, 20k))给出"单 agent 安全输入上界"的现成公式;apiMicrocompact.ts:16-17 的 18 万触发 / 留 4 万的策略给出超阈值分片的参考点。(这些常量是 reader 从仓内相对路径转述的,CC 源码根在本机未经我亲自核验,落地前需 find 到绝对路径复核行号。)

冗余 budget 的形态在这次 workflow 里已经跑出来了,且证明了价值:每个 reader 返回 coverage_complete 标志和 uncovered_units 清单;主控检测到未覆盖就动态增派补读 agent(上限设 4 波)。这次自动增派了 2 个补读 agent,而它们找到的恰恰是第一波漏掉的关键证据(RPR-026 的 locate/read 正交实例、runner.py 的 w1/w2 两层架构、C010 的召回界定下游)。也就是说,准备好但不一定全用的冗余调度名额,是用来兜住"第一波覆盖不全"的,并且这次直接改变了结论。

4.5 已有可借鉴的实现(证明"非新",等级 bounded)

系统里已经有两个 locate/read 正交的可运行实例,应该作为模板而不是另起炉灶:

跨域同构(对应用户的思维方式):这正是检索系统的 retrieve-then-rerank。locate = 召回优先的粗检索,read = 精排。这个同构论证的是"两阶段分离有价值"(已被上述实例落实),不是"当前体系缺这个阶段",不能拿同构当"需要新建"的证据。


5. 最小可行落地(反过度工程)

对抗验证给出的关键约束:不要新建一整套独立 locate 运行时、不要拆 CONTROL.md 的 cap、不要改 scale_up 的方向纪律,这些都已存在。真正缺的只有"读前召回门"。最小改动 < 10 行,命中真正想解决的"召回界定下游":

  1. phase_aware .../PHASES.md 的 CLP001 退出条件加一条召回项:SOURCE_MANIFEST.tsv 必须是机械枚举(bash/SQL 全量 SHA 清单)的产物,而非人工声明,并附 dropped-unit / NO_KEYWORD 反向抽样 receipt。
  2. workflow_long_context_scale_up.md:98 的"降噪 frontier"从">50 agent 才触发的条件 fallback"改成"默认先做一次机械枚举建 Universe";并在 :246 快速自检加一条"是否对全集做了机械枚举再过滤"。
  3. 把这条 locate/read 交接钉到三个运行时原语上:CLP001(intake 召回门)、CONTROL.md(locate 与 read 各自的 direction cap 已有,补一个"locate 必须先于 read 完成并落 manifest"的次序约束)、scale_up(消费 locate 图而非自己搜)。

这一步必须钉到运行时,不能只写成文档。loop_update_connected_synthesis_20260529_manual.md:140-154 已经踩过一次"把已落地运行时重新抽象成理论文档却没接回去"的孪生孤岛失败,locate/read 拆分若只写成 skill 文档而不接回 CLP001 / CONTROL / scale_up,会重蹈覆辙。

填的位置:task_to_completion_matrix_and_whattohow_20260528_manual.md:98-106 的 large context 7 环节矩阵里,在环节 3"分解 Unit"之前插入"高召回轻量扫描(locate)"这一格,产出候选位置清单作为环节 3 分片的锚点。这就是用户说的"矩阵里缺的那一格"。


6. 证据等级与禁止声明(solid-decision 判级)

诚实地分层,不要把强弱不同的结论放在同一个信心层:

禁止声明:不能说这个机制"已验证有效"或"会稳定提升召回 / 质量"(从未运行);不能把机制章节和诊断章节放在同一信心层呈现(机制 weak、诊断 bounded);不能断言"方向数超健康上限"是信息收集 face 的真实缺陷;不能把"健康上限=5"当跨 loop 通用阈值(CONTROL.md:32 显示它只是该 loop 自设);不能声称已对"整个 loop / 整个语料"测量(两路 coverage 均不完整)。

把机制从 weak 升上去的唯一路径:在一个真实大 context 源上实跑 locate/read 拆分,操作化"方向"和"健康上限"的定义,实跑并打分召回 oracle(机械枚举 + 多 scanner 投票 + residual ledger),与合并 face 做 A/B 比 recall / 质量 delta。


7. 下一步(待用户选择)

三条路,互不排斥:先做最小落地(改 CLP001 + scale_up 两处,< 10 行,把 locate 钉到运行时);或先做对照实验(同源 拆分 vs 合并,把诊断和机制从 observational/weak 升到 bounded);或把这套提成一个独立的道 skill(填 guidance_skill_matrix §7 的环节 3/4 承重墙缺口),但 skill 化是比当前更大的动作,应在最小落地或对照实验给出运行证据之后再做。


相关目录与上下游


← 返回方法论区 · context-infra 处理逻辑 →

provenance:contexts/methodology/locate_read_two_phase_info_collection_20260530_manual.md data/methodology_dao.mjs