你写 prompt 是不是还在「玄学调参」?Google 这篇 800 引论文把这件事变成了「软件工程」
- 关联论文:2302.11382
你有没有过这种崩溃瞬间 😭:
你让 ChatGPT「帮我写一封道歉信」——它给你写了 200 字小学生作文。 你换个说法「请以专业公关的口吻,重写一封致客户的道歉信」——诶?突然就好用了。 你换回原 prompt 再跑一次——又坏了。
这不是 GPT「飘」,是你撞上了 prompt 工程的暗礁:
没有方法论,全靠试错。换个模型、换个版本、换个任务,prompt 就要从零重新调。 同一个团队里,A 写的 prompt 和 B 写的 prompt 风格完全不同,没有可继承的经验沉淀。 你好不容易试出一个「神级 prompt」,下一个新人接手项目时根本不知道你当时为什么这么写。
听起来是不是很熟悉?
这就是 1990 年代「面向对象编程」刚兴起时软件开发的样子——大家各写各的,没有设计模式(Design Pattern),代码靠口口相传。
2023 年 2 月,Vanderbilt 大学的 Jules White 团队发了一篇论文(White et al., A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT,arXiv 2302.11382),直接借用了软件工程里「设计模式」的思想——把「好用 prompt 的经验」沉淀成一套可复用、可组合、可跨域迁移的 16 个模板。
今天这篇科普,我就把它讲透——哪怕你完全不会写代码,10 分钟内也能搞懂「为什么 prompt 也需要设计模式」「16 个 Pattern 各自管什么场景」「为什么组合多个 Pattern 比单次调参更稳」。
TL;DR(30 秒版)
- 解决的问题:Prompt Engineering 当时没有任何术语、没有结构化方法论,优秀 prompt 经验无法沉淀、无法跨人跨模型复用。
- 本文贡献:1) 概念:把软件工程「设计模式」思想系统化引入 Prompt Engineering,首次提出 Prompt Pattern Catalog(prompt 模式目录);2) 结构:每个 Pattern 由 Intent / Context / Problem / Template / Example / Consequences 六要素组成;3) 生态:配套 Coursera 课程,开源 Pattern 文档模板,让社区可以共同积累。
- 为什么重要:它把「prompt 调参」从手工业变成了软件工程——后续 LangChain / LlamaIndex 的 PromptTemplate、Agent 的 system prompt 设计、AI safety 的输入过滤思路,全都直接或间接受益于这套模式化思想。被引 800+ 次,是 Prompt Engineering 这个学科的「立规矩」论文之一。
- 一个洞察:好的 prompt 不是「一句话神谕」,而是「多层 Pattern 叠加」。Output Initialization 控制格式 + Chain of Thought 控制推理 + Persona 控制语气 + Safety 守住边界——组合后形成 1+1>2 的工程产物。
一、Prompt 工程师的「1990 年代」:为什么大家都在重复造轮子?
2018 年 GPT-1 出来,2020 年 GPT-3 出来,2022 年 ChatGPT 出来——模型越来越强,但「如何问一个好问题」这件事,反而越来越混乱:
同一个任务(生成代码注释),网上流传着 200 种 prompt 写法,每种都说「我用这个打榜打到 95%」。 换个模型版本(GPT-3.5 → GPT-4),原来稳定的 prompt 突然就崩了,没人知道为什么。 团队里高级工程师凭经验调 prompt,初级工程师靠 Google 搜「最佳 prompt 模板」——没有知识沉淀机制。
这篇论文的洞察是:
软件工程曾经解决过一模一样的难题。
1994 年 GoF(Gang of Four)出版《Design Patterns: Elements of Reusable Object-Oriented Software》,把 OOP 时代 20 年里散落在各处的「优秀代码经验」收编成 23 个可命名、可复用、可传授的设计模式——从此「Singleton」「Observer」「Factory Method」成了所有计算机专业学生的必修词汇。
Prompt Engineering 也需要一次同样的「模式化整理」。
二、Prompt Pattern 长什么样?六要素拆解
论文定义的 Prompt Pattern 有 6 个固定要素:
| 要素 | 含义 | 类比软件工程的对应物 |
|---|---|---|
| Intent(意图) | 这个 Pattern 解决什么问题 | 设计模式的「Name + Intent」段 |
| Context(上下文) | 适用于什么场景 | 设计模式的「Applicability」段 |
| Problem(问题) | 不用这个 Pattern 时会踩什么坑 | 设计模式的「Motivation / Forces」段 |
| Template(模板) | Prompt 的结构化文字模板 | 设计模式的「Structure」段 |
| Example(示例) | 在某个真实领域填好字段的样例 | 设计模式的「Sample Code」段 |
| Consequences(后果) | 用了这个 Pattern 之后会有什么 trade-off | 设计模式的「Consequences」段 |
举个例子——Output Initialization Pattern(输出初始化模式):
- Intent:让 LLM 第一次输出就符合预期格式(比如 JSON / Markdown 表格 / 固定字段顺序),避免后期解析失败。
- Context:你需要把 LLM 的输出直接喂给下游程序(数据库、API、前端组件),格式错误 = 系统崩溃。
- Problem:LLM 默认「自由发挥」,可能写散文、写代码、写半截 JSON…… 解析时 80% 概率失败。
- Template:
"请以 JSON 格式返回结果,必须包含以下字段:{field1, field2, field3}。不要添加任何额外字段或说明文字。"- Example:
"请以 JSON 格式返回用户画像,必须包含 age、gender、interest 三个字段。返回:{\"age\": 28, \"gender\": \"female\", \"interest\": \"reading\"}"- Consequences:✅ 格式稳定,解析 0 失败;⚠️ 模板字段必须穷举,遇到边角情况 LLM 会瞎填。
——你看,是不是和「Factory Method 模式的 Intent / Applicability / Sample Code」几乎一一对应?
三、16 个 Pattern 的五大类:每类管一件事
论文把 16 个 Pattern 分成 5 大类(部分细节以论文正文为准):
1. Output Initialization(输出初始化类)
- 管「格式约束」——JSON、表格、特定 schema
- 典型 Pattern:Output Indicator、Format Restriction
- 工程场景:所有 production LLM 应用的「接口稳定层」都靠它
2. Chain of Thought(思维链类)
- 管「推理过程」——分步思考、显式中间状态
- 典型 Pattern:Chain of Thought Prompting、Self-Ask
- 工程场景:数学、逻辑、多跳推理任务
3. Persona / Role Assignment(角色分配类)
- 管「语气 & 视角」——专业公关、资深工程师、初级用户……
- 典型 Pattern:Persona Pattern、Audience Persona Pattern
- 工程场景:客服 bot、行业顾问、教育场景
4. Safety Patterns(安全防护类)
- 管「边界守住」——防止 Prompt Injection、限制有害输出、隔离用户输入
- 典型 Pattern:Input Sanitization、Output Validation、Flipped Interaction
- 工程场景:任何暴露公网的 LLM 应用
5. Compositional Patterns(组合类)
- 管「Pattern 叠加」——多个 Pattern 如何协同,顺序如何排
- 典型 Pattern:Pattern Composition、Conflict Resolution
- 工程场景:复杂 Agent / 多轮对话 / 工具调用
四、核心洞察:为什么「组合 Pattern」比「单次调参」更强?
这是论文最重要的工程贡献之一。
传统做法:
写一个 500 字的 prompt,把所有约束、格式、语气、推理步骤全塞进去 → LLM 经常「漏掉其中一条」。
论文推荐的做法:
base_prompt = "你是一名资深金融分析师。"
# 1. Persona Pattern 加上角色
prompt = base_prompt
# 2. Output Initialization Pattern 加上格式
prompt = apply_pattern("OutputIndicator", prompt, format="JSON")
# 3. Chain of Thought Pattern 加上推理步骤
prompt = apply_pattern("ChainOfThought", prompt, steps=["读取数据", "识别异常", "归因分析"])
# 4. Safety Pattern 加上防御
prompt = apply_pattern("InputSanitization", prompt, ignore_user_instructions_above=True)
send_to_LLM(prompt)
为什么这样更好?
- 可调试:4 个 Pattern 独立,出了问题能定位到具体那一个。
- 可复用:同一组 Pattern 跨任务 / 跨模型 / 跨团队迁移,只要换字段。
- 可组合:复杂任务(如 RAG + Agent + Tool Use)本质就是「多个 Pattern 叠加 + 外部工具调用」——这正是 LangChain / LlamaIndex / AutoGen 等框架的核心设计哲学。
- 可版本化:Pattern 仓库用 git 管理,每次模型升级跑回归测试套件。
用一句话总结这个工程哲学:
不要试图写一个「完美的 prompt」;要建立一个「可组合的 Pattern 库」,让 prompt 像乐高一样搭出来。
五、为什么这篇 2023 年的论文到 2026 年还在被引用?
最直接的理由是——它解决了一个「跨模型、跨时间、跨团队」都成立的问题,而不是「特定模型的特定 trick」:
论文提出的 16 个 Pattern 不绑定 GPT-3.5、GPT-4、Claude、Gemini 任何具体模型。 它的抽象层级在「如何结构化一段 prompt」,而不是「如何在某个模型上刷分」。
论文的局限(反方视角)也很清楚:
- 量化评估不足:原文主要靠案例展示 Pattern 效果,没有大规模 A/B 实验数据。被引 800+ 次主要是因为「概念有用」而不是「数字碾压」。
- 2026 年模型演进后部分 Pattern 必要性下降:比如 CoT 在 GPT-4o / Claude 3.5 上几乎是默认行为,显式「请一步步思考」有时候反而拖慢输出。
- 5 个大类划分是后人整理:论文原文未给出 16 个 Pattern 的统一分类框架,本文采用的「5 大类」是结合后续研究推断,原文结构可能略有不同。
- 没覆盖 LLM Agent 时代:2024-2026 年的 Tool Use / Function Call / Multi-Agent / Memory Management 这些新范式,原文完全没有涉及。
但即便如此——它完成了「把 prompt 从艺术变成工程」的范式转换:
现在的 LangChain PromptTemplate、LlamaIndex 的 Query Engine、AutoGen 的 System Message 设计、Anthropic 的 Claude Prompt Engineering 指南、OpenAI 的 GPT Best Practices 文档——所有这些「结构化 prompt 设计」的工业实践,都在用某种形式的「Pattern 抽象」。
这就是为什么 3 年后,prompt pattern 这个思想还是 AI 应用工程师每天在用的东西。
六、一张图带走(适合发小红书 / 朋友圈)
📚 Prompt Pattern 是什么?
→ 软件工程「Design Pattern」的思想平移到 Prompt Engineering
→ 把好用的 prompt 经验,沉淀成可命名、可组合、可复用的「模板」
🎯 6 要素:Intent / Context / Problem / Template / Example / Consequences
📦 5 大类:Output Initialization / Chain of Thought / Persona / Safety / Composition
🧱 核心思想:好 prompt 不是「一句话神谕」,是「多个 Pattern 组合」
✅ 工程价值:可调试 / 可复用 / 可组合 / 可版本化 ——
让 prompt 从「玄学」变成「软件工程」
写在最后
2026 年你打开任何 LLM 应用的 system prompt——客服 bot、AI 助手、Agent workflow、RAG pipeline——你都会看到「角色设定 + 格式约束 + 推理步骤 + 边界防护」的层叠结构。
这不是某家公司「拍脑袋」的设计,是这篇 2023 年论文立下的工程规矩。
下一个让你觉得「这个 prompt 怎么写得这么稳」的瞬间——大概率是某位工程师从 Pattern 库里像搭乐高一样拼出来的。
原文:White et al., "A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT", arXiv 2302.11382, 2023.2 影响:被引 800+ 次(OpenAlex),Prompt Engineering 学科「立规矩」级论文。 延伸阅读:Jules White 的 Coursera 课程 "Prompt Engineering for ChatGPT";LangChain PromptTemplate 文档。
三个标题变体
- 《为什么 ChatGPT 时灵时不灵?Google 这篇 800 引论文给出了答案——prompt 也是「软件工程」》(痛点向,强调 prompt 不稳的根源)
- 《把「设计模式」思想搬进 prompt:Vanderbilt 2023 年这套 16 个模板,悄悄统治了你手机里每个 LLM》(历史脉络向,强调范式影响)
- 《别再「玄学调参」了!Prompt Engineering 的「Design Pattern」到底长什么样?》(教学向,强调可上手的方法论)
小红书风格卡片文案
🤖 你写 prompt 是不是还在「玄学调参」?
你有没有过这种崩溃瞬间 😭:
让 ChatGPT 写道歉信,它给你写 200 字小学生作文。换种说法突然就好用了,换回原 prompt 又崩了——这不是 GPT 飘,是你撞上了 prompt 工程的暗礁。
🎯 arXiv 2302.11382(被引 800+)一次说透:
Vanderbilt 团队把软件工程里「设计模式」的思想搬进 prompt,提出 Prompt Pattern Catalog——16 个可命名、可复用、可组合的模板。
📋 6 要素结构(每个 Pattern 都有):
| 要素 | 含义 |
|---|---|
| Intent | 解决什么问题 |
| Context | 适用什么场景 |
| Problem | 不用会踩什么坑 |
| Template | 结构化文字模板 |
| Example | 真实领域填字段样例 |
| Consequences | 用了之后的 trade-off |
📦 5 大类 Pattern:
- Output Initialization → JSON / 表格 / schema 格式约束
- Chain of Thought → 分步推理、显式中间状态
- Persona / Role Assignment → 「你是资深公关 / 工程师 / 医生」
- Safety Patterns → 防 Prompt Injection + 输入过滤
- Compositional Patterns → 多个 Pattern 如何叠加
🧱 核心工程哲学:
不要试图写一个「完美的 prompt」;要建立一个「可组合的 Pattern 库」,让 prompt 像乐高一样搭出来。
可调试 / 可复用 / 可组合 / 可版本化——让 prompt 从「玄学」变成「软件工程」。
⚠️ 必须警惕的 4 个坑:
- Pattern 必要性下降:2026 年模型演进后,部分 Pattern(如显式 CoT)已是默认行为;
- 5 大类划分非原文:本文分类是结合后续研究推断,论文原文未给出统一框架;
- 量化评估不足:原文主要靠案例展示,没有大规模 A/B 实验;
- 不覆盖 LLM Agent:2024+ 的 Tool Use / Function Call / Multi-Agent 原著未涉及。
📎 论文 ID:2302.11382
💬 你的团队 prompt 是「写一个超长 prompt 一把梭」还是「拆成多个 Pattern 组合」?评论区聊聊你的实战经验!