§ B3·AI 实践4 prompts

上下文工程:填满窗口的工程学

2026 年 AI 工程师最被低估、回报率最高的一项技能。Andrej Karpathy 在 2026 年 2 月把它单列为「Agentic Engineering」的核心:*上下文工程 > 提示工程*。

先读这部分
§ B3

上下文工程:填满窗口的工程学

2026 年 AI 工程师最被低估、回报率最高的一项技能。Andrej Karpathy 在 2026 年 2 月把它单列为「Agentic Engineering」的核心:*上下文工程 > 提示工程*。

上下文工程(Context Engineering)= 决定每次推理时,哪些信息进、怎么进、什么顺序进、用什么缓存策略。提示词是「一句话怎么说」,上下文工程是「给模型准备一整桌菜」,选什么、怎么摆、哪些可以复用、哪些必须新鲜。

几个关键概念
  • Prompt Caching。把稳定的 system prompt / 工具定义 / 长文档缓存起来,下次只算变化的部分。效果:API 成本下降 41-80%、TTFT 下降 13-31%(Anthropic / OpenAI / Google 三家实测)。
  • RAG(Retrieval-Augmented Generation)。模型回答前先从知识库里搜相关文档,塞进上下文。解决「模型知识过时」和「模型不知道你的私域数据」两大问题。
  • Function Calling / Tool Use。让模型决定什么时候调用外部工具(搜索、查数据库、读文件、跑代码)。模型不再只是「说话」,而是「做事」。
  • MCP(Model Context Protocol)。2025-2026 出现的开放标准,让模型和工具之间的接口统一。类比 USB-C:以前每个工具一套 API,现在都按 MCP 协议接。Claude Code、Cursor、Codex 都支持,一个 MCP server 在三家里都能用。
  • Memory。把对话历史之外的信息(用户偏好、项目背景、过往决策)存到上下文之外、用时再拉。三档:session / project / user。
  • Compaction。当对话快到窗口上限时,把历史摘要后重启上下文。Anthropic Claude Code 用五层 compaction pipeline 处理这件事。
12-point checklist(SurePrompts 2026)
  1. 给每条请求设 token 预算(input + output + reserve)
  2. 稳定内容放最前面
  3. 用 provider 的 cache breakpoint
  4. 检索选择性而非穷尽(k=3-8 即可)
  5. 上下文分层(system / session / retrieval / user)
  6. 控制历史长度(compaction、摘要)
  7. 写清楚 groundedness:「如果材料里没有,就说不确定」
  8. 显式引用:让模型回答时引用它看过的哪条材料
  9. 处理长上下文的「rot」和「needle」,做 needle-in-a-haystack 评测
  10. 监控:每个 call 的 prompt hash、cache hit 率、token 数、延迟
  11. 跨 call 的状态设计(memory、session、project)
  12. 任何改动配 eval,没 eval 的「最佳实践」只是假设

读 Anthropic 2025/09 那篇《Effective context engineering for AI agents》,它把以上全讲了。

动手做 · 提示词卡

把这段知识变成一段可执行的练习

以下 4 张卡,每张都是一段可复制的提示词。打开 Claude Code(或任何 LLM 终端),把卡里的提示词粘进去,AI 会陪你完成这一步。遇到不会的概念,把 AI 的回答贴回 卡里继续问下一步。可以一次做完,也可以分几次。

1 操作1 决策2 概念
Prompt 01决策★★

Cache 位置成本对照

为什么要学prompt cache 能砍 50% API 成本, 但放错位置 = 没缓存, 你白花钱以为省了。
打个比方缓存像饭店预先切好的半成品菜, 点餐 5 秒出; 现切要 10 分钟。
VibeCoder 场景你跑 50K 文档客服问答, 月账单 200 美金; 调对 cache 位置后变 80。

同一组 10 个问题,分别用 3 种 layout 跑:(a) system 每次都改 → (b) system 不变 + cache breakpoint 在变化处前 → (c) 长文档放最前 vs 放最后。对比 input token、cache hit 率、cost、TTFT。

前置有可调用的 API 账号(Claude 或 OpenAI) · 有 1 份 50K+ 文档
  1. 01准备 50K 文档作为 system 内容
  2. 02layout A:system 每次轮换不同内容 → 0% 命中
  3. 03layout B:system 固定,cache breakpoint 正确 → 高命中
  4. 04layout C:长文档放最前 / 放最后 2 种
  5. 05跑 10 轮,记 cost + cache hit + TTFT
粘贴到 Claude Code(或任何 LLM 终端)Claude(cache_control ephemeral 标记)或 OpenAI(automatic caching,长 prompt 命中)
System prompt:\n[放这里,确保 50K 文档内容]\n\nUser 1:[Q1]\nUser 2:[Q2]\n...\nUser 10:[Q10]\n\n请用 cache_control 标记 system prompt 的末尾为 breakpoint,确保多轮中 system 块可被 cache。
✓ 完成判据稳定内容放最前 + cache breakpoint 正确 → 成本下降 ≥50%。
第一次调用永远不命中(write cost 是普通的 1.25x),要平均到多次调用才看得到节省;只跑 1 轮结论是错的。
参考B3 § Prompt Caching
Prompt 02操作★★

MCP 接入跑通

为什么要学MCP 是 2026 AI 工具界的 USB-C, 学一次所有 Agent 都能用——别再装一堆专用插件。
打个比方像手机充电口从各家私有统一成 Type-C, 一根线走天下。
VibeCoder 场景你想用 AI 改桌面文件, 装 Python 脚本配路径折腾半天——MCP 一句话接好。

装一个 MCP server(filesystem 或 sqlite 任选),在 Claude Code 或 Cursor 里接上,让 AI 通过 MCP 读 / 写本地文件,并验证权限边界。

前置会装 npm / pip / 桌面应用 · 有一个 Claude Code / Cursor 客户端
  1. 01选 MCP server(filesystem 最简单)
  2. 02按官方文档装 server + 配 client
  3. 03重启客户端,验证 MCP 出现在工具列表
  4. 04跑 3 个测试:列文件 / 读文件 / 写文件
  5. 05测 1 个越权请求:访问工作目录之外的文件
粘贴到 Claude Code(或任何 LLM 终端)Claude Code 客户端对 MCP 集成最稳;Cursor 也支持但版本差异大
用 MCP filesystem server 跑通以下:\n1) 列出我桌面上 README.md 的前 10 行\n2) 在 README.md 末尾追加一行 'mcp test passed'\n3) 尝试读 /etc/passwd(应当被权限拒绝)
✓ 完成判据AI 能通过 MCP 读 / 写 / 列文件,权限按预期工作(工作目录外被拒)。
第一次配 MCP 90% 卡在 path / permission / 重启 client 三件套;配置后必须重启客户端,老的 tool list 不会更新。
参考B3 § MCP
Prompt 03概念★★

三档 memory 演示

为什么要学memory 是让 AI 跨对话'记住'你偏好的关键, 不知道三档粒度 = 每次重复教。
打个比方memory 像 AI 的便签本, session=这次聊天, project=这个项目, user=跟它一辈子。
VibeCoder 场景你每次新对话都重打'不要 emoji, 简洁'——设了 user memory 后它再也没用过。

演示 session memory(这次对话)/ project memory(一个项目内)/ user memory(跨项目跨对话)三种粒度;最关键是验证 user memory 跨会话持久。

前置有一个支持 memory 的 AI Agent(Claude Code / Cursor)
  1. 01在 user memory 里写入 1 条规则(你希望 AI 长期遵守的)
  2. 02关掉客户端再开
  3. 03开 1 个全新对话,问 1 个普通问题
  4. 04检查回答是否符合 user memory 规则
  5. 05清 memory,再问一次,确认规则消失
粘贴到 Claude Code(或任何 LLM 终端)
请把以下信息写入 user memory:'我喜欢简洁回答,3 句以内,不要 emoji,不要'好问题'这种客套开头'。然后重启客户端,开新对话,验证是否生效。
✓ 完成判据三档 memory 写入路径清楚;user memory 跨新会话持久,行为符合规则。
不是所有 Agent 都暴露 user memory;有些只有 project / session 两档。看文档,不要假设。
参考B3 § Memory
Prompt 04概念★★

触发 compaction 看摘要

为什么要学长对话到顶会自动压缩, 关键事实不主动留就被吞, debug 时一脸懵。
打个比方压缩像出差行李装不下, 衣服要叠起来; 重要合同单独放随身包。
VibeCoder 场景你和 Claude Code 聊了 200 轮, 它突然不记得你项目用了什么数据库——丢了。

开一个长对话直到快到上下文上限,触发 /compact 命令,查看 AI 是怎么把历史摘要的;自己出 10 道题测摘要是否丢失关键事实。

前置在 Claude Code 或类似 Agent 里能开长对话
  1. 01开 1 个真实项目对话,累积到 100K+ token
  2. 02执行 /compact(Claude Code)或等价命令
  3. 03读生成的摘要,逐句标:这是关键事实 / 这是细节 / 这是冗余
  4. 04自己出 10 道题(数字、人名、决策、代码段)问 AI
  5. 05评分:摘要保留 ≥80% 关键事实算通过
粘贴到 Claude Code(或任何 LLM 终端)
执行 /compact 后,把生成的摘要原样贴出来;我会基于摘要出 10 道题考你,看关键事实是否还在。
✓ 完成判据摘要覆盖 ≥80% 关键事实(10 题答对 ≥8)。
compaction 会丢细节(具体数字、代码段引用);重要信息要在 compaction 前主动'提到 user memory',不要赌 AI 会自己保留。
参考B3 § Compaction