> ## Documentation Index
> Fetch the complete documentation index at: https://platform.stepfun.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Prompt 优化实践

Prompt Engineering 是用户与模型之间的重要桥梁。优化提示对于的模型推理结果至关重要。通过从简单到复杂的案例展示，将帮助开发者掌握提示词的使用，以提升大语言模型在文本总结、推理和转换等基础自然语言处理任务中的能力。

### Prompt（提示词）设计原则

#### 原则一：编写清晰且具体的指令

##### 1. 明确的表达

* **模糊指令**：❌

```text theme={null}
讲讲艺术。
```

用户的需求不清晰，可能导致模型产生各种艺术形式的泛泛介绍。

* **明确指令**：✅
  ```text theme={null}
  请解释印象派绘画的特点，并列举三位著名的印象派画家。
  ```
  明确指出需要讨论的艺术流派（印象派）和具体的输出要求（特点和画家），避免模型产生不相关的内容。

##### 2. 详尽的指令

* **简略指令**：❌
  ```text theme={null}
  解释经济学。
  ```
  过于宽泛，无法明确用户的具体需求。
* **详细指令**：✅
  ```text theme={null}
  请解释供需理论，特别是如何通过供需平衡影响商品价格。举例说明供给过剩和需求不足时的价格变化。
  ```
  提供了具体的经济学概念（供需理论）和要求（影响及举例），确保模型提供详细且相关的信息。

##### 3. 巧用分隔符

* **无分隔符**：❌
  ```text theme={null}
  分析这段文本并总结观点
  ```
  无法分辨哪部分是需要分析的文本，哪部分是指令，容易引起误解。
* **使用分隔符**：✅
  ```text theme={null}
  请分析以下文本，文本内容存在 XML 标签 <TEXT></TEXT > 中：<TEXT > 文本内容 </TEXT > 并总结主要观点。
  ```
  使用 XML 标签清晰地将需要分析的文本和指令区分开，避免混淆，确保模型正确理解和处理任务。

##### 4. 考虑特殊情况

* **无条件检查**：❌
  ```text theme={null}
  请列出文本中的错误。
  ```
  未指明错误类型，可能导致结果不符合预期。
* **有条件检查**：✅
  ```text theme={null}
  检查以下文本是否包含语法错误，如果有，请指出并纠正；如果没有，请说明没有错误。
  ```
  指明先检查语法错误的存在与否，再决定下一步行动，确保模型按要求执行。

##### 5. 使用少样本（Few-Shot-Prompt）帮助大模型理解

* **无示例**：❌
  ```text theme={null}
  解释隐喻的使用。
  ```
  语调和风格不明确，模型可能无法理解具体要求。
* **提供示例**：✅
  ```text theme={null}
  以下是对话示例，请解释隐喻的使用：
  < 人甲 >: 如何才能成为优秀的领导？
  < 人乙 >: 就像一艘船的船长，需要在风暴中稳住航向，指引船员们前进。
  ```
  提供一个对话样本，展示预期的语调和风格，帮助模型理解任务要求和输出格式。

#### 原则二：给模型时间去思考

在设计提示词时，为语言模型提供充足的推理时间非常重要。与人类一样，语言模型在解决复杂问题时也需要时间。如果让模型匆忙得出结论，结果可能不准确。例如，若仅提供书名和一句简介让模型推断一本书的主题，可能得不到理想的答案。因此，我们应在提示词中指引模型进行深入思考，例如先列出问题的各种看法，再得出最终结论。通过逐步推理，模型能更好地进行逻辑思维，输出更准确的结果。

##### 1. 指定完成任务的步骤

下面是一个示例，我们描述了西游记的故事，并给出以下 prompt 指导模型操作：

```text theme={null}
请按照以下步骤分析文本并给出最终的结果。
        1.        用一句话概括文本内容。
        2.        将概括翻译成英文。
        3.        列出故事中的人名。
        4.        输出包含概括和人名个数的 JSON 对象。
文本内容如下：
孙悟空和猪八戒一起前往花果山摘桃子。他们一路上嘻嘻哈哈，孙悟空蹦蹦跳跳地在前面带路，猪八戒则慢悠悠地跟在后面。到了花果山后，孙悟空灵活地爬上树摘桃子，猪八戒在树下等得着急，就自己到处找桃子。结果猪八戒不小心掉进了一个小水坑，弄得一身泥水，孙悟空看到后哈哈大笑。最后他们带着摘到的桃子一起回到了唐僧所在的地方。
```

模型输出：

```text theme={null}
1. 概括：孙悟空和猪八戒去花果山摘桃子，猪八戒掉进小水坑，最后他们带着桃子回到唐僧处。
2. 翻译：Sun Wukong and Zhu Bajie went to Huaguo Mountain to pick peaches. Zhu Bajie accidentally fell into a small puddle. Finally, they returned to where Tang Seng was with the picked peaches.
3. 人名：孙悟空、猪八戒
4. 输出：{"summary": "孙悟空和猪八戒去花果山摘桃子，猪八戒掉进小水坑，最后他们带着桃子回到唐僧处。", "num_names": 2}
```

##### 2. 指导模型自主思考（吴恩达反思工作流）

在设计提示词时，我们可以要求语言模型先自行思考再下结论。例如，假设我们要模型判断一个数学问题的解答是否正确，仅提供问题和解答是不够的。相反，我们可以先让模型自己解决问题，再与提供的解答进行比较。这能帮助模型更好地理解问题，做出更准确的判断。接下来给出了三步反思 prompt。

```text theme={null}
请按照以下步骤分析问题并给出最终的结果。
               第一步：请按照你对问题的理解给出答案。
               第二步：请验算答案的准确性，若准确则直接输出答案，若错误，请给出解决问题的建议。
               第三步：请根据建议的方式，解决问题。并再次按照第二步方式验算答案或者给出解决问题的建议。
问题内容：
笼子里有若干只鸡和兔子，共有 35 个头和 94 只脚。问笼子里有几只鸡和兔子？
```

模型推理

第一轮直接解答：

```text theme={null}
鸡有 21 只，兔子有 14 只。（假设模型答错了）
```

第二轮验算答案的正确性：

```text theme={null}
鸡有 21 只 * 2 只腿 / 每鸡 等于 42 只腿
兔子 14 只 * 4 只腿 / 每兔 等于 56 只腿
总计 42+56=98 只腿
根据题干中笼子里有 94 只腿，跟验算的结果 98 只腿不相等，答案错误。请使用代数并一步一步推理解答问题。
```

第三轮模型一步一步推理解答：

```text theme={null}
设鸡有 x 只，兔有 y 只。
1. 首先根据头的数量可得方程：
  - x + y = 35，即 y = 35 - x。
2. 然后根据脚的数量可得方程：
  - 2x + 4y = 94。
  - 将 y = 35 - x 代入 2x + 4y = 94 可得：
  - 2x + 4 (35 - x) = 94。
  - 展开式子得：2x + 140 - 4x = 94。
  - 移项得：2x - 4x = 94 - 140。
  - 合并同类项得：-2x = -46。
  - 解得：x = 23。
  - 把 x = 23 代入 x + y = 35，得 23 + y = 35，解得 y = 12。
  - 经过验算，答案正确，所以鸡有 23 只，兔子有 12 只。
```

### 常用 Prompt 参考

#### 文本分析

##### 1. 情感分析

```text theme={null}
## 角色
- 你是一位情感分析师

## 目标
- 对给定文本进行情感分析，识别并分类情感倾向为正面、负面或中性，用于市场分析、客户反馈或舆情监控。判断情感倾向的标准如下：正面情感倾向包括表达喜爱、满意、赞扬等的词汇；负面情感倾向包括表达不满、抱怨、批评等的词汇；中性情感倾向是对事物客观的描述，不带有明显的情感色彩。

## 限制
- 输出结果仅为情感倾向的类别：正面、负面、中性。

## 输出
- 输出格式：情感倾向类别

## 工作流程
1. 读取并理解给定的文本：文本内容存在 XML 标签 < TEXT></TEXT > 中，<TEXT > 这里填入需要进行情感分析的内容 </TEXT>。
2. 根据文本内容，判断其情感倾向。
3. 输出判断出的情感类别（例如：正面、负面或中性）。
```

##### 2. 文档分析

```text theme={null}
## 角色
- 你是一位文档分析师

## 目标
- 高效准确地处理和分析大量文档，提炼出文档的核心内容，生成清晰准确的文档摘要并提取关键信息。

## 限制
- 输出内容仅包含文档摘要和关键信息，不包含其他多余信息。

## 输出
- 输出格式：文档摘要和关键信息

## 工作流程
1. 读取并理解给定的文本，文本内容存在 XML 标签 < TEXT></TEXT > 中：<TEXT > 这里填入需要分析的文本 </TEXT>。
2. 基于对文档内容的理解，运用简洁明了的语言生成高度概括的摘要，突出核心要点。
3. 精准提取文档中的关键信息，涵盖重要事实、准确数据或合理结论等。
4. 按照规定格式输出文档摘要和关键信息。
```

##### 3. 文本翻译

```text theme={null}
## 角色
- 你是一位翻译专家

## 目标
- 高效准确地将文本从一种语言翻译成另一种语言，并确保翻译结果的准确性和自然流畅性。

## 限制
- 输出内容应符合目标语言的语法和文化背景，不包含多余或偏离原意的内容。

## 输出
- 输出格式：最终翻译

## 工作流程
1. 读取并理解给定的文本，文本内容存在 XML 标签 < TEXT></TEXT > 中：<TEXT > 这里填入需要翻译的文本 </TEXT>。
2. 进行初步翻译，确保翻译结果在语义上与原文一致。
3. 将输出的翻译结果与原文对照，提出修改建议。修改建议应包括改进翻译准确性、流畅性、文化适应性等方面。
4. 基于修改建议对翻译的结果进行修正，并生成最终翻译。
5. 输出最终翻译。
```

### 注意事项

在开发和使用大模型时，需注意其生成虚假知识的风险，即 “幻觉” 现象。尽管模型掌握了丰富的知识，它们仍可能会编造看似真实但实则虚假的信息。

为应对这一问题，开发者一方面可以通过优化 Prompt 设计来减少幻觉，例如引用原句来追踪信息来源，或者使用上文提到的反思工作流。另一方面可以使用阶跃大模型提供的 Tool call 工具，Tool call 可以扩展语言模型的功能，使其能够执行额外的操作，如搜索信息、计算、访问数据库等。
