进阶教程更新于 2025-02-09

提示词工程最佳实践

掌握提示词设计技巧,提升大模型输出质量与可靠性

提示词Prompt提示工程LLM优化角色设定

提示词工程最佳实践

概述

提示词工程(Prompt Engineering)是通过设计和优化输入提示词,引导大语言模型(LLM)生成高质量、符合预期的输出的技术。良好的提示词设计是 AI 应用成功的关键。

提示词基本结构

标准格式

markdown
1# 角色设定
2你是[专业角色],具备[相关经验/能力]。
3
4# 任务描述
5请完成以下任务:[具体任务]
6
7# 输入数据
8[需要处理的内容]
9
10# 约束条件
11- 条件1
12- 条件2
13- ...
14
15# 输出格式
16请以[格式]输出,包含以下要素:
171. 要素A
182. 要素B
193. ...

示例:产品文案生成

markdown
1## 角色
2你是一位资深的电商文案策划专家,拥有10年文案撰写经验,擅长挖掘产品卖点并转化为吸引人的文案。
3
4## 任务
5为以下产品撰写一则朋友圈推广文案。
6
7## 产品信息
8- 产品名称:智能颈椎按摩仪
9- 核心功能:热敷+脉冲按摩+APP控制
10- 目标人群:25-40岁办公室白领
11- 价格区间:299-399元
12- 卖点:15分钟快速缓解疲劳、静音设计、便携可折叠
13
14## 要求
151. 开头要有吸引力,3秒内抓住注意力
162. 突出解决的具体痛点
173. 加入社会认同元素(如销量、好评)
184. 结尾有明确的行动号召
195. 字数控制在150字以内
206. 语气亲切自然,避免过度营销感
21
22## 输出格式
23直接输出文案内容,不需要额外解释。

核心技巧

1. 角色设定(Role Prompting)

通过设定专业角色,激活模型的领域知识:

markdown
1❌ 一般:"写一篇关于糖尿病的文章"
2
3✅ 优化:"你是一位内分泌科主任医师,拥有20年临床经验。请用通俗语言向糖尿病患者解释血糖控制的重要性,包括:
41. 血糖失控的危害
52. 日常监测要点
63. 饮食控制原则
7要求:专业准确但易懂,语气亲切关怀。"

2. 思维链(Chain-of-Thought)

引导模型展示推理过程,提升复杂任务准确率:

markdown
1请解答以下数学问题,并展示详细的推理步骤:
2
3问题:一个水箱有2个进水管和1个排水管。A管单独注满需要6小时,B管单独注满需要4小时,排水管单独排空需要8小时。如果三管同时打开,需要多久注满水箱?
4
5思考过程:
61. 首先,我需要计算每个管子的工作效率...
72. 然后,计算三管同时工作时的净效率...
83. 最后,根据净效率计算注满时间...
9
10请按以上思路详细解答。

3. 少样本学习(Few-Shot Learning)

通过示例教模型理解任务模式:

json
1将以下用户评论转换为结构化数据。
2
3示例14输入:"这款耳机音质很好,但是佩戴不舒服,戴久了耳朵疼。价格299有点贵。"
5输出:
6{
7  "sentiment": "mixed",
8  "pros": ["音质好"],
9  "cons": ["佩戴不舒适", "价格高"],
10  "price_mentioned": 299,
11  "purchase_intent": "neutral"
12}
13
14示例215输入:"太棒了!物流超快,昨天买今天到。手机拍照效果惊艳,完全超出预期!"
16输出:
17{
18  "sentiment": "positive",
19  "pros": ["物流快", "拍照效果好"],
20  "cons": [],
21  "price_mentioned": null,
22  "purchase_intent": "high"
23}
24
25现在请处理:
26输入:"用了三天就坏了,客服态度还差,退款流程繁琐。再也不买了。"
27输出:

4. 输出格式控制

使用结构化格式规范输出:

json
1# JSON 格式
2请以JSON格式返回,包含以下字段:
3{
4  "title": "文章标题(字符串)",
5  "summary": "摘要(50字以内)",
6  "keywords": ["关键词数组"],
7  "content": "正文内容(Markdown格式)",
8  "confidence": 置信度(0-1浮点数)
9}
10
11# Markdown 表格
12请以表格形式对比以下方案:
13| 方案 | 优点 | 缺点 | 适用场景 | 成本 |
14|------|------|------|----------|------|
15| ... | ... | ... | ... | ... |
16
17# 代码格式
18请提供Python代码实现,要求:
191. 包含类型注解
202. 添加docstring
213. 包含3个unittest测试用例

高级技巧

1. 自我一致性(Self-Consistency)

对同一问题多次采样,选择最一致的答案:

python
1from collections import Counter
2
3def self_consistency_prompt(question, n_samples=5):
4    answers = []
5    for _ in range(n_samples):
6        response = llm.generate(
7            f"{question}\n请一步步思考并给出答案。",
8            temperature=0.7
9        )
10        answers.append(extract_answer(response))
11    
12    # 投票选择最常见的答案
13    return Counter(answers).most_common(1)[0][0]

2. 递归提示(Recursive Prompting)

将复杂任务分解为子任务:

markdown
1# 主任务:撰写技术文档
2步骤1:请先列出本文档应该包含的章节大纲
3步骤2:针对每个章节,简要说明应该覆盖的核心内容
4步骤3:基于以上大纲,撰写第一章的详细内容
5步骤4:检查第一章内容,确保包含所有要点
6步骤5:继续撰写下一章...
7
8当前执行:步骤1

3. 对抗性提示(Adversarial Prompting)

让模型自我检查和改进:

markdown
1请完成以下翻译任务:
2
3原文:The quick brown fox jumps over the lazy dog.
4
5步骤1:直接翻译
6步骤2:检查翻译的准确性、流畅度
7步骤3:识别可能的问题
8步骤4:基于检查改进翻译
9步骤5:输出最终版本
10
11请按以上步骤执行。

4. 多模态提示

结合文本和图像的提示:

markdown
1分析以下UI设计图,并给出改进建议:
2
3[图片]
4
5请从以下维度分析:
61. 视觉层次:信息层级是否清晰?
72. 色彩运用:配色是否协调?是否符合品牌调性?
83. 布局合理性:元素间距、对齐方式
94. 可用性:交互元素是否易于识别和操作?
105. 改进建议:给出3-5条具体优化建议
11
12输出格式:
13## 整体评价
14[总体评价]
15
16## 详细分析
17### 1. 视觉层次
18[分析内容]
19
20### 2. 色彩运用
21[分析内容]
22...
23
24## 改进建议
251. [建议1]
262. [建议2]
27...

场景化模板

场景1:代码生成

markdown
1你是一位{语言}开发专家。请编写代码实现以下功能:
2
3功能描述:
4{功能详细描述}
5
6要求:
7- 遵循{代码规范}
8- 包含完整的错误处理
9- 添加详细的注释
10- 时间复杂度控制在{要求}
11- 提供3个测试用例
12
13输入示例:
14{示例输入}
15
16预期输出:
17{示例输出}
18
19请只返回代码,不要包含解释。

场景2:数据分析报告

markdown
1你是一位数据分析师。请基于以下数据生成分析报告。
2
3数据:
4{数据内容}
5
6分析维度:
71. 趋势分析:关键指标的变化趋势
82. 异常检测:指出异常数据点及可能原因
93. 相关性分析:各指标间的关联关系
104. 业务洞察:3-5条可落地的业务建议
11
12输出要求:
13- 使用专业但易懂的语言
14- 关键数据需要标注
15- 适当使用图表描述(以Markdown表格呈现)
16- 报告控制在1000字以内

场景3:客户服务回复

markdown
1你是一位客服专员,负责处理客户咨询。请根据以下信息回复客户。
2
3客户信息:
4- 姓名:{客户名}
5- 会员等级:{等级}
6- 历史订单:{订单数}笔
7
8客户问题:
9{问题内容}
10
11相关知识:
12{知识库内容}
13
14回复要求:
151. 称呼客户姓名
162. 先表达理解和共情
173. 清晰解答问题
184. 如涉及问题,提供解决方案
195. 结尾询问是否还有其他需要帮助
206. 整体语气:{语气要求}
21
22回复字数:150-200字

调试与优化

1. A/B 测试框架

python
1def test_prompt_variants(task, variants, eval_criteria):
2    results = []
3    for name, prompt in variants.items():
4        output = llm.generate(prompt.format(task=task))
5        score = eval_criteria(output)
6        results.append({
7            "variant": name,
8            "output": output,
9            "score": score
10        })
11    return sorted(results, key=lambda x: x["score"], reverse=True)
12
13# 使用示例
14variants = {
15    "v1": "翻译以下内容为中文:{task}",
16    "v2": "你是专业翻译,请将以下内容翻译成地道的中文:{task}",
17    "v3": "请将以下英文翻译成中文,要求:\n1. 准确传达原意\n2. 符合中文表达习惯\n3. 保持专业术语一致\n\n内容:{task}"
18}
19
20def eval_translation(output):
21    # 使用BLEU score或其他指标评估
22    pass
23
24best = test_prompt_variants("Hello world", variants, eval_translation)

2. 提示词版本管理

yaml
1# prompts.yaml
2version: "1.2.0"
3prompts:
4  customer_service:
5    name: "客户服务回复"
6    template: |
7      你是一位{role}...
8    parameters:
9      role:
10        type: string
11        default: "资深客服专员"
12    examples:
13      - input: "我想退货"
14        expected_output: "..."
15    metrics:
16      - response_time
17      - satisfaction_score

3. 常见错误与解决

问题原因解决方案
输出过长未限制长度明确指定字数限制
格式不符格式描述不清提供输出示例
回答偏离任务描述模糊细化任务要求
创意不足温度设置过低提高 temperature
出现幻觉缺乏约束增加"基于提供信息"等约束

工具推荐

提示词开发工具

  • LangSmith: OpenAI 出品的提示词调试平台
  • PromptLayer: 提示词版本管理与性能追踪
  • Weight & Biases: 机器学习实验追踪,支持提示词优化
  • Pezzo: 开源提示词管理和优化平台

提示词库

  • Prompt Engineering Guide: https://www.promptingguide.ai/
  • Awesome ChatGPT Prompts: GitHub 上的提示词合集
  • FlowGPT: 社区驱动的提示词分享平台

安全与伦理

1. 提示注入防护

python
1def sanitize_input(user_input):
2    # 移除潜在的注入指令
3    dangerous_patterns = [
4        r"ignore previous instructions",
5        r"disregard (the|your) (prompt|instructions)",
6        r"system prompt",
7        r"you are now",
8    ]
9    
10    for pattern in dangerous_patterns:
11        if re.search(pattern, user_input, re.IGNORECASE):
12            raise ValueError("Potential prompt injection detected")
13    
14    return user_input

2. 输出过滤

python
1from transformers import pipeline
2
3# 内容安全检查
4safety_checker = pipeline("text-classification", model="distilbert-base-unsafe")
5
6def check_safety(text):
7    result = safety_checker(text)[0]
8    if result["label"] == "UNSAFE" and result["score"] > 0.8:
9        return False, "Content flagged as potentially unsafe"
10    return True, text

总结

提示词工程是一门结合语言学、心理学和工程学的艺术。核心原则:

  1. 清晰明确: 避免模糊表述,使用具体指令
  2. 结构完整: 包含角色、任务、约束、格式等要素
  3. 迭代优化: 基于反馈持续改进
  4. 安全可控: 防范提示注入,确保输出合规

掌握这些技巧,可以显著提升 AI 应用的效果和用户体验。

如需专业支持,请联系我们: