本文目录
一句话:AI 帮你写代码的效果,既受模型能力影响,也受你提供的上下文、约束与验收方式影响。这就是「上下文工程」,也是面试聊 AI 协作时最能体现深度的点。
心智:模型只知道你给它的
回到第 1 篇——一次调用能使用哪些项目资料,取决于实际传入的上下文,以及应用接入的检索、记忆和工具。不能把“工具已经能读仓库”等同于“本次调用已经看过所有相关文件”。所以「让 AI 写对代码」本质是:把对的信息,在对的时机,以对的结构喂给它。
System Prompt:先定身份和规矩
System Prompt 通常用于提供身份和较高优先级的任务规则;具体角色与优先级要看所用 API。提示文本不能替代真实权限、沙箱和测试。一个编码任务的规则示例是:
你是这个项目的资深工程师。
- 技术栈:TypeScript + React 19 + Vite;包管理用 pnpm。
- 风格:跟随现有代码的命名和注释密度,不引入新依赖除非必要。
- 红线:不要改 *.config 和数据库迁移文件;不要删测试。
- 完成后:跑 `pnpm test`,确认通过再结束。注意它在做的事:给身份、给约束、给红线、给验收标准——而不是堆一堆"请你很棒地写代码"这种废话。
上下文工程的四个动作
- 给相关、别给全部:不是把整个项目都塞进去(注意力会稀释、还烧 token),而是给这次任务相关的文件 / 片段。
- 给结构,不只是代码:目录结构、关键约定、数据流,比一堆零散代码更能让它"进入状态"。
- 给反例和边界:"参考 X 文件的写法""不要用 any""别动 Y"——负向约束往往比正向描述更有效。
- 给验收方式:让它知道"怎样算做完"(跑通哪个测试 / 命令),它会自己往那个目标收敛。
一个对比
❌ 「帮我加个登录功能」
✅ 「在
src/pages/Login.tsx加邮箱+密码登录,复用src/api/auth.ts里的login(); 表单校验参考Register.tsx的写法;不要引新依赖;完成后跑pnpm test:auth确认通过。」
后者把"上下文 + 边界 + 验收"都给齐了,AI 一次写对的概率高得多。
常见坑
- 上下文塞太满:以为给得越多越好,结果关键约束被淹没。够用就好。
- 只说要什么,不说不要什么:漏了红线,它就可能动你不想让它动的东西。
- 不给验收标准:它不知道"算不算做完",容易半成品或过度发挥。
- 一轮对话越拖越长:历史堆太多后它开始"忘事",该开新对话就开新的(或做摘要)。
关联面试题
- 「怎么让大模型稳定输出你想要的格式 / 行为?」(System Prompt + 约束 + 校验)
- 「Prompt 工程里你踩过哪些坑?」
👉 去 题库 搜 Prompt 工程 / System Prompt / 稳定输出。
训练营延伸
上下文工程往工业级走,就是 Agent 里的「上下文管理」:超长任务怎么压缩历史(摘要 / 裁剪)、多 Agent 之间怎么传上下文——是训练营 Agent 工程那条线的硬核内容。