Files
DevFlow/docs/02-架构设计/专项设计/context-helpers拆分备勘-设计-2026-10-04.md
T
lxy b994cf2c54 文档: 设计定稿与评估纪律登记
- 无人值守长任务设计定稿,含效率与可观测补遗
- u-relay wire 协议规格与五项评估结论
- 新能力引入评估纪律五项清单
- todo 销账与狗粮短板分析登记
2026-10-04 16:27:32 +08:00

62 lines
4.8 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.
# context_helpers.rs 拆分备勘(REFACTOR-260619-09 修订)· 设计(2026-10-04)
> 来源:todo.md「REFACTOR-260619-09 [P2 暂缓] — context.rs(1332)等 F-15 压缩链路稳定再拆」。
> **勘误(2026-10-04 现场核实)**:原条目指向的 `crates/df-ai/src/context.rs`(1332 行)**已不存在**——context 已拆为目录模块 `context/{mod.rs(38.5KB), sanitize.rs(64.5KB), manager_tests.rs(51.8KB)}`。**原 REFACTOR-260619-09 事实完成,建议 todo 销账**。
> 但拆分域出现**新超标 God 文件**:`crates/df-ai/src/context_helpers.rs` = **1733 行**(80KB,无测试分离),TokenEstimator/ContextConfig/工具结果压缩/分组/淘汰/公共工具混居。本设计以它为对象。
> 同域现状参考:df-ai/src/ 下平级大文件尚有 coordinator.rs(68.7KB)、intent.rs(66.8KB)、anthropic_compat.rs(69.9KB)、openai_compat.rs(65.4KB)——均超 60KB,属后续拆分候选池,本期不扩scope。
## 1. 拆分对象画像
`context_helpers.rs` 1733 行,混合至少六类职责(已知锚点):
- **Token 估算**:TokenEstimator 相关(行段待精确,拆时以 read_symbol 逐个锚定);
- **上下文配置**:ContextConfig 及常量;
- **工具结果压缩**:`:410 TOOL_RESULT_SUMMARIZE_BYTES=2048`、`:425 TOOL_RESULT_JSON_STR_FIELD_MAX=512`、`should_summarize_tool_result(:440)`、extract_key_info 系列(head/tail/array/char/json-str 五种截断);
- **namespace 引用转发**:`:646-647 NAMESPACE_REF_PREFIX`(仅常量 re-export,薄);
- **淘汰/分组逻辑**(eviction/grouping,与 context/mod.rs 的 ContextManager 呼应);
- **杂项公共工具**(is_han `:396` 等纯函数)。
**前置动作(拆分前 0.5 天)**:用 read_symbol 对 1733 行做一次全骨架清点,产出「函数→职责块→行段」映射表落 `docs/05-代码审查/context_helpers骨架-2026-10-XX.md`——本设计给出块划分与迁移策略,具体行号以骨架表为准。
## 2. 目标模块划分(建议)
拆为 `context_helpers/` 目录(与 context/ 同款目录化先例,lib.rs 加 `pub mod` 不动外部路径——`df_ai::context_helpers::X` 引用形态不变):
| 子模块 | 职责 | 预计行数 | 风险 |
|---|---|---|---|
| `token.rs` | TokenEstimator + 估算纯函数 | ~250 | 低(纯函数,单测易迁) |
| `config.rs` | ContextConfig + 阈值常量(含 TOOL_RESULT_* 六常量) | ~150 | 低 |
| `tool_compress.rs` | should_summarize_tool_result + extract_key_info 系列 | ~350 | **中(压缩热点,殿后)** |
| `eviction.rs` | 淘汰/分组 + namespace 常量转发 | ~400 | **中高(压缩链路高频改动区,殿后)** |
| `misc.rs` | is_han 等纯工具(或就近下沉使用方) | ~100 | 低 |
| `mod.rs` | re-export 保路径 + 少量真公共胶水 | ~50 | — |
**测试**:本文件测试与生产代码混居(无 #[cfg(test)] 分离迹象,拆时确认)——随成员走,`token.rs`/`tool_compress.rs` 各带自己的测试模块;若测试体量大,仿照 context/manager_tests.rs 惯例平级 `helpers_tests.rs`。
## 3. 迁移顺序(四批,压缩热点殿后)
```
批1 低风险: config.rs + misc.rs → cargo test -p df-ai 全绿
批2 低风险: token.rs (+其单测) → 同上
批3 热点: tool_compress.rs → 同上 + 手测长会话压缩路径
批4 热点: eviction.rs + mod.rs 收口 → 同上 + 手测 eviction 滚动摘要
```
每批验收门:`cargo test -p df-ai`(基线 560+)+ `cargo check --workspace`;批3/4 加:起应用开长会话触发压缩与淘汰各一次,行为无回归。**每批独立提交**,冲突时可安全停在任意批。
## 4. re-export 兼容策略
`context_helpers/mod.rs` 对全部原 pub 项 `pub use` 转发——仓内 grep 显示引用方走 `df_ai::context_helpers::*` 与 `crate::context_helpers::*` 两种路径,目录化后**零调用方改动**。仅 `use df_ai::context_helpers` 整体 use(若有)需 mod.rs 全量 re-export 兜住。
## 5. 与原条目的关系
- todo 销账动作:REFACTOR-260619-09 原 context.rs 拆分 ✅ 完成;**新登记**本设计为 REFACTOR-261004-01(context_helpers.rs 1733 行拆分),优先级维持 P2 暂缓——**触发条件**:上下文管理批(无人值守 P0/P1)合入且稳定 ≥1 周后启动批1/2(低风险先行),批3/4 继续等压缩链路静默期;
- context_helpers.rs 若在触发前因功能开发继续膨胀 >2000 行,优先把「工具结果压缩」块先行拆出(批3 提前),不整文件硬拆。
## 6. 工作量估算
骨架清点 0.5 天 + 批1/2 各 0.5 天 + 批3/4 各 1 天 ≈ 3.5 天(可拆散穿插,非连续占用)。
## 7. 拍板点(1 项)
- 触发时机:上下文管理批稳定后自动启动 vs 等用户指令?建议**等用户指令**(与 REFACTOR 暂缓惯例一致,本设计备勘即可)。