AI 执行任务时,很多失败不是因为它不会改代码,而是因为它看错了上下文。

它可能读到过时文档,把规划当事实,把辅助开发笔记当产品规则,把某次失败样例当通用规则,或者在全仓库里找到一个名字相似但已经废弃的实现。

所以项目专用 AI 交付流水线不应该只说“让 AI 读仓库”。更稳的做法是为任务准备 context package。

上下文不是越多越好

很多人直觉上希望 AI 看得越多越好。对真实项目来说,这经常适得其反。

上下文太大,AI 会被无关信息干扰。文档太乱,AI 会把临时方案当最终事实。历史讨论太多,AI 会把已经被推翻的决定重新拿出来。

项目需要的是窄上下文,不是全量上下文。

窄上下文的意思是:这次任务需要哪些事实,就把哪些事实打包给 AI;哪些信息会误导它,就不要默认暴露。

source of truth 必须明确

context package 最重要的字段是 source of truth。

在代码项目里,最终真实形态通常以代码和测试为准,而不是旧文档。在产品项目里,公开能力要以 README、用户文档、release artifact 和真实可跑 demo 为准。在知识库发布中,公开内容要回到 source trace,而不是直接相信总结页。

没有 source of truth,AI 会把它能读到的材料平均对待。

这很危险。因为真实项目里的材料天然有层级:

  • 代码和测试可能比旧文档可信;
  • 当前产品文档可能比早期 roadmap 可信;
  • 项目本地事实可能比中央方法论可信;
  • 原始证据可能比 AI 总结可信;
  • public claim 必须比内部想法更保守。

context package 应该把这些优先级说清楚。

一个 context package 应该包含什么

一个可用的上下文包可以很简单:

  • 本任务相关的项目规则;
  • 应该读取的源真相文件;
  • 相关 specs、ADRs、issue、PR 或 runbook;
  • 相关测试、fixture、截图或 trace;
  • 当前已知失败;
  • 验证命令;
  • 允许修改的文件范围;
  • 禁止触碰的文件范围;
  • 如果上下文矛盾,应该信谁。

这比让 AI 自己搜索全仓库更可控。

项目专用价值就在这里

通用 agent 工具可以提供强模型、shell、文件编辑、MCP、subagent、hooks。它们不能天然知道你这个项目的真相层级。

例如,TidalFi 的 AI worker 必须知道哪些链路涉及资金、交易、KYC 或生产发布。SketchUp Agent Harness 的 worker 必须知道 design_model、source evidence 和 SketchUp scene 的关系。中央知识库的 publication worker 必须知道 knowledge 负责双语候选,site 负责渲染和部署。

这些不是通用工具的知识。这些是项目上下文。

context package 也能防止过度泛化

AI 很容易从一个样例里总结出看似通用的规则。

在设计工具里,一张户型图的识别修复不应该直接变成产品通用规则。在交易系统里,一个 issue 的特殊修复不应该变成全局业务语义。在知识库里,一个项目的目录习惯不应该套到所有项目。

context package 可以明确本次材料的作用:

  • 这是事实;
  • 这是证据;
  • 这是猜测;
  • 这是项目局部规则;
  • 这是可晋升的通用方法;
  • 这是不能泛化的 source-specific interpretation。

这会显著降低 AI 把局部经验污染成全局规则的概率。

结论

给 AI 上下文,不是把仓库全部丢给它。

真正有用的是任务级上下文包:小、准、有优先级、有真相源、有边界。

项目专用 AI 交付流水线的价值,很大一部分就来自这里。它不是让模型更聪明,而是让模型在正确事实层上工作。