你点外卖写过备注吧。"不要香菜、多放辣、放门口别按门铃"。
假设老板闲得慌,给每单备注都打三个分:忌口程度、辣度、别打扰程度。"不要香菜、多放辣、放门口" 大概就是 [1, 0.9, 1],"随便、微辣、到了打电话" 可能就是 [0, 0.3, 0]。一串数字,一份备注一串。
这时候有人下单写"别放葱、要特辣、别敲门",你不用逐字去比对,把它的三个分算出来,跟之前那堆比一比,谁离得最近,就说明这俩人要求差不多。
大模型干的事情,粗粗说就是这个路数。它不认字,认数。一句话进去,被变成一串数字——不是三个,是几百到几千个——这串数字就是"向量"。意思相近的句子,数字挨得也近;意思不沾边的,隔得远。"住宿标准怎么算"和"出差住酒店能报多少",字面上没几个字一样,但向量会挨得很近。
那串数字里每一位代表什么?说实话没人说得清。不像我上面那个例子,第一格明摆着是忌口。真实的是模型自己算出来的,第 137 位是 0.23,你问它这 0.23 是什么,没答案,只能说"反正是这么算出来的"。所以我每次讲完都要补一句"这个比喻不太准",补到后来自己都烦了。
哦对,还有个事:这个比喻里数字是人定的,实际是模型定的,这也是不太准的地方之一。你会发现这类解释特别容易越补越多。
存这些数字、并且在几万几十万串里飞快找出"离这句最近的那几串",就是向量库的活。FAISS 是其中一个,Chroma 也是,还有些是数据库顺带支持的。名字不用记,知道有这么个专门管坐标的东西就行。
顺带说,它找出来的不是"正确答案",只是"位置最接近的几段"。所以你问一句,它捞回来三页看着都挺像的内容,模型再照着这几页编答案。要是库里压根没有相关内容,它也会照样捞回最接近的几段——哪怕那几段跟问题其实没关系。这就是为什么有时候 AI 一本正经地答了个完全不沾边的东西,还带着出处。
平时 VidDown 技术博客写的多是视频和下载,偶尔岔开聊聊这种基础概念。
我妈前阵子问我,说电视里老讲"向量数据库",是不是一种很能装的硬盘。我说差不多吧,就是它找东西的方式不太一样。她"哦"了一声,没再追问,我觉得这个回答挺好的。