丁宇 | DING Yu

ChatGPT为什么能像人一样聊天?

1

在讨论正题之前,先说几句闲话,做点铺垫。

我发现很多人搞不明白GPT和ChatGPT的关系,所以经常看到类似“ChatGPT 4”这样的说法。

其实没有“ChatGPT 4”这个东西。GPT是一种叫做语言模型的技术,主要的作用是补全句子。比如你说“肩扛两百斤……”,它知道后面该接“麦子”而不是“挖掘机”。OpenAI(就是做ChatGPT的公司)目前提供GPT-3、3.5和4。

而ChatGPT则是用GPT制作的产品,主要的特点是能记住上下文,所以让人感觉能和它连续聊天。ChatGPT发布的时候用的是GPT-3.5,现在也支持4。

2

其实GPT很早就有了,但真正火爆全世界是从ChatGPT开始。所以我发布若愚之后,很多人问我什么时候支持连续聊天。

我的第一个反应是:不支持。因为若愚用的是OpenAI的API,但这个API并不支持聊天,至少看起来不直接支持。

这个叫“Chat”的API和我去年就开始在公司业务中使用的GPT-3没什么区别,都仍然是你给它一段话,它能帮你补全完整,或者做出回复。一来一往,到此为止。

那ChatGPT这种连续聊天的效果,到底是怎么做出来的?

3

谜底听起来特别扯:GPT本身没有记忆,要支持连续对话,必须让它了解上下文。要了解上下文,就得在每次你发言时,把之前你们的所有发言一起发过去……

我是搜索了很长时间、看了其他人的做法,并且大概了解了GPT是个什么东西之后,明白并接受这一点的。为什么要花这么多时间确认这个呢?因为,这么用很贵,而且开发起来很麻烦。

4

很贵容易理解,很麻烦是怎么回事?

这是因为,就算费用你能接受,也没办法一直和GPT对话,因为它能处理的数据量有限制。随着对话历史越来越长,早晚会达到它的限制,这时候OpenAI就会告诉你:内容太多,处理不了。

一般人估计不理解也不关心这个,但开发者得考虑用户体验,总不能超限就直接告诉用户出错吧,而且还是用户不知道有这个限制的情况下。所以,得想办法。

5

如何在有字数限制的情况下,让对话尽可能继续,这就需要做优化了。

若愚现在的做法非常简单粗暴:如果发现超限了,就把最开始的一问一答从上下文中删掉,持续这个过程直到没问题。

这个做法效果还行,当然显然可以继续优化。

比如,不是把超限的部分删掉,而是用GPT归纳,再把归纳结果发回去,这样会少丢一些上下文信息。

另外,在发给GPT前,可以先手工计算一下长度。如果超限就先用上面的办法处理,减少来回请求的时间。 当然上面只是大概的思路,我相信ChatGPT实际的做法肯定复杂的多。

说完了。最后强行插入两条硬广:

  1. 欢迎使用我做的若愚:https://ruoyu.dingyu.me
  2. 了解如何使用ChatGPT:https://dingyu.me/blog/using-chatgpt