一篇文章让你彻底熟悉AI大模型(二)

了解AI到理解AI

以下是个人学习的总结(二),干货满满,还望仔细阅读,如有问题,欢迎留言。

------转载、引用请标明出处

核心层:LLM 怎么工作(内部机制)

工作流程

先建立一个核心认知:

LLM 每次生成一个词,内部经历的完整流程是:

复制代码
文字 → 词元(token) → 数字(Embedding) → 理解上下文(Attention) → 预测下一个词

对于图像、音视频等,流程基本一样,只是不同模态的切割(Token化}方式不同。

第一步:分词(Tokenization)- 以文字切成Token为例

文本输入进来之后,第一件事不是直接转模型认识的数字,而是先切割成一个个 Token。

Token 不等于"一个词",它是模型处理文字的最小单位,切割规则大概是:

css 复制代码
常见词   → 一个词 = 一个 Token
            "cat" → [cat]
            
较长的词 → 一个词被拆成几个 Token
            "unhappiness" → [un] [happiness]
            
中文     → 通常每个字 = 一个 Token
            "今天天气" → [今天] [天气] 
                        或 [今] [天] [天] [气]

为什么不直接按字母/字切?

如果每个字母都是一个 Token,序列会极长,计算量爆炸。如果整个词是一个 Token,词表会无限大(新词、专有名词都处理不了)。 按子词切割是一个平衡点。

总结:让模型学会将用户目标切割为最小单位

第二步:向量(Embedding)

模型不认识文字,只能处理数字。

但简单编号不行------你不能说"猫=1,狗=2,苹果=3",因为这样 1 和 2 的距离,跟 2 和 3 的距离一样,完全体现不出"猫和狗都是动物、苹果是水果"这种语义关系。

所以 Embedding 的做法是:把每个词映射成一串很长的数字(比如 768 个),让这串数字在空间里的位置,能反映这个词的语义。

向量的位置在空间里是有意义的------意思相近的词,向量方向相近。

这样每个 Token 都有一个对应的编号(比如"今天" = 3721),然后通过 Embedding 表,把这个编号转换成一串数字向量。

arduino 复制代码
"猫" → [0.2, 0.8, 0.1, -0.3, ...]

"狗" → [0.19, 0.75, 0.15, -0.28, ...] ← 和猫很接近

"苹果"→ [-0.5, 0.1, 0.9, 0.6, ...] ← 和猫、狗差的远

类比

就像地图上的坐标。北京和天津的坐标很接近,北京和纽约的坐标很远。Embedding 就是给每个词在"语义地图"上标一个坐标。

但 Embedding 有一个致命缺陷:

每个词的坐标是固定的,不管它出现在什么句子里,坐标都一样。

arduino 复制代码
"我去银行取钱" ← 这里"银行"= 金融机构

"河的银行边很美" ← 这里"银行"= 河岸(bank)

这就是 Embedding 解决不了的问题------它只能给词一个"初始坐标",不能理解语境。

这个问题要靠后面的步骤 Attention 来解决。

总结:让模型学会将Token 变成向量(数字)

第三步:注意力机制(Attention)+FFN
  • 注意力机制(Attention)

注意力机制(Attention)的任务是:让每个词的向量,根据它周围的词,更新自己的含义(向量)。

具体怎么做?对句子里的每一个词,Attention 都会让它去问其他所有词:"你和我有多相关?"

然后根据相关程度,把其他词的信息融合进来,更新自己的向量。

用"我去银行取钱"举例:

arduino 复制代码
"银行"这个词问其他词:
        → "我" 相关度:低
        → "去" 相关度:低
        → "取钱" 相关度:非常高 ✦
        → "河" 相关度:低(如果有的话)

发现"取钱"和自己高度相关,于是"银行"把"取钱"的信息大量融合进来,向量更新之后,它就明确指向"金融机构"的含义了。

换到"河的银行边很美":

arduino 复制代码
"银行"这个词问其他词:
        → "河" 相关度:非常高 ✦
        → "美" 相关度:中等
        → "取钱" 不存在

这次融合了"河"的信息,向量更新之后,就指向"河岸"的含义。

同一个词,在不同句子里,经过 Attention 之后,向量就不一样了。 这就是 Attention 解决了 Embedding 那个缺陷的原因。

类比

每个词就像一个人站在人群里开会。Embedding 给了每个人一张"自我介绍卡片"(初始含义)。Attention 是让每个人去听其他人说话,根据谁说的话跟自己最相关,更新自己的理解。

开完会之后,每个人的理解都充分融合了上下文。

总结:让模型学会"注意"句子里哪些地方重要------每个词去参考周围的其他词,更新自己的向量

  • FFN(Feed-Forward Network,前馈神经网络)

FFN 是 Attention 之后紧跟的一个处理步骤。

注意力负责词与词之间的信息交换,FFN(Feed-Forward Network,前馈神经网络)负责对每个词的向量单独做深度加工

类比

Attention 是开会讨论(大家互相交流信息),FFN 是每个人回去之后独立消化整理(把讨论结果内化成自己的理解)。两步缺一不可。

第五步:Transformer

Transformer 就是把 Embedding 和 Attention 组装起来,再反复叠加很多层的完整架构。

makefile 复制代码
输入文字:"今天天气真好"
        ↓
【Tokenization分词 层】:[今天],[天气],[真],[好]
        ↓
【Embedding 向量层】
每个词变成一个初始向量
"今天"→[...], "天气"→[...], "真"→[...], "好"→[...]
        ↓
【第一层 Transformer】
├─ Attention:四个词互相参考,更新向量 
│ "天气" ←→ "好" 关联度高 → 互相融合信息 
│ "今天" ←→ "天气" 关联度高 → 互相融合信息 
└─ FFN:每个词独立消化,提炼向量 
 → 理解基础关联:"今天"修饰"天气"
        ↓
【第二层 Transformer】
├─ Attention:在上一层基础上再次互相参考 
└─ FFN:再次独立提炼 → 理解语义:"天气真好"是一个正面评价
        ↓
【第三层 Transformer】 
├─ Attention:继续
└─ FFN → 理解语气:这是一句感叹句
        ↓
【第四层 ... 第 N 层 Transformer】
每层 Attention + FFN 重复一次
越深的层,理解越抽象、越高级(GPT-2: 12层 / LLaMA-7B: 32层 / GPT-3: 96层)
        ↓
【LM Head 输出层】
把最后一层的最终向量映射成词表里所有 Token 的原始分数
"!" → 8.2
"," → 6.1
"呀" → 5.3
"飞机"→ 0.4
...(词表里每个词都有一个分数,即 Logits)
        ↓
【采样】
按概率选出下一个Token(不是每次都选最高概率,而是加权随机)
        ↓
【输出 Token,拼接后重复】
选出"!"→ 拼到句子后面
"今天天气真好!"→ 重新进入流程预测下一个词
直到生成结束标志或达到长度上限

如果上述例子不够清晰,可以访问Transformer Explainer

这是一个GPT-2模型的真实例子------你输入一段文字,可以实时看到 Embedding、Attention、每层的数据流动全过程,数值会随你的输入实时更新。

三者关系一句话总结:

Embedding → 给每个词一个"初始数字坐标"

Attention → 让每个词根据上下文更新自己的坐标

Transformer → 把上面两步反复叠加 N 层的完整架构

这三个不是并列的独立模块,而是从小到大的包含关系:Embedding 和 Attention 是零件,Transformer 是用这些零件组装出来的引擎。

温度(temperate)

LLM中的温度是什么?(详见:详解LLM 中的温度------Predictable Random(可预测↔随机) - 知乎))

较低的 temperate 值会从 LLM 产生相同的响应,但是高温度值会产生胡言乱语。

Temperature 就是卡在输出层和采样之间的一个调节旋钮。

Transformer 最后一层处理完之后,输出的是词表里每个 Token 的原始分数 ,叫做 Logits

arduino 复制代码
"今天天气真好"之后:
"!"  → Logits: 8.2
","  → Logits: 6.1
"呀"  → Logits: 5.3
"飞机" → Logits: 0.4
...(词表里所有词都有一个分数)

这些分数还不是概率,只是原始的"倾向强度"。要变成概率,需要经过一个叫 Softmax 的函数,把所有分数压缩成加起来等于 100% 的概率分布:

erlang 复制代码
"!"  → 45%
","  → 30%
"呀"  → 20%
"飞机" → 1%
...

Temperature 就插在 Logits → Softmax 这一步之间。

Temperature 具体做什么?

它的操作很简单------在 Softmax 之前,把所有 Logits 除以 Temperature 的值:

  • Temperature 默认值(1,不影响)
arduino 复制代码
Logits 不变 → Softmax → 正常概率分布
"!" 45%  "," 30%  "呀" 20%  "飞机" 1%
  • Temperature 调低(拉大差距)
arduino 复制代码
如 Logits ÷ 0.5 → 数值变大,高分和低分差距拉大
→ Softmax 后高概率的词更突出
"!" 80%  "," 15%  "呀" 4%  "飞机" 0%
  • 这意味着采样过程几乎肯定会选择概率最高的 token,。

  • 这使得生成过程变得贪婪且(几乎)具有确定性(输出更稳定)。

  • Temperature 调高(缩小差距)

arduino 复制代码
如 Logits ÷ 2 → 数值变小,高分和低分差距缩小
→ Softmax 后概率分布更均匀
"!" 28%  "," 25%  "呀" 22%  "飞机" 8%
  • 这意味着采样过程可以选择任何令牌。
  • 这使得生成过程随机且高度随机。

快速说明:

在实践中,即使 temperature=0还是有可能生成不同的结果。

  • 完整流程
makefile 复制代码
......
【LM Head 输出层】
把最后一层的最终向量映射成词表里所有 Token 的原始分数
"!" → 8.2
"," → 6.1
"呀" → 5.3
"飞机"→ 0.4
...(词表里每个词都有一个分数,即 Logits)
        ↓
【Temperature 缩放】
所有 Logits ÷ Temperature 值
Temperature = 0.5 → 高分更突出 → 输出保守稳定
Temperature = 1.0 → 保持原样 → 正常输出
Temperature = 2.0 → 分差缩小 → 输出随机多样
        ↓
【Softmax 概率化】
把缩放后的 Logits 转换成概率(所有词加起来 = 100%) "!" → 45% "," → 30% "呀" → 20% "飞机"→ 1%
        ↓
【采样】
按概率选出下一个Token(不是每次都选最高概率,而是加权随机)
        ↓
【输出 Token,拼接后重复】
选出"!"→ 拼到句子后面
"今天天气真好!"→ 重新进入流程预测下一个词
直到生成结束标志或达到长度上限

核心层:LLM 的局限

大语言模型(LLM)的主要缺点有三点:

  • 新鲜度问题(训练数据有截止日期,不了解最新信息)

  • 数据安全问题(企业敏感数据不敢上传公网)。

  • 幻觉问题(一本正经地胡说八道)

其中新鲜度问题已基本被解决,像GPT-4 Turbo这样的最新大模型就有类似RAG(Retrieval Augmented Generation,检索增强生成)这样的技术,可以借助外挂快速吸收最新知识(世界知识)。

数据安全可通过本地化部署缓解,最棘手的就是幻觉

新鲜度问题------数据时效

模型的知识来自训练数据,而训练数据有截止日期。GPT-4 的知识截止到某个时间点,之后发生的事它一概不知。

你问它"今天的股价"、"最新的政策法规"、"上周发生的新闻",它要么不知道,要么给你旧数据。

这个问题相对好处理,目前主要靠两种方式:

RAG(检索增强生成) :每次用户提问,先去实时检索最新的外部知识库或网络,把检索结果塞进 Prompt,再让模型基于最新信息回答。这是现在最主流的解法,本质上是给模型装了一双"实时查资料的眼睛"。

联网搜索:直接让模型调用搜索引擎工具,每次回答前先搜一遍,确保信息是最新的。

检索增强生成 (RAG)

检索增强生成(Retrieval Augmented Generation, RAG)是一种将信息检索(Retrieval)与文本生成(Generation)相结合的技术框架。

其核心思想是在LLM生成文本之前,先从一个外部知识库中检索相关的最新信息,并将这些信息作为上下文(context)提供给LLM,从而指导LLM生成更准确、更相关、更及时的内容。

RAG系统通常包含以下三个主要步骤:

  • 检索 (Retrieve) :当用户提出一个查询或提示时,RAG系统首先使用一个检索器(Retriever)从外部知识
  • 增强 (Augment) :检索到的信息片段会与用户的原始查询或提示合并,形成一个增强的提示(augmented prompt)。
  • 生成 (Generate) :增强的提示被输入到LLM中,LLM基于原始查询和检索到的上下文信息生成最终的回复。

RAG的优势

  • 提高准确性和事实性:通过引入外部知识,减少幻觉。
  • 增强知识的时效性:能够获取最新的信息。
  • 降低训练成本:无需为获取新知识而频繁重新训练LLM。
  • 提高透明度和可信度:可以追溯信息来源。
  • 领域专业化:更容易适应特定领域的知识需求。

数据安全问题------隐私泄露

企业想用 AI 处理内部数据,但有三层顾虑:

  • 训练数据泄露:模型可能因为"记忆效应",在输出中复述训练数据------比如用户的隐私信息、企业的商业机密被 AI 原样说出来。

  • 数据上传风险:把公司的合同、财务数据、客户信息上传到第三方 AI 平台,万一平台把这些数据用于训练下一代模型怎么办?数据一旦上传,企业就失去了控制权。

  • 合规风险:一家韩国初创公司曾因聊天中泄露敏感客户数据,被韩国政府罚款约 9.3 万美元。2023 年 Google 的 AI 聊天机器人因分享不准确信息,市值缩水了 1000 亿美元。在金融、医疗、政务等行业,数据合规是红线。

目前主要有三种解决方向:

方案 做法 适合场景
私有化部署 把模型部署在企业自己的服务器上,数据不出内网 对数据安全要求极高的金融、政务
数据脱敏 上传前把敏感信息替换掉(如把"张三"替换成"用户A") 数据需要上云但有敏感字段
权限控制 不同级别的员工只能访问对应权限的数据,AI 也遵守这套规则 大型企业内部知识库

幻觉问题------棘手问题

前两个问题都有相对成熟的解法,而幻觉是三个里最棘手的,因为它根植于 LLM 的底层原理,无法彻底消除。

大语言模型采用自回归方式生成文本------每次根据已有内容预测下一个 Token,这个过程的直接目标是保证语言的连贯性,而不是保证事实的准确性。

换句话说,模型不是在"查找正确答案",而是在"预测听起来合理的下一个词"。这两件事大多数时候结果一致,但有时会产生流畅却错误的输出------这就是幻觉。

但是,彻底消灭随机性,模型就变成复读机;保留随机性,幻觉就永远存在。所以幻觉只能缓解,不能消灭。

幻觉的危害有多大?

在法律领域,幻觉可能杜撰出不存在的判例法规;在医疗咨询中,可能提供错误的药物建议;在金融与军事决策中,一个基于幻觉的分析可能导致灾难性的后果。

还有一个更隐蔽的危害:AI 生成的虚假信息如果被大量传播,可能反过来被用作下一代模型的训练数据,导致新模型中产生更多幻觉------这是一个越来越严重的恶性循环。

四种缓解方法:

  • Prompt 工程:问题描述越具体,模型"自由发挥"的空间越小。与其说"帮我分析一下",不如说"基于以下三个数据,分析 XX 趋势,不要引用数据之外的信息"。

  • RAG(检索增强生成) :让模型回答前先查资料,有据可查就很难瞎编。这是目前商业场景中抑制幻觉最有效的方案。

  • 微调(Fine-tuning) :在特定领域的专业数据上再训练一遍,让模型"更懂行",减少因知识不足导致的乱猜。缺点是数据是静态的,更新成本高。

  • 幻觉检测(事后校验) :让模型对同一问题多次生成,如果每次答案差异很大,说明模型不确定,这条输出可信度低,需要人工复核或直接过滤。

核心层:Agent(智能体)

智能体(Agent)是一种能够感知其环境、进行思考和规划,并采取行动以实现特定目标的计算实体。

在学习 Agent 之前,先把已知的 LLM 知识和 Agent 连起来:

LLM、RAG 和 Agent 三者之间存在层层递进的关系:LLM 是基础,提供语言理解和生成能力;RAG 是 LLM 的增强插件,解决知识新鲜度和幻觉问题;Agent 是更高级的系统,以 LLM 为大脑,RAG 作为其中一个可调用的工具。

Agent的组件

一句话定义:Agent = LLM + 规划 + 记忆 + 工具调用

scss 复制代码
              ┌─────────────────────────────┐
              │           Agent             │
              │                             │
              │  ┌───────┐   ┌───────────┐  │
              │  │  LLM  │   │   记忆    │  │
              │  │ (大脑) │  │ (短期+长期)│  │
              │  └───────┘   └───────────┘  │
              │                             │
              │  ┌──────────────────────┐   │
              │  │       工具箱          │   │
              │  │  搜索 / 代码 / RAG ✦  │  │
              │  └──────────────────────┘   │
              └─────────────────────────────┘

在当前的AI语境下,AI Agent通常以一个强大的LLM作为其核心"大脑",并辅以其他关键组件:

  • LLM (大脑) :作为Agent的核心,负责理解用户指令、进行常识推理、制定计划、甚至生成行动指令。
  • 规划能力 (Planning) :Agent能够将复杂的目标分解为一系列可执行的子任务,并制定行动计划。这可能涉及到多步推理和决策。
vbnet 复制代码
例:用户说"帮我调研竞争对手并写一份报告"

Agent 的规划: 
Step 1:搜索竞争对手的最新动态 
Step 2:搜索竞争对手的产品信息 
Step 3:整理搜索结果 
Step 4:生成对比分析 
Step 5:撰写报告

这个能力叫 **ReAct(Reasoning + Acting)** ,是目前最主流的 Agent 工作模式:

思考(Thought)→ 行动(Action)→ 观察结果(Observation)
        ↑___________________________________|
                   循环直到完成
  • 记忆 (Memory) :和 Context 概念直接相关,Agent可以拥有短期记忆(用于跟踪当前任务的上下文)和长期记忆(用于存储过去的经验和知识,以便在未来任务中复用)。
记忆类型 对应概念 特点
短期记忆 Context 窗口 当前对话内容,关闭即消失
长期记忆 外部向量数据库 持久保存,需要检索调取
  • 工具使用 (Tool Use) :这是 Agent 和普通 LLM 最大的区别。Agent可以被赋予使用各种外部工具的能力,例如搜索引擎、计算器、代码解释器、API接口等。这使得Agent能够获取LLM本身不具备的信息或执行LLM无法完成的操作。

  • 感知 (Perception) :虽然目前主要基于文本,但后续的Agent可能会拥有更丰富的感知能力,例如处理图像、音频等多模态信息。

Agent与LLM

Agent的核心通常是LLM,但两者之间存在关键区别:

特征 大型语言模型 (LLM) 智能体 (Agent)
主要功能 理解和生成文本 感知、思考、规划并采取行动以实现目标
交互方式 通常是被动响应用户输入 主动与环境交互,执行任务
决策能力 有限的决策能力,主要基于模式匹配和概率生成 具有更强的决策和规划能力,能够自主选择行动路径
工具使用 本身不直接使用外部工具(除非通过RAG等方式间接实现) 可以主动调用和使用各种外部工具
目标导向 目标是生成连贯相关的文本 目标是完成用户指定的复杂任务或实现特定目标
自主性 较低 更高,可以在一定程度上自主行动

简单来说,LLM更像是一个强大的语言处理引擎,而Agent则是一个更完整的、具有自主行动能力的系统。

Agent 的工作循环

以一个示例来看Agent 的工作循环

任务:帮我规划一个去东京的三天旅行

erlang 复制代码
【第一轮】
思考:需要了解东京的景点、天气、交通
行动:调用搜索工具,搜索"东京热门景点"
观察:拿到搜索结果

【第二轮】
思考:需要知道出行时间的天气
行动:调用天气 API,查询目标日期东京天气
观察:天气晴朗,适合户外活动

......

【第多轮】
思考:信息足够了,开始生成行程
行动:调用 LLM,整合所有信息生成三天行程
观察:行程草稿生成

【输出】
整理后的三天东京旅行计划

LLM 作为Agent 大脑,始终是"决策者",而工具是"执行者",过程中记忆保存着每一步的结果供下一步使用。

多智能体(Multi-Agent)

单个 Agent 有能力上限,对于更复杂的任务,可以让多个 Agent 协作:

AI Agent 的核心在于将 LLM 的认知能力与工具调用能力深度耦合,通过感知---规划---行动的闭环实现复杂任务的自动化处理。 FME

多 Agent 系统就像一个公司:

markdown 复制代码
协调者 Agent(CEO)
    ├── 搜索 Agent    →  负责信息收集
    ├── 分析 Agent    →  负责数据处理
    ├── 写作 Agent    →  负责生成报告
    └── 审核 Agent    →  负责检查输出质量

每个 Agent 专注自己的领域,协调者负责分配任务和整合结果。

相关推荐
德莱厄斯2 小时前
比阿里开源的 page-agent 更强?AutoPilot: 网页内置一个真正能"稳定跑完"的智能体
前端·agent·浏览器
NikoAI编程3 小时前
0 行手写代码,百万行产品:OpenAI 的 AI 原生开发到底怎么玩的?
openai·ai编程
前端付豪3 小时前
AI Math Tutor v3:题目知识点自动分类
前端·python·llm
bryant_meng3 小时前
【AIGC】《A Quick 80-Minute Guide to Large Language Models》
人工智能·计算机视觉·语言模型·llm·aigc
码路飞3 小时前
SWE-bench 都 80% 了,AI 真能修 Bug?我拿 3 个真实场景测了 5 个
llm·claude
东邪狂想3 小时前
LangChain LCEL详解
agent
深瞳智检3 小时前
lesson-01 NLP 概述学习笔记 & 学习心得
人工智能·笔记·学习·自然语言处理·llm·大语言模型
qingni3 小时前
突破IDE局限:我开源了一款本地 AI 任务编排引擎,让多 Agent 与原生 CLI 无缝接力!
agent
极客密码3 小时前
养龙虾(OpenClaw)Tokens用不起???Codex Team这套方案是真无敌~
openai·ai编程·cursor