Prompt 与上下文工程全景
学习导航
完成本文后,你将能够
- 能够把一次模型调用拆成指令层级、任务说明、上下文、示例、输出约束和评估样例六个部分。
- 能够区分 prompt engineering 与 context engineering,并说明什么时候要改文字、什么时候要改上下文供应链。
- 能够为一个生产提示设计结构化输出、回归评估和提示注入防护边界。
这个模块解决什么问题
Prompt engineering 最早像一组经验技巧:写清楚、给例子、让模型一步步处理。这个基础仍然重要,但 2026 年的生产系统已经不再只是“调一句咒语”。OpenAI 文档强调 prompt 是让模型稳定满足需求的指令设计;Anthropic 把 context engineering 称为 prompt engineering 的自然演进:问题从“怎么写一句话”扩展为“本轮推理该给模型哪些 token、哪些工具、哪些历史、哪些约束”。
因此,本模块把 Prompt 分成两层。第一层是狭义提示工程:角色、任务、约束、示例、输出格式和推理策略。第二层是上下文工程:系统/开发者/用户/工具消息的权威顺序,RAG 或 MCP 带来的外部资料,工具 schema,历史摘要,安全策略,评估样例和结构化输出。旧稿中的 CRISPE、zero-shot、few-shot、CoT、ToT 等模式仍然保留,但现在要放进更完整的上下文系统里理解。
一个好 prompt 的目标不是让模型“听话一次”,而是让同一类任务在模型升级、输入变化、上下文变长和攻击性内容出现时仍然可测试、可解释、可回滚。它既要帮助模型理解任务,也要告诉应用如何判断输出是否合格。
核心工作流
工作流的第一步是确定权威顺序。OpenAI Model Spec 把指令分成 Root、System、Developer、User、Guideline 和 No Authority;API 文档也强调高优先级 instructions 会覆盖普通 input。实践里可以简化成:平台/系统规则最强,开发者规则定义产品边界,用户请求定义本轮目标,工具输出和检索资料是数据而不是命令。这个边界是提示注入防护的地基。
第二步是构造上下文。狭义 prompt 只写任务,context engineering 会决定是否加入用户画像、历史摘要、检索证据、工具返回、schema、反例、预算和失败策略。Anthropic 的上下文工程观点很适合 Agent:多轮循环里不断产生新信息,不可能把所有内容都塞进窗口,必须持续选择、压缩和校验。
旧稿中的结构化模板仍然有用,可以压缩成一个 baseline:
角色:你是一个面向工程团队的技术写作助手。
任务:把输入材料整理成可执行 checklist。
上下文:{{source_notes}}
约束:不要添加材料中没有的事实;不确定处标为“待核验”。
输出:JSON,字段为 title、risks、checklist、sources。
示例:给出 1 个高质量输入/输出对。
评估:输出必须引用至少 2 个来源,且 checklist 每项可执行。这个模板不是为了固定所有任务,而是提醒你把“指令、上下文、输出、评估”放在一起设计。对于支持结构化输出的模型,JSON Schema 应该承担格式约束,prompt 负责语义标准、边界样例和拒答规则;不要用一堆“必须输出合法 JSON!!!”替代类型系统。
旧稿里的 CRISPE 也可以继续作为入门心智模型:Capacity/Role 让模型进入合适能力子空间,Insight 提供背景,Statement 明确动作,Style 控制表达,Parameter 给出硬约束,Experiment 用示例校准任务。但今天更推荐把它翻译成可测试字段,而不是背缩写。比如“角色”要对应实际受众和任务边界,“背景”要来自可追溯上下文,“格式”最好由 schema 验证,“示例”要覆盖正例和反例。这样 CRISPE 不再是玄学口诀,而是 prompt review checklist。
Few-shot 与 ICL 的旧经验也要保留但降噪。示例并不只是告诉模型“答案长什么样”,还在暗示分类边界、语气、字段粒度和错误处理方式。示例顺序、类别平衡、是否包含边界案例都会影响输出。如果一个 prompt 只有成功样例,模型会倾向于无论资料是否足够都给出完整答案;加入一个“资料不足时拒答”的样例,往往比在末尾重复三遍“不要幻觉”更有效。
关键概念
| 概念 | 它解决什么 | 使用时要警惕 |
|---|---|---|
| 指令层级 | 决定冲突时谁说了算,防止工具或用户低权威内容覆盖系统目标。 | 工具输出、网页和检索资料要视为不可信数据,不是新指令。 |
| Zero-shot | 只用任务说明让模型完成任务,适合简单分类、改写和问答。 | 复杂格式和隐含标准容易漂移。 |
| Few-shot / ICL | 通过示例展示输入输出映射,复用上下文学习能力。 | 示例质量、顺序和覆盖面会影响结果,也会消耗窗口。 |
| CoT / ToT | 用分步处理、候选路径和自评提升复杂推理。 | 不要把隐藏推理当用户输出;必要时要求简要理由或可验证步骤。 |
| 结构化输出 | 用 JSON Schema、工具参数或类型系统约束格式。 | Schema 保证形状,不保证事实正确;仍要评估内容。 |
| 上下文工程 | 选择本轮推理所需的资料、工具、历史和状态。 | 上下文越多不一定越好;噪声会稀释关键指令。 |
| 评估 | 用固定样例、grader 和人工抽检检测 prompt 版本变化。 | 单看一次主观效果会把偶然成功误认为稳定改进。 |
| 安全边界 | 防提示注入、越权、数据泄露和不当工具调用。 | 防护是系统设计,不是一句“忽略恶意指令”就能解决。 |
推荐学习顺序
- 先读 提示工程基础,掌握清晰任务、约束、示例和输出格式。
- 再读 上下文工程,理解检索资料、历史状态、工具输出和消息层级如何共同影响模型。
- 接着读 高级提示技术,学习 CoT、自洽性、ToT、分解和多候选策略何时有收益。
- 最后读 安全测试,把提示注入、越权、拒答边界和回归测试纳入默认设计。
如果你正在重构旧 prompt,建议先建 20–50 条代表性样例,不要直接重写生产提示。把样例分成正常输入、边界输入、恶意输入、无答案输入和格式压力输入;每次改 prompt 只比较一类失败是否改善,同时确认没有让其他类别退化。
实践检查点
- Prompt 是否明确区分系统/开发者约束、用户目标和外部资料?
- 是否有至少一个正例、一个反例和一个“资料不足时怎么做”的样例?
- 输出格式是否由 schema 或 parser 兜底,而不是只靠自然语言强压?
- 是否为模型版本、prompt 版本、上下文构造逻辑和评估集保存变更记录?
- 是否测试了提示注入:网页说“忽略系统指令”、工具结果伪装成命令、用户要求泄露隐藏 prompt?
- 是否把 prompt 失败归因到具体层:任务不清、上下文缺失、示例误导、schema 不足、模型能力不够,还是安全策略冲突?
一个小练习是把同一任务做成三版:zero-shot、few-shot、schema 约束版。然后用同一评估集比较准确率、格式错误率、拒答率和人工修订时间。你会发现很多“prompt 技巧”其实是在补系统缺口:如果输出经常格式错,优先上结构化输出;如果答案缺证据,优先修上下文;如果模型被网页指令带跑,优先修信任边界。
另一个练习是做“上下文预算表”。把一次调用中的 token 分成系统规则、开发者指令、用户问题、检索证据、历史摘要、工具结果、示例和输出空间八类,记录每类占比和失败样本。很多长 prompt 失败不是因为模型不够强,而是关键约束被埋在太多历史和噪声材料里。删掉无关上下文、把长历史压缩成任务状态、把工具输出转成结构化摘要,通常比继续追加说明更有效。
版本与边界
本文按 2026-08 的 OpenAI、Anthropic 和 Gemini 官方提示文档复核。具体模型快照会改变最佳写法:有的模型需要更显式的工具触发,有的模型对长上下文更敏感,有的模型支持结构化输出或隐藏推理。生产应用应固定模型版本或至少记录模型家族、日期和参数,并用评估集监控升级影响。
Prompt 的边界也要诚实。它不能替代权限系统,不能保证事实正确,不能让模型看到不存在的资料,也不能单独解决提示注入。结构化输出降低格式风险,但不等于内容真实;CoT/ToT 提升某些推理任务,但也增加成本和延迟;context engineering 能改善信息供给,但如果资料本身错误,模型仍会生成错误答案。把 prompt 当成系统接口,而不是魔法句子,是这个模块最重要的转变。
延伸阅读
参考资料
- OpenAI prompt engineering guide — OpenAI API 官方提示工程指南,覆盖 roles、instructions、测试和模型版本。
- OpenAI Model Spec — OpenAI 模型行为规范,说明 chain of command 与指令权威层级。
- OpenAI instruction hierarchy challenge — 说明 System > developer > user > tool 等层级为何影响安全与注入防护。
- OpenAI Structured Outputs — 结构化输出官方文档,说明 JSON Schema、拒答和 schema 边界。
- Anthropic prompting best practices — Anthropic 官方提示实践,覆盖清晰指令、示例、XML、thinking 与工具使用。
- Anthropic effective context engineering for AI agents — 区分 prompt engineering 与 context engineering 的官方工程文章。
- Anthropic prompt injection defenses — 提示注入风险与防护思路,强调浏览器/网页环境仍是对抗性场景。
- Gemini prompt design strategies — Gemini 官方提示设计策略,强调清晰、具体、迭代和模型差异。
- Language Models are Few-Shot Learners — GPT-3 与 few-shot/in-context learning 的代表论文。
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models — CoT 原始论文,解释中间推理示例对复杂任务的作用。
- Self-Consistency Improves Chain of Thought Reasoning in Language Models — 自洽性论文,说明多路径采样与答案一致性选择。
- Tree of Thoughts — ToT 论文,扩展 CoT 到可搜索、可回溯的候选思路结构。