Context Engineering Playbook

30 人团队如何让 Agent 对话默认携带源码解读

六种可行方案 · AGENTS.md 团队同步 · MCP 闭源知识网关 · 分阶段落地路线

AGENTS.md RAG 共享索引 MCP Prompt Caching CI 自动生成文档 团队同步机制 闭源知识网关
结论先行:可行,且这是 2024–2025 年业界成熟做法。 但最先进的共识不是「把全部源码解读塞进每次对话」,而是 「推一张地图,按需拉细节」(push a map, pull the details): 默认注入一份紧凑、持续再生成的仓库级解读,再让 agent 在需要时通过检索工具自主拉取更深的源码细节。

一、核心认知:上下文的三层金字塔

30 人团队、每人每天多次对话,全量预载有三个致命问题:token 成本爆炸、上下文窗口挤占、解读过期。Claude Code、Cursor、Devin 等业界产品演化出的标准架构是:

层级内容注入方式体积
L0 常驻层 仓库地图 + 架构简报(目录职责、模块关系、关键数据流、常见坑) 每次对话默认注入 1–3k tokens
L1 检索层 代码切片的向量 / 关键词混合索引,或语义代码检索服务 按问题相关性动态检索 按需
L2 探索层 grep / 读文件 / LSP 跳转定义等工具 agent 自主调用 按需

L0 解决「问什么都先懂这个仓库」,L1/L2 解决「问到具体函数时能看到真代码」。只做 L0 会答不准,只做 L1/L2 每次都要重新摸索、又慢又贵。

二、六个可行方案

方案 A:AGENTS.md / CLAUDE.md 指令文件链

⭐ 今天就能做

业界事实标准:AGENTS.md 是正在形成的开放规范(OpenAI Codex CLI、Cursor、Gemini CLI 等均已支持),Claude Code 使用 CLAUDE.md。文件放在仓库里随代码走,每次对话自动加载,无需任何人手动粘贴

本团队在用的 DSH 平台已原生支持该机制(dsh-agent-instructions 模块):每个会话自动读取用户全局 ~/.dsh/AGENTS.md,以及从项目根到当前目录每一级的 AGENTS.md / CLAUDE.md;支持 AGENTS.local.md 本地个人偏好(不进 Git);支持子目录嵌套——agent 在哪个目录干活就自动加载哪份解读;内容相同的文件自动去重,单文件默认上限 1 MiB,且有整体预算控制。

落地示例:仓库根目录放一份「平台架构总览」,server/src/services/ios/ 放「iOS 内存剖析服务的设计与坑」,client/ 放前端结构说明。半小时即可让全组受益。

👉 每人环境各不相同时如何同步?见下方专题一。

方案 B:CI 自动生成「仓库解读文档」(DeepWiki 模式)

第 1 个月

方案 A 的短板是靠人维护会过期。解法是让 AI 在 CI 里自动生成和更新解读

方案 C:共享检索索引(RAG,Cursor / Sourcegraph Cody 模式)

第 2 个月起

建一份全队共享的代码索引(embedding + BM25 混合检索效果最好):

方案 D:MCP Server 共享「代码智能」(最先进的 pull 模式)

平台化阶段

MCP(Model Context Protocol)是当前 agent 生态的事实标准协议。团队部署一个共享 MCP server,暴露 search_code / get_module_architecture / find_symbol(LSP 语义跳转,如开源的 Serena)等工具,每个人的 agent 客户端连接同一个 server。好处:

👉 内部知识库如何对使用者保持闭源?见下方专题二。

方案 E:网关级注入 + Prompt Caching(成本关键)

与 C/D 配套

30 人共用同一段 L0 常驻解读时,务必走 prompt / context caching(Anthropic、OpenAI、DeepSeek 均支持):相同前缀的缓存命中后成本降到原价的约 10%,且首 token 延迟大幅下降。如果团队统一走自建网关(如 LiteLLM),可以在网关层强制给每个请求注入同一段简报前缀——「默认加载」不再依赖每个人自觉配置,而是被平台保证的。

方案 F:Agent 记忆系统(mem0 / Letta)

谨慎使用

持久记忆适合存个人偏好和历史结论(「这位同事负责 websocket 模块」),不适合存代码事实——代码事实会过期,且记忆系统天然缺乏「随代码演进」的机制。团队级代码知识应优先使用 A–E。

三、专题一:AGENTS.md 如何在「每人环境都不同」的团队里同步

结论:能用,而且方案 A 恰恰是最不怕环境差异的。它的同步机制非常干净——AGENTS.md 是仓库里的普通文件,走 Git 同步,不依赖任何人的本地配置,git pull 下来就有。这正是它成为业界标准的原因:把「agent 需要知道什么」当代码资产的一部分管理,而不是每个人的私有配置。

1. 同步机制拆解:哪些走 Git,哪些天生就是个人的

文件位置同步方式放什么
AGENTS.md仓库根目录Git 同步,全员一致仓库级架构解读、规范
<子目录>/AGENTS.mdserver/client/Git 同步,全员一致模块级解读(agent 在哪个目录干活就加载哪份)
AGENTS.local.md各目录可选.gitignore,不同步个人偏好(「回答用中文」「我负责前端」)
~/.dsh/AGENTS.md每人 home 目录本机文件,天生不同步跨项目的个人习惯(语言、代码风格偏好)

关键认知:这个体系故意把内容分成两类——代码知识进 Git(全队共享、随代码演进),个人偏好留本地(互不干扰)。你不需要「把每个人的环境同步成一样」,需要同步的只有前者,而前者本来就是 Git 的本职。

2. 「每个人环境不一样」逐条对上

环境差异是否构成问题原因
操作系统不同(macOS / Linux / Windows)无影响AGENTS.md 就是 UTF-8 文本文件
仓库克隆路径不同无影响DSH 加载器从项目根(默认以 .git 标记识别)逐级向下读到当前工作目录,与克隆在哪无关
agent 工具不同(Claude Code / Cursor / Codex CLI)基本无影响这些工具都认 AGENTS.mdCLAUDE.md;DSH 两者都读,且内容相同时自动去重(就算有人放了一份内容相同的 CLAUDE.md 也只渲染一次)
各人 agent 全局配置不同无影响全局配置管个人偏好,项目文件管项目知识,互不覆盖
有人暂时没 pull 最新唯一的「不同步」来源和代码落后同一个性质,git pull 即解决

30 个人只要都能 git clone 这个仓库,方案 A 就自动对全员生效,零额外配置。

3. 让它长期不腐烂的工程纪律

4. 两个常见坑

四、专题二:MCP 闭源知识网关——内容不出服务端

结论:可以,而且「内容闭源」恰恰是 MCP 相对方案 A / C 的核心优势。这源于 MCP 的根本特性——信任边界反转:方案 A 和 C 是把知识「分发」到每个人手里(文件、索引),MCP 是把知识「留在服务端」,别人只能隔着接口问。你的知识库、源码、索引、embedding 一 byte 都不用离开你的基础设施

1. MCP 客户端到底能看到什么?

客户端可见服务端可控性
① 工具清单 + 描述 + 参数 schema完全可控——想暴露几个工具暴露几个
② 它自己发起的调用参数完全可控——服务端可校验 / 拒绝
③ 服务端返回的结果完全可控——返回什么由你决定

服务端的实现代码、知识库原文、向量索引、embedding、内部文档——全都不在协议暴露面上。用户拿到的只是「问 → 答」的结果流,就像你可以调用一家公司的客服,却不可能拿到它的内部手册。

2. 闭源架构:把 MCP 做成「知识网关」而不是「文件代理」

用户的 agent(30 人的各种客户端)

  • Claude Code / Cursor / Codex CLI / DSH …
▼ 只走 HTTPS + 认证(每人独立 token)

你的 MCP Server(内网部署)—— 对外只暴露语义化工具

  • ask_kb(question) → 综合后的答案
  • get_module_map(module) → 策划过的模块地图
  • find_symbol(name) → 签名 + 摘要 + 文件行号引用
▼ 内部管道,外部永远看不到

内部资产(永不外泄)

  • RAG 检索管道 + 向量索引
  • 知识库 / 内部文档 / 源码
  • 可选:服务端 LLM 做答案合成

关键设计决策:暴露什么粒度的工具,决定了泄露多少。

❌ 泄露式设计(别这么做)✅ 闭源式设计
read_document(id) 返回文档全文ask_kb(question) 返回综合后的答案
grep(pattern) 直接查内部库find_symbol(name) 返回签名 + 一句话摘要 + 文件行号引用
list_all_docs() 枚举知识库get_module_map() 返回你策划过的模块地图

最强闭源形态:工具内部做「RAG 检索 → 服务端 LLM 合成 → 只回传最终答案」,调用方的 agent 从头到尾没见过任何原始切片,只见过结论——「给答案,不给语料」(answer, not corpus)

3. 先认清「闭源」能做到哪一步

✅ 可以完全藏住⚠️ 只能管控、不能根除
MCP server 实现代码用户把问到的答案复制出去(任何系统都无解)
知识库原始文档全文通过海量查询批量抽取语料(可用下面的手段压制)
向量索引 / embedding答案中带出的局部片段
检索管道、prompt 模板、知识库规模与目录结构

针对右列的配套管控(均为 MCP 服务端的标准做法):

4. 必须直面的权衡:输出越「闭」,调用方 agent 的推理能力越弱

档位泄露风险agent 能力
返回原文切片最强(agent 能自己细读代码)
返回加工片段(摘要 + 定位)中(够回答多数问题;实践中的甜点位
只返回合成答案最低最弱(agent 沦为转发器,深挖能力取决于服务端合成质量)
如果你的诉求包含「知识库内容本身不能给使用者」,方案 D 不是可选项,而是唯一选项——A 和 C 的分发模型从原理上就做不到。DSH 内部已捆绑 @modelcontextprotocol/sdk,作为客户端接入远程 MCP server 没有障碍;协议通用,团队里用 Cursor / Claude Code 的人连同一个地址即可。

五、方案对比总结

方案成本新鲜度准确性内容可闭源访问可审计适合阶段
A. AGENTS.md极低靠人维护❌ repo 权限即全文立刻做
B. CI 生成解读自动保鲜中高❌ 产物进 Git第 1 个月
C. 共享 RAG 索引随 commit 重建△ 切片会回传第 2 个月起
D. MCP 代码智能中高实时最高✅ 原生支持✅ 调用留痕平台化阶段
E. 网关 + 缓存✅ 网关日志与 C/D 配套
F. 记忆系统△ 个人本地仅个人偏好

「内容可闭源」= 知识库原文能否不给使用者;「访问可审计」= 能否留痕谁在何时问了什么。两项都是 MCP(方案 D)的独有优势,详见专题二。

六、推荐落地路线(30 人团队)

第 1 周

仓库根目录 + 关键子目录编写 AGENTS.md(人工或让 agent 辅助生成初稿),全员立即受益。

第 1 个月

CI 流水线自动再生成解读(方案 B),并让 L0 简报保持 ≤ 3k tokens;同步启用网关统一注入与 prompt caching(方案 E)。

第 2 个月起

建共享混合检索索引(方案 C)+ 接入语义代码 MCP server(方案 D);涉及内部知识库时直接采用闭源网关形态(见专题二),权限模型与审计日志从第一天就设计进去。

全程治理

建立「黄金问题集」:收集团队真实问过的 50 个源码问题,每次调整注入策略就回归评测一次,防止「注入了很多但答案没变好」。

补充:一个现成的参照物

本团队环境中已有一个 xnu-source-analysis 技能——它就是「预制源码解读结果打包成可复用知识」的活样本(XNU 内核内存管理源码的结构化解读笔记,按需加载)。这与方案 B 的产物形态是同一件事:把解读沉淀为随仓库演进的资产,而不是每次对话现场重读源码。