liyafe1997
1 天前
你不能用 AST 这些传统的算法/逻辑来理解 AI ,AI 是没有逻辑的。
各种 LLM 最基本的原理说白了就是「吐出下一个概率最高的 token 」,大量的各种语言的代码的训练数据基本就保证了,不会吐出导致语法错误的 token ,换句话说,导致语法错误的 token 不会得到高分(因为在训练数据中没有这种 case ),所以不会吐出来。
就跟我们学习人类语言一样,你可能不了解一种语言的语法,但是从小到大有大量的 input (比如你的母语,中文,我想没多少人真的懂其中的门道),所以你也不太容易说出写出语法错误的句子,因为跟你以前看到的听到的别人说的不一样,会感觉很别扭(虽然你也说不出其中的规则),除非训练数据被污染了(比如你整天看很多中二的东西,那你说话可能也会变得很中二)。
「逻辑错误/凭空编出来的 API 」,这就是所谓的幻觉,因为相关训练数据缺失,在这种情况下,一个概率最大的 token 可能就会是不正确的信息(编出来的 API ),因为实在没有其它更好的选择了,(即,尽管概率得分不大,但是依然是最大的那个,或者说,没有比它更正确的信息了)。
比如 AI 不知道到底有哪些 API ,你的 prompt 提到一个「读用户年龄信息」,根据你的仓库里的代码,它可能会脑补出一个 GetUserAgeFromDB(),但是怎么样也不会吐一个 GetYourMoneyFromDB(),因为这时 token 一路吐下去,最正确的回答就是「 GetUserAgeFromDB()」。
还是拿人类思维和语言来举例子,比如你从小在城市长大,你没见过西瓜是怎么长的,也没阅读过有相关内容的资料(训练数据缺失)。然后呢老师让你写作文,写篇「去乡下摘西瓜的故事」( prompt ),然后呢根据你从小到大的 input ,你知道西瓜是水果,然后呢水果一般都是长在树上的(「果」这个 token 后面经常跟着「树」)苹果也是水果,苹果树也经常出现,所以当你写下「西瓜」的时候,「树」这个 token 在你脑海里得分是很高的,于是你写下了「西瓜树」,幻觉就这么来了。尽管「西瓜树」是错的,但是你也不会写下「西瓜人」,「树」比「人」概率更大。
但是从语法层面,你不大可能犯错误,尽管你可能并不懂什么主谓宾定状补这些语法知识和规则,但你会写出「我->去->爬->西瓜->树」,因为在你以前阅读过的材料(训练数据)中见过很多类似的组合(你见过很多句子第一个字是「我」,因此「我」在这里概率是最高的,然后「我」后面经常跟着「去」,于是你写了「去」......),你不大可能会写出「爬去我」,因为训练数据里你没见过「爬」放句首的,所以这个得分不会高,你就不会吐「爬」出来,「爬」后面也不会跟着「去」......因此你不会写出语法错误的句子,尽管你并不懂具体的语法规则。