🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,再点点您的小手关注下公众号,您的支持是我继续写作的最大动力.
💾 进入公众号,回复AI, 可免费领取 价值 ¥999 资料 (含 ChatGPT 指令教程、MidJourney 指令教程、PS AI 版本的教材)!!!
🎁 已上线超级艺术二维码小程序,送您一张艺术二维码,欢迎体验和反馈!
➕ 关注我, 带您了解更多 AI 资讯和 AI 小技巧.
最佳实践3 - 将复杂任务分解为简单子任务
就像在软件工程中将复杂系统分解为一组模块化组件一样,提交给 GPT 的任务也是如此。相比较而言,复杂任务的错误率往往较高。此外,复杂任务通常可以重新定义为一系列较简单任务的工作流程,其中早期任务的输出用于构建后续任务的输入。
策略:
- 使用意图分类来识别用户查询的最相关指令。
- 对于需要非常长对话的对话应用程序,总结或过滤以前的对话。
- 逐段概括长文档并递归构建完整概要。
策略1:使用意图分类来识别用户查询最相关的指令
适用人群:新手、熟练者
难度:🌟🌟
当处理不同情况的任务时,可以先将任务按类型分类,然后为每种类型设计特定的步骤,就像做菜一样有食谱。复杂任务可以分解成小阶段,每个阶段也有自己的指令,这样整个处理过程更有组织和效率。
这种方法的优点是每个查询只包含执行任务的下一阶段所需的那些指令,这可能导致比使用单个查询执行整个任务时的错误率更低。这也可能导致成本更低,因为更大的提示运行成本更高
这里的成本针对使用API的小伙伴们。
假设, 例如对于客户服务应用,查询可能被有用地分类如下:
SYSTEM 你将得到客户服务查询。将每个查询分类为主要类别和次要类别。以json格式提供你的输出,包含主要和次要两个关键字。 主要类别:计费,技术支持,账户管理,或一般咨询。 计费次要类别: - 退订或升级 - 添加付款方式 - 收费解释 - 争议收费 技术支持次要类别: - 故障排除 - 设备兼容性 - 软件更新 账户管理次要类别: - 密码重置 - 更新个人信息 - 关闭账户 - 账户安全 一般咨询次要类别: - 产品信息 - 价格 - 反馈 - 要求与人对话 USER 我需要让我的互联网再次工作。
基于客户查询的分类,可以向GPT模型提供一组更具体的指令来处理下一步。例如,假设客户需要帮助"故障排除"。
SYSTEM 你将得到需要在技术支持环境中进行故障排除的客户服务查询。通过以下方式帮助用户: - 让他们检查到/从路由器的所有电缆是否已连接。注意,电缆随着时间的推移会常常松动。 - 如果所有电缆都已连接并且问题仍然存在,询问他们正在使用哪种路由器模型 - 现在你将建议他们如何重新启动他们的设备: -- 如果型号是MTD-327J,建议他们按下红色按钮并保持5秒钟,然后等待5分钟后再测试连接。 -- 如果型号是MTD-327S,建议他们拔掉并重新插入,然后等待5分钟后再测试连接。 - 如果客户在重启设备并等待5分钟后的问题仍然存在,通过输出{"IT support requested"}将他们连接到IT支持。 - 如果用户开始提问与此主题无关的问题,那么请确认他们是否希望结束当前关于故障排除的聊天,并根据以下方案对他们的请求进行分类: <插入上述主/次分类方案> USER 我需要让我的互联网再次工作。
请注意,已经指示模型在会话状态改变时发出特殊的字符串。这使我们能够将我们的系统转变为状态机,其中状态决定哪些指令被注入。通过跟踪状态,什么指令在那个状态下是相关的,以及从那个状态允许什么状态转换,我们可以在用户体验周围设置保护,这在一种不太结构化的方法中很难实现。
解读
简单来说,就是先理解用户的真实需求,然后根据这个需求提供最合适的答案或操作。这种方法特别适用于那些需要多种独立指令来处理不同情况的任务。通过首先分类查询的类型,并使用该分类来确定所需的指令,可以更有效地为用户提供他们真正需要的信息或服务。
如下为测试过程的对话:
由于这次案例的内容较多,我分享在shareGPT上了,需要测试的小伙伴,可以通过链接来查看或者开启继续对话。
策略2:对于需要很长对话的对话应用程序,总结或过滤以前的对话
适用人群:熟练者、程序开发人员
难度:🌟🌟
就好像我们在一个需要很长对话的聊天程序中进行对话,比如和一个虚拟助手聊天,由于GPT具有固定的上下文长度,用户和助手之间的对话不能无限地进行。
解决这个问题的方法有几种。一种方法是对前几轮对话进行总结,就像写篇小短文一样,把前面的对话内容概括一下。当输入的对话达到一定长度时,系统可能会自动触发一个查询,让模型对前面的对话进行总结,然后总结可以作为系统回复的一部分。或者,也可以在整个对话过程中,把前面的对话内容分批次地进行总结。
另一种方法是根据当前查询选择和当前问题最相关的前面对话部分。这就好比你在找书的目录一样,你会去寻找和你问题相关的章节。这里提到的"使用基于嵌入的搜索来实现高效的知识检索",是一种方法,可以让模型更有效地找到和当前问题相关的信息。
解读
我通过翻译和语言通俗化后,上面的介绍已经大致可以理解。那我这边继续列举一个案例来体现这个策略的意义:
想象一个案例:在线医疗咨询应用,用户可能会描述他们的症状、过去的医疗历史、药物使用等。随着对话的进行,这些信息可能会 变得非常多。但是,当用户 提到一个新的症状或问题时,模型需要记住之前的所有相关信息来提供准确的建议。在这种情况下,对之前的对话进行 总结或筛选,只保留 与当前问题最相关的信息,可以帮助模型更好地理解和回应用户的需求。
如下为案例模拟对话数据:
用户:我最近总是感到头痛。 ChatGPT:您的头痛是突然发生的还是已经有一段时间了?您还有其他的症状吗? 用户:已经有两个星期了,而且我还伴随着恶心。 ChatGPT:您最近有没有服用任何药物或者有其他的医疗历史? 用户:我有高血压,正在吃降压药。 ChatGPT:了解了。您的头痛和恶心可能与您的高血压或降压药有关。建议您咨询医生并检查一下。 ...[对话继续] 当对话达到一定长度后: 用户:我还想知道头痛的其他可能原因。 ChatGPT(在内部对之前的对话进行总结):您之前提到有高血压并正在服用降压药,伴随头痛和恶心。除了高血压和药物反应,头痛的其他可能原因包括:应激、缺乏睡眠、饮食不当等。
这样,即使在长对话中,ChatGPT也能够准确地回应用户的问题,同时考虑到之前的对话内容。
策略3:分段汇总长文档并递归构造完整汇总
适用人群:熟练者
难度:🌟🌟
简单来说,就是GPT这样的模型在处理文本时有个限制,就是它们只能看到一定长度的文字,超过这个长度就看不到了。如果要总结一个超长的文档,比如一本书,就需要分段进行。每个段落可以作为一个查询来总结,然后这些段落的总结再连接在一起,形成整体的总结。这个过程可以重复进行,直到整本书都被总结完。
如果后面的内容需要前面的内容作为背景才能理解,那么在总结后面部分的时候,可以在查询中包含之前已经总结过的内容,这样可以帮助模型更好地理解整个文档。OpenAI之前也研究过使用GPT-3的变种来进行这种汇总长文档的方法,效果还不错。
解读
通过通俗化的翻译,已经将该策略解释的相对比较清晰,所以这里不再过多赘述。我们来看下一个案例,就可以理解它的应用场景:
假设你有一本关于人工智能历史的300页书,你想要一个简短的摘要。由于这本书的长度远远超过了 模型的上下文的token 限制,你可以首先将书分为章节,并为每一章生成一个摘要。接下来,你可以将这些章节摘要连接起来,并再次为它们生成一个摘要,得到整本书的总摘要。如果某些章节之间有 关联或依赖关系,你可以在总结后续章节时包括前面章节的摘要,以确保摘要的准确性和连贯性。
token是什么,是一个字的意思吗?有些小伙伴开始可能还不明白,由于篇幅限制,我简单解释下:
Token是文本数据的基本单元,可能代表一个字、词、标点或句子,不同模型中token代表的内容会有细微区别。
如Claude-2-100k模型上限为100,000个Token。
ChatGPT-16 k 模型的上下文上限是 16k Tokens,也就是 16000 个token。
ChatGPT-4-32 k 模型的上下文上限是 32k Tokens,也就是 32000 个token。
达到上限后,模型会“遗忘”早期的对话内容。
在模型如Transformer中,文本首先被切分为Tokens,然后被转化为向量,供神经网络处理。说人话就是,我们输入的文字会被转化成一个一个token,大模型在词语接龙般处理后,输出的也是一个一个token。
这里关于GPT-3的token统计网站,大家可以试下:https://platform.openai.com/tokenizer
如果我们希望详细地了解token的含义,大家可以看看这边文章的章节 语言模型中的 token 来系统地了解token的原理:https://zhuanlan.zhihu.com/p/620426699
最佳实践4 - 给予 GPT 足够的时间进行“思考”
如果被要求计算 17 乘以 28,您可能无法立即知道答案,但可以通过时间来计算出来。同样,GPT 在试图立即回答问题时会出现更多的推理错误,而不是花时间思考答案。在得出答案之前,要求进行一连串的推理过程可以帮助 GPT 更可靠地推理出正确答案。
策略:
- 指示模型在得出结论之前自行解决问题。
- 使用内心独白或一系列查询来隐藏模型的推理过程。
- 询问模型是否在之前的处理中漏掉了任何内容。
策略1:在匆忙得出结论前,指导模型自行找出解决方案
适用人群:熟练者、程序开发人员
难度:🌟🌟
有时候,我们明确地指导模型在得出结论之前先进行从头至尾的推理,会得到更好的结果。比如,假设我们希望模型评估一个学生解决数学问题的方法。最直观的做法就是直接询问模型学生的解决方案是否正确。
SYSTEM 判断学生的解答是否正确。 USER 问题描述:我正在建造一个太阳能发电装置,我需要帮助计算财务状况。 - 土地费用为每平方英尺100美元 - 我可以以每平方英尺250美元的价格购买太阳能板 - 我已经商定了一个每年固定费用为10万美元的维护合同,以及每平方英尺额外的10美元 第一年运营的总成本是多少,作为面积(平方英尺)的函数来表示。 学生的解答:设x为装置的面积(平方英尺)。 1. 土地费用:100x 2. 太阳能板费用:250x 3. 维护费用:100,000 + 100x 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000 ASSISTANT 学生的解答是正确的。
测试数据如下:
但实际上,学生的解答并不正确!我们可以通过提示模型首先 生成自己的解答,从而让模型成功地注意到这一点。
SYSTEM 首先自己解决这个问题,然后将你的解答与学生的解答进行比较,评估学生的解答是否正确。在你自己解决这个问题之前,不要判断学生的解答是否正确。 USER 问题描述:我正在建造一个太阳能发电装置,我需要帮助计算财务状况。 - 土地费用为每平方英尺100美元 - 我可以以每平方英尺250美元的价格购买太阳能板 - 我已经商定了一个每年固定费用为10万美元的维护合同,以及每平方英尺额外的10美元 第一年运营的总成本是多少,作为面积(平方英尺)的函数来表示。 学生的解答:设x为装置的面积(平方英尺)。 1. 土地费用:100x 2. 太阳能板费用:250x 3. 维护费用:100,000 + 100x 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000 ASSISTANT 设x为装置的面积(平方英尺)。 1. 土地费用:100x 2. 太阳能板费用:250x 3. 维护费用:100,000 + 10x 总成本:100x + 250x + 100,000 + 10x = 360x + 100,000 学生的解答是不正确的。他们在计算维护费用时犯了错误,使用了100x而不是10x。第一年运营的正确总成本应为360x + 100,000。
测试数据如下:
解读
从测试数据中可以看出,学生先提供答案后,模型自己生成答案并进行对比得到最终的结论,这样的准确性也更高。
因此,我们向模型提出一些 复杂的计算问题 时,可以让模型先进行深入的思考和推理得出它的答案,再对比我们准备的的答案,这是一种提高此类场景正确性的小技巧。
一文秒懂ChatGPT官方提示词最佳实践(中)(二)+https://developer.aliyun.com/article/1490379
关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~