Prompt Engineering详解

Prompt Engineering 详解

概述

Prompt Engineering(提示词工程) 是设计和优化输入给大语言模型(LLM)的提示词,以获得更准确、更符合预期输出的技术。

💡 提示: 核心思想
大模型的输出质量很大程度上取决于输入的质量。好的 Prompt = 好的结果。

为什么需要 Prompt Engineering

问题 原因 解决方案
输出不准确 问题描述模糊 明确任务目标
格式混乱 缺少格式约束 指定输出格式
缺少深度 上下文不足 提供背景信息
推理错误 一步到位太难 引导逐步思考

一、基础提示技术

1.1 Zero-shot Prompting

定义:不提供任何示例,直接向模型提问。

1
2
将以下文本翻译成英文:
今天天气真好,适合出去散步。

适用场景:简单任务、模型已经训练过的常见任务。

优点:简单直接
缺点:复杂任务效果差


1.2 One-shot Prompting

定义:提供 1 个示例,引导模型理解任务格式。

1
2
3
4
5
6
7
8
9
请将中文翻译成英文:

示例:
中文:苹果
英文:Apple

请翻译:
中文:香蕉
英文:

1.3 Few-shot Prompting

定义:提供多个(通常 3-5 个)示例,让模型学习模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
请根据以下示例,对用户评论进行情感分类:

评论:这个产品太棒了,物超所值!
情感:正面

评论:质量一般,不推荐购买。
情感:负面

评论:还行吧,中规中矩。
情感:中性

评论:快递超快,包装也很好,非常满意!
情感:

📝 注意: 最佳实践

  • 示例要多样化,覆盖不同情况
  • 示例格式要与期望输出一致
  • 3-5 个示例通常足够,太多可能造成干扰

二、推理增强技术

2.1 Chain of Thought (CoT) - 思维链

定义:引导模型展示推理过程,逐步得出答案。

基础 CoT

1
2
3
问题:一个商店有 23 个苹果,卖掉了 7 个,又进货了 12 个,现在有多少个苹果?

请一步一步思考:

模型输出

1
2
3
4
5
6
让我一步一步计算:
1. 初始苹果数量:23 个
2. 卖掉后:23 - 7 = 16
3. 进货后:16 + 12 = 28

答案:现在有 28 个苹果。

Few-shot CoT

1
2
3
4
5
6
7
8
9
问题:小明有 5 个苹果,小红给了他 3 个,他又吃了 2 个,还剩几个?
思考过程:
- 初始:5 个
- 小红给了 3 个:5 + 3 = 8
- 吃了 2 个:8 - 2 = 6
答案:6 个

问题:一个农场有 15 只鸡,卖掉了 6 只,又买了 8 只,现在有多少只?
思考过程:

⚠️ 重要: CoT 适用场景

  • 数学计算
  • 逻辑推理
  • 多步骤问题
  • 需要解释过程的任务

2.2 Zero-shot CoT

定义:不提供示例,仅通过魔法短语触发推理。

魔法短语

  • “Let’s think step by step”(让我们一步一步思考)
  • “请逐步分析”
  • “让我们仔细推理”
1
2
3
4
问题:一列火车从 A 站出发,每小时行驶 60 公里,2 小时后到达 B 站。
另一列火车同时从 B 站出发,每小时 80 公里。两车何时相遇?

Let's think step by step.

2.3 Tree of Thought (ToT) - 思维树

定义:探索多个推理路径,自我评估选择最优解。

graph TD
    A[问题] --> B[思路1]
    A --> C[思路2]
    A --> D[思路3]
    B --> E[评估: 可行]
    C --> F[评估: 不可行]
    D --> G[评估: 可行但复杂]
    E --> H[深入探索]
    H --> I[最终答案]

Prompt 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
问题:如何设计一个高并发的秒杀系统?

请用以下思维框架分析:

## 思路探索
1. 思路 A:[描述方案]
- 优点:
- 缺点:
- 可行性评分:1-10

2. 思路 B:[描述方案]
- 优点:
- 缺点:
- 可行性评分:1-10

3. 思路 C:[描述方案]
- 优点:
- 缺点:
- 可行性评分:1-10

## 最优方案选择
基于以上分析,选择并详细阐述最佳方案。

2.4 Self-Consistency(自一致性)

定义:多次采样答案,选择出现频率最高的结果。

1
2
3
4
5
6
7
8
9
请对以下问题给出 3 个独立的推理过程和答案:

问题:[复杂问题]

推理 1
推理 2
推理 3

最终答案(选择出现最多的答案):

三、角色与上下文设定

3.1 角色设定(Role Prompting)

定义:指定 AI 扮演特定角色,影响其回答风格和专业度。

1
2
3
4
5
你是一位拥有 15 年经验的 Java 架构师,精通分布式系统设计、微服务架构和性能优化。

请以你的专业视角,分析以下代码的潜在问题:

[代码内容]

常用角色模板

角色 描述
技术专家 “你是一位资深的 [领域] 专家”
代码审查员 “你是一位严格的代码审查员”
产品经理 “你是一位用户导向的产品经理”
教师 “你是一位耐心的编程教师”

3.2 系统提示(System Prompt)

定义:设置模型的行为准则和约束条件(API 调用时的 system 角色)。

1
2
3
4
5
6
7
8
9
10
11
12
{
"messages": [
{
"role": "system",
"content": "你是一个专业的技术文档助手。规则:1. 只回答技术相关问题 2. 使用 Markdown 格式 3. 代码示例使用 Java"
},
{
"role": "user",
"content": "如何实现线程安全的单例模式?"
}
]
}

3.3 上下文注入

定义:在 Prompt 中提供相关背景知识(RAG 场景的核心)。

1
2
3
4
5
6
7
8
9
10
11
## 背景知识
以下是关于 Spring AI 的官方文档摘要:
---
[检索到的文档内容]
---

## 用户问题
如何在 Spring AI 中配置 OpenAI API Key?

## 要求
请根据背景知识回答问题,如果背景知识中没有相关信息,请明确说明。

四、输出控制技术

4.1 格式约束

JSON 格式

1
2
3
4
5
6
7
8
9
10
11
12
请分析以下用户评论,以 JSON 格式输出结果:

评论:这款手机拍照效果很好,但电池续航太差了。

输出格式:
{
"sentiment": "正面/负面/中性",
"aspects": [
{"aspect": "方面名", "sentiment": "正面/负面", "comment": "具体评价"}
],
"summary": "一句话总结"
}

Markdown 格式

1
2
3
4
5
6
7
请用 Markdown 格式输出技术方案文档:

## 要求
- 使用多级标题组织内容
- 代码块使用正确的语言标识
- 重点内容使用粗体
- 包含流程图(Mermaid)

4.2 长度控制

1
2
3
4
5
6
7
8
9
请用不超过 100 字总结这篇文章的核心观点。

---

请详细解释这个概念,包括:
1. 定义(50字)
2. 工作原理(200字)
3. 应用场景(100字)
4. 代码示例(完整可运行)

4.3 分隔符使用

使用明确的分隔符避免 Prompt 注入和内容混淆:

1
2
3
4
5
6
7
请翻译以下文本,文本用 ### 包裹:

###
用户输入的内容
###

翻译结果:

常用分隔符:

  • ###
  • ---
  • """
  • <text></text>
  • [START][END]

五、高级技术

5.1 ReAct(Reasoning + Acting)

定义:推理与行动交替进行,适合 Agent 场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
你是一个能够使用工具的 AI 助手。

可用工具:
1. search(query) - 搜索信息
2. calculator(expression) - 计算数学表达式
3. get_weather(city) - 获取天气

请用以下格式回答问题:

Thought: 思考下一步该做什么
Action: 工具名称
Action Input: 工具输入
Observation: 工具返回结果
... (重复直到得出答案)
Thought: 我现在知道最终答案了
Final Answer: 最终答案

问题:北京今天的气温是多少摄氏度?换算成华氏度是多少?

5.2 Generated Knowledge Prompting

定义:让模型先生成相关知识,再基于知识回答问题。

1
2
3
4
5
## 第一步:生成知识
请列出关于 Java 线程池的 5 个关键知识点。

## 第二步:回答问题
基于以上知识,解释为什么不建议使用 Executors.newFixedThreadPool()?

5.3 Directional Stimulus Prompting

定义:提供提示词暗示,引导模型输出方向。

1
2
3
请写一首关于春天的诗。

提示词:花开、暖风、希望、新生

六、Prompt 模板库

6.1 代码审查模板

1
2
3
4
5
6
7
8
9
10
11
12
你是一位资深的 Java 代码审查专家。

请审查以下代码,从以下维度分析:
1. **代码规范**:命名、格式、注释
2. **潜在 Bug**:空指针、并发问题、资源泄露
3. **性能问题**:时间复杂度、内存使用
4. **安全风险**:SQL 注入、XSS 等
5. **可维护性**:代码复杂度、可测试性

代码:
```java
[代码内容]

输出格式:

问题 严重程度 位置 修改建议
1
2
3
4
5

---

### 6.2 技术方案模板

请设计一个技术方案,要求:

背景

[问题描述]

输出要求

  1. 需求分析:明确功能和非功能需求
  2. 架构设计:整体架构图(Mermaid)
  3. 技术选型:框架、中间件选择及理由
  4. 核心流程:关键流程时序图
  5. 数据设计:核心表结构
  6. 风险评估:潜在风险及应对策略
1
2
3
4
5

---

### 6.3 Debug 助手模板

你是一位经验丰富的 Debug 专家。

错误信息

[错误日志]

相关代码

[代码片段]

请分析

  1. 错误的直接原因
  2. 根本原因分析
  3. 解决方案(给出具体代码)
  4. 如何避免类似问题

---

## 七、最佳实践

### 7.1 Prompt 设计原则

| 原则 | 说明 |
|------|------|
| **明确具体** | 避免模糊表述,明确任务目标 |
| **结构清晰** | 使用分隔符、编号组织内容 |
| **提供示例** | 复杂任务用 Few-shot 引导 |
| **迭代优化** | 根据输出效果不断调整 |
| **控制长度** | 避免过长导致信息丢失 |

### 7.2 常见错误

| 错误 | 示例 | 改进 |
|------|------|------|
| 过于模糊 | "帮我写代码" | "用 Java 实现一个线程安全的 LRU 缓存" |
| 缺少上下文 | "这个报错怎么解决" | "Spring Boot 3.x 启动报错:[具体错误]" |
| 期望过高 | "写一个完整的电商系统" | 拆分为多个小任务逐步实现 |

### 7.3 调试技巧

1. **打印思考过程**:加入 "请展示你的推理过程"
2. **要求自我检查**:加入 "请检查答案是否正确"
3. **分步验证**:复杂任务拆分为多轮对话

---

## 八、工具与资源

### 在线工具

| 工具 | 用途 |
|------|------|
| [PromptPerfect](https://promptperfect.jina.ai/) | Prompt 优化 |
| [OpenAI Playground](https://platform.openai.com/playground) | 在线测试 |
| [LangSmith](https://smith.langchain.com/) | Prompt 管理与追踪 |

### 学习资源

- [Prompt Engineering Guide](https://www.promptingguide.ai/)
- [OpenAI Prompt Engineering](https://platform.openai.com/docs/guides/prompt-engineering)
- [Learn Prompting](https://learnprompting.org/)

---

## 相关笔记

- 大模型学习路线
- LLM应用开发
- RAG技术详解

Prompt Engineering详解
https://zmmmmy.github.io/2026/01/12/Prompt Engineering详解/
作者
ZhiMy
发布于
2026年1月12日
许可协议