问题出在哪用Claude Code或Cursor写代码前几周感觉效率翻倍。但用了三个月后你会发现一个反复出现的问题AI生成的代码不遵守你的项目规范。它不知道你上季度把REST换成了GraphQL不知道你废弃了那个认证库也不知道你的架构师刻意把每个服务控制在500行以内。这不是模型能力的问题。GPT-4o、Claude 4、Gemini 2.5——底层推理能力都够用。问题在于上下文。每次新会话AI都从零开始。你的项目规范、架构决策、踩过的坑它一概不知。2025年中Anthropic和Sourcegraph的工程师给这个问题起了名字Context Engineering上下文工程。2026年越来越多的团队在实际项目中用上了这套做法。Packmind今年1月的调查91%的工程团队用了至少一种AI编程工具但在同时用6个以上工具的团队里只有28%的人对代码质量有信心。差距不在工具在上下文。Context Engineering 和 Prompt Engineering 有什么区别很多人把这两个概念搞混。简单说Prompt Engineering管的是一句话怎么写。你调整措辞、加few-shot示例、换个语气目标是让单次交互的输出更准。Context Engineering管的是整个信息管道。你设计AI在每次推理时能看到什么——系统提示词、检索到的文档、对话历史、工具定义、长期记忆。Phil Schmid在2025年中说过这是在正确的时间以正确的格式给模型正确的信息和工具。判断你在做哪一个看改动方向改措辞、换形容词还是Prompt Engineering改检索逻辑、调上下文窗口管理、重新编排记忆层就已经进了Context Engineering。Sourcegraph 7.0的文档把Context Engineering拆成四根支柱我在项目中验证过好用指令层系统提示词定义角色、约束、输出格式检索层从向量数据库、文件系统、SQL按需拉取事实记忆层短期的对话历史 跨会话的长期偏好工具层AI可调用的函数定义和返回结果随便哪层出问题输出都会跑偏。好消息是第1层和第2层用几个文件就能搞定不需要搭基础设施。4个文件搞定项目级Context Engineering下面是我在项目中用的方案。不用向量数据库不用RAG管道4个配置文件就能让AI把你的项目规范记住。文件1CLAUDE.mdClaude Code专用放在项目根目录Claude Code每次启动自动读取。# CLAUDE.md ## 项目概述 后端API服务Python 3.12 FastAPI部署在AWS Lambda上。 数据库用PostgreSQL 16ORM用SQLAlchemy 2.0。 ## 代码规范 - 函数命名snake_case不超过30个字符 - 类命名PascalCase - 每个函数必须有type hints包括返回值 - 禁止使用 from module import * - 异常处理自定义异常类不允许裸except ## 架构决策 - API层只做参数校验和响应包装业务逻辑放service层 - service层之间不互相调用需要共享逻辑提到common/ - 每个service文件不超过400行超了就拆 ## 测试要求 - 测试文件放在同目录的tests/下 - 用pytest不用unittest - mock外部依赖不mock内部函数 - 每个公开函数至少2个测试用例正常异常 ## 踩坑记录 - SQLAlchemy 2.0的Session不要用旧版的query()语法用select() - FastAPI的Depends不能放在函数体内做条件判断 - Lambda冷启动优化把import放在函数外层要点就一个具体。别写遵循clean architecture原则AI读了跟没读一样。写service层不超过400行mock外部依赖不mock内部函数这些才是它能照做的指令。文件2.cursorrulesCursor专用Cursor读的是根目录的.cursorrules文件。格式和CLAUDE.md类似但Cursor对结构化指令的响应更好# .cursorrules ## 技术栈 - Frontend: React 19 TypeScript 5.8 Tailwind CSS 4 - State: Zustand (不用Redux) - 路由: React Router 7 - 请求: 用原生fetch 自定义的useApi hook不装axios ## 组件规范 - 组件文件用PascalCase命名UserProfile.tsx - 每个组件一个文件夹组件代码 index.ts 测试 样式 - Props必须定义interface命名为{ComponentName}Props - 不用forwardRef用新的ref prop语法React 19 ## 禁止事项 - 禁止any类型用unknown替代 - 禁止在组件内定义接口请求函数统一放services/ - 禁止直接操作DOM用ref - 禁止使用class组件 ## 文件结构 src/ ├── components/ # 通用UI组件 ├── features/ # 按业务功能划分的模块 ├── hooks/ # 自定义hooks ├── services/ # API请求 ├── stores/ # Zustand stores ├── types/ # 类型定义 └── utils/ # 工具函数文件3.github/copilot-instructions.mdGitHub Copilot专用GitHub在2025年底给Copilot加了这个配置入口很多人还不知道。# Copilot Instructions 本项目是一个电商后台管理系统。 生成代码时遵守以下规则 1. 所有金额字段用Decimal类型不用float 2. 时间字段统一用UTC显示时再转时区 3. 分页接口统一用cursor-based分页不用offset 4. 日志用structlog不用print或logging模块 5. 数据库迁移用Alembic每个migration文件要有注释说明改了什么文件4CONVENTIONS.md通用型不管用什么工具这个文件都有用。在系统提示词里加一句先读CONVENTIONS.md再开始工作就行。# CONVENTIONS.md ## Git规范 - 分支命名feature/xxx, fix/xxx, refactor/xxx - commit message格式type(scope): description - 每个PR不超过500行改动超了拆 ## 代码审查标准 - 新增函数必须有文档字符串 - 新增API端点必须同步更新OpenAPI schema - 性能敏感操作数据库查询、文件IO必须记录耗时日志 ## 部署流程 - main分支自动部署到staging - 打tag后手动审批部署到production - 数据库migration和代码部署分开执行实测效果用Context文件前后对比我拿一个3万行的FastAPI项目做了对比测试。任务让AI新增一个订单导出接口。没有CLAUDE.md时 - AI用了from sqlalchemy.orm import Session和旧版query语法项目已经切到SQLAlchemy 2.0的select - 异常用了裸except - 没写类型标注 - 测试文件放在了根目录的tests/而不是同目录下 - 手动修改花了25分钟纠正有CLAUDE.md后 - 自动用select语句 - 异常用了项目自定义的OrderExportError - 完整的type hints - 测试放在正确位置覆盖了正常和异常两条路径 - 手动修改3分钟只调了一个查询条件AI的推理能力没变变的只是上下文。三个常见的坑1. 写太多CLAUDE.md超过2000字AI反而容易忽略后面的内容。Anthropic的文档提到过context rot——上下文越长模型对其中信息的召回准确率越低。保持在500-1000字。规范太多就拆成多个文件主文件里用路径引用。2. 太抽象遵循SOLID原则写了等于没写。AI需要的是service层之间不互相调用每个函数不超过50行——可执行的具体规则。3. 不更新三个月前写的上下文文件项目已经迭代了好几轮。文件里写着用axios但你上个月换成了原生fetch。过期的上下文比没有上下文更糟因为AI会很自信地按照错误的规范写代码。建议把上下文文件的更新放进Sprint Review每个迭代结束花10分钟检查一遍把新的架构决策同步进去。往后走从文件到系统4个文件是起点够用但不够强。你的团队有十几个仓库的话每个仓库维护一份上下文文件会变成负担。AWS今年在Bedrock AgentCore里上线了AWS Context从数据库、Slack、文档、邮件自动建知识图谱给Agent用。Sourcegraph 7.0做了代码级上下文索引。Packmind提出了ContextOps把上下文的创建和分发当基础设施管。但对大多数团队来说这些平台级方案还早。先把那4个文件写好、保持更新已经能盖住80%的上下文问题。可以今天就做的事在项目根目录建一个CLAUDE.md或.cursorrules或copilot-instructions.md看你用什么工具花20分钟把项目的技术栈、代码规范、架构决策、踩坑记录写进去让AI根据这个文件生成一个函数看看是不是自动遵守了你的规范下个Sprint Review时检查一遍更新过期的内容20分钟写完后面每次AI交互都少花纠错时间。别让AI猜直接告诉它。