[Hello-Agents] Day 4: 第三章 大语言模型基础

[Hello-Agents] Day 4: 第三章 大语言模型基础

📅 发布日期:2026-03-29 | 📖 系列:Hello-Agents 深度阅读

章节概览

本章聚焦于大语言模型本身,解答一个关键问题:现代智能体是如何工作的?从语言模型的基本定义出发,深入讲解 Transformer 架构、提示工程、文本分词,以及主流 LLM 及其局限性,为理解智能体如何获得强大的知识储备与推理能力打下坚实基础。

一、章节摘要

第三章是 Hello-Agents 教程的理论基石,系统性地介绍了大语言模型的核心原理。内容从语言模型的发展史开始,逐步深入到 Transformer 架构的各个组件,再到与 LLM 交互的实践方法,最后探讨了模型的能力边界与局限性。

整章可以分为四个核心模块:

  • 语言模型演进:从统计方法 N-gram 到神经网络 RNN/LSTM,再到革命性的 Transformer 架构
  • Transformer 架构深度解析:自注意力机制、多头注意力、位置编码、残差连接等核心组件的原理与实现
  • 与 LLM 交互的实践:提示工程技巧、分词算法原理、开源模型本地部署、模型选型考量
  • 缩放法则与局限性:模型性能与资源的关系、模型幻觉问题及其缓解策略

二、核心概念解析

2.1 语言模型的本质

语言模型的核心任务是计算一个词序列(句子)出现的概率。好的语言模型能够判断什么样的句子是通顺的、自然的。在智能体系统中,语言模型是理解人类指令、生成回应的基础。

N-gram 模型的核心思想源于马尔可夫假设:一个词的出现概率只与它前面有限的 n-1 个词有关。这简化了概率链式法则的计算,但也带来了两个致命缺陷:

  • 数据稀疏性:未在语料库出现的词序列概率为零
  • 泛化能力差:无法理解词与词之间的语义相似性

神经网络语言模型通过词嵌入解决了泛化问题。词嵌入将词汇映射到高维连续向量空间,语义相近的词向量位置相近。这使模型能够捕捉到复杂的语义关系,例如经典的"King - Man + Woman ≈ Queen"向量运算。

2.2 RNN 与 LSTM 的记忆机制

循环神经网络(RNN)通过引入隐藏状态打破了固定窗口限制。隐藏状态可以理解为网络的短期记忆,在处理序列时不断传递信息。然而,标准 RNN 存在长期依赖问题:当序列很长时,梯度在反向传播过程中会快速趋向于零或变得极大。

长短时记忆网络(LSTM)通过精妙的门控机制解决了这一问题:

  • 遗忘门:决定丢弃哪些历史信息
  • 输入门:决定存入哪些新信息
  • 输出门:决定输出哪些信息到隐藏状态

细胞状态作为独立的信息通路,允许信息在时间步之间顺畅传递,有效捕捉长距离依赖关系。

2.3 Transformer 的革命性创新

Transformer 完全抛弃了循环结构,通过自注意力机制实现真正的并行计算。这是现代大语言模型的架构基础。

自注意力的核心思想:为每个词元引入三个可学习角色——Query(查询)、Key(键)、Value(值)。Query 代表当前词元的"问题",Key 代表其他词元的"标签",Value 代表词元的实际"内容"。通过计算 Query 与所有 Key 的相似度,确定每个词元对当前词元的重要性权重,然后加权求和 Value 得到融合了全局上下文的新表示。

数学公式简洁优雅:

Attention(Q, K, V) = softmax(QK^T / √d_k) V

多头注意力进一步增强了模型表达能力:将 Q、K、V 在维度上切分成多份,每份独立进行注意力计算,最后拼接整合。这好比让多个"专家"从不同角度审视句子,每个专家捕捉一种不同的特征关系。

位置编码解决了自注意力机制本身不包含顺序信息的问题。通过正弦和余弦函数为每个位置生成唯一的位置向量,使模型能够区分不同位置的词元。

2.4 Decoder-Only 架构的优势

GPT 的核心洞见:语言的本质任务是预测下一个最可能的词。基于这个思想,GPT 做了大胆简化——完全抛弃编码器,只保留解码器

Decoder-Only 架构的工作模式是自回归的:给定起始文本,模型预测下一个词,然后将生成的词添加到输入末尾,继续预测。这种"文字接龙"式的生成与所有生成式任务完美契合。

掩码自注意力保证了预测的公平性:在计算当前位置的输出时,模型只能关注已生成的词元,无法"偷看"答案。

💡 关键洞察

Decoder-Only 架构的成功源于三个优势:训练目标统一(预测下一个词)、结构简单易于扩展天然适合生成任务。GPT-4、Llama 等千亿参数模型都基于此架构。

2.5 提示工程的核心技巧

提示是与大语言模型沟通的语言。精心设计的提示能显著影响模型输出质量。

模型采样参数控制输出的随机性与确定性:

  • Temperature:低温度(<0.3)输出更确定精准,适合事实性任务;高温度(>0.7)输出更创新发散,适合创意任务
  • Top-k:限制候选 token 数量为前 k 个
  • Top-p:动态截断,保留累积概率达到 p 的最小候选集

提示类型根据示例数量分为三种:

  • 零样本提示:直接下达指令,依赖模型泛化能力
  • 单样本提示:提供一个完整示例,展示任务格式
  • 少样本提示:提供多个示例,更准确理解任务细节

思维链(Chain-of-Thought)是处理复杂推理问题的强大技巧。通过引导模型"一步一步思考",不仅提高正确率,还使推理过程可检查、可纠正。

2.6 分词:连接文本与模型

分词是将自然语言文本转换为模型可处理的数字序列的过程。分词器定义了将原始文本切分成最小单元(词元)的规则。

字节对编码(BPE)是最主流的子词分词算法。核心思想是贪心的合并过程:初始化为基本字符,迭代合并最高频的相邻词元对,直到词表达到预设大小。这平衡了词表大小和语义表达,使模型能通过组合子词理解和生成新词。

分词对开发者的意义

  • 上下文窗口以 Token 数量计算,同一段文字在不同分词器下 Token 数可能差异巨大
  • API 成本按 Token 计费,理解分词是成本控制的关键
  • 模型异常表现有时源于分词,如 `2+2` 和 `2 + 2` 可能被分词成不同序列

2.7 缩放法则与能力涌现

缩放法则揭示了模型性能与参数量、数据量、计算量之间的幂律关系。持续、按比例增加这三个要素,模型性能会可预测地平滑提升。

Chinchilla 定律进一步指出:在给定计算预算下,模型参数量和训练数据量存在最优配比。模型应该更小但用更多数据训练,而非盲目追求大参数。

能力涌现是缩放法则最令人惊奇的产物:当模型规模达到一定阈值,会突然展现出小模型完全不具备的能力——链式思考、指令遵循、多步推理、代码生成等。这表明大模型不仅仅是记忆复述,可能形成了更深层次的抽象推理能力。

2.8 模型幻觉及其缓解

模型幻觉指模型生成与事实、输入或上下文矛盾的内容。表现形式包括:

  • 事实性幻觉:生成与现实世界事实不符的信息
  • 忠实性幻觉:在摘要、翻译中未忠实反映源文本
  • 内在幻觉:生成内容与输入直接矛盾

幻觉成因:训练数据中的错误信息、自回归生成的预测机制、复杂推理中的逻辑链条错误。

缓解策略

  • 数据层面:高质量数据清洗、引入事实性知识、RLHF
  • 模型层面:让模型表达不确定性
  • 推理层面:检索增强生成(RAG)、多步推理验证、外部工具调用

三、代码示例深度解读

3.1 Bigram 概率计算

章节提供了计算句子概率的完整示例。以迷你语料库 `{datawhale agent learns, datawhale agent works}` 为例:

P(datawhale) = 2/6 ≈ 0.333
P(agent|datawhale) = 2/2 = 1.0
P(learns|agent) = 1/2 = 0.5

P("datawhale agent learns") ≈ 0.333 × 1.0 × 0.5 ≈ 0.167

这个简单示例揭示了统计语言模型的基本逻辑:通过计数估计条件概率,通过链式法则计算序列概率。虽然现代模型已远超这种方法,但理解其局限性(数据稀疏、泛化差)有助于欣赏神经网络的突破。

3.2 多头注意力实现

章节的 PyTorch 实现清晰展示了多头注意力的核心计算:

def scaled_dot_product_attention(self, Q, K, V, mask=None):
# 1. 计算注意力得分 (QK^T)
attn_scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(self.d_k)
# 2. 应用掩码
if mask is not None:
attn_scores = attn_scores.masked_fill(mask == 0, -1e9)
# 3. Softmax 归一化
attn_probs = torch.softmax(attn_scores, dim=-1)
# 4. 加权求和
output = torch.matmul(attn_probs, V)
return output

四个步骤环环相扣:QK^T 得分、掩码屏蔽未来位置、Softmax 归一化、加权求和。缩放因子 √d_k 防止点积过大导致梯度消失。代码实现与公式完全对应,是理解注意力机制的绝佳入口。

3.3 本地部署开源模型

章节使用 Qwen1.5-0.5B-Chat 展示了本地部署流程:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Qwen/Qwen1.5-0.5B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)

# 准备对话并生成
messages = [{"role": "user", "content": "你好,请介绍你自己。"}]
text = tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer([text], return_tensors="pt").to(device)
outputs = model.generate(inputs.input_ids, max_new_tokens=512)

这段代码展示了完整的调用链:加载分词器和模型 → 格式化对话模板 → 编码输入 → 生成输出 → 解码回复。小模型(5亿参数)适合入门学习和本地部署,是理解 LLM 工作原理的实践起点。

四、个人思考与反思

4.1 从"理解"到"生成"的范式转变

Transformer 最初为机器翻译设计,采用 Encoder-Decoder 架构:"先理解,再生成"。GPT 的 Decoder-Only 简化是范式转变——把一切任务都变成"预测下一个词"。这种统一的训练目标让模型能在海量无标注数据上预训练,从根本上改变了 NLP 的方法论。

作为智能体开发者,我深刻体会到这种设计的优雅:不需要复杂的任务特定架构,一个模型通过提示词就能完成翻译、摘要、代码生成等多种任务。但这也带来了挑战——模型本质上是"续写机器",需要精心设计的提示词才能引导其完成特定任务。

4.2 注意力机制的本质理解

自注意力最初感觉很抽象,但用"开卷考试"类比后豁然开朗:Query 是"我的问题",Key 是"资料标签",Value 是"资料内容"。我通过 Query 查询所有 Key,计算相关性分数,然后从 Value 中提取加权信息。

更深刻的理解是:自注意力是信息聚合机制。每个词元通过自注意力,从整个序列中"收集"相关信息,融合成富含上下文的新表示。这种并行化的信息聚合,比 RNN 的串行传递高效得多,也让 Transformer 能够捕捉任意距离的依赖关系。

4.3 缩放法则的启示

缩放法则最让我震撼的是能力涌现。模型规模达到阈值后突然获得新能力——这在传统软件工程中前所未闻。它暗示了某种"量变引起质变"的机制:当模型足够大,它能学习到小模型无法学习的高阶模式。

这对智能体开发有直接指导意义:如果任务需要复杂推理、规划、多步决策,必须选择足够大的模型;如果只是简单的分类、匹配,小模型可能更经济。Chinchilla 定律进一步提醒:不要盲目追求参数量,数据和计算的最优配比同样关键。

4.4 幻觉问题的现实考量

模型幻觉是构建可靠智能体的最大挑战之一。章节提到 RAG 是缓解幻觉的有效方法,这在我的实践中得到验证:当需要回答特定领域问题时,先从知识库检索相关文档,再让模型基于文档生成回答,能显著减少"编造"。

但 RAG 不是银弹。检索质量、文档相关性、信息密度都会影响最终输出。更深层的问题是:模型无法区分"知道"和"不知道"。即使引入不确定性量化,模型仍可能对编造内容表达高置信度。这需要在智能体架构层面设计多轮验证、事实核查机制。

五、实践建议

5.1 模型选型决策框架

章节列举了多个选型维度,我在实践中总结了一个决策框架:

  • 任务复杂度:简单分类/匹配 → 小模型;复杂推理/规划 → 大模型
  • 延迟要求:实时交互 → 优化模型或 API;离线处理 → 可用大模型
  • 上下文长度:长文档分析 → 大上下文窗口模型;短对话 → 标准窗口
  • 数据隐私:敏感数据 → 本地部署;公开数据 → API 可用
  • 成本预算:高流量场景 → 成本优化;低频场景 → 体验优先

5.2 提示工程最佳实践

基于章节内容和实践经验:

  • 明确任务边界:在提示中清晰定义任务的输入输出格式、约束条件
  • 提供示例:复杂任务用少样本提示,帮助模型理解期望格式
  • 分步引导:推理任务用思维链,让模型展示中间步骤
  • 角色设定:通过角色扮演引导输出风格和专业领域
  • 参数调优:事实性任务用低温度,创意任务用高温度

5.3 分词感知优化

理解分词对开发智能体至关重要:

  • 成本估算:用分词器预估 Token 消耗,而非字符数
  • 上下文管理:长对话时注意 Token 累积,适时截断或压缩历史
  • 输出解析:设计输出格式时考虑分词边界,避免生成不完整的 Token 序列
  • 多语言考量:不同语言 Token 化效率不同,中文通常更"贵"

5.4 幻觉缓解策略

在智能体架构中引入多层防护:

  • RAG 增强:对事实性问题,先检索后生成
  • 工具调用:数学计算、实时信息通过外部工具获取
  • 多轮验证:关键决策让模型自我审查或调用另一个模型验证
  • 置信度标注:要求模型对输出打分或表达不确定性
  • 领域约束:在提示中明确知识边界,禁止编造

六、从 LLM 基础到智能体构建

本章是构建智能体的理论基石。理解了 LLM 的原理和局限,才能在后续章节中:

  • 设计有效提示词引导 Agent 的规划与决策
  • 根据任务需求选择合适的模型
  • 在工作流中加入验证机制规避模型幻觉
  • 理解模型能力边界合理设计智能体架构

下一章将进入智能体经典范式构建——亲手实现 ReAct、Plan-and-Solve、Reflection 等核心架构,将理论知识转化为实践能力。

📚 系列导航

✅ Day 1: 前言 - 项目的缘起、背景及读者建议
✅ Day 2: 第一章 - 初识智能体
✅ Day 3: 第二章 - 智能体发展史
✅ Day 4: 第三章 - 大语言模型基础(本文)
⏳ Day 5: 第四章 - 智能体经典范式构建(上)

🔗 资源链接

📖 官方文档:datawhalechina.github.io/hello-agents
💻 GitHub 仓库:github.com/datawhalechina/hello-agents
📚 PDF 下载:V1.0.0 Release

Hello-Agents 深度阅读系列 | by 墨染 | Datawhale 出品

评论

此博客中的热门博文

OpenClaw 救援机器人建设与演进全记录 - 从单点故障到双实例自愈体系

Lossless Claw:无损上下文管理插件分析报告

[Hello-Agents] Day 2: 第一章 初识智能体