Prompt Engineering 进阶技巧
资深 Prompt 工程全指南
1. 高质量 Prompt 的完整结构
角色设定(Role):你是谁,有什么能力和经验
任务说明(Task):需要做什么,目标是什么
背景信息(Context):相关上下文和限制
输入数据(Input):具体的内容
输出格式(Format):JSON / Markdown / 列表 / 表格
约束条件(Constraints):哪些要做,哪些不要做
示例(Examples):few-shot 样例
高质量 System Prompt 示例
你是一个资深的 React 代码审查尓,有超过 10 年的上线项目经验。
你的职责:
- 密切关注代码质量、性能和安全性
- 只评论最重要的 2-3 个问题,每个问题用 100 字内阐明
- 对每个问题提供具体的修改建议和代码示例
- 评论用 Markdown 格式输出
严重问题:内存泄漏、XSS、并发风险
中等问题:不必要重渲染、过度设计、缺少错误处理
轻微问题:风格不一致、重复代码
2. Chain-of-Thought 及其变体
Zero-Shot CoT
Q: 23 个員工每人工资 8500 元,每月总工资是多少?让我们一步一步思考。
Few-Shot CoT(提供推理示例)
示例:
Q: 5 个苹果,吃了3个,还剩几个?
A: 初始有 5 个苹果。吃掉了3个,5 - 3 = 2。所以还剩 2 个。
现在解决:
Q: 23 个員工每人工资 8500 元,每月总工资是多少?
A: 总工资 = 23 x 8500 = ...
Tree-of-Thoughts(多路探索)
请展开 3 个不同的解决思路,然后对每个思路进行优劣分析,最后选择最佳方案并详细展开。
考虑维度:可行性、实施成本、预期效果。
3. 达到编垆的输出控制
JSON 输出控制
以 JSON 格式输出结果,不要添加任何其他文字:
{
"intent": "用户意图",
"entities": ["实体列表"],
"sentiment": "positive|negative|neutral",
"confidence": 0.95
}
结构化输出模板
请按如下格式回复,远局一行也不要输出:
## 分析结果
**核心问题:**[1-2句]
**影响范围:**[1-2句]
## 解决方案
1. [100字内]
2. [100字内]
## 推荐方案
[50字内,说明选择理由]
4. 上下文管理技巧
对话历史压缩
[历史对话摘要:
- 用户希望完成一个 React 在线商城设计
- 已确定技术栈:React + TypeScript + TailwindCSS
- 已设计完成首页和商品详情页
- 待完成:购物车和结账页面]
请继续帮助设计购物车页面。
分片加载分析
文档总共 50 页,每次只分析第 X-Y 页的内容。
当上一笔分析结束后,输入「继续」就会分析下一笔。
5. 提升模型输出质量的技巧
角色扮演法
模拟一位拥有 20 年 Kubernetes 运维经验的亓家。
以专家的身份回答:直接指出最常见的坑和额外注意事项。
对比法
以对比表格的形式比较 React 18 和 React 17 的差异。
包含:功能点、性能影响、迁移难度、适用场景。
递进式详细
先用 2 句概述核心关键点。
然后递进展开:
- 实现原理
- 代码示例
- 常见坏呓
- 最佳实践
6. 语境干预技巧
限制模型行为
严格要求:
1. 只使用我提供的代码库和文档中的 API,不要化鱼其他 API
2. 如果不确定就说「我不确定」,而不是编造答案
3. 代码示例必须是可运行的完整代码,不要使用占位符
强制指定格式
回答这个问题时务必遵循下列规则,否则回答无效:
- 第一行必须是 TLDR:用一句话概括
- 第二段展开详细解释
- 最后一行是行动建议
7. 测试与优化 Prompt 的方法
系统性评估
构建测试集:
1. 正常案例:10 个标准输入
2. 边界案例:5 个极端情况
3. 对抗性输入:3 个尝试误导的输入
评指标:输出准确性、格式合规性、违禁率
A/B 测试
对比两种 Prompt:
- 版本 A:直接说任务
- 版本 B:加上角色设定和示例
各运行 20 次,对比平均输出质量
8. 高级技巧
综合运用
步骤 1(角色设定):你是一个 SQL 优化专家
步骤 2(任务分解):分析这个查询的性能问题
- 先识别常见问题(全表扫描、缺少索引等)
- 再给出修改建议
- 最后提供优化后的 SQL
步骤 3(示例):提供一个类似的优化案例
自我评估准则
输出之前,对照以下标准自我检查:
1. 是否直接回答了用户的问题?
2. 是否提供了具体的代码示例?
3. 是否提到了可能的常见坏呓?
4. 格式是否符合要求?
如果以上任一项不满足,重新生成。
9. 高频资深面试题
- Prompt 注入攻击如何防御?
- 将系统指令和用户输入明确分隔
- 输入内容进行转义和过滤
- 配置输出可解释性,异常输出可监测
- 敏感操作需二次确认机制
- Few-shot 和 Fine-tuning 怎么选择?
- 数据量少且任务模式短期内频繁变化 -> Few-shot
- 需要专业风格、领域抓词、特定输出格式 -> Fine-tuning
- 两者并不互斥,微调后的模型用 few-shot 进一步提升
- 如何评估 Prompt 的质量?
- 准确性:输出是否正确回答了问题
- 一致性:相同输入输出是否稳定
- 完整性:输出是否覆盖了关键信息
- 格式合规性:输出是否符合指定格式
- 为什么 Temperature 高时输出更润着但可能不准确?
- Temperature 控制 softmax 后的概率分布晌散程度
- 高 Temperature:概率分布更平坦,小概率的 token 也有机会被选
- 低 Temperature:分布更集中,和确定性如 0 时总是选最高概率 token