大模型核心概念通俗解读:从词向量到工具调用
一、名词解释
在正式开始之前,先快速认识几个核心概念:
| 概念 | 一句话解释 |
|---|---|
| 词向量 | 每个词被翻译成一串数字(如4096个数字),语义相近的词,数字串也相近 |
| 场景向量 | 把整个句子或段落压缩成一个数字串,代表"当前语境"的全貌 |
| 视觉编码器 | 把图片切成小块,每块也翻译成数字串,让模型能"看懂"图像 |
| LM Head | 一个映射层,把场景向量翻译成"下一个词的概率" |
| 工具调用 | 模型发现自己搞不定时,主动调用计算器、搜索引擎等外部工具来帮忙 |
二、目录提纲
- 词向量:给每个词发一张"身份证"
- 场景向量:从"单个词"到"完整语境"
- 视觉编码器:让模型"看见"世界
- LLM如何工作:从场景向量到下一个词
- LLM的致命短板:为什么算不了大数乘法
- 工具调用:模型如何"求助"外部工具
- 总结:从"理解"到"行动"的进化
三、正文
1. 词向量:给每个词发一张"身份证"
大模型无法直接理解文字,它只认识数字。所以第一步,模型把每个词(Token)映射成一个高维向量------比如4096个数字。
- "猫" →
[0.12, -0.45, 0.78, ..., 0.33](4096个数字) - "狗" →
[0.15, -0.42, 0.80, ..., 0.30](与"猫"很接近) - "微积分" →
[-0.90, 0.67, -0.12, ..., 0.55](与"猫"距离很远)
这就是词向量。 语义相近的词,它们的向量在空间中彼此靠近;语义无关的词,彼此远离。模型的所有理解能力,都建立在这个"语义地图"之上。
换个角度: 通过大量数据训练后的词向量,是基于训练的数据,定义了每个词的向量维度数值,进而达成哪些词近,哪些词远,两个词的远近,再结合到场景中,可能变得更近或者更远。
注意: 各家词向量的维度是不一样的,千问是4096维度,就算维度一样,基于训练数据和模型的差异,训练出来的词的向量直,也是有出入的,目前没有统一的词向量定义方法。词向量的值,也只是大模型数亿参数的另一种参数类型,通过调整词向量,来达成词与词之间的距离。
2. 场景向量:从"单个词"到"完整语境"
词向量只能表示单个词,但"猫坐在垫子上"和"垫子坐在猫上"完全是两码事。模型需要理解词与词之间的关系。
这时,Transformer的自注意力机制登场了。它让每个词都能"看到"句子中的所有其他词:
- "猫"看到"坐"、"在"、"垫子"、"上",知道自己是"坐"的主体
- "垫子"看到"猫"、"坐",知道自己是"被坐"的对象
经过多层这样的交互,模型把所有词的信息融合成一个场景向量。这个向量编码了"谁在什么场景下做了什么"这个完整信息。
场景向量就是当前语境的"全景快照"。 模型后续的所有生成,都基于这个快照。
3. 视觉编码器:让模型"看见"世界
以上都是纯文本的世界。要让模型"看图说话",就需要视觉编码器。
视觉编码器的工作分为三步:
第一步:切图。 把一张图片切成许多小块(Patches)。比如一张224×224的图片,切成16×16的小块,得到196个小块。
第二步:编码。 每个小块被映射成一个向量。这样,一张图片就变成了一个向量序列------和文本的向量序列格式完全一致。这个向量和词向量不是同样的概念和维数,所以需要关联到词向量空间。
第三步:对齐。 这些图像向量通过一个叫Connector(连接器)的模块,被"翻译"成LLM能理解的语义空间。翻译后的向量与文本向量在同一个空间中,语义相近的图像和文本彼此靠近。
最终,模型可以在同一个语义空间中处理图像和文本。 你问"这张图里有什么?",模型会把图像中的"红色区域"向量与文本中的"红色"向量进行匹配,回答"有一朵红色的花"。
注意: 所谓的Connector,是通过大量的图像和一些对图像描述的文字语言,通过这些训练,能够把图的向量映射到对应文字在词向量上的位置,进而用于推理。
一张图首先把视觉编码器转换为图像的向量数据,不同于词向量空间,然后通过连接器映射到词向量空间,进而进行文字结果的推导,反向工程(文字生成图)也是如此。
4. LLM如何工作:从场景向量到下一个词
现在,模型有了场景向量(来自文本或图像),接下来如何生成回答?
第一步:场景向量 → 得分向量。 模型通过一个叫LM Head的线性层,把场景向量映射到词表空间。每个词得到一个"得分"(Logit)。
第二步:得分向量 → 概率分布。 通过Softmax函数,把得分转换为概率分布。得分高的词,概率也高。
第三步:采样。 模型根据概率分布选择下一个词。最简单的策略是选概率最高的那个。
这个过程不断重复: 每生成一个词,模型就把这个词加入输入,重新计算场景向量,再预测下一个词。这就是自回归生成。
5. LLM的致命短板:为什么算不了大数乘法
到这里,你可能会觉得LLM无所不能。但有一个经典问题暴露了它的致命短板:
请计算:1234533257 × 8753674433
如果你让LLM直接回答,它大概率会给出一个错误答案。为什么?
原因在于:LLM的本质是"模式匹配",而不是"精确计算"。
- 分词问题 :数字"1234533257"可能被分词器切成
["12", "34", "53", "32", "57"]这样的Token序列。模型看到的不是一个大数,而是一串符号。 - 缺乏进位机制:人类做乘法需要从低位到高位逐位计算、进位。但LLM是"从左到右"逐词生成的,它没有内置的"进位寄存器"。
- 训练数据稀疏:训练数据中很少出现这么长的乘法例子,模型没有学会这种模式。
所以,没有外部工具,LLM根本无法精确计算大数乘法。 它只能根据模式猜测一个"看起来合理"的数字,但大概率是错的。
6. 工具调用:模型如何"求助"外部工具
既然LLM有短板,那怎么办?答案是:让它学会调用工具。
工具调用(Tool Calling / Function Calling) 是2024-2026年大模型最重要的能力之一。它让模型在发现自己搞不定时,主动请求外部工具帮忙。
工作流程如下:
-
模型判断:当用户问"1234533257 × 8753674433 = ?"时,模型识别出这是一个需要精确计算的问题,自己搞不定。
-
生成调用请求 :模型不是直接输出答案,而是输出一个特殊格式的调用请求,比如:
<function_call> calculate("1234533257 * 8753674433") </function_call> -
系统执行:外部系统(不是模型本身)接收到这个请求,调用计算器或代码解释器进行精确计算。
-
返回结果 :计算器返回结果
10807644227737281281。 -
模型整合:模型把结果整合到回答中,输出:"结果是 10807644227737281281。"
工具调用的核心价值: 它把LLM从"什么都要自己干"变成了"知道自己什么干不了,然后找人帮忙"。这大大扩展了模型的能力边界。
常见的工具类型:
| 工具类型 | 用途 | 示例 |
|---|---|---|
| 计算器 | 精确数学运算 | 大数乘法、微积分 |
| 搜索引擎 | 获取实时信息 | 今天天气、最新新闻 |
| 代码解释器 | 执行代码 | 数据分析、图表绘制 |
| 数据库查询 | 结构化数据检索 | 查订单、查库存 |
| 图像生成器 | 生成图片 | 画一幅"猫在月球上" |
四、总结:从"理解"到"行动"的进化
回顾整篇文章,我们可以看到大模型能力的三个层次:
| 层次 | 能力 | 核心组件 |
|---|---|---|
| 第一层:理解 | 把文字和图像翻译成向量 | 词向量、视觉编码器 |
| 第二层:生成 | 基于场景向量逐词预测 | Transformer、LM Head |
| 第三层:行动 | 识别自身局限,调用外部工具 | 工具调用框架 |
而这一切的起点,就是那个魔幻的、高纬度的词向量------一串数字,开启了一个全新的智能时代。