提示工程(Prompt Engineering)是通过优化输入提示词来引导AI模型生成高质量输出的技术。掌握基础技巧能显著提升AI响应的准确性、相关性和实用性。
一、核心原则
1. 清晰性 > 复杂性
-
目标:让模型理解你的意图,而非考验它的理解能力
-
反例:"写点东西"
-
正例:"用3句话解释量子纠缠,让10岁孩子能听懂"
2. 具体性 > 模糊性
-
提供明确的约束条件(格式、长度、风格、受众)
-
反例:"总结这篇文章"
-
正例:"用200字总结这篇文章,包含3个核心观点,用 bullet points 呈现"
二、7大基础技巧
技巧1:角色设定(Role Prompting)
为AI分配一个专业角色,激活其对应知识领域。
公式 :你是一位[专业角色],请[执行任务]
示例:
❌ 普通提问:怎么学编程?
✅ 角色设定:你是一位有10年经验的编程导师,请为完全零基础的学习者制定3个月学习计划,每周学习5小时,要包含具体的学习路径和练习项目。
代码场景:
String prompt = """
你是一位资深Java架构师,请审查以下代码,指出3个潜在的安全漏洞,
并用中文解释每个漏洞的危害和修复建议。
代码:
```java
public void processInput(String userInput) {
Runtime.getRuntime().exec(userInput);
}
```
""";
技巧2:任务分解(Task Decomposition)
将复杂任务拆解为有序步骤,引导AI逐步思考。
公式 :请按以下步骤完成任务:1. [步骤1] 2. [步骤2] 3. [步骤3]
示例:
分析以下销售数据并给出建议:
1. 首先提取2024年Q1-Q3的销售额和增长率
2. 然后识别增长最慢的3个产品线
3. 最后针对每个产品线提出1个具体的改进措施
数据:[附上CSV数据]
技巧3:提供示例(Few-Shot Learning)
给出输入输出的范例,让AI模仿期望的格式和风格。
公式 :示例1:输入→输出 示例2:输入→输出 现在处理:新输入→
示例:
将以下英文商品名翻译为中文,保持简洁:
示例1:
English: Wireless Bluetooth Headphones with Noise Cancellation
Chinese: 降噪蓝牙耳机
示例2:
English: Portable Fast Charging Power Bank 20000mAh
Chinese: 20000mAh快充充电宝
现在翻译:
English: Smart WiFi Security Camera with Night Vision
Chinese:
技巧4:结构化输出(Structured Output)
强制AI返回JSON、Markdown表格等结构化格式,便于程序解析。
公式 :请以JSON格式返回,包含以下字段:{"field1": "描述", "field2": "描述"}
示例:
从以下文本中提取实体信息:
"苹果公司由史蒂夫·乔布斯在1976年创立,总部位于加利福尼亚。"
请按此JSON格式返回:
{
"company": "公司名称",
"founder": "创始人姓名",
"year": "成立年份(数字)",
"location": "总部位置"
}
Spring AI 代码示例:
String prompt = """
分析用户评论的情感倾向。
请以JSON格式返回,包含以下字段:
- sentiment: 情感类型(positive/negative/neutral)
- confidence: 置信度(0-1之间的小数)
- keywords: 关键词数组(最多3个)
评论:"{0}"
""";
String jsonResponse = chatClient.prompt(prompt)
.param(comment)
.call()
.content();
// 解析JSON获取结构化数据
技巧5:思维链引导(Chain-of-Thought)
在提示词中加入"请逐步思考"或"让我们一步步分析",引导AI展示推理过程,显著提升复杂问题准确率。
公式 :请逐步思考:[问题]
示例:
问题:一个农场有鸡和牛共30只,脚共88只,问鸡和牛各多少只?
请逐步思考并展示推理过程:
1. 设鸡有x只,牛有y只
2. 根据头数列方程:x + y = 30
3. 根据脚数列方程:2x + 4y = 88
4. 解方程组...
5. 得出答案
技巧6:上下文隔离(Context Isolation)
使用分隔符(###, ---, XML标签)清晰划分指令、上下文和输入,避免混淆。
公式:
[指令部分]
--- 或 ###
[上下文/背景信息]
--- 或 ###
[待处理内容]
示例:
请总结以下技术文档。
###
文档主题:Spring Boot 3.2 新特性
###
###
文档内容:
[粘贴长文档...]
###
###
总结要求:
- 用3个 bullet points
- 每个不超过20字
- 突出性能提升特性
###
技巧7:边界约束(Constraints Setting)
明确限制输出格式、长度、风格等边界条件。
常用约束参数:
| 约束类型 | 示例 |
|---|---|
| 长度 | "用100字以内"、"生成5-7句话" |
| 格式 | "用Markdown表格"、"返回纯文本" |
| 风格 | "用正式商务语气"、"像朋友聊天" |
| 受众 | "面向产品经理"、"给5岁孩子讲" |
| 排除项 | "不要提及价格"、"避免技术术语" |
组合示例:
为LinkedIn撰写一篇帖子:
- 主题:宣布我们产品新功能
- 长度:150-200字
- 风格:专业但友好
- 必须包含:#AI #ProductUpdate 标签
- 禁止包含:具体价格信息
三、进阶技巧组合
组合模式:角色 + 思维链 + 结构化输出
String advancedPrompt = """
你是一位资深数据分析师。
请分析以下销售数据,并:
1. 首先识别数据中的异常模式
2. 然后分析可能的原因
3. 最后提出3个可执行的建议
请逐步思考,并用以下JSON格式返回结果:
{
"anomalies": ["异常1", "异常2"],
"rootCauses": ["原因1", "原因2"],
"recommendations": [
{"priority": "high", "action": "具体行动1"},
{"priority": "medium", "action": "具体行动2"},
{"priority": "low", "action": "具体行动3"}
]
}
数据:
{0}
""";
四、常见陷阱与避坑指南
| 陷阱 | 错误示例 | 正确做法 |
|---|---|---|
| 模糊指令 | "写得好一点" | "增加3个具体案例,语言更口语化" |
| 过度约束 | 同时限制10个条件 | 聚焦3-5个核心约束 |
| 缺少上下文 | "那个项目怎么样了?"(没有指明项目) | "关于客户A的CRM升级项目,目前进度如何?" |
| 假设模型知道 | "按老规矩生成报告"(模型不知道"老规矩") | "按照附件模板格式生成报告,包含销售额、转化率、环比3个部分" |
| 忽视token限制 | 粘贴10万字长文让总结 | 先分段处理,或使用RAG检索相关内容 |
五、效果评估与迭代
5.1 A/B测试提示词
// 版本A:简单指令
String promptV1 = "总结这段文字";
// 版本B:结构化指令
String promptV2 = """
用3个bullet points总结,每个不超过15字:
{0}
""";
// 记录两个版本的响应质量和用户满意度
5.2 自动化评估指标
-
相关性:输出是否回答了问题
-
准确性:事实是否正确
-
完整性:是否覆盖所有要求
-
格式合规性:是否遵循结构要求
六、实用工具与资源
6.1 提示词模板库
-
LangChain Hub:社区共享的提示词模板
-
PromptPerfect:自动优化提示词工具
-
Spring AI :内置
PromptTemplate类
Spring AI 模板示例:
PromptTemplate template = new PromptTemplate("""
你是一位{role},请为{audience}解释{topic}。
要求:{requirements}
""");
Map<String, Object> params = Map.of(
"role", "资深教师",
"audience", "初中生",
"topic", "光合作用",
"requirements", "用比喻,不超过100字"
);
String prompt = template.render(params);
6.2 学习资源
-
书籍:《Prompt Engineering Guide》(免费在线版)
-
实践:Anthropic 的 Prompt Engineering Interactive Tutorial
-
社区:Discord 的 "Prompt Engineering" 频道
七、总结:黄金句式模板
万能模板:
你是一位[专业角色]。
请完成以下任务:[具体任务]。
要求:
1. [要求1]
2. [要求2]
3. [要求3]
工作步骤:
1. [步骤1]
2. [步骤2]
请以[格式]返回结果。
[上下文/输入内容]