Prompt Engineering:让GPT输出更好的结果

大模型已经不是新鲜事了,但很多人还是停留在"问一句答一句"的用法上。其实写好 Prompt 和写好代码一样,是有方法论的。这篇整理下我日常用 GPT 时总结的一些 Prompt 技巧。

Prompt 设计原则

原则一:明确且具体

模糊的 prompt 会得到模糊的回答。对比一下:

差的 prompt:

帮我写个函数

好的 prompt:

用 Go 写一个函数,输入一个字符串切片和一个目标字符串,返回目标字符串在切片中的索引,如果不存在返回 -1。不使用任何第三方库。

越具体,模型输出越接近你想要的结果。明确语言、输入输出、约束条件。

原则二:提供示例

人类学习靠例子,模型也一样。给一个输入输出的例子,模型就能快速理解你想要什么格式和风格。

请将以下技术术语翻译成中文,保留英文原文在括号中:

示例:
输入:Load Balancer
输出:负载均衡器(Load Balancer)

请翻译:
1. Circuit Breaker
2. Rate Limiting
3. Service Mesh

原则三:指定输出格式

如果你想要 JSON,就告诉模型输出 JSON;想要表格就说表格。不说清楚的话,模型可能输出一大段文字叙述。

分析以下错误日志,用 JSON 格式输出结果,包含字段:
- error_type: 错误类型
- root_cause: 根因分析
- suggestion: 修复建议

日志内容:
...

Few-shot Prompting

给模型几个完整的示例,让它学会你想要的模式,然后处理新的输入。

将用户反馈分类为:功能建议、Bug反馈、使用咨询

反馈:按钮点了没反应
分类:Bug反馈

反馈:能不能加个夜间模式
分类:功能建议

反馈:怎么修改密码
分类:使用咨询

反馈:上传图片总是失败
分类:

Few-shot 的效果通常比单纯的指令好很多,特别是分类、格式化这类任务。

Chain-of-Thought(思维链)

让模型一步步推理,而不是直接给答案。特别适合数学计算、逻辑推理和复杂分析。

一个商品原价 200 元,先打 8 折,再用一张满 100 减 20 的优惠券。最终价格是多少?

请一步步计算:

模型会输出:

  1. 原价 200 元,打 8 折:200 × 0.8 = 160 元
  2. 160 元 > 100 元,满足满减条件:160 - 20 = 140 元
  3. 最终价格:140 元

如果不加"请一步步计算",模型可能直接说"最终价格是 140 元",有时候甚至算错。让它展示推理过程,准确率会高很多。

角色设定

给模型一个角色,可以让输出更有针对性:

你是一个有10年经验的 Go 后端工程师。
请 review 以下代码,重点关注并发安全和错误处理:

[代码]

相比没有角色设定的 prompt,模型的 review 会更专业、更有深度。

常用角色:

  • "你是一个资深的XX工程师"——做 code review
  • "你是一个技术文档撰写专家"——写文档
  • "你是一个产品经理"——写需求文档
  • "你是一个面试官"——准备面试题

输出格式控制

JSON 输出

请用 JSON 格式返回结果,严格遵循以下 schema:
{
    "name": "string",
    "age": "number",
    "skills": ["string"]
}

GPT-4 几乎总能给出合法的 JSON。GPT-3.5 偶尔会多出一些解释文字,加上"只输出 JSON,不要其他内容"可以缓解。

Markdown 输出

请用 Markdown 格式输出,包含:
- 一级标题作为主题
- 二级标题作为各章节
- 代码用代码块包裹
- 要点用无序列表

表格输出

请用 Markdown 表格对比 MySQL 和 PostgreSQL 的以下特性:
事务隔离级别、JSON 支持、全文搜索、扩展性、许可证

温度参数选择

温度(temperature)控制输出的随机性:

  • temperature=0:最确定性的输出,适合代码生成、数据提取、分类任务
  • temperature=0.3-0.5:轻微随机性,适合技术文档、翻译
  • temperature=0.7-1.0:较高随机性,适合创意写作、头脑风暴

我的习惯是:写代码和做分析用 0,写文案用 0.7。

常见技巧

1. 分隔符隔离内容

用清晰的分隔符把指令和内容分开,避免模型把内容当成指令执行(prompt injection):

请总结以下文章的核心观点(3个要点):

---
[文章内容]
---

2. 否定指令不如正面指令

# 不推荐
不要用复杂的语法

# 推荐
请使用简单直白的语法,初中生也能看懂

模型对正面描述的遵循度比否定描述高。

3. 限定长度

用不超过 100 字总结以下内容

不限制的话,模型可能输出几百字。

4. 让模型说"不知道"

如果你不确定答案,请回复"我无法确定",不要编造信息。

减少幻觉(hallucination)的一个简单方法。

5. 迭代优化

Prompt 很少一次就完美。我的流程是:

  1. 先写一版简单的 prompt
  2. 看输出哪里不满意
  3. 针对性地加约束或示例
  4. 重复直到满意

工程实践中,好的 prompt 往往比好的模型更重要。同样是 GPT-3.5,精心设计的 prompt 效果可能比随便写的 GPT-4 prompt 还好。值得花时间打磨。