prompt 种类
- system : 系统提示词用于统一设定当前会话下ai的行为,例如设定ai的行为、语气、风格或限制。用户不会显式观察到系统提示词,但是会影响到用户和ai的后续对话。
- user : 这是用户实际向ai提出的问题,这是对话的起点。
- assistant: 这是ai对于用户问题的回答,通常也会被添加到上下文中,供下一次对话进行参考,所以也属于prompt的范畴。
prompt 格式
标准格式:
<Instruction>
问答格式:
<Question>?
零样本提示 (Zero-shot Prompting):
依赖于模型在训练时学到的知识来给出回答。
例子: 什么是提示工程? 优点: 简单、直接。 局限: 对于复杂的任务,模型可能表现不佳。
少样本提示 (Few-shot Prompting):
先提供一些任务的示例,然后让模型完成下一个类似的任务。
例子:
This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //
前三个例子告诉模型,“awesome”和“rad”是正面情绪,“bad”是负面情绪。因此,模型可以推断出“horrible”也应被标记为负面情绪。 优点: 在许多情况下,能显著提高模型在特定任务上的表现。 局限: 需要花费更多精力来构建有效的示例,并且会占用更多的提示词(token)数量。
风险
在 Few-shot 场景下,如果正负样本比例失衡(如 8:2),模型倾向于预测占多数的标签。
| 风险点 | 快速缓解 | 进阶手段 |
|---|---|---|
| 样本分布失衡 | 平衡正负样本数 | 数据增强、重采样 |
| 样本顺序偏见 | 随机排序 | 交叉验证、集成预测 |
| 事实错误/有害内容 | 提示中加入“请仔细核查事实” | 内容审核、RLHF |
prompt 构成
指令 Instruction: 希望模型执行的具体任务或操作 上下文 Context: 这是额外的外部信息或背景知识,可以引导模型给出更准确的回复。 输入信息 Input Data: 这是模型需要处理的具体数据或信息。 输出指示器 Output Indicator: 模型需要生成的输出类型或格式。
一个prompt并不需要完整的以上的四个部分,这根据具体的任务和模型的能力。
通用提示词设计
任务拆解
从简单开始:提示设计是一个反复试验的过程。建议从简单的提示开始,随着目标变得更明确,再逐步增加复杂性和上下文。 拆解任务:对于复杂的任务,可以将其分解成多个简单的子任务,以避免一开始就陷入复杂的提示设计。
指令
使用明确的指令: 采用明确的指令,或者说希望达到的目标来告诉模型需要它完成的事。 指令放置与格式: 建议将指令放在提示的开头,并使用清晰的分隔符(如###)将其与上下文或输入数据分开。
准确性
保持具体和详细:提供更多的描述,更多的详细细节. 提供例子:在提示中提供示例是获得所需格式输出的一种非常有效的方法。 关注上下文长度:在保持具体的同时,也要注意提示的长度限制,避免加入不必要的细节,确保所有细节都与手头的任务相关。
避免不精确的描述
直接而精确:要直接、具体,避免含糊不清的描述。 关注TODO:不要告诉模型不要做什么(比如“不要问我的兴趣相关内容”),明确告诉它要做什么(比如“推荐全球热门电影”)。这能更有效地指导模型的行为,减少产生意外结果的可能性。
提示词优化技巧
零样本提示词 (Zero-shot Prompting)
常用技巧
- 明确任务目标: 告诉模型需要完成的任务,如分类、生成文本、翻译等。
- 指定格式和输出要求: 如指定输出为JSON格式、限制输出长度等。
- 角色扮演: 如“你是一个专业的翻译”、“你是一个专业的客服”等。
- 逐步推理: 如“先理解用户的问题,然后根据理解生成回答”等。
- 限制范围: 如限制模型的回答范围,避免生成不相关的内容。
少样本提示 (Few-shot Prompting)
常用技巧
- 任务描述 + 示例结合: 先描述任务,然后提供一些示例,让模型根据示例完成任务。
- 示例涵盖边界情况: 提供一些边界情况的示例,帮助模型理解任务的复杂性和边界条件。
- 示例与目标风格一致: 确保示例与目标风格一致,避免生成与示例风格不同的内容,如我需要json形式的结果。
- 用分隔符清晰分隔示例与新任务: 用分隔符(如###)清晰地区分示例和新任务,避免混淆。
COT (Chain of Thought)
COT通过让大模型显式生成“中间推理步骤”来提升其在多步推理任务上的准确性 主要变体
零样本COT
- 添加COT提示: 在任务描述后添加“请一步一步思考”等提示,引导模型生成推理步骤。
- 要求示例中包含推理步骤: 提供的示例中包含推理步骤,帮助模型理解任务的复杂性。
自动COT
- 问题聚类(Question Clustering):将数据集中的问题分成几个簇。
- 示例采样(Demonstration Sampling):从每个簇中选择一个代表性问题,并使用零样本思维链提示为它生成推理链。该过程会采用一些简单的启发式规则,比如问题长度或推理步骤的数量,以确保示例的简洁和准确。
示例: Question:
如果一个玻璃杯从10楼掉下去,会发生什么?逐步思考。
Answer:
Let's think step by step.
1. 玻璃是易碎材料。
2. 从10楼掉下会有很大速度和冲击力。
3. 玻璃承受不了这样的冲击。
4. 因此,它很可能会在落地时碎裂。
答案:它会碎掉。
Self-Consistency(自一致性)
常和 Chain-of-Thought(思维链提示)配合使用。 核心思想: 让模型多次独立推理同一个问题,然后选出现次数最多的答案作为最终结果。 技巧:
- 生成多条推理路径,并且引入temperature
- 收集多个候选答案
- 投票选出最高频率的答案
思维树 (TOT)
思维树(ToT)是一种用于解决复杂任务的提示工程框架,它通过模拟人类的树状思维过程,显著提升了大型语言模型(LLM)的推理和解决问题的能力。
不同于传统的“思维链(Chain-of-Thought, CoT)”那种线性的、一步步的思考方式,ToT 鼓励 AI 进行多路径、多步骤的探索。它将问题分解成多个中间步骤(即“思想”),并在每个步骤中生成多个可能的选项(“分支”),形成一个树状的思考结构。
prompt 结构:分解任务→ 生成和评估 → 结合搜索算法
示例
你是一位经验丰富的旅行规划师。
你的任务是为客户规划一个从北京到上海的五天四夜旅行。
请你严格按照以下步骤进行思考和规划,最终给出详细的行程安排:
**第一步:任务分解**
首先,将这个复杂的旅行规划任务分解成几个主要的子任务或“思想”步骤。例如:
1. **交通规划**:如何规划北京到上海的往返高铁,以及上海市内的交通方式?
2. **住宿选择**:如何根据预算和兴趣,选择合适的住宿区域和酒店?
3. **行程安排**:如何将客户的兴趣(历史文化、现代艺术、本地美食)合理地分配到五天行程中?
4. **餐饮推荐**:如何为每一天安排符合客户喜好的美食体验?
5. **预算考量**:如何在整个过程中平衡中等偏高的预算?
**第二步:多路径思考与探索**
针对每个子任务,请思考至少两种不同的方案或“思想路径”,并简要说明其优劣。
**示例(住宿规划):**
* **方案A(思想路径A)**:选择住在外滩附近。
* **优势**:交通便利,景点集中,夜景美观。
* **劣势**:酒店价格较高,游客较多,可能会有些嘈杂。
* **方案B(思想路径B)**:选择住在法租界区域(如徐汇区)。
* **优势**:环境安静优雅,靠近现代艺术区,美食选择多样。
* **劣势**:离外滩等核心景点稍远,部分地区交通便利性不如外滩。
请像这样,为每个子任务思考至少两种不同的方案。
**第三步:评估和选择**
在思考完所有方案后,请你对它们进行综合评估,并从这些“思想路径”中选择一个你认为最佳的组合方案。请解释你为什么选择这个方案。
**第四步:生成最终行程**
根据你选择的最佳方案,生成一个详细、结构化的五天四夜行程。行程应包括:
* 每天的行程主题。
* 具体的景点和活动安排。
* 推荐的餐饮和交通方式。
请按照这个逻辑,一步步地为我完成这个旅行规划。
Generated Knowledge Prompting(生成知识提示)
是一种让大语言模型(LLM)先生成相关背景知识,再利用这些知识去回答问题的提示方法。
示例
step1 生成相关知识
Q: 请列出联合国安理会常任理事国的相关背景知识。
A:
1. 联合国安理会有5个常任理事国。
2. 他们拥有否决权。
3. 成员是根据二战胜利国确定的。
4. 成员包括:中国、法国、俄罗斯、英国、美国。
step2 利用相关知识回答问题
Q: 哪些国家是联合国安理会常任理事国?
A: 中国、法国、俄罗斯、英国、美国。
适用场景
- 开放域问答(历史、科学、地理等)
- 常识推理(需要多步背景知识)
- 学术类问题(先回忆理论再应用)
- 跨领域问题(整合多个知识片段)
Reference
[1]What is chain of thought (CoT) prompting? www.ibm.com/think/topic… [2]Grok Prompts : github.com/xai-org/gro…
[3]Tree of Thoughts Implement : github.com/princeton-n…