让AI编码助手更聪明的提示词模板(基于20万星开源项目)

今天GitHub上有个项目一天暴涨20万星——ECC(不是椭圆曲线加密,是Agent Harness Performance Optimization System)。我连夜翻完了它的源码和文档,发现它本质上是一套针对AI编码智能体的上下文管理框架

作为提示词爱好者,我第一时间想到的是:能不能把它的核心设计思路提炼成一套prompt模板,直接用在Cursor、Claude Code甚至OpenCode里?

试了一下午,效果出乎意料。原来让它「记住项目上下文」比你想的简单。

这个模板解决什么问题

很多人在用AI编码助手时都有这个问题:

  • 它记不住你项目里的命名规范,上一段刚写了camelCase,下一段又变成snake_case
  • 它不知道哪些文件夹不能动,比如/node_modules或者生成的配置文件
  • 它写出来的代码功能对,但结构一团糟,没有遵循你项目的设计模式

ECC项目把这些问题归类为Skills(技能)、Instincts(直觉)、Memory(记忆)、Security(安全)四个维度。我直接把这四个维度塞进system prompt里,效果立竿见影。

核心思路:把AI当新员工培训

不要指望AI能自己「理解」你的项目。你需要像带新入职的工程师一样,明确告诉它:

  • 技能:你会什么技术栈(React + TypeScript?Node + Express?)
  • 直觉:你的编码风格是什么(函数式优先?类优先?)
  • 记忆:之前改过哪些文件,有哪些重要决策记录
  • 安全:哪些文件绝对不能碰,哪些操作需要确认

ECC项目正是用一组结构化文件来承载这些信息。但我们日常用Cursor/Claude Code时,只需要一个精心设计的system prompt就够了。

完整提示词模板(可直接复制)

以下是我测试过的模板,你在新对话开始时先发送这个,然后正常提需求:

markdown
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
你是我的资深开发伙伴,以下是你需要遵守的规则:

# 技能清单
- 技术栈:React 18 + TypeScript 5 + Tailwind CSS + Vite
- 测试框架:Vitest + Testing Library
- 数据库:Prisma ORM + PostgreSQL
- 包管理器:pnpm

# 编码直觉
- 优先使用函数组件和Hook,避免class组件
- 变量命名使用camelCase,组件名使用PascalCase
- 文件命名:组件用PascalCase,工具函数用camelCase
- 所有类型定义放在 `types/` 目录下,同名文件
- 避免使用any,优先用interface而非type(除非需要联合类型)

# 记忆要点
- 当前项目根目录 `/Users/me/projects/my-app`
- 项目采用 monorepo 结构:`packages/web` 和 `packages/api`
- 最近一次改动:在 `packages/web/src/components/Header.tsx` 中添加了登录按钮
- 用户认证使用 JWT,token 存放在 httpOnly cookie 中

# 安全规则
- 绝对不要修改 `node_modules/`、`.git/`、`dist/` 目录下的文件
- 修改 `prisma/schema.prisma` 之前,必须先打印当前内容让我确认
- 删除或重命名文件之前,必须列出受影响文件列表让我确认
- 不要向我解释 `import` 语句,除非我要求
- 生产部署相关的命令(如 `db push`)需要先告诉我完整命令

现在我已经准备好开始工作了。请根据你的理解回复一个简短的“ready”确认,然后等待我的具体需求。

效果演示:差prompt vs 好prompt

差prompt

text
1
请帮我写一个用户登录的API接口。

AI可能会用Express写出传统的callback风格,或者用错的数据库驱动,甚至可能动你的Prisma文件。

好的prompt(用了上面模板后)

text
1
现在我需要一个用户登录的API接口,类型定义放在type下面,使用Prisma查询。

AI会输出:

typescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// packages/api/src/handlers/auth/login.ts (文件名自动符合camelCase规则)
import { Request, Response } from 'express';
import { prisma } from '../../lib/prisma'; // 自动符合monorepo路径
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';

export async function login(req: Request, res: Response) {
  const { email, password } = req.body;
  // 类型推断,没有any
  const user = await prisma.user.findUnique({ where: { email } });
  if (!user) return res.status(401).json({ error: 'Invalid credentials' });
  
  const valid = await bcrypt.compare(password, user.password_hash);
  if (!valid) return res.status(401).json({ error: 'Invalid credentials' });
  
  const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });
  
  res.cookie('token', token, { httpOnly: true, secure: true });
  res.json({ ok: true });
}

注意它自动用了httpOnly cookie(对应了记忆中的认证方式),文件路径符合monorepo,没有动Prisma schema,类型也准确。

变体和注意事项

变体1:轻量版(不需要完整模板时)
如果只是临时问一个小问题,可以用单句版:

text
1
请按照我项目的规范回答:技术栈React+TypeScript,使用Prisma,函数组件,camelCase命名。

变体2:追加版(已有对话,更新规则)

text
1
更新规则:从现在开始,所有SQL查询必须使用参数化查询,禁止拼接字符串。另外,不要修改 src/legacy/ 下的文件,那是旧版保留代码。

变体3:项目级记忆(多个文件)
如果你的项目很大,可以让AI先读取一个MEMORY.md文件:

text
1
请先读取项目根目录下的 MEMORY.md,然后根据其中的规则回答我的问题。

这样你只需要维护一个markdown文件,每次新对话时引用即可。ECC项目就是用这个思路,不过它把文件拆成了多个。

为什么这样写有效

直接给出规则比让AI自己「猜测」你的喜好要高效得多。底层原因是:大模型的上下文窗口有限,它会优先处理近期内容。你把规则放在system prompt的开头,相当于给了它一个强制的「思维框架」。

而且“安全规则”这一段特别重要——我测试中发现,如果不加限制,AI偶尔会尝试修改node_modules(明明它不应该),或者在生成迁移脚本时直接执行prisma db push到生产环境。加上安全规则后,这类风险降为零。

一点个人看法

ECC项目20万星多少有点“网红效应”,但它的设计理念确实值得借鉴。我把它的四象限模型简化成一个prompt模板后,发现日常编码效率提升至少30%——不是我吹,而是之前老是改代码风格浪费太多时间。

如果你用的是Claude Code或者OpenCode这类支持自定义system prompt的工具,强烈建议你把模板里的技能/直觉/记忆/安全对应到你的项目。花5分钟配置,省下后面无数次的“不,我不是这个意思”。

试试看,然后告诉我效果。

AI coding workflow with prompt template