一个工程师的 LLM 理论入门:Transformer、Attention 和 Tokenization(不带公式)

你不做算法研究,但你写 Agent。理解 LLM 怎么工作,能帮你写出更好的 @Tool 描述、更准的 SystemMessage、更省的 Prompt。


为什么工程师也要懂 LLM 原理?

Agent 开发者的日常不是训练模型,而是调模型------写 Prompt、设计 Tool、控制输出。这些操作的质量,直接取决于你对 LLM 内部机制的理解程度。

几个例子:

  • 为什么 Temperature=0.3 时 Agent 更「听话」?------你需要知道 LLM 输出的是概率分布,不是「确定的文本」
  • 为什么 Token 计费方式会导致同样的 Prompt 有时便宜有时贵?------你需要知道 Tokenization 和 Context Window 的关系
  • 为什么 LLM 能理解「查询 CNC-001 的告警」和「CNC-001 有什么问题」是同一件事?------你需要知道 Attention 在做什么

这篇的目标:给你一个工程师级别的理解框架。不推公式,用类比讲原理。


1. Transformer:LLM 的骨架

Transformer 是 2017 年 Google 提出的神经网络架构。所有现代 LLM(GPT-4、DeepSeek、Claude、Gemini)都基于它。

1.1 从外面看:黑盒视角

如果只记住一件事,记住这个:

css 复制代码
输入文本 → [LLM 黑盒] → 输出概率分布 → 采样 → 输出文本

你给 LLM 一段文字,它返回的不是「答案」,而是**「下一个 token 应该是什么」的概率分布**。然后从这个分布中采样,得到实际输出的 token。重复这个过程,直到输出结束------这就是「自回归生成」。

1.2 从里面看:Encoder + Decoder

Transformer 内部有两个主要组件(简化版):

csharp 复制代码
输入:"CNC-001 振动异常"
         ↓
    [Encoder:理解输入]
    - 把每个 token 转成向量
    - 计算 token 之间的关联(Attention)
    - 输出:一组「理解后」的表示
         ↓
    [Decoder:生成输出]
    - 基于 Encoder 的理解 + 已生成的内容
    - 逐 token 预测下一个 token
    - 输出:"可能是轴承磨损,建议..."

现代 LLM 大多只用 Decoder(GPT-4、DeepSeek 都是 Decoder-Only)。Encoder 的「理解」能力和 Decoder 的「生成」能力被合并到一个模型中。

1.3 关键概念:上下文窗口

Transformer 的核心限制是上下文窗口------模型一次能「看到」的 token 数量上限。

  • DeepSeek-V2:128K tokens
  • GPT-4 Turbo:128K tokens
  • Claude 4:200K tokens

这对 Agent 意味着什么?

你的 SystemMessage + 对话历史 + Tool 定义 + Tool 返回结果,全部都在这个窗口里。超出窗口的,模型「看不见」。这就是 ChatMemory 必须存在的根本原因------用淘汰策略把对话控制在窗口内。


2. Attention:LLM 怎么理解上下文

2.1 用 IoT 类比理解

作为 IoT 工程师,这个类比应该很亲切:

传感器相关性矩阵

假设工厂有 100 个传感器(温度、振动、压力、电流......)。你想判断「CNC-001 是否可能故障」,不需要看全部 100 个------你会给最相关的传感器加权重:

  • CNC-001 的振动传感器:权重 0.6(最相关)
  • CNC-001 的温度传感器:权重 0.3
  • 隔壁 CNC-002 的振动传感器:权重 0.1(可能相关)
  • 三楼空调温度传感器:权重 0(不相关)

Attention 做的就是这件事------对于输入中的每个 token(词),计算它和所有其他 token 的「相关性权重」,然后按权重聚合信息。

2.2 Q/K/V:三个矩阵

Attention 的具体实现靠三个矩阵:Q(Query)、K(Key)、V(Value)

用检索系统类比:

概念 类比 作用
Q(Query) 你的搜索词 「我正在处理这个 token,什么信息对我有用?」
K(Key) 每条记录的索引 「我是另一个 token,我包含这类信息」
V(Value) 每条记录的内容 「这是我的实际含义」

计算过程:Q 和 K 做点积 → 得到相关性分数 → 用 Softmax 归一化为权重 → 对 V 加权求和 → 输出。

python 复制代码
# 伪代码(不是真正的实现,但原理如此)
def attention(query_token, all_tokens):
    scores = []
    for token in all_tokens:
        score = dot_product(query_token.Q, token.K)  # 相关性
        scores.append(score)
    weights = softmax(scores)  # 归一化为 0-1 权重
    output = sum(w * token.V for w, token in zip(weights, all_tokens))
    return output

2.3 Self-Attention:每个词看所有词

「The crane lifted the load because it was strong.」

「it」指什么?Self-Attention 让每个 token 都能「看到」句子中的所有其他 token,并计算出**「it」对「crane」的注意力权重最高**,从而正确理解句意。

这对 Agent 开发者的意义:LLM 天然擅长理解上下文关联。你的 @Tool 描述里的关键词,会通过 Attention 和用户消息中的意图建立关联------这就是为什么「查询告警」比「获取数据」更容易被 LLM 正确调用。描述越具体,Attention 越容易建立正确的关联。


3. Tokenization:LLM 不识字

LLM 处理的不是「文字」,而是 token------文本被切分的编码单元。

3.1 Token 不是字

arduino 复制代码
"CNC-001 振动异常"  →  tokenize  →  ["CN", "C", "-", "001", "振动", "异常"]

中文一个字通常是一个 token,但英文单词可能被拆成多个:

arduino 复制代码
"industrial agent"  →  ["indust", "rial", "agent"]

3.2 Token 就是钱

LLM API 按 token 计费。DeepSeek 的定价(2026-5月打折):

  • 输入(Prompt):$0.14 / 1M tokens
  • 输出(Completion):$0.28 / 1M tokens

你的 Prompt 长度 × 调用次数 = 你的账单。Agent 的一次对话可能产生 5-10 次 API 调用(用户消息 → LLM → Tool Call → LLM → 回复),每次都消耗 token。

3.3 Token 数计算方法

java 复制代码
// 我用 OpenAiTokenizer 估算 token 数
OpenAiTokenizer tokenizer = new OpenAiTokenizer();
int tokens = tokenizer.estimateTokenCountInText("CNC-001 振动异常");
// → 大约 6-8 个 token

经验值

  • 1 个中文字符 ≈ 1-2 个 token
  • 1 个英文单词 ≈ 1-2 个 token
  • 1 个 JSON 对象的 token 数大约是字符数的 30-50%

4. Temperature:控制随机性

LLM 输出的是概率分布,不是确定的答案。

arduino 复制代码
LLM 输出(简化):
  "轴承磨损"  → 概率 0.85
  "转子不平衡" → 概率 0.10
  "润滑不足"   → 概率 0.03
  "电源问题"   → 概率 0.02

Temperature 控制这个分布的「陡峭程度」

Temperature 效果 适用场景
0.0 总是选最高概率的 token 结构化数据提取、代码生成
0.3 略有波动,仍然稳定 工业诊断、事实性问答
0.7 多样化输出 创意写作、头脑风暴
1.0+ 可能「跑偏」 不建议用于生产

我在 TemperatureExperiment 中做了测试:同一个诊断 Prompt,t=0.0 时 10 次输出几乎一致,t=0.7 时偶尔会出现不同诊断结论,t=1.0 时产生了明显不合理的建议。

经验规则:工业 Agent 用 0.1-0.3,对话聊天用 0.5-0.7。


5. Embedding:把文字变成数字

Embedding 是把文本转成固定长度的浮点数向量的技术。

scss 复制代码
"CNC-001 轴承磨损"  →  embedding  →  [0.23, -0.45, 0.78, ..., 0.12]  (1536 维)

向量的几何意义:语义相近的文本,向量距离近。这是 RAG(检索增强生成)的基础------用户问题向量化 → 在向量数据库中找到最近的文档片段 → 作为上下文发给 LLM。


6. 训练流程:模型怎么来的

css 复制代码
Pre-training(预训练)
  海量互联网文本 → 学习语言模式和知识
        ↓
SFT(监督微调)
  人工标注的高质量 Q&A → 学会「对话」格式
        ↓
RLHF(人类反馈强化学习)
  人类对输出打分 → 对齐人类偏好

工程师不需要做这些,但需要理解模型的能力边界来自哪个阶段

  • 通用知识(「轴承磨损的原因」)→ 来自 Pre-training
  • 对话能力(「请帮我分析...」)→ 来自 SFT
  • 拒绝胡说(「我不确定...」)→ 来自 RLHF

总结

概念 一句话
Transformer LLM 的骨架,Encoder「理解」+ Decoder「生成」
Attention 计算 token 之间的相关性,类似传感器加权
Tokenization 文本切分,token 就是钱
Temperature 控制输出的随机性,工业场景 0.1-0.3
Embedding 文字→向量,RAG 的基础
训练流程 Pre-training → SFT → RLHF

记住一句就够了:LLM 是概率机器,不是知识库。理解它的工作原理,你才能写出更好的 Prompt、更准的 Tool、更省的 Agent。


代码仓库:github.com/LaoLiang-ag...


本文由 LaoLiang 原创,首发于掘金/知乎/微信公众号。转载请联系作者。

相关推荐
wuhanzhanhui1 小时前
智能座舱技术新高地!2026武汉国际智能显示及智能座舱展览会
人工智能·物联网
MetrixAeroCore1 小时前
欧盟克罗地亚市场物联网通信适配方案|MetrixAeroCore出海实测
物联网
布子麟1 小时前
NodeMCU (ESP8266) + MQTT 上阿里云IOT (二)
物联网·阿里云·云计算
JNX_SEMI2 小时前
Hi9101降压DC-DC转换器:100V耐压内置3A MOS,恒压恒流,外围简洁
单片机·嵌入式硬件·物联网·硬件工程
没有腰的嘟嘟嘟3 小时前
Easy-agent介绍
ai·llm·agent·rag·skill·spring ai·mcp
lin135380675733 小时前
AH810L输入 48~54V 转 5V/100mA 完整方案
嵌入式硬件·物联网
金线银线还是铜线?4 小时前
国产微能量收集PMIC芯片MF9005/MF9006如何选型?
嵌入式硬件·物联网·太阳能
Shawn_Shawn4 小时前
Apache Doris Ai Function学习
后端·llm
DigitalOcean5 小时前
微调后的 LLM 如何部署到生产环境?从GPU 推理端点的搭建、测试与上线全流程
llm·gpu