从编程范式及实时 Web 应用的另类角度看向 ChatGPT 的 AI 大脑
前言
ChatGPT 是什么、它能做什么、甚至如果你想深入了解它的技术底层原理,那么,我相信此时此刻的你,在互联网的任何一个角落找到一篇 Paper 来快速了解它已经是一件非常容易的事情了,因为毫不夸张地说,它正在改变整个世界。
当然,最酷的方式一定是,你可以直接通过 ChatGPT 来了解 ChatGPT。今天铺天盖地的关于它的文章背后,体现的主流核心思想最多的关键字我认为是: 崇拜 。无数的人和事情都在跟进它、把玩它、研究它。直到此刻,它的热度依旧处于全网顶格状态,甚至在最近的一些来自硅谷的报道中,我隐约感觉到,硅谷好像只剩下 AI 了,几大巨头甚至不惜直接宣布解散元宇宙、Web 3.0 等命题组也要全身心押宝它。
国内的各大流量媒体更是不吝啬各种营销术语,对其各种浮夸表述,导致它的能力在坊间越传越离谱,几乎吹嘘它为无所不能。
如此神话、盲目崇拜之风的氛围下,作为一名十多年工作经验的程序员,同时又身处数字化转型的产业互联网赛道,我觉得当下很有必要理性、冷静地对它进行一番打量。
因此,在深度使用了一段时间并开发了一个集成 OpenAI API 的 Dingtalk 机器人服务后,我也终于自觉有底气来讲一讲自己对它的一些看法,另外一个补充背景是,笔者所在的产业目前对这块引起了高度的重视,本文也作为一篇偏向工程实践角度的调研报告来呈现,以上是我写下这篇文章的动力来源。

目前,它拥有如下 Features :
- 集成了 GPT-3 模型 API(已更新为 ChatGPT 同款 3.5 Turbo 模型),支持它的文本生成特性
- 集成了 DALL.E 2 模型,使用
img->固定 prompt 唤醒词,支持它的图片生成特性
但是目前该机器人有个最大的问题就是没有接入会话式感知能力的 API ,下文我会提及原因。
如果说,AI 能力是 ChatGPT 的大脑,那么今天配套的 ChatGPT 的产品 chat.openai.com 就是它的身体,即它与人类直接交互的部分,它的重要性不言而喻。
因此,本文将从这个角度切入,随后再看向它的大脑。
理解 ChatGPT 目前某些限制的原因
由于本人的技术工作长期专注在应用架构领域,属于软件工程的实践,学术研究工作涉及较少,因此对 AI 部分的技术内容,我会在吸收和理解引用文章的基础上,根据我自己的理解进行阐述和说明,如有错误和不严谨,欢迎指出。与此同时,我认为换一个技术视角去看待同一个问题丝毫不影响我写下本章节的初心和目的:那就是,尝试透过现象看本质。
众所周知,充当 ChatGPT 大脑的其实是一个 语言模型 ,如果用 响应式编程范式 来类比理解它目前的工作方式,大概是这样的:
const ChatGPT = ($input) => {
$input.on("data", (inputTokens) => {
// 根据输入生成 tokens 发送到 $output
// $output 和 $input 相连,生生不息
$output.send(GPT.generate(inputTokens));
});
};
这里用如下示意图给大家展示,如我上述的 伪代码 所示,如果我们把这里的 输入 和 输出 看成是 ChatGTP 的首和尾,那么这就是一个典型的首尾相连设计。正因为这样的设计,ChatGPT 会在每一轮计算生成之前,将之前的 输出 合并 输入 后再次给到 输入,如此反复,以达到 生生不息 的状态。每一次调用执行,一个新的上下文环境就自动生成,并和之前保留的上下文之间天然形成连接。熟悉编程语言的同学应该发现,该特性像极了主流编程语言中的 闭包 特性。

这个特性是 ChatGPT 在会话情境中给人类的第一印象达到震撼程度的核心原因,也是最为大家津津乐道的:
它好像真的在和人类
对话,而不是生硬的你问我答模式。
没有银弹
布鲁克斯的《No Silver Bullet — Essence and Accidents of Software Engineering》告诉我们,软件工程没有银弹,任何设计有优点就一定有缺点。
很显然,这里有几个应用架构侧的隐患在设计之初就已被埋下了,以此,我们可以从应用侧窥探到,即使背后的 AI 大脑再强大,到了应用侧依然会受到技术设计本身的限制,虽然我们有诸多曲线救国的办法,终究仍会受制于这个短板效应:
- 由于需要保持上下文环境的捕获特性,输出要不断继续给到输入,这就意味着,如果从系统架构上,不保留一个类似
tokens buffer缓冲区的设计,整个 ChatGPT 可能会遭遇不可预期的风险(大量的算力消耗甚至会直接拖垮系统,导致崩溃),这也是为什么 OpenAI Open API 中关于 Model 能力调用的参数说明中明确指出了 4097 tokens 的长度限制: What are tokens and how to count them? / OpenAI Help Center。 - 应用侧需要使用会话 id 对每一次完整的会话进行隔离,因为即便是人类的对话,也不可能永远都处于一个全局唯一的上下文环境里:比如你今天和朋友聊的话题是吃饭、明天和家人聊的话题是电影,如果几个话题同时并行,很容易将会话带入到一个混乱不堪的状态,即俗称的:不在一个频道,跨服聊天。...
剩余内容已隐藏