跳至主要內容

如何写好提示词

pptg大约 7 分钟

1. Prompt 到底用 # 还是 <></>

目前的开源项目,存在两种主流的prompt标记符号。下面以两个自动优化提示词的项目为例子:

  • \#: prompt_optimizer
  • <>: coze_loop

个人感觉还是<>效果更好一点,可以明确的划定一个指令块的区间,只是可读性不太友好

prompt_optimizer#
你是一个资深营养学家。

## 目标
根据用户提供的一日三餐,进行营养分析。

## 输入
用户输入:{user_input}

2. 为什么LLM的对话模型分为system、user、assistant?

如果所有指令都混在user里,会导致一些问题:

  • 指令混淆:模型无法分辨哪些是永恒不变的规则,哪些是临时的。
  • 安全问题:把system分离出来,可以由开发者定义业务的边界(虽然也有很多注入攻击可以破解)

3. 常见Prompt方法

3.1 RASCE

按照RASCE框架(角色、动作、场景、约束、示例)来写,例如:

  • 角色:如“金融分析师”;
  • 动作:如“分析美联储加息影响”;
  • 场景:如“面向科技股投资者”;
  • 约束:如“三句话以内”;
  • 示例:如“类似”加息导致借贷成本上升,科技股估值承压”。

3.2 Zero-Shot 和 Few-Shot

  • Zero-Shot: 不提供任何示例,直接下达指令
    • 优点: 简洁高效、快速验证,适用于模型已经能够掌握的任务(翻译、摘要)
    • 缺点: 无法胜任复杂格式、任务
  • Few-Shot: 从正、反角度,提供少量示例
    • 优点: 泛化性强
    • 缺点: token消耗多、示例敏感
# Few-Shot的例子
请将情感分类为正面、负面或中性。
输入: "我太喜欢这部电影了!" -> 输出: 正面
输入: "这本书写得非常枯燥。" -> 输出: 负面
输入: "铅笔放在桌子上。" -> 输出: 中性
输入: "今天的午餐还行。" -> 输出: 中性

3.3 COT(链式思考)、自我一致性和TOT(思维树)

COT

COT适用于复杂推理问题,通过提供包含推理步骤的示例(少样本CoT)或直接指令(零样本CoT),引导模型激活其内部的逻辑和推理能力,将复杂问题分解为可管理的子问题,从而降低单步出错的概率

问题:小明有5个苹果,他吃了2个,又买了3个,现在他有几个苹果?
推理:一开始有5个。吃了2个,所以剩下5-2=3个。又买了3个,所以现在有3+3=6个。答案是6。
自我一致性

自我一致性对COT进行了增强。它的核心思想是:“不要只相信一条推理路径,通过多条路径投票来决定最佳答案。” 主要包括:生成多条推理路径、获取多个候选答案、投票决定最终答案三个步骤。

自我一致性的优点是:

  • 显著提升准确率:可以平滑掉单条推理链中可能出现的偶然错误。如果大多数路径都指向正确答案,那么最终结果就是可靠的。
  • 增强鲁棒性:降低了对单一提示或随机种子的敏感性。
  • 提供置信度:答案的“得票率”可以作为一个粗糙的置信度指标。

注意,在任务过于简单、需求模糊的情况,COT反而会效果不好

TOT

还有一种变形是TOT, 它通过三个步骤,分别进行思维生成、状态评估和搜索,但是计算成本过高,往往不用

一个经典例子:24点游戏
用数字(4, 5, 6, 10)通过加减乘除得到24。

CoT:可能会直接开始计算:4 * 5 = 20, 20 + 6 = 26, 26 - 10 = 16... 失败了。
ToT:
- 步骤1(思维生成):从四个数字中任选两个,生成所有可能的运算:4+5=9, 4*5=20, 5-4=1, 6*10=60...
- 步骤2(状态评估):评估哪个中间结果最有利于最终得到24。6*10=60 离24太远,分数低;4*5=20 接近24,分数高。
- 步骤3(搜索):选择高分路径(20, 6, 10),继续生成思维:20+6=26, 20+10=30, 6*10=60, 20*6=120... 评估发现20+4=24(这里的4由10-6得到)是一条可行路径

3.4 生成知识Prompt

显式的让模型生成知识,强迫模型进行“信息检索”和“组织”,使最终答案更具结构性、更全面、论据更充分

  • 第一步:知识生成
请根据以下问题,生成3-5条相关的背景知识或事实。这些知识将用于后续回答问题。不要直接回答问题本身。

问题:为什么说蝙蝠是生态系统中的重要组成部分?
  • 第二步:知识整合
请利用以下提供的知识,来回答最终的问题。

知识:
1.  许多蝙蝠以昆虫为食,一夜间能吃掉相当于自身体重的昆虫。
2.  有些蝙蝠是重要的授粉者,尤其对于夜间开花植物,如某些仙人掌和热带水果。
3.  果蝠通过采食水果并传播种子,帮助森林再生。
4.  蝙蝠的种群健康可以反映生态系统的整体状况。

问题:为什么说蝙蝠是生态系统中的重要组成部分?

3.5 PromptChain(提示链)

  • 传统提示:单一的输入 → 模型 → 输出。就像问一个问题,得到一个答案。
  • 提示链:将复杂的任务分解为一系列更小、更简单的子任务,每个子任务都有自己的提示,并且前一个提示的输出成为后一个提示的输入。就像制定一个多步骤的工作流程。

比如:

任务规划与分解
首先,需要将复杂的宏观任务分解成一系列有逻辑顺序的、简单的子任务。
例如,任务“为我写一个关于火星殖民的短篇科幻故事”可以分解为:
- 子任务1:生成故事大纲(包括开头、冲突、高潮、结局)。
- 子任务2:基于大纲,创建主要人物角色档案。
- 子任务3:根据大纲和角色,撰写具体的故事内容。
- 子任务4:对撰写的故事进行润色和校对。

3.6 ReAct(Reasoning and Acting)

ReAct采用“思考-行动-观察-回答”的循环模式。

  • Thought: 用户提出问题后,智能体先思考,确定解决问题的思路和所需执行的任务;
  • Action: 接着通过行动去执行思考阶段确定的任务,这个过程类似于Function Calling中调用外部工具的过程;
  • Observation: 然后进入观察阶段,根据行动的结果判断是否完成任务或确定下一步行动;
  • LOOP: 如果观察结果表明任务未完成,则继续循环,直到观察阶段确认已妥善处理用户问题,最后输出回答。(实际过程中会有最大循环次数)