AI信誓旦旦编了一个不存在的库,我居然信了三小时
凌晨1点47分,屏幕上的报错信息像一面镜子,照出了我的天真。AI编了一个库,比虚构文学还完整——有版本号,有作者,有changelog,就是没有这个库。
事情的起因:一个看起来人畜无害的需求
周三下午,我想给项目加个向量数据库的轻量客户端。要求不高——能存、能查、能删,支持余弦相似度就行。于是我问了当时最流行的AI助手:
我:推荐一个Python的轻量向量数据库客户端,要简单好用的
AI:推荐使用 vectorlite,这是一个轻量级的向量数据库客户端,
基于SQLite构建,支持余弦相似度搜索,安装非常简单:
pip install vectorlite
你看,有名字,有介绍,还有安装命令。多专业啊。它甚至还告诉我:
AI:vectorlite 由 vectorlite-org 团队维护,
GitHub 地址:github.com/vectorlite-org/vectorlite
当前最新版本:0.3.2
支持 Python 3.8+
我当时心想:这不就是我需要的吗?轻量、基于SQLite、还有专业团队维护。完美。
它不是胡说八道,它是一本正经地胡说八道
三小时的幽灵追逐
第一小时:安装的迷之失败
pip install vectorlite,回车。
ERROR: Could not find a version that satisfies the requirement vectorlite
嗯?网不好吧。换个源。
pip install vectorlite -i https://pypi.tuna.tsinghua.edu.cn/simple
ERROR: No matching distribution found for vectorlite
还是不行。没事,AI说了GitHub地址,我直接从源码装。
打开 github.com/vectorlite-org/vectorlite——404。
嗯……可能是组织名不对,搜一下。
GitHub搜索"vectorlite"——出来三个结果,全是个人demo项目,最后更新2023年,star个位数。
这时候正常人应该醒悟了。但我不是正常人,我是一个坚信AI不会骗我的开发者。
第二小时:与AI的深度对话
我回去问AI:
我:vectorlite 安装不上,pip找不到这个包
AI:抱歉,可能是版本更新导致的。请尝试指定版本:
pip install vectorlite==0.3.2
如果还是不行,可以尝试从GitHub Release下载whl文件手动安装:
github.com/vectorlite-org/vectorlite/releases/tag/v0.3.2
它甚至给了我Release页面的具体链接。多贴心。
当然,那个链接也是404。
我开始怀疑了,但AI又补了一句:
AI:如果以上方法都不行,可能是vectorlite最近更改了包名。
新包名可能是 vectorlite-py 或 vlite。
你可以试试:
pip install vectorlite-py
当AI开始说"可能"、"也许"、"也可能是"的时候,
就是它编不下去了的信号。
第三小时:真相大白
我终于冷静下来,做了一件应该一开始就做的事——去PyPI搜索。
pypi.org/search/?q=vectorlite
结果:空。Nothing。Nada。连个影子都没有。
这个"vectorlite",从pip包到GitHub仓库到Release页面到维护团队到版本号——全是AI编的。每一个细节都是幻觉。
我坐在屏幕前,感觉像谈了一场三小时的恋爱,对象是虚构的。
世界上有一种库叫vectorlite,它活在AI的脑海里,活在它生成的代码里,活在凌晨两点的404页面里。它什么都有,就是没有存在过。
干货时间:怎么识别AI幻觉
踩了这个坑之后,我总结了一套AI幻觉识别五步法:
🔍 AI幻觉识别五步法
1. 交叉验证法 — AI给你的任何库、包、API、函数名,先去官方源验证。PyPI搜包、GitHub搜仓库、官方文档搜API。这不是不信任AI,这是基本的工程素养。
2. "可能"警觉法 — 当AI说"可能是"、"也许"、"也可以试试"的时候,红灯亮起。这是幻觉的典型信号,它正在编造退路。
3. 细节过完美法 — 版本号精确到小数点后一位、作者团队名称具体、changelog完整——人类记忆都做不到这么精确,AI如果给得太详细,反而可疑。
4. 独立确认法 — 别在同一个AI里追问。换一个搜索引擎、换一个AI、问真人。幻觉会越问越圆,但圆不了事实。
5. 常识回归法 — 问问自己:这个库如果真这么好用,为什么我之前从没听说过?为什么技术社区没人提?好东西藏不住的。
AI为什么会产生幻觉?
说点正经的。AI幻觉不是bug,是feature——只不过不是我们想要的feature。
大语言模型的本质是概率预测:根据上文预测下一个最可能出现的token。当你问"推荐一个向量数据库客户端",它不会去查PyPI——它根据训练数据中的模式,生成一个看起来最像真实答案的回答。
问题在于:它的训练数据里可能包含无数个真实的库描述,它会把这些模式"混合"出一个看起来合理但实际不存在的东西。就像你让一个人描述一道没吃过的菜,他能根据其他菜的经验描述得有模有样——但那道菜根本不存在。
更可怕的是:
- AI没有"我不知道"的本能——它更倾向于编一个答案而不是承认无知
- AI越自信越可疑——它不会说"大概有个叫vectorlite的库吧",它会说"vectorlite 0.3.2,由vectorlite-org维护"
- 追问只会让幻觉更完整——你问越多,它编越多细节,因为它的目标是一致性而非真实性
后来我怎么解决的
最终我用的是 chromadb——一个真实存在的、有3万+star的向量数据库。但找到它的方式不是问AI"推荐什么库",而是:
我:目前Python生态中最流行的轻量向量数据库有哪些?
请只推荐你在训练数据中确实见过的、有GitHub仓库的库。
加了限定条件之后,AI给出了 chromadb、qdrant-client、lancedb 三个选项——这三个全是真实存在的。
然后我做了我应该在第一分钟就做的事:pip install chromadb,一秒装上。
推荐是创造性的——AI擅长创造。
列举是事实性的——AI也不敢编太多。
最后的话
凌晨2点13分,我终于装上了chromadb。看着import chromadb没有报错的那一刻,我忽然觉得,AI幻觉就像一面镜子——它照出的不是世界的样子,而是我们期望世界成为的样子。我们想要一个完美的库,AI就给我们一个完美的幻觉。
所以下次AI给你推荐什么东西——先别激动,先验证。相信AI没问题,但验证是程序员的底线。
毕竟,代码不会骗你,但写代码的AI可能会。🤖