2024-04-17
prompt
0

目录

OpenAI Prompt Engineering
Write clear instructions(写出清晰的指令)
把话说详细
让模型充当某个角色
使用分隔符清楚地指示输入的不同部分
指定完成任务所需的步骤
提供例子
指定所输出长度
Provide reference text(提供参考文本)
让模型使用参考文本作答
让模型通过引用参考文本来回答
Split complex tasks into simpler subtasks(将复杂的任务拆分为更简单的子任务)
使用意图分类来识别与用户查询最相关的指令
对于需要很长对话的对话应用,总结或过滤之前的对话
分段总结长文档并递归构建完整总结
Give the model time to "think"(给模型时间“思考”)
让模型在急于得出结论之前找出自己的解决方案
使用内心独白来隐藏模型的推理过程
询问模型在之前的过程中是否遗漏了什么内容
Use external tools(使用外部工具)
使用基于嵌入的搜索实现高效的知识检索
使用代码执行来进行更准确的计算或调用外部API
给模型提供特定的功能
Test changes systematically(系统地测试变更)

OpenAI Prompt Engineering

https://platform.openai.com/docs/guides/prompt-engineering

Write clear instructions(写出清晰的指令)

把话说详细

尽量多的提供任何重要的详细信息和上下文,不要一太笼统

让模型充当某个角色

你可以把大模型想象成一个演员,你要告诉他让他演什么角色,他就会更专业更明确,一个道理

使用分隔符清楚地指示输入的不同部分

三引号、XML 标签、节标题等分隔符可以帮助划分要区别对待的文本节。可以帮助大模型更好的理解文本内容。

prompt
用50个字符总结由三引号分隔的文本。"""在此插入文字"""

指定完成任务所需的步骤

拆分任务,指定为一系列的明确步骤

prompt
使用以下分步说明来响应用户输入。 步骤1 - 用户将为您提供三引号中的文本。用一个句子总结这段文字,并加上前缀“Summary:”。 步骤2 - 将步骤1中的摘要翻译成西班牙语,并添加前缀“翻译:”

提供例子

指定所输出长度

目标输出长度可以根据单词、句子、段落、要点等的计数来指定。中文效果不明显,同时你给定的长度只是个大概,多少个字这种肯定会不精准,但是像多少段这种效果就比较好。

prompt
用两个段落、100个字符概括由三引号分隔的文本。"""在此插入文字"""

Provide reference text(提供参考文本)

让模型使用参考文本作答

知识库的经典用法,让大模型使用我们提供的信息来组成其答案。

prompt
使用提供的由三重引号引起来的文章来回答问题。如果在文章中找不到答案,请写“我找不到答案”。 """<在此插入文档>""" """<在此插入文档>""" 问题:<在此插入问题>

让模型通过引用参考文本来回答

可以直接要求模型通过引用所提供文档中的段落来为其答案添加引用

prompt
您将获得一份由三重引号和一个问题分隔的文档。您的任务是仅使用提供的文档回答问题,并引用用于回答问题的文档段落。 如果文档不包含回答此问题所需的信息,则只需写:“信息不足”。 如果提供了问题的答案,则必须附有引文注释。使用以下格式引用相关段落({“引用”:…})。 """<在此插入文档>""" 问题:<在此插入问题>

Split complex tasks into simpler subtasks(将复杂的任务拆分为更简单的子任务)

使用意图分类来识别与用户查询最相关的指令

可以使用提示词先将此模型的作用的和可能被询问的问题分类后,让提问者根据分类选择需要提问的问题,而不是自定义提问的问题

对于需要很长对话的对话应用,总结或过滤之前的对话

  • 即将到达上下文长度时,总结对话中的历史记录。

  • 在整个对话过程中在后台异步总结之前的对话。

  • 把过去的所有聊天记录存成向量库,后续对话的时候动态查询嵌入

分段总结长文档并递归构建完整总结

可以使用一系列查询来总结文档的每个部分。章节摘要可以分别总结,生成摘要的摘要。这个过程可以递归地进行,直到总结整个文档。

Give the model time to "think"(给模型时间“思考”)

提示词前可先加上:

  • think step by step(一步步思考)
  • 让我们逐步思考
  • Take a deep breath and work on this step by step, This is very import to my career
  • ...

让模型在急于得出结论之前找出自己的解决方案

不可以直接让模型判断对错,而是让其先得出自己的结论后,再与已知的结果进行比较

使用内心独白来隐藏模型的推理过程

让模型将原本对用户隐藏的部分输出放入结构化格式中,以便于解析它们。然后,在向用户呈现输出之前,将解析输出并且仅使部分输出可见。

步骤1 - 首先找出你自己的问题解决方案。不要依赖学生的解决方案,因为它可能是不正确的。将这一步的所有工作用三引号(""")括起来。 步骤2 - 将您的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。将这一步的所有工作用三引号(""")括起来。 步骤3 - 如果学生犯了错误,请确定在不泄露答案的情况下可以给学生什么提示。将这一步的所有工作用三引号(""")括起来。 步骤4 - 如果学生犯了错误,请向学生提供上一步的提示(在三重引号之外)。不要写“步骤4-”,而写“提示:”。 问题陈述:<插入问题陈述> 学生解决方案:<插入学生解决方案>

询问模型在之前的过程中是否遗漏了什么内容

如果源文档很大,模型通常会过早停止并且无法列出所有相关信息。在这种情况下,通过使用后续的 promtp 让模型查找之前传递中错过的任何相关信息

Use external tools(使用外部工具)

使用基于嵌入的搜索实现高效的知识检索

可将搜索引擎的结果灌入模型后,再进行相关提问

静态的知识库(向量匹配),常见步骤:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 prompt 中 -> 提交给大模型生成回答。

使用代码执行来进行更准确的计算或调用外部API

如果遇到需要计算的东西,可以让大模型写一段计算其结果的代码,而不是直接让大模型返回结果

给模型提供特定的功能

Test changes systematically(系统地测试变更)

https://platform.openai.com/docs/guides/prompt-engineering/strategy-test-changes-systematically