Context Pack 项目与自测
项目目标与边界
实现一个确定性的 context pack 构建器。它依次执行严格 JSON 校验、权限、信任、日期、显式去重和预算门禁,再按 policy → state → evidence → current-input 的顺序输出片段及来源。每个被排除的片段都有机器可读原因。
项目不调用 tokenizer 或模型 API。案例中的 estimated_tokens 是外部给定的教学数据,只能验证选择算法,不能证明真实 token、费用或模型质量。生产系统必须用目标模型的计数能力和响应 usage 校准。
信任控制面边界
为便于离线教学,fixture 把请求策略和候选片段放在同一 JSON 文件中。生产系统必须拆开信任来源:
granted_permissions来自已认证主体与授权服务,allowed_trust来自应用策略,chunk 的trust、required_permission、required与dedupe_key由受控摄取流程赋值。不可信正文不能自行抬高信任、授予权限、声明为必选项或决定去重关系;本选择器只校验声明的一致性,不负责认证这些声明。
项目文件
| 文件 | 职责 |
|---|---|
| context_budget.py | 严格加载案例,执行五类门禁,构建确定性 context pack 与 CLI 退出码 |
| chunks.json | 11 个带来源、版本、权限、信任、有效期、优先级和预算的版本化片段 |
| context-pack.schema.json | 输出 pack 的 JSON Schema 2020-12 契约 |
| test_context_budget.py | 18 项单元测试,覆盖非法输入、失败关闭、去重边界、确定性、schema 和 CLI |
运行环境
脚本只使用 Python 标准库,不需要联网、第三方依赖或 API key。在 Windows 11 的 PowerShell 7 中,以下代码块按顺序从同时包含 docs/ 与 .website/ 的项目根目录开始执行;生成检查包后会返回项目根目录:
Push-Location -LiteralPath 'docs\上下文工程' # 临时进入课程目录,使 examples 的相对路径可直接使用。
py -3.11 --version # 先核对 Python Launcher 解析出的解释器版本。
py -3.11 -m unittest discover -s .\examples -p 'test_context_budget.py' -v # 正常模式运行 context pack 的全部单元测试。
py -3.11 -O -m unittest discover -s .\examples -p 'test_context_budget.py' -v # 用 -O 复跑,确认失败关闭逻辑不依赖 assert。普通项目应先学习 Python 基础中的 venv + pip。本项目零依赖,直接使用已安装的 Python,以免在 vault 中生成 .venv;如需练习隔离环境,请把虚拟环境建在 vault 外。
分步骤实验
1. 阅读输入合同
先打开 chunks.json。顶层 request 给出观察日期、已授予权限、允许的信任标签和 pack 预算。每个 chunk 都有:
- 稳定
id、source_uri与source_version; effective_from与排他的expires_on;required_permission与trust;- 受控
dedupe_key、priority、required和estimated_tokens; - 最终进入上下文的
section与content。
dedupe_key 只应用于业务上确认可互换的片段。相互矛盾的来源不能为了省 token 共用一个 key,否则会把冲突误当重复。即使业务内容等价,同一组成员也必须拥有相同 section、required_permission 与 trust;否则优先级排序可能让低权限或低信任片段替换另一安全类别,加载器会直接拒绝该 fixture。
2. 构建默认 pack
py -3.11 .\examples\context_budget.py # 使用默认教学夹具构建一次确定性的 context pack。
$LASTEXITCODE # 显示 CLI 的退出码,0 表示构建与所有门禁均通过。当前案例预算为 170 个估算 token,使用 162,剩余 8;选择顺序为 policy、task-state、current-refund-policy、refund-faq、current-input。退出码应为 0。
六个排除原因各出现一次:权限不足、信任不允许、尚未生效、已经过期、显式重复和预算不足。选择器先执行安全与有效期门禁,再去重和分配预算;低优先级内容不能挤掉必选策略或当前状态。
3. 生成可检查的 JSON pack
$pack = Join-Path $env:TEMP "context-pack.json" # 选择系统临时目录作为报告位置,避免产生 vault 工件。
py -3.11 .\examples\context_budget.py --json-pack $pack # 将本次入选与排除结果输出为可检查的 JSON pack。
Get-Content -LiteralPath $pack -Raw -Encoding utf8 # 以 UTF-8 查看完整 pack,核对预算和来源字段。
Pop-Location # 回到执行前的项目根目录,避免影响后续命令的相对路径。输出包含版本、观察日期、预算、已用/剩余估算、带来源的入选片段和不含正文的排除记录。教学 pack 含样例 content,便于查看最终上下文;生产日志不应默认保存真实正文,必须按隐私、权限和保留期另行设计。
4. 证明必选项会失败关闭
测试套件会在临时目录构造四种必选项失败:缺权限、信任标签不允许、尚未生效和已经过期;还会把预算降到必选项总量以下。构建器必须返回错误而不是静默丢弃,CLI 返回 2 且不打印 traceback。正式 fixture 不会被修改。
5. 检查确定性
同一测试将 11 个输入片段以固定随机种子打乱,再比较完整 pack。结果必须逐字段相同。确定性让版本差异可审计,但不意味着这个贪心优先级策略在所有业务上最优;覆盖度、多样性或组合价值仍需由任务评测验证。
本机验证记录
2026-07-21 在 Python 3.11 上完成:
py -3.11 -m py_compile:脚本与测试均通过。- 普通模式:18 项测试全部通过,warnings-as-errors。
python -O模式:同一 18 项测试全部通过,关键门禁不依赖可被优化移除的裸assert。- CLI:默认案例 5 个入选、6 个排除,估算用量
162/170。 - 普通模式与
-O模式的 CLI 文本和 JSON pack 逐字一致。
这些结果只覆盖离线合同和选择器;未调用供应商 tokenizer、模型 API,也未验证真实回答质量或 Obsidian 阅读视图。
扩展任务
- 新增与目标模型匹配的计数 adapter,同时保留离线
estimated_tokens测试;比较发送前计数与响应usage。 - 增加“每个子问题至少一个证据”和来源多样性约束,证明简单按优先级贪心的局限。
- 把冲突来源作为独立组保留,要求回答同时引用新旧版本并解释生效规则。
- 增加摘要/compaction 前后状态不变量:金额、日期、拒绝项、未决问题和来源 ID 不得丢失。
- 在学完 评测体系 后,对不同 pack 策略运行位置、干扰、多证据、注入、延迟和成本矩阵。
自测题
- 为什么字符数和
estimated_tokens不能作为真实 token 或费用证据? - 为什么权限、信任和日期门禁必须早于相关性排序与预算选择?
dedupe_key用错会怎样把来源冲突静默删除?- 为什么缓存命中不扩大窗口,也不证明 context pack 正确?
- 必选上下文超限时,失败、拆任务和受控压缩各适合什么情况?
- 确定性选择为什么仍不等于任务质量最优?
掌握检查
- 我能运行普通与
-O测试,并解释 18 项测试覆盖的失败类型。 - 我能从每个入选片段追到来源、版本、有效期、信任和权限。
- 我能让必选项的权限或预算失败返回非零状态,而不是静默继续。
- 我不会把样例估算称为真实 token,也不会默认记录生产正文。
- 我能为冲突、去重、覆盖度和压缩后的信息保真设计测试。
- 我能说明离线 pack 验证与真实模型长上下文评测之间仍缺哪些证据。
主要参考资料
- Python 3.11:
json(访问于 2026-07-21) - Python 3.11:
unittest(访问于 2026-07-21) - JSON Schema:Getting started(访问于 2026-07-21)
- OpenAI:Compaction(访问于 2026-07-21)
- Anthropic:Context windows(访问于 2026-07-21)
回到目录
返回 上下文工程学习目录,或继续 LLM API 集成。