从 Token 到向量:手把手带你通过代码读懂大模型(LLM)的“黑盒”原理

在 2026 年的今天,大语言模型(LLM)已经像水和电一样融入了我们的工作和生活。但你是否真正思考过:当我们在对话框里输入一行文字时,计算机到底经历了什么?

很多开发者觉得 LLM 是个"黑盒",其实只要拆解到底层,你会发现它本质上就是一个数学计算过程。今天,我们就结合 Andrej Karpathy 的经典理论和实战代码,从 Token 到 Embedding,彻底搞懂大模型的"消化系统"。


🚀 一、 怎么学习 LLM?先建立正确的认知地图

在深入代码之前,我们需要一个清晰的学习路径。根据吴恩达(Andrew Ng)和 Andrej Karpathy(前 Tesla AI 总监、OpenAI 创始成员)的建议,学习 LLM 可以分为三个阶段:

  1. 搞懂 AI 是什么(理论篇)

    • 入门: 推荐吴恩达的《AI for Everyone》系列,建立宏观概念。
    • 进阶: 必看 Karpathy 的《深入探索像 ChatGPT 这样的大语言模型》。他能把复杂的 Transformer 架构讲得像搭积木一样简单。
    • 核心关键词: Transformer 架构、Attention 机制、微调(Fine-tuning)、RLHF。
  2. 动手用起来(工具篇)

    • 日常提效: 把重复性工作交给 AI。比如使用 Cursor、GitHub Copilot 进行辅助编程,或者用 NotebookLM 做 RAG(检索增强生成)阅读。
    • 第二大脑: 结合 Obsidian 等工具,打造个人的 AI 知识库。
  3. 做个人作品(实战篇)

    • Vibe Coding: 尝试用自然语言描述需求,让 AI 帮你生成一个完整的网站或小程序。
    • Agent 开发: 学习构建能够自主规划、调用工具的 AI 智能体。

🔑 二、 分词(Tokenization):LLM 的计价单位与最小工作单元

大模型看不懂中文,也看不懂英文,它只认识数字。

1. 为什么要分词?

计算机底层只能处理数字(向量、矩阵)。为了让神经网络理解文本,我们必须把文字转换成离散的符号 ID,这就是 Token

  • 英文: 1 个字符大约对应 0.3 个 Token(因为英文单词长,子词切分更细)。
  • 中文: 1 个汉字大约对应 0.6 个 Token(中文信息密度大,通常 1-2 个字就是一个 Token)。

注意: 这直接关系到你的钱包!API 的计费是按 Token 数量算的,百万 Token 可能只需要几块钱,但量大了也是一笔不小的开支。

2. 代码实战:用 js-tiktoken 拆解文本

我们可以使用 OpenAI 官方 tiktoken 的 JS 版本来直观地看看文本是如何变成数字的。

javascript

编辑

arduino 复制代码
1import { getEncoding } from 'js-tiktoken';
2
3// 1. 获取编码器(GPT-4/3.5 使用的 cl100k_base 规则)
4const enc = getEncoding('cl100k_base');
5
6const text = "Hello, tiktoken! 你好,世界!";
7
8// 2. 编码:文本 -> Token ID 数组
9const tokens = enc.encode(text); 
10console.log("Token IDs:", tokens); 
11// 输出示例: [9906, 11, 28530, 3857, 227, 2873, 1010, 3528, 13]
12
13// 3. 解码:Token ID 数组 -> 还原为文本
14const decodedText = enc.decode(tokens);
15console.log("Decoded Text:", decodedText);

原理解析:

这段代码演示了 LLM 处理文本的第一步。enc.encode 就像查字典,把 "Hello" 变成 9906,把 "你" 变成 227。模型后续的所有计算,都是基于这串数字进行的。


🧮 三、 Embedding:把语义变成"坐标"

有了 Token ID 还不够,数字 100101 在数学上很接近,但在语义上可能毫无关系(比如 ID 100 是"苹果",ID 101 是"挖掘机")。

为了让计算机理解语义相关性 ,我们需要 Embedding(嵌入) 。它将 Token 映射到一个高维向量空间中。

  • 核心逻辑: 语义相近的词,在向量空间里的距离就很近。
  • 维度: 常见的 Embedding 模型(如 text-embedding-v4)会输出 1024 维甚至更高维度的向量。

1. 为什么是 1024 维?

你可以把这 1024 个数字想象成对文本的 1024 个"特征描述":

  • 第 1 维可能代表"情感正负面";
  • 第 2 维可能代表"是否涉及科技";
  • 第 3 维可能代表"正式程度"......

2. 代码实战:计算文本相似度

下面这段代码演示了如何调用阿里云百炼(DashScope)的 API,将文本向量化,并计算两段话的"语义相似度"。

javascript

编辑

javascript 复制代码
1import OpenAI from 'openai';
2import dotenv from 'dotenv';
3dotenv.config();
4
5// 初始化客户端(兼容 OpenAI 格式)
6const client = new OpenAI({
7  apiKey: process.env.DASHSCOPE_API_KEY,
8  baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
9});
10
11// 1. 获取向量的封装函数
12async function getEmbedding(text) {
13  const res = await client.embeddings.create({
14    model: 'text-embedding-v4',
15    input: text,
16    dimensions: 1024 
17  });
18  return res.data[0].embedding;
19}
20
21// 2. 余弦相似度算法:计算两个向量的夹角
22function cosineSimilarity(vecA, vecB) {
23  let dot = 0, magA = 0, magB = 0;
24  for (let i = 0; i < vecA.length; i++) {
25    dot += vecA[i] * vecB[i]; // 点积
26    magA += vecA[i] ** 2;     // A的模长平方
27    magB += vecB[i] ** 2;     // B的模长平方
28  }
29  return dot / (Math.sqrt(magA) * Math.sqrt(magB));
30}
31
32// 3. 主程序运行
33async function run() {
34  const text1 = "Andrej Karpathy LLM Tokenization 分词原理";
35  const text2 = "卡帕西讲解大模型BPE字词分词"; // 语义相近
36  const text3 = "今天天气晴朗,适合出门散步";   // 语义无关
37
38  const vec1 = await getEmbedding(text1);
39  const vec2 = await getEmbedding(text2);
40  const vec3 = await getEmbedding(text3);
41
42  console.log("相似度 (Text1 vs Text2):", cosineSimilarity(vec1, vec2)); // 结果应接近 1
43  console.log("相似度 (Text1 vs Text3):", cosineSimilarity(vec1, vec3)); // 结果应远小于 1
44}
45
46run();

3. 代码深度解析

  • cosineSimilarity 函数:这是 RAG(检索增强生成)技术的基石。它通过计算两个向量的点积和模长,得出一个 -1 到 1 之间的值。

    • 值越接近 1,说明两段文本在 AI 眼里越像(比如 text1 和 text2 都在讲分词)。
    • 值接近 0,说明两者风马牛不相及。
  • 循环 1024 次 :代码中的 for 循环遍历了向量的每一个维度,累加计算特征的重合度。这就是 AI "思考"的过程------在海量特征中寻找共鸣。


📌 总结

Tokenization 的离散 ID 到 Embedding 的连续向量,再到 Cosine Similarity 的数学计算,大模型并没有魔法,它只是把人类的语言极其精妙地转化为了数学问题。

学习建议:

不要只停留在看视频,像上面那样亲手写几行代码,调用一次 API,看着 Token ID 和向量数据打印在控制台上,你对 LLM 的理解会瞬间上一个台阶。

推荐关注:

  • 晓辉博士:专业深度解析。
  • 42章经:行业洞察。
  • 宝玉 AI:Prompt Engineering 技巧。

让我们一起在 AI 的浪潮中,不仅做使用者,更做懂原理的创造者!

相关推荐
召钱熏1 小时前
裸聊可用 ≠ 工作流可用:Gemma4 12B 接入 Claude Code 的真实踩坑复盘
人工智能
魏祖潇1 小时前
别问哪个 AI 工具最好——我换了一圈才想明白的几件事
人工智能
齐翊2 小时前
怎么确认 AI 看懂了你的提示词?
人工智能·github·ai编程
饼干哥哥2 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
以和为贵2 小时前
前端也能搞懂 RAG:用 JS 手写一条最小检索增强链路
前端·人工智能·面试
武子康3 小时前
调查研究-192 AI Agent 之间也需要“信任“:把多 Agent 信任变成可测指标
人工智能·openai·agent
Smoothcloud_润云4 小时前
Hermes Agent 的上下文记忆机制:一个开源 Agent 是怎么"记住"你的
人工智能·agent·gpu
早点睡啊4 小时前
精读 LangChain 官方文档(一)总览、安装与快速开始:从 create_agent 跑通第一个智能体
人工智能