先拆稳定与动态
缓存设计的第一步不是打开某个参数,而是对上下文分类:
- 稳定项目规则。
- 长期不变的参考文档。
- 当前任务状态。
- 用户输入和临时检索结果。
- 敏感或高频变化数据。
稳定内容放在前部,动态内容放在后部,可以提高复用机会,也让失效边界更清晰。
适合缓存的内容
适合的内容通常同时满足:
- 在多次请求中重复。
- 变化频率低。
- 体积足够大,复用有实际价值。
- 权限范围清晰。
- 失效时可以识别。
项目宪法、固定工具说明和版本冻结的参考材料往往符合条件。实时价格、用户隐私、短期会话状态和尚未核实的政策则不适合长期复用。
上下文预算
预算可以按优先级分配:
系统与安全规则 20%
任务目标与当前状态 20%
检索证据 40%
输出空间与缓冲 20%比例只是 CCAF101 自研练习起点,不是固定标准。实际分配要根据任务、输入长度和输出要求测试。
失效策略
缓存失效必须与事实变化绑定。可用信号包括:
- 文件内容哈希变化。
- 规则或文档版本变化。
- 权限或租户变化。
- 到达核实期限。
- 用户明确要求使用最新状态。
只使用时间 TTL 可能过早失效,也可能在关键事实变化后继续复用。更稳妥的做法是“版本/哈希 + 时间上限”。
安全边界
缓存键应包含权限相关维度,避免不同用户或租户共享不应共享的上下文。敏感数据尽量不进入可复用前缀;日志记录命中与失效原因,但不记录完整隐私内容。
观测指标
除命中率外,还要看:
- 实际延迟变化。
- 输入成本变化。
- 因过期内容导致的错误。
- 不同任务类型的命中分布。
- 失效原因和频率。
高命中率但事实错误,是失败的缓存系统。
反模式
- 为了命中率缓存所有上下文。
- 缓存键忽略权限和版本。
- 更新规则后没有主动失效。
- 只看成本,不看质量回归。
- 把缓存当作长期记忆替代品。
实施清单
- 稳定前缀与动态后缀已分离。
- 缓存键包含版本和权限维度。
- 事实变化能触发主动失效。
- 敏感数据不进入共享缓存。
- 观测同时覆盖命中、成本、延迟和错误。
- 缓存前后运行同一套质量回归。