Skip to content

提示工程(Prompt Engineering)

提示工程(Prompt Engineering)是大模型工程的第一代范式,研究如何设计高质量提示词,让 LLM 给出更准确、更有用的回答。它是整个 LLM 工程体系的基础输入层——后续所有的上下文组织、工具调用、循环与图编排,最终都依赖一条写对的 Prompt 来驱动模型。

核心不是调教模型本身,而是通过"输入侧"的设计,把模糊意图转化为模型能稳定执行的明确指令。

为什么需要 Prompt Engineering

同样的模型,不同的 Prompt,效果天差地别:

差 Prompt:
"写一个登录功能"

好 Prompt:
"用 Spring Boot 3 + Spring Security + JWT 实现登录功能。
要求:
1. 密码使用 BCrypt 加密
2. Token 有效期 24 小时
3. 包含刷新 Token 机制
4. 添加参数校验和错误处理
5. 给出完整的 Controller、Service、DTO 代码"

在五代演进中,Prompt 解决的是最底层的问题,但它也留下瓶颈:一次推理,无状态、无工具、知识截止——这正是催生 Prompt Chain、Workflow、Agent、Graph 的根本动因。

Prompt → Prompt Chain → Workflow → Loop → Graph
对应系统进化:输入 → 流程 → 状态 → 反馈 → 自治

与已有工程层的关系

Graph Engineering(图工程)       ← 用图编排多个 Loop / Workflow
Loop Engineering(循环工程)      ← 多步反馈循环、终止条件
Harness Engineering(承载管控)   ← 执行、验证、安全边界
Context Engineering(上下文工程)  ← 信息输入、上下文管理
Prompt Engineering(提示工程)     ← 单次输入优化  ◀ 本文

Prompt 是其他一切工程层的起点:Context 决定往 Prompt 里塞什么,Harness 决定 Prompt 触发的动作如何被执行,Loop 决定 Prompt 在循环中如何被反复重写,Graph 决定多个 Prompt 节点如何流转。

核心要素

要素说明
角色(Role)让模型扮演特定身份,回答更专业(如"资深后端架构师")
任务(Task)清晰描述要做什么,避免模糊
上下文(Context)提供背景、约束、已有信息
输出格式(Format)指定返回结构(JSON / Markdown / 代码块)
示例(Few-Shot)给几个样例,让模型照着做
约束(Constraints)限制长度、语言、风格、禁止项
推理引导(CoT)要求"一步一步思考",提升复杂任务效果

核心原则

1. 具体胜过模糊

❌ "写一篇技术文章"
"写一篇关于 Redis 缓存的技术文章,
    面向有 1-2 年经验的 Java 后端工程师,
    包含原理、使用场景、代码示例(Java),
    字数约 1500 字"

2. 提供上下文

告诉 LLM 你的背景、目标、约束:

我是前端新手,正在学习 Vue 3。
请解释什么是响应式,用简单的比喻,
并给出一个 Counter 的例子。

3. 指定输出格式

请以 JSON 格式返回结果,包含以下字段:
- title: 文章标题
- summary: 摘要(50 字以内)
- tags: 标签数组

4. 分步思考(Chain of Thought)

让 LLM 先思考,再给答案,可以大幅提升复杂任务的效果:

请一步一步思考,然后回答:

问题:一个 10 人的团队,需要多少个会议室?

也可以直接在 Prompt 里加:

Let's think step by step.

常用技巧

1. Few-Shot Prompting

给几个例子,让 LLM 照着做:

请将以下句子分类为"正面"或"负面":

例子 1:这个产品太好用了!→ 正面
例子 2:质量很差,不推荐 → 负面

现在分类:
这个性价比不错,值得购买

2. 角色扮演

让 LLM 扮演某个角色,回答会更专业:

你是一位有 10 年经验的后端架构师。
请从性能、可维护性、扩展性三个维度,
评审以下代码,并给出改进建议。

3. 输出约束

回答要求:
- 使用 Markdown 格式
- 代码用 Java 17 语法
- 每个函数不超过 30 行
- 不包含个人信息

4. 让 LLM 提问

当你提供的需求不够清晰时,让 LLM 先提问:

以下是我的需求:[描述需求]
如果你需要更多信息才能给出最佳方案,
请先向我提问,不要急于回答。

Prompt 模板

代码生成模板

你是一位专业的 {语言} 开发者。

任务:{具体任务描述}

要求:
- 使用 {框架/库}
- 包含完整的错误处理
- 添加必要的注释
- 遵循 {规范/风格}

输出格式:先解释设计思路,再给出代码。

代码审查模板

请审查以下代码,从以下几个维度:

1. 正确性(有无 Bug)
2. 安全性(有无漏洞)
3. 性能(有无优化空间)
4. 可读性(命名、结构)

代码:
```{语言}
{代码内容}

请按严重程度排序问题,并给出修改建议。


### 技术学习模板

我想学习 {技术名称}。

我的背景:{已有技能} 学习目标:{学会后能做什么} 时间预算:

请给我制定一个学习计划, 包含:核心概念、实践项目、推荐资源。


## 常见错误

| 错误 | 说明 |
|------|------|
| 提示词太短 | LLM 不知道你想要什么 |
| 一次问太多问题 | 容易遗漏,分步问效果更好 |
| 没有指定格式 | 返回格式不符合预期 |
| 没有给例子 | Few-Shot 可以大幅提升效果 |
| 直接相信输出 | 务必人工验证 |

## Prompt 测试与迭代

写 Prompt 是一个迭代过程:

第 1 版:写出基础 Prompt → 测试结果 第 2 版:加入格式约束 → 测试结果 第 3 版:加入 Few-Shot 例子 → 测试结果 第 4 版:优化角色和上下文 → 最终结果


建议用电子表格记录不同 Prompt 的效果,找到最优版本。

## 设计原则

1. **明确优先于聪明**:先让模型"做对",再追求"做好"。
2. **给结构不给自由**:指定输出格式,减少解析成本。
3. **示例胜过长篇说明**:Few-Shot 往往比描述更有效。
4. **上下文要节流**:无关内容会稀释关键信息(衔接 Context Engineering)。
5. **永远人工验证**:模型输出不可直接信任,尤其涉及代码与数据。

## 相关资源

- [OpenAI Prompt Engineering Guide](https://platform.openai.com/docs/guides/prompt-engineering)
- [LangChain Prompt Templates](https://python.langchain.com/docs/modules/model_io/prompts/)
- [Awesome Prompt Engineering](https://github.com/f/awesome-chatgpt-prompts)