文档
开发指南
Prompt 优化实践

优化 Prompt,获得更加稳定的输出

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

Prompt(提示词)设计原则

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

1. 明确的表达
  • 模糊指令:❌
讲讲艺术。

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

  • 明确指令:✅
    请解释印象派绘画的特点,并列举三位著名的印象派画家。
    明确指出需要讨论的艺术流派(印象派)和具体的输出要求(特点和画家),避免模型产生不相关的内容。
2. 详尽的指令
  • 简略指令:❌
    解释经济学。
    过于宽泛,无法明确用户的具体需求。
  • 详细指令:✅
    请解释供需理论,特别是如何通过供需平衡影响商品价格。举例说明供给过剩和需求不足时的价格变化。
    提供了具体的经济学概念(供需理论)和要求(影响及举例),确保模型提供详细且相关的信息。
3. 巧用分隔符
  • 无分隔符:❌
    分析这段文本并总结观点
    无法分辨哪部分是需要分析的文本,哪部分是指令,容易引起误解。
  • 使用分隔符:✅
    请分析以下文本,文本内容存在 XML 标签 <TEXT></TEXT > 中:<TEXT > 文本内容 </TEXT > 并总结主要观点。
    使用 XML 标签清晰地将需要分析的文本和指令区分开,避免混淆,确保模型正确理解和处理任务。
4. 考虑特殊情况
  • 无条件检查:❌
    请列出文本中的错误。
    未指明错误类型,可能导致结果不符合预期。
  • 有条件检查:✅
    检查以下文本是否包含语法错误,如果有,请指出并纠正;如果没有,请说明没有错误。
    指明先检查语法错误的存在与否,再决定下一步行动,确保模型按要求执行。
5. 使用少样本(Few-Shot-Prompt)帮助大模型理解
  • 无示例:❌
    解释隐喻的使用。
    语调和风格不明确,模型可能无法理解具体要求。
  • 提供示例:✅
    以下是对话示例,请解释隐喻的使用:
    < 人甲 >: 如何才能成为优秀的领导?
    < 人乙 >: 就像一艘船的船长,需要在风暴中稳住航向,指引船员们前进。
    提供一个对话样本,展示预期的语调和风格,帮助模型理解任务要求和输出格式。

原则二:给模型时间去思考

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

1. 指定完成任务的步骤

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

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

模型输出:

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。

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

模型推理

第一轮直接解答:

鸡有 21 只,兔子有 14 只。(假设模型答错了)

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

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

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

设鸡有 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. 情感分析
## 角色
- 你是一位情感分析师

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

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

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

## 工作流程
1. 读取并理解给定的文本:文本内容存在 XML 标签 < TEXT></TEXT > 中,<TEXT > 这里填入需要进行情感分析的内容 </TEXT>。
2. 根据文本内容,判断其情感倾向。
3. 输出判断出的情感类别(例如:正面、负面或中性)。
2. 文档分析
## 角色
- 你是一位文档分析师

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

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

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

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

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

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

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

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

注意事项

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

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