# 提示词以及常见优化技巧

# prompt 种类

* system : 系统提示词用于统一设定当前会话下ai的行为，例如设定ai的行为、语气、风格或限制。用户不会显式观察到系统提示词，但是会影响到用户和ai的后续对话。
    
* user : 这是用户实际向ai提出的问题，这是对话的起点。
    
* assistant: 这是ai对于用户问题的回答，通常也会被添加到上下文中，供下一次对话进行参考，所以也属于prompt的范畴。
    

# prompt 格式

## 标准格式：

```go
<Instruction>
```

## 问答格式：

```go
<Question>?
```

## 零样本提示 (Zero-shot Prompting):

依赖于模型在训练时学到的知识来给出回答。

例子: 什么是提示工程？ 优点: 简单、直接。 局限: 对于复杂的任务，模型可能表现不佳。

## 少样本提示 (Few-shot Prompting):

先提供一些任务的示例，然后让模型完成下一个类似的任务。

例子:

```go
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)

常用技巧

1. 明确任务目标: 告诉模型需要完成的任务，如分类、生成文本、翻译等。
    
2. 指定格式和输出要求: 如指定输出为JSON格式、限制输出长度等。
    
3. 角色扮演: 如“你是一个专业的翻译”、“你是一个专业的客服”等。
    
4. 逐步推理: 如“先理解用户的问题，然后根据理解生成回答”等。
    
5. 限制范围: 如限制模型的回答范围，避免生成不相关的内容。
    

## 少样本提示 (Few-shot Prompting)

常用技巧

1. 任务描述 + 示例结合: 先描述任务，然后提供一些示例，让模型根据示例完成任务。
    
2. 示例涵盖边界情况: 提供一些边界情况的示例，帮助模型理解任务的复杂性和边界条件。
    
3. 示例与目标风格一致: 确保示例与目标风格一致，避免生成与示例风格不同的内容,如我需要json形式的结果。
    
4. 用分隔符清晰分隔示例与新任务: 用分隔符（如###）清晰地区分示例和新任务，避免混淆。
    

## COT (Chain of Thought)

COT通过让大模型显式生成“中间推理步骤”来提升其在多步推理任务上的准确性 主要变体

### 零样本COT

1. 添加COT提示: 在任务描述后添加“请一步一步思考”等提示，引导模型生成推理步骤。
    
2. 要求示例中包含推理步骤: 提供的示例中包含推理步骤，帮助模型理解任务的复杂性。
    

### 自动COT

1. 问题聚类（Question Clustering）：将数据集中的问题分成几个簇。
    
2. 示例采样（Demonstration Sampling）：从每个簇中选择一个代表性问题，并使用零样本思维链提示为它生成推理链。该过程会采用一些简单的启发式规则，比如问题长度或推理步骤的数量，以确保示例的简洁和准确。
    

示例： Question:

```go
如果一个玻璃杯从10楼掉下去，会发生什么？逐步思考。
```

Answer:

```go
Let's think step by step.
1. 玻璃是易碎材料。
2. 从10楼掉下会有很大速度和冲击力。
3. 玻璃承受不了这样的冲击。
4. 因此，它很可能会在落地时碎裂。
答案：它会碎掉。
```

## Self-Consistency（自一致性）

常和 Chain-of-Thought（思维链提示）配合使用。 核心思想: 让模型多次独立推理同一个问题，然后选出现次数最多的答案作为最终结果。 技巧：

1. 生成多条推理路径，并且引入temperature
    
2. 收集多个候选答案
    
3. 投票选出最高频率的答案
    

## 思维树 (TOT)

思维树（ToT）是一种用于解决复杂任务的提示工程框架，它通过模拟人类的树状思维过程，显著提升了大型语言模型（LLM）的推理和解决问题的能力。

不同于传统的“思维链（Chain-of-Thought, CoT）”那种线性的、一步步的思考方式，ToT 鼓励 AI 进行多路径、多步骤的探索。它将问题分解成多个中间步骤（即“思想”），并在每个步骤中生成多个可能的选项（“分支”），形成一个树状的思考结构。

prompt 结构：分解任务→ 生成和评估 → 结合搜索算法

示例

```go
你是一位经验丰富的旅行规划师。

你的任务是为客户规划一个从北京到上海的五天四夜旅行。


请你严格按照以下步骤进行思考和规划，最终给出详细的行程安排：


**第一步：任务分解**

首先，将这个复杂的旅行规划任务分解成几个主要的子任务或“思想”步骤。例如：

1.  **交通规划**：如何规划北京到上海的往返高铁，以及上海市内的交通方式？

2.  **住宿选择**：如何根据预算和兴趣，选择合适的住宿区域和酒店？

3.  **行程安排**：如何将客户的兴趣（历史文化、现代艺术、本地美食）合理地分配到五天行程中？

4.  **餐饮推荐**：如何为每一天安排符合客户喜好的美食体验？

5.  **预算考量**：如何在整个过程中平衡中等偏高的预算？


**第二步：多路径思考与探索**

针对每个子任务，请思考至少两种不同的方案或“思想路径”，并简要说明其优劣。


**示例（住宿规划）：**

* **方案A（思想路径A）**：选择住在外滩附近。

    * **优势**：交通便利，景点集中，夜景美观。

    * **劣势**：酒店价格较高，游客较多，可能会有些嘈杂。

* **方案B（思想路径B）**：选择住在法租界区域（如徐汇区）。

    * **优势**：环境安静优雅，靠近现代艺术区，美食选择多样。

    * **劣势**：离外滩等核心景点稍远，部分地区交通便利性不如外滩。


请像这样，为每个子任务思考至少两种不同的方案。


**第三步：评估和选择**

在思考完所有方案后，请你对它们进行综合评估，并从这些“思想路径”中选择一个你认为最佳的组合方案。请解释你为什么选择这个方案。


**第四步：生成最终行程**

根据你选择的最佳方案，生成一个详细、结构化的五天四夜行程。行程应包括：

* 每天的行程主题。

* 具体的景点和活动安排。

* 推荐的餐饮和交通方式。


请按照这个逻辑，一步步地为我完成这个旅行规划。
```

## Generated Knowledge Prompting（生成知识提示）

是一种让大语言模型（LLM）先生成相关背景知识，再利用这些知识去回答问题的提示方法。

示例

### step1 生成相关知识

```go
Q: 请列出联合国安理会常任理事国的相关背景知识。
A:
1. 联合国安理会有5个常任理事国。
2. 他们拥有否决权。
3. 成员是根据二战胜利国确定的。
4. 成员包括：中国、法国、俄罗斯、英国、美国。
```

### step2 利用相关知识回答问题

```go
Q: 哪些国家是联合国安理会常任理事国？
A: 中国、法国、俄罗斯、英国、美国。
```

适用场景

1. 开放域问答（历史、科学、地理等）
    
2. 常识推理（需要多步背景知识）
    
3. 学术类问题（先回忆理论再应用）
    
4. 跨领域问题（整合多个知识片段）
    

# Reference

\[1\]What is chain of thought (CoT) prompting? [https://www.ibm.com/think/topics/chain-of-thoughts](https://www.ibm.com/think/topics/chain-of-thoughts) \[2\]Grok Prompts : [https://github.com/xai-org/grok-prompts](https://github.com/xai-org/grok-prompts)

\[3\]Tree of Thoughts Implement : [https://github.com/princeton-nlp/tree-of-thought-llm](https://github.com/princeton-nlp/tree-of-thought-llm)
