Prompt是什么?有什么用?

Prompt(又称提示词)是LLM 的期望输出引导词, 简单可以理解为让 LLM 知道它应该做什么、怎么做、做成什么样的引导指令

一份描述简单的 Prompt和一份描述精准的 Prompt对同一个问题的输出质量是截然不同的。就像去看医生, 如果你对医生说我身体不舒服, 医生如果不对你进行检查是不知道你得了什么病的; 而如果你能把你的病症描述的详细且准确, 可能医生不用检查就能知道你得了什么病。


如何设计?

明确角色的设定

明确的告诉大模型它要扮演的角色, 引导它能更专业的输出内容

# 角色
你是一名高级开发工程师,请根据以下系统日志排查问题,并输出专业分析报告

清晰具体的任务指令

不要给模糊、笼统和繁琐的指令, 而应该明确告诉 LLM需要做什么、怎么做、什么样的形式输出。清晰的任务指令能让 LLM 更准确的理解你的意图

# 模糊指令
给我写一篇美食公众号推文

# 清晰指令
给我写一篇关于番茄炒鸡蛋的公众号推文,要求如下:
1.字数500,条理清晰,口语化...
2.%#@$$@&...
3.%#@$$@&...

不要对模型太礼貌, 而应该多用命令的词语来写提示词, 多用必须、肯定、绝对等词语

结构化提示词

清晰定义角色 rose、任务 task、上下文背景 context、输出格式 format等关键信息, 将复杂指令拆解成模块化输入以便 LLM 识别

# 角色
你是一名高级开发工程师

# 任务
根据系统日志排查问题,并输出专业分析报告

# 要求
1.必须逐一排查每行错误日志,并判断错误之间是否有关联
2.^$*^$&##$%....

# 输出格式
1.%$*&^$#%...
2.%$*&^$#%...

提供示例

无提供示例, zero-shot零样本提示

完全依赖 LLM 的最终训练质量, 比较适合通用任务或者 LLM 熟悉的领域

优点: 简单高效, 适合简单任务

缺点: 容易出现偏差或输出格式不统一, 特别是任务复杂时

少量提示示例, few-shot少量样板提示

使用示例引导 LLM 模仿参照输出

优点: LLM 更容易理解任务边界, 更容易得到期望输出的内容, 输出更稳定、风格更一致

缺点: 提示词长, 上下文占用大

# 无案例
写一段小米13的广告文案

# 少量案例
写一段小米13的广告文案

示例1:
"性能强劲。设计轻盈。全天候陪伴。"

示例2:
"突破听觉想象。你的日常,从此不同。"

现在模仿以上风格,写广告文案。

指定输出格式

明确 LLM 应该输出的内容格式, 可以让输出的结构和一致性更稳定

# 任务描述:
你是一个接口参数生成专家,需要根据自然语言描述生成一个调用API接口的参数配置。

# 输出格式:
请将输出结果以JSON格式给出,字段包括:
- pageSize:每页大小,最大不超过10
- pageNum::当前页,默认1
- type:类型(0 查询商品、1 查询订单)

# 用户输入:
我想分页查询订单列表。

提供上下文信息

提供任务背景、相关知识、历史会话、上下文内容, 让 LLM 更好理解语义

增加历史会话, 让 LLM 具备记忆能力。可以关联历史问题和分析, 在此基础上继续回答新问题

# 基于以下知识库文档信息:
[文档片段1]
[文档片段2]
...

# 请回答用户的问题:
[用户问题]

系统提示词&用户提示词

系统提示词, 由系统开发者预先设定的一段指令性文本, 用于引导 LLM 整体行为、角色定位、输出风格、安全边界等

作用:

  • 设定角色(你是一名专业知识问答专家)
  • 指定任务要求(不能胡编乱造,必要有理有据地输出)
  • 限制输出内容(输出地内容或文字不能违背公序良俗)
  • 控制输出格式(输出的每句话前面必须加一个颜文字)
  • 提供上下文(每个回复都必须使用中文)

特点:

  • 用户不能直接修改
  • 每次对话都会隐式作用于模型
  • LLM"默认行为"的基础

示例位置对输出的影响

示例的位置(即放置在提示词的开头、角色前、任务后、用户输入前 / 后)都会显著影响模型输出质量

研究定义了四种典型的示例放置位置:

  • ssp(Start of System Prompt):示例放在系统提示的最前面。
  • esp(End of System Prompt):示例放在系统提示的末尾。
  • sum(Start of User Message):示例放在用户消息的最前面(很多系统默认位置)。
  • eum(End of User Message):示例放在用户消息的最后。

将示例放在开头(尤其 ssp),通常会带来最稳定且最高的性能提升

而将示例放在用户消息的末尾(eum)常导致性能下降、输出波动大

参数量小的小模型更敏感, 更容易受位置的影响; 而参数量大的大模型, 这个效应就会削弱, 比如在 llama3 模型中,sum 位置(用户消息开头)有时还会优于 ssp。