本文是 GPT4 发问技巧系列的第三篇,悉数系列文章:

  1. GPT4 发问技巧一:写清晰的阐明;
  2. GPT4 发问技巧二:供给参考文本;
  3. GPT4 发问技巧三:杂乱使命拆分;

在咱们日常生活中,无论是烹饪一道杂乱的菜肴,仍是组装一台杂乱的机器,咱们都会自然而然地将杂乱的使命拆分红一系列更简略、更易于办理的子使命。这种策略也相同适用于计算机领域。想象一下,假如没有函数这种东西,咱们怎样能够有效地编写和办理杂乱的代码呢?函数的创造,实践上便是为了将杂乱的使命拆分红更小、更具体的子使命,使得代码更易于了解和保护。

相同,对于人工智能,特别是像 GPT 这样的模型来说,拆分子使命的策略也相同重要。将杂乱使命拆分红更简略的子使命能够协助 GPT 更好地答复问题,原因首要有以下几点:

  • 了解上的优势:GPT 经过处理一系列简略的使命,能够更好地了解和处理杂乱的问题。每个子使命都能够被看作是一个独立的问题,GPT 能够专注于处理这个问题,而不是一起处理多个问题。
  • 上下文的约束:GPT 的上下文窗口有限,也便是说,它只能看到最近的必定数量的输入和输出。假如一个使命太杂乱,或许会超出这个窗口,导致 GPT 无法看到一切的相关信息。经过将使命拆分,能够确保每个子使命都在 GPT 的上下文窗口内。
  • 削减过错的或许性:假如一个使命非常杂乱,GPT 或许会在尝试处理它的过程中犯过错。经过将使命拆分红更简略的子使命,能够削减这种过错的或许性。
  • 更好的反应:当你将一个杂乱使命拆分红子使命时,你能够在每个子使命完成后给予 GPT 反应,这能够协助 GPT 更好地了解你的需求,从而供给更好的答案。

总的来说,将杂乱使命拆分红更简略的子使命能够协助 GPT 更有效地了解和处理问题,从而供给更好的答案。接下来咱们会供给几个具体的比如,来具体看看怎样拆分子使命。

示例一:客服帮手

现在咱们的目标是写一个微信 App 的智能客服,当用户发问关于 App 的问题时,咱们的智能客服能够依据预先准备好的协助文档,找到相关处理办法,并从头组织好语言给出答案。

由于微信的协助文档内容太长,没办法作为引证文本一次性供给给 GPT4 作为提示词。所以能够考虑拆分下这儿的问题,一个不错的拆分办法便是先让 GPT 分类问题,然后依据分类来供给这个分类下的协助文档作为提示词。

GPT4 提问技巧三:复杂任务拆分

上面在 OpenAI playground 上创建了一个简略示例,经过让 GPT4 先对问题分类,然后再依据不同类型的子问题和引证文本,来生成答案。注意这儿示例把整个内容放到 system msg,实践构建客服的时候,第一步只用让 GPT4 分类,然后依据分类信息,来选择文档作为引证文本,从头发问。

经过加入中心分类过程,成功完成了一个杂乱的查询使命。类似的场景还有许多,比如要总结很长的一段文本(超越 GPT 的上下文 token 约束),能够拆分红以下子使命:

  1. 将文本分段:能够将长文本分红几个阶段或部分,能够依据文本的自然结构来完成,例如章节、标题或主题。
  2. 为每个部分生成摘要:让 GPT4 提取每个部分的首要观点或信息,由于现已拆分过,所以没有超越 token 约束。
  3. 组合摘要:用 GPT4 将一切的摘要组合成一个完整的总结。在这个过程中,需求确保总结的连贯性和一致性。

当然这个过程中你需求确保每个部分的摘要都准确地反映了该部分的内容,并且一切的摘要在一起需求能够形成一个全面的总结。此外,你还需求处理或许出现的上下文问题,例如确保 GPT 在生成摘要时能够了解每个部分的上下文。

示例二:辅佐编程

编写杂乱程序一直以来是专业人员才能做到的,但现在人人都能够使用 GPT4 来写程序。比如我的目标是写一个程序,能够将我印象笔记导出的笔记批量导入到 notion 中。我能够拆分为下面的子问题(具体子问题的 prompt 能够依据当时的上下文写的更具体一些):

  1. 我想用 python3 把一个笔记导入到 notion 中去,有没有什么引荐的办法;
  2. 印象笔记导出的是 html 文件,我怎样解析里面的笔记正文;
  3. 用 python3 怎样并发导入文件到 notion;
  4. 要展现导入的进度条,在 Python3 中怎样做呢?
  5. 怎样在导入结束的时候,用红色把导入失败的原因打印到屏幕上
  6. 怎样测试我的这段代码呢?

当然这儿的子问题或许不是一开始就能规划好的,在和 GPT4 沟通的过程中,能够不断依据上一个答复,来调整问题。在开发程序的过程中,遇到一些预期外的问题,也能够再来发问,比如 notion 返回了一个过错是恳求频率太高,或者是网络超时,那么你能够持续发问:

  1. 有什么 python3 的库能够操控我恳求接口的频率;
  2. 我的实现代码如下(这儿省掉),怎样用 aiolimiter 来操控恳求 notion api 的频次;
  3. 假如恳求 notion api失败,我要怎样高雅的重试我的恳求;
  4. 有哪些 python3 的重试库,哪些仍是活泼的,要怎样在我的代码上添加上重试;

总归不要给 GPT4 太杂乱的使命,究竟还不是通用 AI,需求你帮忙拆分子问题,验证 AI 的答复,最终凑集起来一个完整的处理方案。这个比如是实在的,在 GPT4 的协助下,我比较快速的完成了一个 python 库 html2notion,能够将印象笔记导出来的 html 文件批量导入到 notion 笔记中,并尽量保存格局。

面临的应战

当然拆分子问题从来就不是一个简略的事情,其中一个应战便是要了解 GPT 的才能和约束,在这些约束内有效地拆分问题。你需求经过实践和试错来了解 GPT 在处理不同粒度问题时的体现,以便找到最适合的问题粒度。比如是直接让 GPT4 来写一段代码,能够异步并发恳求,并且约束恳求频率,自动进行网络超时重试和反常处理。仍是把这些拆分为不同的子使命,分别让它写出独自的代码,然后再组织起来。这需求在使用中渐渐探索,才能找到一个好的平衡点。

另一个应战是怎样有效地组织和办理子问题。在拆分问题后,咱们或许会得到很多的子问题和答复。怎样有效地组织这些子问题,以便在需求时能够快速找到,是一个需求处理的问题。假如子问题之间没有关联,或许会丢失一些上下文,这会使得依据子问题的答复从头构建杂乱问题的处理办法变得困难。因此,在每次发问时,咱们应尽或许带上现已拿到的上下文,这能够协助 GPT 更好地了解问题,从而给出更准确的答复。回到前面的比如,你能够带上目前现已有的相关代码,让 GPT4 在此基础上进行优化,添加新的功能点,这样 GPT4 会基于现有的代码直接更改,而不是从头写一段不一样的代码。