大模型究竟是什么?从参数、概率到幻觉,理解 LLM 的真实工作方式

0 阅读19分钟

摘要:大模型不是一个装满答案的仓库,也不是一个更会聊天的搜索引擎。它更像一套从海量文本中学会规律的生成系统:根据你给出的上下文,一步一步生成最可能出现的下一个 token

理解这一点,很多困惑都会变清楚:为什么它看起来什么都懂,为什么它会一本正经地胡说,为什么 prompt 有用但不是魔法,为什么真正用好 AI 不能只靠“相信模型”。

图片

如果你已经用过一段时间 AI,大概率会有一种很矛盾的体验。

有时候,它聪明得让人惊讶。你问一个概念,它能讲得条理清楚;你贴一段代码,它能指出可能的问题;你让它改文案、写总结、拆方案,它都能很快给出一个像样的版本。

但再用久一点,另一面也会出现。

它可能会引用一篇不存在的论文,写出一个文档里没有的 API,编一个听起来非常合理的历史细节,或者把你没有提供过的业务背景讲得斩钉截铁。

更让人困惑的是,它出错时往往并不心虚。语气很完整,结构很专业,甚至比正确答案还像正确答案。

于是,一个问题就绕不开了:

为什么同一个大模型,既能表现得这么聪明,又会一本正经地胡说?

要回答这个问题,先要把一个常见误会放下。

大语言模型,也就是 LLM,不是一个会说话的知识库。 它不是先在脑子里查到某条答案,再把答案读出来。更准确地说,它是一个从海量文本中学习规律,并根据当前上下文概率生成内容的系统。

这句话是理解 LLM 的起点。

先说结论:它不是答案仓库,而是规律生成器

我们很容易把大模型想象成一个巨大的图书馆。

你问一个问题,它进去翻书,找到答案,然后告诉你。

这个想象很自然,因为模型回答问题时太像“知道”。它能解释概念,能写代码,能总结报告,能模仿语气,能把一个陌生话题讲得像教材。

但大模型不是一本活字典,更像一个读过海量文字、很会接话的人。

它不是每次都在查百科,但它见过太多说法、结构和表达方式,所以常见问题能接得很顺。你问它一个普通概念,它能讲得像老师;你让它改一段文案,它知道很多常见写法;你让它解释一段代码,它能顺着代码习惯推断下一步。

但如果你问的是特别新、特别小众,或者只写在某个内部文档里的事,而你又没有把材料给它,它也可能顺着话头编出一个听起来很合理的回答。

更精确地说,它真正做的事情,并不是查询一条条知识记录。

它更接近这样一件事:

读取当前上下文
判断接下来哪些 `token` 更可能出现
选出一个 `token`
把它接回上下文
继续判断下一个 `token`

你看到的是一段完整回答。模型内部经历的是很多次“下一个 token 应该是什么”的计算。

这里的 token,可以先粗略理解成模型处理文字的基本单位。它可能是一个字、一个词、一个词的一部分,也可能是标点、空格、代码片段。

所以,当你问:

请解释一下 JavaScript 的 Promise。

模型看到的不是一个像人类一样完整理解的句子,而是一串被切分后的信号。这些信号进入模型后,会激活和 JavaScript、异步、then、catch、async/await、错误处理、代码示例、教学解释相关的一大片规律。

它不是从某个抽屉里拿出“Promise 标准答案”。它是在当前上下文里,生成一段最像好答案的内容。

这也是为什么它既强大,又危险。

强大在于,规律可以组合。哪怕它没见过你一模一样的问题,也可以把“技术概念”“生活类比”“面向初学者解释”这些规律拼起来,生成一个新的回答。

危险在于,生成得像,不等于事实一定真。

图片

你输入的不是咒语,而是条件

很多人会说 prompt 像咒语。

这句话有一点好玩,但容易误导。prompt 不是神秘咒语,它更像模型生成时的条件。

同样让模型解释 Promise,你可以给出不同条件:

用小学生能听懂的方式解释 Promise。
用面试官追问的方式解释 Promise。
用一个真实项目里的异步请求例子解释 Promise。

模型不是被咒语“控制”了,而是生成分布变了。

当你说“给小学生听”,它会倾向于选择更简单的词、更短的句子、更生活化的类比。当你说“面试官追问”,它会倾向于补充状态、错误处理、链式调用、async/await 等细节。当你给它真实代码,它会把代码里的变量、调用关系、报错信息纳入当前上下文。

图片

所以 prompt 的本质不是“把模型催眠成你想要的样子”,而是给它足够清楚的上下文和约束,让它少猜一点。

这句话对使用 AI 很重要:

你给的信息越清楚,模型越不需要补空白;你给的信息越模糊,模型就越会用自己学到的常见模式去猜。

它学到的不是每条知识,而是文本背后的规律

大模型当然会表现出很多知识。

它知道巴黎通常是法国首都,HTTP 404 通常表示 Not Found,Promise 有 pending、fulfilled、rejected 三种状态,简历应该怎么写,商业计划书大概长什么样。

但这些知识不是像数据库记录一样,一条一条整齐存放在某个位置。

更准确的说法是:模型从海量文本中学到了大量稳定的关联和规律。

这些规律包括:

  • • 语言通常怎么组织;

  • • 代码通常怎么写;

  • • 概念之间通常怎么关联;

  • • 用户这样提问时,通常期待什么粒度的回答;

  • • 一篇教程、邮件、报告、短视频脚本分别应该长什么样;

  • • 某类问题后面,常见的分析路径和解决步骤是什么。

图片

比如,模型不只是记住了“Promise 有 then 和 catch”。它还学到了更多周边结构:

异步任务通常怎么解释,错误处理通常怎么出现,代码示例通常怎么组织,初学者听到 Promise 时最容易卡在哪里,一个好的解释通常先给定义、再给例子、最后给使用边界。

这就是它看起来“会举一反三”的原因。

它不需要见过你问的每一个问题。只要你的问题落在它学过的规律附近,它就能把相关模式组合起来,生成一个像样的答案。

问题也在这里。

如果你的问题落在低频区域,或者你问的是最新事实、私有信息、冷门 API、公司内部规则、某份合同里的细节,模型仍然会试着生成。它不会天然停下来查证。

它擅长补全,不擅长保证。

“预测下一个 token”为什么能长出复杂能力

看到这里,很多人会有一个疑问:

如果大模型的基础任务只是预测下一个 token,那它是不是本质上就是一个超级输入法?

这个类比有帮助,但只对了一小半。

输入法预测的是常见短语。大模型训练时面对的是整个人类文本世界:网页、书籍、论文、代码、问答、论坛、说明书、教程、对话、故事、数学推导、产品文档。

如果只是预测“今天天气真”的下一个字,确实很简单。

但如果要预测这些内容的下一步,就完全不是一回事:

  • • 一段代码的下一行应该怎么写;

  • • 一个 bug 报错后,开发者会怎样排查;

  • • 一篇论文的下一段如何展开;

  • • 一个产品需求背后可能有什么约束;

  • • 一个用户提问后,怎样的回答更清楚、更有帮助。

要在这么复杂的数据里预测得足够好,模型不能只学词语接龙。它必须学到更深的结构:语法、事实关联、代码结构、常识、因果、文体、任务意图、人类偏好。

可以用一个类比理解。

假设你训练一个系统,目标只有一个:预测优秀程序员下一行会写什么代码。

一开始,它可能只学到括号、缩进、变量名。可如果要预测得越来越准,它就必须学会函数意图、数据结构、框架习惯、错误处理、边界条件和工程规范。

表面任务是“预测下一行”。做到足够好以后,它就会表现得像懂编程。

大模型也是这样。

“预测下一个 token”是一个简单的入口。 但当训练对象足够大、模型容量足够高、训练过程足够充分时,简单目标会逼出复杂能力。

图片

参数不是知识卡片,而是模型的形状

我们经常听到模型有多少参数:70B、175B、1T。

很多人会自然理解为:参数越多,里面装的知识越多。

这句话有一部分直觉是对的,但不够准确。

参数不是知识卡片。

参数更像模型内部大量可以调节的旋钮。训练过程就是不断调整这些旋钮,让模型在看到上下文时,更容易预测出合理的下一个 token

换一个尺度看:如果一个模型有 N 个参数,每个参数用 b bit 来保存,那么它的权重文件大约有:

N × b bit

这叫信息容量。

但这些参数可能组成的状态数量是:

2^(N × b)

这叫可表示状态空间。

信息容量是线性增长的,可表示状态空间则是指数级增长的。 参数一多,模型理论上可能呈现出的形状,就会多到接近不可想象。

用一个小例子就能感受到差别。3 个只能取 0 或 1 的参数,只需要 3 bit 来保存,但它们可以表示 8 种状态:

000 001 010 011 100 101 110 111

如果参数数量变成几千亿、几万亿,再乘上每个参数可取的精度,那个可能性空间就已经不是“很多”可以形容。

它更像一片恒河沙数般的空间。

训练前,模型只是落在这个空间里的一个随机位置。训练中,它不断看到文本,预测下一个 token,预测错了就调整参数。一次次调整之后,模型不是把知识一张张贴进仓库,而是在这片几乎无边的可能性中,慢慢找到一个更适合描述人类文本世界的形状。

图片

参数不是存放答案的抽屉,而是一个巨大函数被训练后的姿态。 这个姿态决定了模型在不同上下文里,会倾向于生成什么。

所以,参数里确实沉淀了知识,但不是以“卡片”的形式沉淀。

它沉淀的是压缩后的规律,是模型在恒河沙数的可能形状中,被训练推向的那一个相对更接近真实文本分布的形状。

这件事有一种朴素的浪漫感:我们没有手写“世界应该如何被理解”,只是给了模型海量文本和一个简单目标。然后训练就在近乎无穷的可能性里,一点点寻找更低的误差、更好的解释、更贴近人类语言和知识结构的形状。

它没有握住真理本身,但在无数可能的形状中,找到了一个暂时更接近真理投影的位置。

这也是为什么大模型看起来什么都知道。人类文本本身高度重复、结构化、可压缩。我们不需要记住世界上每一只猫,仍然能理解“猫”这个概念;模型也不需要逐字记住所有 JavaScript 教程,仍然能学到 Promise、异步、回调、错误处理之间的稳定结构。

但压缩也带来边界。

压缩后的规律可以帮助模型泛化,也可能在细节上失真。它知道“某类 API 通常会怎么命名”,不代表它知道你正在使用的这个库当前版本里是否真的有这个 API。

所以,参数规模越大,通常意味着模型有更强的表达能力和规律承载能力;但它不等于一个更完整、更准确、随时可查的事实数据库。

它为什么越来越像助手

如果基础模型只是预测下一个 token,为什么我们现在用到的 AI 会这么像一个助手?

因为多数聊天产品和 API 里的模型,并不是未经处理的基础模型。

基础语言模型更像一个强大的续写器。它可以续写网页、小说、代码、论坛、论文,但不一定稳定地听指令,也不一定知道什么时候该拒绝。

后来还会有一系列后训练,把它塑造成更像助手的样子。

可以简单理解为三类训练:

  • • 给它看大量“用户问题 -> 理想回答”的例子,让它学会按指令回答;

  • • 让人类或系统比较多个回答哪个好,让它更偏向清楚、有帮助、安全的回答;

  • • 训练它在某些场景下拒绝、追问、调用工具、遵守格式。

所以,我们今天看到的“AI 助手感”,不是单纯来自预训练。

它来自两层能力叠加:

预训练:学语言、代码、知识、模式和世界描述;
后训练:学听指令、按格式回答、表现得像助手。

这也带来一个副作用。

助手应该尽量有帮助,回答应该完整,语气应该稳定。于是,当上下文不足时,模型有时也会给出一个完整而稳定的错误答案。

它不是故意骗人。它是在“做一个有帮助的助手”和“承认不知道”之间,没有总能选对。

每次回答都带着概率

但后训练并没有改变一个底层事实:

模型仍然是在一步步生成 token

既然模型做的是“预测下一个 token”,它的输出天然就是概率性的。

同一句话后面可以有很多合理续写。

今天天气很好,我们去

后面可以是公园、散步、爬山、海边、吃饭。

没有唯一正确答案。

图片

写代码、写方案、做总结也一样。你说“帮我写一个登录接口”,合理实现可能有很多种:JWT、Session、OAuth、不同框架、不同数据库、不同安全策略。

模型每一步都在计算:

在当前上下文下,哪个 `token` 更可能成为下一步?

然后,解码策略会决定怎么选。

temperature 低,回答通常更稳定、更保守;temperature 高,回答通常更多样、更发散。top-p、top-k 这类策略,则会限制模型从哪些候选里采样。

这就是为什么同一个问题有时会得到不同回答。

这也解释了另一个关键点:

高概率不等于真实。

一个说法在语言上很顺、在模式上很常见、在语气上很专业,只能说明它“像一个合理回答”。它是否真实,还需要证据。

这就是幻觉问题的伏笔。

幻觉从哪里来:高概率补全走错了方向

现在,我们终于可以回到最开始的问题:

为什么大模型会一本正经地胡说?

因为它的核心能力是根据参数沉淀的规律,生成高概率内容,但这内容不保证是客观事实。

当问题常见、上下文清楚、训练中模式稳定时,它通常表现很好。

比如:

法国的首都是?

模型生成“巴黎”的概率非常高,而且这个答案也是真的。

但当问题涉及冷门信息、最新信息、私有信息、错误前提或上下文不足时,模型仍然可能继续补全。

你问:

为什么某某库的 useSuperCache API 会导致内存泄漏?

如果这个 API 根本不存在,模型也可能顺着问题继续解释。因为这个问题的形式很像真实技术问题:某个库、某个 API、某个性能问题、原因分析、解决方案。

它会生成一个看起来像真的解释。

这就是幻觉。

图片

幻觉不是单一原因造成的,至少有几类来源:

  • • 训练数据不完整;

  • • 训练数据有噪声和冲突;

  • • 训练目标是预测 token,不是验证事实;

  • • 参数知识是压缩表示,不是数据库;

  • • 后训练让模型更倾向于给出完整、流畅、有帮助的回答。

所以,幻觉不是“模型不够聪明”这么简单。

它是概率生成系统在证据不足时继续补全的自然风险。

理解这一点后,我们对 AI 的态度会更稳。不是因为它会幻觉,所以它不能用;而是因为它会幻觉,所以我们必须知道哪些任务需要验证机制。

真正用好大模型:生成、验证、约束、判断分开

理解 LLM 的真实工作方式后,使用原则其实可以压缩成一句话:

让模型负责生成,让工具负责验证,让系统负责约束,让人负责判断。

对个人使用者来说,可以把 AI 的知识来源分成三类。

第一类,是参数知识。

这适合常识、概念解释、写作改写、代码模式、方案发散、初步分析。比如让模型解释一个概念、改一段文案、整理一个框架,它通常很擅长。

第二类,是上下文知识。

这是你当前给它的材料:代码、报错、会议记录、需求文档、业务规则、合同片段、研究资料。你给得越清楚,它越不需要猜。

第三类,是工具知识。

这是模型通过外部工具获得或验证的信息,比如搜索、数据库、文档检索、代码执行、日志查询、测试结果。

这个分工也能解释另一个常见问题:模型到底有没有记忆?

参数知识,是模型训练后留下的长期规律。普通 API 调用不会改变这些参数,你今天和模型聊了一次,通常不会让模型“学会”你的项目。

上下文知识,是本次请求里模型能看到的信息。一次对话里它看起来记得前文,本质上是因为前文仍在上下文里。

产品层记忆,则是应用保存了历史、摘要、用户偏好或长期记忆,再在后续对话中重新提供给模型。这个记忆通常由产品系统管理,不等于模型参数被你实时改写。

所以,如果你希望模型知道订单状态、合同条款、内部流程、权限范围或用户历史,就必须由系统显式提供,不能假设模型天然知道。

最好的分工是:

常识和模式交给参数;
当前任务背景交给上下文;
事实和验证交给工具;
最终判断交给人。

图片

如果你在工作里使用 AI,可以用下面这张小清单提醒自己:

  • • 这个任务是在让模型生成候选,还是要求它验证事实?

  • • 我是否给了足够上下文,还是在让模型猜?

  • • 结果是否依赖最新信息、私有信息、低频事实或精确引用?

  • • 有没有外部工具可以验证:搜索、数据库、文档、测试、编译器、日志、人工审核?

  • • 模型建议是否会触发真实动作:发消息、改数据、付款、删库、改配置、影响用户权益?

  • • 哪些动作可以自动执行,哪些必须二次确认,哪些永远不能交给模型?

这张清单看起来朴素,但它比“再写一个更好的 prompt”更重要。

prompt 能改善生成。验证、权限和责任边界,必须由系统和人来补上。

你也可以用一个小练习,快速体会这三类能力的边界。

第一句,问它一个通用概念:

用生活例子解释一下 Promise。

这时它主要调用的是参数知识。因为 Promise、异步、生活类比,都是训练数据中很常见的模式。

第二句,给它一段你自己的文档,再问:

根据上面的文档,帮我总结三个关键风险。

这时它主要依赖上下文知识。你给的材料越完整,它越能贴近你的真实任务。

第三句,问它一个需要验证的问题:

这个库最新版本是否支持某个 API?请给出官方来源。

这时就不能只靠参数。它需要工具、文档、搜索或你提供的官方材料。

这三个问题背后,是三种不同用法。

很多 AI 使用上的误会,都是把第三类任务当成第一类任务来做:明明需要验证,却只让模型生成。

最后:别把它当神,也别把它当玩具

大模型不是往脑子里装答案,而是把海量文本的规律压进参数,再根据你给的上下文,生成下一个最像样的 token

因为它追求的是“最像样”,不是“客观事实”,所以它既能回答没见过的问题,也会编出没存在过的论文。

所以,我们既不需要神化它,也不应该低估它。

理解大模型,不是为了判断它够不够聪明,而是为了知道什么时候该信它,什么时候不该信它。