在使用大语言模型进行开发时,经常会遇到一些让人头疼的问题,比如模型输出跑偏、回答缺乏逻辑性、或者结果过于笼统。这些问题往往不是模型能力的问题,而是我们没有很好地引导模型理解我们的需求。今天就来分享三种Prompt Engineering的核心技巧,帮你快速提升AI对话的效果。

角色设定示例

1. 角色设定(Role Prompting)

角色设定是最基础也最有效的技巧之一。通过明确告诉AI它应该扮演什么角色,可以显著提升回答的专业性和针对性。

  • 作用原理:给模型一个明确的身份定位,限制其回答范围和风格
  • 适用场景:需要特定领域专业回答时(如医疗、法律、编程等)
  • 典型结构:"你是一位资深[角色],请以[角度]回答以下问题..."
import openai

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "你是一位经验丰富的Python开发工程师"},
        {"role": "user", "content": "如何优化这段Python代码的运行效率?"}
    ],
    temperature=0.7
)

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

思维链技巧通过引导模型分步思考,可以显著提升复杂问题的解决能力。

  • 核心价值:让模型的思考过程"可视化",提高逻辑性和可解释性
  • 关键语法:使用"首先"、"然后"、"因此"等连接词构建推理链条
  • 温度参数:建议设置为0.3-0.6之间以获得更稳定的推理过程
prompt = """
问题:如果小明比小红高,小红比小刚高,那么谁最矮?
请一步一步思考:
1. 首先,小明 > 小红
2. 其次,小红 > 小刚
3. 因此,身高排序是小明 > 小红 > 小刚
4. 所以最矮的是:小刚
"""

思维链示例

3. 示例驱动(Few-Shot Learning)

提供少量示例是最直接的引导方式,特别适合格式固定的输出需求。

  • 最佳实践:提供3-5个高质量的输入输出示例
  • 格式规范:保持示例格式一致,明确区分输入和输出
  • 停止序列:合理设置stop_sequence防止示例被继续扩展
examples = """
输入:把这句话转换成专业商务邮件:"明天别忘了开会"
输出:"温馨提示:敬请留意明日会议安排,请准时参加。"

输入:把这句话转换成专业商务邮件:"报告周五前得交"
输出:"工作提示:请您于本周五之前提交相关报告,谢谢配合。"
"""

response = openai.Completion.create(
    model="text-davinci-003",
    prompt=examples + "\n输入:把这句话转换成专业商务邮件:\"项目延期了\"\n输出:",
    temperature=0.5,
    stop="\n"
)

效果对比

| 技巧 | 优化前输出 | 优化后输出 | |------|------------|------------| | 无提示 | "代码优化可以用缓存" | "作为Python工程师,我建议:1. 使用lru_cache装饰器 2. 向量化操作..." | | 无分步 | "小刚最矮" | "1. 小明>小红 2. 小红>小刚 3. 所以小刚最矮" | | 无示例 | "请按时提交" | "敬请您于截止日期前提交完整报告,以便后续流程顺利进行" |

常见错误

  1. 提示词过长(超过300token会影响模型注意力)
  2. 指令冲突(如同时要求简洁和详细)
  3. 角色设定模糊("你是个专家"不如"你是10年经验的数据科学家")
  4. 示例质量差(不一致、有错误的示例会误导模型)

进阶组合策略

尝试把这些技巧组合使用会有意外收获: - 先设定角色,再提供示例 - 在思维链中嵌入专业角色视角 - 用多个few-shot示例展示不同思考角度

最后留个思考题:当temperature参数从0调到1时,这三种技巧的效果会如何变化?建议大家动手试试不同参数的组合效果!

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐