背景

最近听了
八叉的一个ChatGPT讲座,讲的是如何将ChatGPT训练成领域专家,这样我们就可以用它来解决该领域的各种问题。

整个讲座中最让我印象深刻的就是训练方法,它是通过让ChatGPT向我们提问,然后由我们给出答案的方式进行训练。这和我日常使用ChatGPT的方法完全相反。

训练方法

第一步:输入已知需求

我们需要把当前已知的需求输入给ChatGPT。想象一下,当我们需要别人完成一项任务时,要做的第一件事就是向其介绍任务的基本情况。

第二步:让ChatGPT提问

在输入已知需求后,我们需要确认ChatGPT是否理解需求。这里最重要的是,要让ChatGPT在不理解需求时提出问题。这就像,在我们介绍完任务的基本情况后,总要问上一句,“有没有问题?”。

这是最关键的一步。ChatGPT能够帮助我们发现已知需求中的遗漏点,这通常能够引起我们更深层次的思考。

第三步:回答问题并再次让ChatGPT提问

在ChatGPT提出问题后,我们要先给出答案,然后回到第二步,看ChatGPT是否还有问题。这就像,在我们回答完别人的问题后,总要问上一句,“还有问题吗?”。

第四步:重复上述步骤直到ChatGPT没有问题

不断的重复第二步和第三步,直到ChatGPT没有任何问题。这是一个由扩散到收敛的过程,刚开始时问题会很多,但随着信息输入的增多,问题会越来越少。

第五步:输出完整需求

在ChatGPT没有任何问题后,我们可以让其输出一份它理解的完整需求。这份需求就是我们的领域模型,在输入该模型后,ChatGPT可以更加准确的解决该领域内的问题。

示例

基于上述训练方法,我让ChatGPT帮我完善了一个爬虫程序的需求。

已知需求

在已知需求中,我对架构,技术栈和业务逻辑做了描述。

在需求描述完成后,我让ChatGPT在不理解或需要澄清时进行提问。

第一轮提问

ChatGPT第一轮问了三个问题

  1. 在URL不能访问或返回错误时,程序该如何处理?
  2. 如何实现定时任务?是使用程序外部的定时任务还是程序内部的定时任务?
  3. 如何对S3上的文件进行命名?

第三个问题我没有考虑过,这是ChatGPT找到的第一个遗漏点

第二轮提问

ChatGPT第二轮问了六个问题

  1. 是否支持同时爬取多个URL?
  2. 在S3上传失败时,程序该如何处理?
  3. 如何获取S3的鉴权信息?
  4. 上传到S3的文件是否有大小限制?如果有,限制是多大?
  5. 在自动爬取时,我们是否需要给用户返回信息?自动爬取是否是一个后台进程?
  6. 如果一次爬取的时间超过了5分钟,程序该如何处理?(在原始需求里,自动爬取的时间间隔是5分钟)

第四个和第六个问题我没有考虑过,这次ChatGPT帮我找到了两个遗漏点。

第三轮提问

ChatGPT第三轮问了六个问题

  1. 如果程序关闭时爬取操作正在进行,是否要停止爬取操作?
  2. 如果S3上传失败,是否需要重试?如果要,重试几次?
  3. 自动爬取的时间间隔是否可配置?还是固定在5分钟?
  4. 程序是否需要支持一些特定的返回值?例如301。
  5. 程序是否需要对一些异常做特殊处理?
  6. 程序使用的是哪种日志框架?

第一个,第二个和第四个问题我没考虑过,这次ChatGPT帮我找到了三个遗漏点。

第四轮提问

ChatGPT第四轮问了六个问题

  1. 是否需要支持HTTPS?
  2. 爬取时是否有不同的请求方法?例如POST或PUT。
  3. 爬取时是否需要设置HTTP Header?例如Authorization。
  4. 爬取时是否需要设置查询参数?如果需要,S3的文件名要如何生成?
  5. 错误消息的格式是什么?
  6. 程序是否需要支持不同的S3区域?

第一个,第二个,第三个和第四个问题我没有考虑过,这次ChatGPT帮我找到了四个遗漏点。

第五轮提问

ChatGPT第五轮只问了一个问题

  1. 在爬取时是否需要限速?例如,如果某个网站对每分钟的请求数量有限制,我们是否需要处理?

这个问题我已经考虑过,但没有写在已知需求里

完整需求

在没有问题后,ChatGPT输出了它所理解的完整需求

总结

在我第一次听到这种训练方法时,我其实不太相信ChatGPT的提问能够收敛,但事实胜于雄辩,它不但能够收敛,而且还可以找到非常重要的遗漏点,让需求更加完备。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐