# Anchoring AI to Reference Applications

> 原文链接：https://martinfowler.com/articles/exploring-gen-ai/anchoring-to-reference.html
> 作者/来源：Birgitta Böckeler / Thoughtworks (Martin Fowler's blog)
> 阅读日期：2026-04-02

## 一句话总结
通过将可编译的参考应用程序（reference application）作为 AI agent 的 few-shot example 来源，并结合 MCP server 暴露代码模式和 git commit 历史，可以实现服务模板与实际项目之间的 drift detection 和自动对齐。

## 核心论点

文章解决的是企业级软件开发中的一个常见痛点：组织维护服务模板（service templates）作为"golden paths"来强制执行编码标准，但一旦团队从模板实例化出服务后，保持与模板更新的同步就变得非常乏味。Birgitta Böckeler 提出使用生成式 AI 来解决这个挑战。

核心技术是 **few-shot prompting with reference code**——"提供我们期望的输出示例会带来更好的结果"。关键创新在于：不是在 markdown prompt 中嵌入代码片段（这些片段无法被编译验证），而是在一个真正可编译的参考应用项目中维护示例代码，确保一致性和正确性。

具体实现分两步。**第一步**：构建 MCP server 为 AI agent 提供来自 Spring Boot 参考应用的编码模式（repository、service、controller 类等）。**第二步**：扩展 MCP server 暴露参考应用的 git commit 历史，让 agent 先识别最近的变更来限定分析范围，然后生成 drift report 供人类审查，最后由 AI 编写代码来弥合差距。

文章也诚实地指出了局限性：像添加 `@Slf4j` 注解和 debug 语句这样简单的变更，也可以由确定性的 codemod 工具（如 OpenRewrite）完成。AI 的真正价值在于需要动态编码的场景——如将非标准化的日志语句转换为结构化格式——这超出了基于正则表达式的简单变换能力。

## 关键概念
- **Reference Application（参考应用）**：一个可编译的、持续维护的示例项目，作为 AI agent 的编码模式来源和质量锚点
- **Golden Path（黄金路径）**：组织推荐的标准化开发路径，通过服务模板和参考应用来体现
- **Drift Detection（漂移检测）**：检测实际项目与参考应用之间的差异，识别需要同步的变更
- **Few-shot Prompting with Compilable Code**：将可编译代码（而非 markdown 片段）作为 few-shot 示例，确保示例本身的正确性
- **MCP Server as Pattern Provider**：用 MCP 协议将参考应用的编码模式暴露给 AI agent

## 实践建议
1. 维护一个可编译的参考应用作为编码标准的"活文档"，而非仅用文档描述标准
2. 构建 MCP server 将参考应用的代码模式和 git 历史暴露给 AI agent
3. 使用 git commit 历史来限定 drift detection 的范围——只关注最近的变更，避免全量对比的噪音
4. 生成 drift report 供人类审查，而不是让 AI 直接自动修复——人类判断在此环节仍然重要
5. 区分确定性工具能处理的简单变更（用 OpenRewrite 等 codemod 工具）和需要 AI 的动态编码场景
6. 确保参考应用本身持续维护和编译通过——作为 few-shot 来源，它的质量直接决定 AI 输出质量

## 独到观点
最独到的贡献是将"参考应用"从被动的模板提升为主动的 AI 辅助工具。传统上，参考应用只在项目初始化时被使用，之后就与实际项目渐行渐远。通过 MCP server 将参考应用的模式和变更历史持续暴露给 AI agent，参考应用变成了一个"活的标准执行者"。此外，区分"可用 codemod 解决的问题"和"需要 AI 的动态编码问题"的务实态度也值得赞赏——不是一切都需要 AI。

## 与其他文章的关联
- 与 **Fowler Quality with Agents**（#20）直接互补：参考应用可以解决 #20 中发现的模式违规和类型系统问题——agent 有了明确的编码模式参考
- 与 **Code Execution with MCP**（#17）技术相关：都使用 MCP 协议将信息暴露给 AI agent，但方向不同——#17 暴露工具定义，本文暴露编码模式
- 与 **Writing a Good CLAUDE.md**（#15）互补：`CLAUDE.md` 提供文字描述的 WHAT/WHY/HOW，参考应用提供可执行的代码示例——两者配合效果最佳
- 与 **Writing Tools for Agents**（#18）相关：MCP server 的设计应遵循工具设计原则
- 与 **Fowler SDD Tools**（#24）同属开发工具链话题：参考应用和 drift detection 是 specification-driven development 的工具组件
- 与 **Fowler Humans and Agents**（#22）理念一致：drift report 供人类审查的设计体现了人机协作原则
