zizi 97f2e4cb95 docs(资料研究): 场景片段检索语料池设计SSOT——切片账本、向量代次、场景检索与片段参考契约
- B03:确定性段落聚合切片(窗计划哈希)、哈希bigram向量代次、reference_reading授权过滤、构建命令接口
- B09:场景检索入口与混合检索平行,两路等权,键带slice:前缀,v1不接偏好重排
- B06:参考材料两类载体(方法/片段),片段不登记方法消费,授权边界为来源用途+内容哈希
- B07:参考挑选反馈增语料类型字段,片段挑选只落账不进信号轨
2026-09-19 23:27:24 +08:00

119 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 导航元信息: {"内容描述": "B09 上下文", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B09 上下文
## 职责与对象
一次任务真正允许且实际使用的材料集合。
实例归属以[总体架构](../总体架构.md)为准;结构、状态和公开外壳分别引用数据模型与接口契约。
## 公开接口
| 用例 | 输入责任 | 输出与后果 |
|------|----------|------------|
| authorize_scope | 作者身份、任务目标、用途和选择 | 只能被收窄的读取范围 |
| search | 冻结范围和查询意图 | 合法候选及省略原因 |
| assemble | 必读、预算和固定绑定 | 角色所需材料 |
| freeze | 已执行探索、来源和投影 | 不可变快照和哈希 |
| replay | 快照、原读取身份和当前授权 | 可回读材料或明确失效 |
| check_dependencies | 来源、结构、策略和事务上下文 | 当前有效性及锁定依据 |
所有接口在本模块的接口.py 暴露。输入输出类型由同一公开表面导出,外部不导入私有模型或 SQL。
## 内部职责
| 文件 | 职责 |
|------|------|
| 接口.py | 上下文公开用例和可导入合同 |
| 模型.py | 上下文稳定对象、外壳及内部状态 |
| 存储.py | 上下文快照、检索索引及台账的 SQL 与版本读写 |
| 任务范围.py | 作品、用途、时点和来源权限 |
| 来源读取.py | 按业务公开接口读取固定来源 |
| 声音材料.py | 经B06读取已认可声音,冻结身份/用途投影并核逐键材料 |
| 混合检索.py | 关键词与向量两路倒数排名融合及偏好重排 |
| 材料装配.py | 必读、预算、取舍及字段投影 |
| 探索回放.py | 按同一范围重放工具读取 |
| 冻结快照.py | 来源、结构、投影和消费片段 |
| 依赖校验.py | 授权、撤回、结构与数据版本变化 |
| 索引维护.py | 切块、嵌入、重建与陈旧拒绝 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B09-上下文.md)。
## 当前检索底座
[基础设施向量评分](../../../../src/muse/基础设施/检索/向量.py)提供 Python 余弦相似打分,[混合检索](../../../../src/muse/上下文/混合检索.py)负责倒数排名融合。当前不依赖 pgvector 或外部嵌入服务;旧逐文件设计中的 pgvector 是历史目标,代码注释里的“裁决 A”因缺原文不作为现行决定依据。
## 实现约束
- 预组装、探索、回放和采纳复检使用一致范围,不能仅保护预组装。
- 来源数据经各业务公开接口取得,动态字段由 S04 投影;检索只能在已授权集合内缩小。
- 专名和数字有确定性检索路径,向量质量以中文样例验证。
- 方法索引指纹覆盖版本身份、实际文本、向量和嵌入器身份,并复检当前方法版本集合、确认提案语料及来源授权;不只比较行内自报哈希。检索复用本次核验的同一份载荷,不二次读入另一份索引。
- 索引及台账在同一事务替换,并发重建串行;来源经 B04 公开接口读取,不以方法列表页数量上限截断全集。重建不改正式方法,旧指纹或失效来源明确拒绝,不自动改写旧台账以冒充新鲜。
- 实际入选、省略、版本、片段和模型消费有记录;历史可重读不代表仍可用于新任务。消费登记复核派发回执的快照指纹与不可变逐键片段,和检查当前可发送性分开;新派发、恢复及采纳仍复检当前依据。
- 方法授权随任务范围的 `methods` 冻结,包含绑定身份、方法及版本身份、目标、材料键、材料哈希、有效结构哈希及 S04 投影版本;新绑定不能混入旧任务。两种用途取自冻结任务,不从材料反推。缺少结构或投影身份的旧方法范围不能继续使用,须重新授权。
- 快照复用 `frozen_scope` 与 `source_bindings`,只有预算入选的方法记入来源绑定。绑定的数据版本、有效结构哈希及真实 S04 投影版本必须与授权一致;逐键片段另按材料哈希核对,不用固定标签冒充投影版本。
- 方法材料的标题与证据取自绑定版本的确认提案,不混入后续提案。停用、释放、重绑、来源用途撤权或材料变化均阻断旧范围的回放与使用;当前版本指针前进不等于固定绑定自动升级。
- 装配记录保存逐键字符区间 `[开始, 结束)`;区间按入选顺序覆盖全文及分隔符。冻结按键取出方法全文精确比对,不以全文中包含某段文字代替材料归属校验。
- 模型发送保护在 S02 标记发送的同一短事务核对实际输入、冻结快照与方法依据;通过 B04/B03/S04 公开用例保护方法状态、原绑定、来源授权与字段策略,锁不跨模型调用。提交前的停用、释放、撤权或策略收紧与发送授权明确排序,不以早先只读检查代替发送关口。
- 模型候选采纳事务内按候选绑定的快照核对作者、作品与方法依据,并将依据保护到事务结束;依据失效则不写正文。方法状态采用当前有效性语义:同一绑定合法重新启用后可重新核验,但不会自动重跑失败任务;是否采纳仍需作者明确决定。
## 已确认作品声音的消费合同
写手任务通过B06公开接口冻结本书已确认声音,`voice`为固定声音身份或明确的null(尚无声音);不读取未决提案,也不把新声音混入已冻结任务。声音绑定包含版本ID/revision、原内容哈希、有效结构哈希、当前S04投影版本及实际指导材料哈希,投影沿任务内容用途与执行用途计算。样张全文不进入写手请求,只发送投影后的叙述指导、已有字面依据的口癖和保护表达;声音指导不是人物事实、必须命中词表或规则已激活证明。
已有声音作为必读材料整项参与预算,放不下明确失败而非截断或静默省略;无声音不追加占位指导,不改变原写手材料。冻结时逐键核对真实材料与唯一来源绑定,不接受把指导搬到别的材料键或自报版本。声音变化、来源撤权或投影收紧使旧快照当前失效;null后首次确认同样要求重新授权。
回放、恢复、新发送和候选采纳均重验同一声音身份。新发送与采纳在短事务经B06保护当前指针、真实来源授权和S04策略,声音确认使用相同的作品级锁;包括首次确认与无声音发送之间的排序。锁不跨网络调用;已合法发送的历史快照及交付不因后来声音变化而被篡改,但旧候选不能跳过当前依据复检。
## 协作与失败
正文ABC回放资料由维护发布入口经B09封存,评测角色不直读正式业务表。封存输入只声明作品、目标章、历史文稿版本、连续基线数量和材料预算;B09经B01/B02/B05读取真实目录、已确认细纲、历史时点事实投影和原文,目标及未来章不能成为历史来源。目标正文只进入独立答案侧。S04投影明确使用evaluation/generation,剔除字段不能从其他载荷补回。
A使用连续历史基线及一般关键词补充原文,B仅使用时点卡片索引,C使用同一基线及卡片来源对应的补充原文,同时保留索引。A/C的补充码点预算相同且必须足额,C不得越过已声明历史集合回读卡来源;预算不足、缺连续基线或缺合法索引明确拒绝。检索的实际入选来源、片段和省略记录放封存依据,不将实验臂、内部身份或目标答案放入写手材料。封存是资料准备,不认证模型效果;执行仍核对封存哈希、字段策略和本次资料授权。
聚合 B01—B07 的查询和 S04 投影,S02 留痕;来源索引是派生物。
其他作品、未来章、未确认或撤回来源拒绝;必读不足返回具体缺项,不能补造材料。
## 验收行为
- 三阶段工具读取都拒绝越界。
- 结构用途收紧阻断旧范围的新派发与采纳,不改写已经合法派发的历史材料。
- 回放使用相同输入版本。
- 向量命中不绕过真实来源校验。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
### 方法检索的空结果
混合检索只读取可用的新鲜方法索引,不自动写入规划选择。空白查询在读取索引前以`CONTEXT_INPUT_INVALID`拒绝。结果保留索引身份;索引无条目时`empty_reason=empty_index`,有索引但两路都无命中时`empty_reason=no_match`并给出作者可读说明。有命中时该字段为null。此合同不改变B04固定绑定材料的列表返回值。
### 偏好重排通路
混合检索在关键词、向量两路 RRF 之上增加偏好路。偏好信号经公开接口取得:B07 暴露参考挑选信号(选用/拒绝计数,带位次偏置标记),B04 暴露消费统计(实际消费计数);B09 不读两者私表。
弱强信号分列计数,不混算:参考挑选是弱信号(受位置偏置影响,排序靠前者天然更易被选中),改写采纳与实际消费是强信号。"种类→权重"映射由版本化权重表承担;偏好路初始权重保守(相对双路各 1.0 的量级不超过 0.25),权重表版本号写入检索回执。
重排保留 1~2 个探索位:将无任何挑选或消费信号的高相关版本注入候选,对抗熟悉度泡沫(挑熟悉的→推熟悉的→方法面越用越窄);未晋升的尾部候选按原序保留,不破坏候选回填链。重排是纯函数:同一输入(得分表、信号表、权重版本)得到同一输出。
重排结果的审计链由两处承担:检索回执记录权重表版本、每个候选的偏好分项(选用/拒绝/消费计数与偏好值)及探索位标记;作者的挑选动作经 B07 参考挑选反馈落账,固化索引代次与权重版本。检索本身不是冻结任务的来源;作者实际选定的参考版本经任务范围 references 节冻结并受依赖复检(见 B06 参考改写),沿用偏好绑定先例的是该节而非检索回执。
### 场景片段检索
`场景检索` 与方法检索平行,服务参考改写语料源切换:关键词与向量两路 RRF 等权,语料为 B03 当前具备 `reference_reading` 用途来源的场景切片(授权过滤在查询时 join,代次只管向量新鲜度)。候选键带 `slice:` 前缀,与方法版本身份键空间不混。结果行携带书名、窗位置与原文预览,供作者知情挑选。
v1 不接偏好重排:重排信号语义是方法卡的选用/消费,场景切片无消费概念;检索入口保留与信号表同构的接缝,待片段挑选信号积累后另行评估。授权撤回、来源版本更新或代次陈旧时相应切片退出候选,不扩大为全池不可用。
### 读取前预算与摘要分页
新建任务在 `source_scope` 冻结 `context_policy_version=2` 和 `context_read_budget`。预算唯一默认值在 S02 `上下文预算.py`;输入字节与模型输出 token 分开核算。旧任务不补字段、不改回放哈希,超过部署硬上界返回 `CONTEXT_POLICY_REAUTH_REQUIRED`,由作者重新授权。
B09先通过 B01/B02/B05 公开元数据面检查目录数量、载荷字节和当前版本,再取得载荷。正文依赖复检不读取 `document`、不恢复草稿;事实当前依据检查只比正文版本与哈希,原文引文仍在事实确认入口验证。元数据大小在数据库侧计算,仅保证应用传输和物化上界,不代表数据库物理读取量相同。细纲和事实过大明确拒绝;事实工具可点名冻结范围内的有界对象集合,不把被省略材料冒充完整结果。
v2历史正文未指定结束位置时返回有界片段及 `has_more/next_cursor/omitted_reason`。游标绑定任务、冻结范围、正文版本及投影,不能跨任务或版本续用。S02在结果进入模型历史前分别检查单工具及累计工具字节;完整模型请求的系统提示、工具定义、输入、历史和序列化开销共同受 envelope 上界约束。读前预留和耗时使用现有工具事件持久化,恢复取该步骤最近累计量;失败读取与实际重复读取保留成本,不以进程重启清零。拒绝保留错误码、消费量和调用身份,不保存失败候选内容。
`读取并核对快照` 同时返回历史快照与当前依赖状态,消费入口无需重复整轮检查;发送、恢复、采纳仍分别复检当前授权。新 HTTP `context-snapshots/page` 使用绑定任务和用途的稳定游标,默认20、最多100条,只选择摘要字段而不读取装配正文,同页相同冻结范围与绑定只核验一次。旧无分页入口兼容保留,不静默截断。
离线机制回归见 `test_上下文读取上界.py` 的 `NC-O07-*` 用例;真实 PostgreSQL、生成合同与跨包端到端证据由集成验收记录。