写于被某国产数据库提供的商用迁移工具和傲慢的售后支持折磨到吐的一个周末凌晨
最近看到一些公众号发文章,说 ChatGPT 可以模拟一个数据库,然后给了一些建表的效果,看起来有模有样。
这让我也很好奇,ChatGPT 真的能完整模拟一个数据库的行为吗?正好我刚刚注册了一个 ChatGPT 的账号,索性就来试一下吧。
先说结论:目前的 ChatGPT 最多只能做到模拟数据库 CLI 的简单交互。
一些小测试
我先给 ChatGPT 输入一些要求,看看他的回答。



查询一下这张表的表结构,这里 ChatGPT 模拟的还是不错的。


接下来,我们来查询一张并不存在的表。

可以看到,ChatGPT 忘记了自己正在模拟一个数据库终端,这个是因为我们并没有定义,查询一张在数据库里的表应该返回什么,所以 ChatGPT 也不知道该怎么办。
不妨回忆一下,在 MySQL 里,假如查询一张不存在的表,会出现什么情况。大概会是下面之类的报错。
Table 'sample_employees_625.test1' doesn't exist
而假如想用ChatGPT达到同样的效果,那么,你也需要先跟ChatGPT先说好,你需要对不存在的表返回和MySQL里一样的提示!!!当我们把这句话加上以后,可以发现 ChatGPT 可以输出跟 MySQL 一样的表不存在报错了。


看到这里,你是不是觉得 ChatGPT 确实挺智能的?对于这些简单的交互,ChatGPT 确实能输出的有模有样。
接下来,我们再给 ChatGPT 添加一个要求,我们希望它能实现对数据库参数的查询。可以看到我这里写了尽可能多的要求,包括 ChatGPT 应该去哪里找到一份参数列表,以及模拟匹配查询该有的结果。

首先,我们查询一下最简单的参数,可以看到 ChatGPT还是能胜任的。

但是接下来查询 SHOW VARIABLES LIKE "%SQL%;
时,可以看到,ChatGPT 确实理解了我们的意图,即,只输出参数名中有 SQL
的结果,但很可惜的是,ChatGPT还是给出了错误的输出。

思考
为啥这么强大的 ChatGPT 连输出参数匹配都没有做到呢。可能有以下的原因:
1. 可能还是我的表达不够完整,ChatGPT是一个OpenAI训练好的黑盒子,我输入什么,它就输出什么,可能我目前想到的条件,不足以让它完全模拟出跟 MySQL 一样交互的行为。 想让 ChatGPT的输出更好,大概可以用更严格的自然语言描述,加很多条件,或者编程调API加一些限制,我猜,假如想产生正确的输出,是不是对于输入也要下一番功夫?
2. OpenAI 用于 ChatGPT 训练的语料中,关于 MySQL 参数查询匹配的内容很少,所以它表现的并不好。
3. ChatGPT 只是一个语言模型,它只能做到对语言模拟的输出(也无法判断自己的输出是否正确,甚至并不知道自己在说些什么?)。数据库CLI 也只是一种特定风格的文本,如用 +
和 -
把输出围起来,用 |
把两栏字段分隔。。。ChatGPT 并不能模拟出来一个真的在背后运行的数据库,要知道在 mysql-cli里,输入有一定格式,输出则是编码好的,背后都是硬编码的程序。
4. 匹配查询对于 ChatGPT 来说,当然是小菜一碟,比如我让它查询%a%
匹配的结果,就匹配了正确的答案。

我让它输出 MySQL 8.0.23 的所有系统参数,给出了参考链接以后,它也能输出。

但是,直接让他输出包含SQL字段的系统参数列表,还是整出了烂活儿。

其他想说的
ChatGPT 可能并不能模拟好数据库的行为,但这没关系,因为它是个语言模型。
ChatGPT 的有用之处在于对信息的大量聚合,以及输出一个看起来有模有样的结果,你的输入决定了它的输出质量,而且输出结果的正确性需要使用者自己判断。
这个世界上不是所有问题,都需要像数据库终端一样严格的输出,假如你问它怎么养生,怎么做好有氧运动,怎么入门某个方向,它还是能给出有用的结果的,我已经用它开了很多入门书单了😂。




