大语言模型原理:一文读懂 GPT 与 Claude 的核心工作机制

一、为什么你需要理解 AI 的工作原理
在我开始讲技术原理之前,想先回答一个你可能已经有的疑问:“我只是想用 AI 帮我写代码,为什么还要学它的原理?这又不是必修课。”
没错,即使完全不了解大语言模型(Large Language Model,简称 LLM)的工作原理,你也能使用 AI 编程工具。就像你不懂内燃机原理也能开车一样。
但如果你想更好地使用它——理解它的局限、预判它的行为、编写更有效的 Prompt、在它出错时快速定位原因——那了解原理就变得非常重要。
用一个类比来理解这件事:你不需要知道 TCP/IP 协议的全部细节才能上网,但如果你知道 HTTP 是无状态的、知道 GET 和 POST 的区别、知道什么是 Cookie——你就能写出更好的 Web 应用。
同样,你不需要能从头训练一个 LLM,但如果你理解 Token 是什么、上下文窗口有什么限制、模型是如何"学习"代码模式的——你就能更高效地使用 AI 编程工具。
本章的目标是给你一个开发者友好的大语言模型原理概述。我会避免过多的数学公式,而是用你能理解的类比和代码示例来解释关键概念。
二、大语言模型的发展简史
在深入当前主流模型之前,让我们快速回顾一下大语言模型是如何走到今天的。理解演进路径能帮你更好地理解为什么现在的模型是这样工作的。
2.1 从规则到统计:NLP 的早期时代
在深度学习兴起之前(2010年以前),自然语言处理(NLP)主要依赖于规则和统计方法。
基于规则的系统就像这样:
# 一个简单的规则时代码生成器
def generate_response(user_input):
if "你好" in user_input:
return "你好!有什么可以帮助你的吗?"
elif "天气" in user_input:
return "今天天气不错!"
elif "再见" in user_input:
return "再见,祝你愉快!"
else:
return "我不太理解你的意思。"
这种方式的问题显而易见:规则需要人工编写,覆盖面有限,无法应对开放式的语言变化。
后来出现了统计方法(如 n-gram 模型),它们通过统计词频来预测下一个词:
# 统计方式的简化示意
# 如果训练数据中"你好"后面80%跟"世界",15%跟"朋友"
# 那么当输入"你好"时,模型预测下一个词是"世界"的概率最高
这些方法的共同问题是:无法捕捉长距离的语义依赖。当一句话超过十几个词时,模型就开始"忘记"前面说了什么。
2.2 RNN 和 LSTM:序列建模的尝试
2010年代,循环神经网络(RNN)和长短期记忆网络(LSTM)被广泛应用于 NLP 任务。它们的核心思想是用一个"隐藏状态"来存储历史信息,就像人类的短期记忆一样。
输入序列: w1 → w2 → w3 → w4 → …
隐藏状态: h1 → h2 → h3 → h4 → …
LSTM 通过"遗忘门"、“输入门”、"输出门"的机制,可以选择性地记住或遗忘信息,解决了普通 RNN 难以处理长序列的问题。
但是 LSTM 有一个致命弱点:无法并行计算。因为每个隐藏状态都依赖前一个状态,所以计算是串行的——当序列长度为 1000 时,必须算完第 1 个才能算第 2 个,依此类推。这严重限制了训练速度和可以处理的序列长度。
2.3 Transformer 的诞生:改变一切的论文
2017年,Google 的研究团队发表了一篇名为《Attention Is All You Need》的论文。这篇论文提出了一种全新的架构——Transformer,它彻底改变了 NLP 领域,也是我们今天使用的大语言模型的基础架构。
Transformer 的核心创新是什么?它用 Self-Attention(自注意力) 机制替代了 RNN 的序列处理方式。这意味着:
- ✅ 所有位置的词可以同时处理——大幅提升训练速度
- ✅ 每个词可以直接"关注"序列中的任何其他词——解决了长距离依赖问题
- ✅ 可以轻松扩展到更大的模型和更多的数据
在 Transformer 出现之后,模型规模开始爆发式增长:
- 2018年:BERT(3.4亿参数)、GPT-1(1.17亿参数)
- 2019年:GPT-2(15亿参数)
- 2020年:GPT-3(1750亿参数)
- 2022年:ChatGPT(基于GPT-3.5)
- 2023年:GPT-4(参数数量未公开,估计超过1万亿)、Claude 2
- 2024年:Claude 3系列、GPT-4 Turbo、多种开源模型
💡 关键理解:从2017年的Transformer到今天的GPT-4和Claude 3,基础架构的变化其实不大。真正的变化在于三点:更多的数据、更多的参数、更好的训练方法。这被称为"规模定律"(Scaling Law)——在同样的架构下,增加数据和参数规模会持续带来性能提升。
三、Transformer 架构核心概念
虽然你不需要理解 Transformer 的每一个数学细节,但掌握几个核心概念能让你更好地理解模型的行为。
3.1 Self-Attention:每个词都"看到"其他所有词
Self-Attention 是 Transformer 的灵魂。它的核心思想简单而强大:在处理一个词时,同时考虑句子中所有其他词的信息。
让我们用一个代码相关的例子来理解。
假设有这样一段代码评论:
"更新用户密码时需验证旧密码"
人类在理解这句话时,会自然地将"验证"和"旧密码"关联起来。但传统的序列模型可能需要经过"更新→用户→密码→时→需→验证"才能建立"更新"和"验证"之间的联系。当序列更长时,这种信息传递变得越来越困难。
Self-Attention 的机制是:对于句子中的每个词,计算它与其他所有词的"注意力分数"(attention score)——也就是相关性权重。
用伪代码来表示:
# Self-Attention 的简化示意
def self_attention(sentence):
# 将每个词转换为向量表示
embeddings = [embed(word) for word in sentence]
# 对每个词,计算它与所有其他词的注意力分数
for i, word_i in enumerate(sentence):
attention_scores = []
for j, word_j in enumerate(sentence):
# 计算词i和词j的相关性
score = dot_product(embeddings[i], embeddings[j])
attention_scores.append(score)
# 用softmax归一化,使得所有权重之和为1
weights = softmax(attention_scores)
# 用权重加权组合所有词的信息
context_vector = sum(weights[k] * embeddings[k] for k in range(len(sentence)))
# context_vector 就是"考虑到上下文"后的词i的表示
通过这个机制,“验证"这个词的输出不仅包含它自己的信息,还融合了"密码”、"旧"等信息——因为 Self-Attention 发现它们之间有很强的相关性。
3.2 Multi-Head Attention:从多个角度"理解"
如果只有一种 Attention,模型可能只捕捉到一种类型的关系(比如语法关系)。Multi-Head Attention 的 idea 是:用多个不同的"注意力头",从不同角度理解文本。
还是用代码来类比:
# 单头注意力的视角
# "只关注语法结构"
head_1: "function" → 关注 "return", "parameters"
# 多头注意力的多个视角
head_1: "function" → 关注 "return", "parameters" (语法角度)
head_2: "function" → 关注 "purpose", "description" (语义角度)
head_3: "function" → 关注 "input", "output" (数据流角度)
head_4: "function" → 关注 "error", "edge case" (鲁棒性角度)
把这些不同的"注意力头"的输出拼接在一起,模型就得到了一个丰富的、多维度的理解。这就是为什么大语言模型能同时关注代码的语法正确性、逻辑合理性、风格规范性和安全考量——因为它有多组注意力头在同时工作。
3.3 位置编码:Transformer 如何"知道顺序"
你可能注意到了一个问题:Self-Attention 是对称的——词A关注词B的权重和词B关注词A的权重是一样的。这意味着 Transformer 本身无法区分"我爱你"和"你爱我"。
这就是位置编码(Positional Encoding)发挥作用的地方。它给每个位置的词加上一个独特的位置信号,让模型知道词在序列中的位置。
原始嵌入:[0.2, 0.5, …] (词义信息)
位置编码:[0.1, 0.3, …] (位置信息)
最终输入:[0.3, 0.8, …] (词义 + 位置)
对于编程来说,位置编码非常重要——它帮助模型区分 const result = a – b 和 const result = b – a。
3.4 编码器-解码器架构(Encoder-Decoder)
原始 Transformer 论文提出了编码器-解码器架构:
- 编码器(Encoder):读取输入文本,生成一个"理解表示"
- 解码器(Decoder):基于这个表示,逐个生成输出 Token
但有趣的是,GPT 系列模型只用了解码器部分——因为它的任务就是"给定前面的词,生成下一个词"。这种架构叫做"自回归生成"。
而 BERT 只用编码器——因为它的任务是"理解输入文本"(如分类、问答)。
四、训练三阶段:从原始文本到对话助手
大语言模型的训练通常分为三个阶段,理解这三个阶段能帮你理解模型为什么会有某些行为。
4.1 阶段一:预训练(Pre-training)——“读完整个互联网”
预训练是大语言模型训练的第一阶段,也是最耗时、最昂贵的一步。在这个阶段,模型在海量的文本数据上进行训练,学习语言的统计规律。
训练数据包括:
- 网页文本(如 Common Crawl 数据集)
- 书籍和文章
- 代码仓库(如 GitHub 公开仓库)
- 维基百科等知识库
- 论坛和问答网站(如 Reddit、Stack Overflow)
训练的任务叫做 Next Token Prediction(下一个词预测)——给模型一段文本的前半部分,让它预测下一个词是什么。
输入: "The capital of France is"
目标: "Paris"
输入: "import React from"
目标: "react"
通过在上万亿个这样的例子上训练,模型学到了:
- 自然语言的语法和语义规律
- 编程语言的语法和使用模式
- 各类知识(因为训练数据中包含了维基百科等知识来源)
- 推理能力(因为训练数据中有很多"因为…所以…"的推理链)
💡 核心洞察:预训练阶段的模型还不是一个"助手"——它只是一个"续写机器"。你给它开头,它继续往下写。它不会"回答问题",只会"完成文本"。让它变成"助手"的是接下来的微调阶段。
4.2 阶段二:监督微调(Supervised Fine-Tuning,SFT)——“教模型如何对话”
预训练完成后,模型虽然掌握了大量知识,但还不会"对话"。如果你问它"What is JavaScript?“,它可能会续写成"What is JavaScript? It is a programming language that… This is a common question among… In this article, we will…”——因为它只是在续写一本"想象中的问答文章"。
为了将模型转化为"助手",开发者会收集大量高质量的指令-回答对,然后在这些数据上微调模型。
指令数据示例:
指令:"用 JavaScript 写一个函数,检查字符串是否为回文"
回答:"function isPalindrome(str) {
const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
return cleaned === cleaned.split('').reverse().join('');
}
这个函数先清洗输入(转小写、去除非字母数字字符),
然后比较清洗后的字符串与它的反转版本。"
通过大量这样的训练(通常有数十万到数百万对),模型学会了"当收到这样的指令时,应该给出这样的回答"。
4.3 阶段三:RLHF(基于人类反馈的强化学习)——“让模型符合人类偏好”
即使经过 SFT,模型的行为还是有一些问题:
- 可能生成不安全的建议
- 可能产生"幻觉"(编造不存在的信息)
- 回答风格可能不够友好
- 可能过于啰嗦或不够直接
RLHF 解决了这些问题。它的流程是:
1. 收集偏好数据
– 让模型对同一个问题生成多个回答
– 人类评审员对回答进行打分或排序
– 选出"更好的"和"更差的"回答
2. 训练奖励模型
– 用评分数据训练一个小模型来预测"人类会给一个回答打多少分"
– 这个奖励模型学会了模拟人类的偏好
3. 强化学习训练
– 用奖励模型来指导大语言模型的进一步训练
– 模型学会了生成"更符合人类偏好"的回答
Claude 在这方面有一个独特的创新——Constitutional AI(宪法式AI)。Anthropic 不是仅仅依赖人类评审员的打分,而是制定了 AI 行为准则(Constitution),让 AI 根据这些准则自我评估和改进输出。这使得 Claude 在安全性和有益性方面表现出色。
五、GPT 系列的工作机制
5.1 GPT 的核心哲学:规模即一切
OpenAI 的 GPT 系列有一个贯穿始终的信念:更大的模型 + 更多的数据 = 更好的性能。从 GPT-1 到 GPT-4,这个信念几乎没有改变。
GPT 系列使用的是Decoder-Only Transformer架构。这意味着:
5.2 Next Token Prediction 的生成过程
当 GPT 生成代码时,过程是这样的:
# GPT 生成过程的简化模拟
def gpt_generate(prompt, model, max_tokens=100):
tokens = tokenize(prompt) # 将 Prompt 转为 Token 序列
generated = []
for i in range(max_tokens):
# 1. 将当前 Token 序列输入模型
logits = model.forward(tokens + generated)
# 2. 获取最后一个位置的预测结果
next_token_logits = logits[–1]
# 3. 通过 softmax 获得概率分布
probabilities = softmax(next_token_logits)
# 4. 采样选择下一个 Token
next_token = sample(probabilities, temperature=0.7)
generated.append(next_token)
# 5. 如果生成结束符,停止
if next_token == END_TOKEN:
break
return detokenize(generated)
这里有几个重要的细节:
📝 自回归属性:每一步生成都依赖于前面所有已生成的 Token。这意味着如果第5步出了一个错误,后续的所有 Token 都会受到影响。
📝 Temperature(温度):控制生成的"随机性"。温度越低(接近0),生成越"确定"——模型总是选概率最高的 Token。温度越高(接近1),生成越"有创意"——模型可能选不那么常见但有趣的 Token。
# 不同温度值的影响
# temperature = 0.1(确定性高,适合代码生成)
"写一个排序算法" → 几乎总是生成相同的归并排序实现
# temperature = 0.8(创意性高,适合头脑风暴)
"写一个排序算法" → 有时是快速排序,有时是冒泡排序,有时是睡眠排序
📝 Top-K 和 Top-P 采样:Top-K 只从概率最高的 K 个候选词中采样。Top-P 只从累积概率超过 P 的候选词中采样。这些策略用于在"确定性"和"多样性"之间取得平衡。
六、Claude 的工作机制与独特之处
Claude 由 Anthropic 公司开发,在底层同样基于 Transformer 架构。但 Claude 有几个与 GPT 显著不同的设计理念。
6.1 Constitutional AI
Claude 最核心的差异化优势在于其训练方法——Constitutional AI。传统 RLHF 依赖大量人工标注员来评估和排序模型输出,成本高且质量难以保持一致。Constitutional AI 用一套明确的"宪法"原则来指导训练:
# Constitutional AI 的简化示意
宪法原则示例:
1. 选择最有帮助、最诚实的回答
2. 如果用户请求可能造成伤害,委婉拒绝
3. 承认不确定性,不编造事实
4. 尊重用户隐私和知识产权
…
训练过程:
① 模型生成多个回答
② 模型自己根据宪法评估这些回答
③ 选择最符合宪法的回答
④ 用选出的回答做进一步训练
这种方法的好处是:模型的行为更加一致、可预测,而且减少了对人工标注的依赖。
6.2 超长上下文窗口
Claude 3 系列模型提供高达 200K Token 的上下文窗口(Claude 3 Opus)。这意味着什么?让我们做一个直观的对比:
| GPT-3.5 | 4K-16K | 一篇短文 |
| GPT-4 | 8K-128K | 一部中篇小说 |
| Claude 3 Sonnet | 200K | 300页的书 |
| Claude 3 Opus | 200K | 一个中等代码库的全部文件 |
对于编程场景,这极其有价值。你可以将整个项目的代码、相关文档、API 规范一次性放入上下文窗口,Claude 可以同时"看到"所有这些文件,进行跨文件的分析和修改。
6.3 对代码的特殊优化
Anthropic 在 Claude 的训练数据中包含了大量的代码数据,并在后训练阶段特别关注了编程相关的指令。这使得 Claude 在以下方面表现出色:
- 跨文件代码理解和修改
- 长代码的准确生成
- 代码审查和安全分析
- 技术文档的生成
七、GPT 与 Claude 在编程场景下的核心差异
下面这张表总结了两者在编程场景下的关键差异:
| 上下文窗口 | 128K | 200K |
| 代码生成质量 | 优秀,风格全面 | 优秀,代码可读性强 |
| 长代码一致性 | 好,但有时会"遗忘" | 很好,大上下文利用率高 |
| 代码解释能力 | 好 | 非常好(深度解释) |
| 多文件理解 | 良好 | 优秀(可一次性处理整个项目) |
| 安全性 | 良好 | 优秀(Constitutional AI) |
| 工具调用/Agent | API支持完整 | Claude Code 支持 |
| 价格 | 相对较高 | 中等,性价比好 |
| 速度 | 快(Turbo) | 中等偏快(Sonnet) |
💡 选择建议:
- 如果你需要处理大型代码库、做跨文件重构 → Claude 的 200K 上下文有巨大优势
- 如果你需要最快的代码生成速度 → GPT-4 Turbo 更快
- 如果你关注意安全性和合规性 → Claude 的 Constitutional AI 更可靠
- 如果你在开发 Agent 应用 → 两者都有很好的 API 支持
八、如何利用模型特性优化编程效率
理解这些原理后,你可以更有策略地使用 AI 编程工具。
8.1 利用上下文窗口的"近因效应"
模型对靠近末尾的内容"注意"得更多。这意味着:
- 把最重要的指令放在 Prompt 的最后部分
- 在长对话中,周期性地重申关键约束
- 将当前正在处理的文件放在上下文的末尾
8.2 利用模型的"续写"本质
由于基础模型(预训练后)本质上是"续写机器",一个有用的 Prompt 技巧是给出前半部分,让模型完成后半部分:
# 不好的写法(让模型"凭空"生成)
"写一个登录接口"
# 好的写法(给模型一个续写的起点)
"以下是一个 Express.js 登录接口的完整实现:
// POST /api/auth/login
// 接收 { username, password }
// 返回 { token, user }
// 使用 JWT 认证,bcrypt 密码加密
const express = require('express');
const router = express.Router();
router.post('/api/auth/login', async (req, res) => {"
注意第二种写法的结尾——路由函数定义已经开始了,这让模型自然地"续写"函数体中的代码。
8.3 利用 Temperature 控制代码质量
对于不同类型任务,你可以通过 API 参数(如果使用 API)或工具设置来控制生成的特性:
- 确定性任务(代码生成、Bug修复):使用较低的温度 → 更准确的代码
- 探索性任务(架构方案、技术选型):使用较高的温度 → 更多样化的建议
- 常规编程对话:使用默认温度 → 平衡准确性和灵活性
8.4 理解模型的"幻觉"机制
模型有时会"编造"不存在的 API 或不正确的信息。这其实不是"故障"——它是 Next Token Prediction 这种机制的内在特征。模型的目标是生成"看起来合理"的文本,而不是"100%准确"的文本。
应对策略:
- ✅ 对不熟悉的 API 名称,主动验证(查阅文档或实测)
- ✅ 对关键逻辑,自己理解每一步而不是盲目信任
- ✅ 使用多个来源交叉验证(AI + 搜索引擎 + 文档)
- ✅ 对安全相关代码,绝不依赖单一来源
九、总结
这篇文章覆盖了大语言模型的核心原理。我们不需要成为机器学习专家,但了解这些基础知识能让我们更聪明地使用 AI 编程工具。
关键在于:
- ✅ Transformer 的 Self-Attention 机制让模型能理解长距离的依赖关系
- ✅ 训练有三个阶段:预训练(学知识)→ 微调(学对话)→ RLHF(学对齐)
- ✅ GPT 擅长多样的编程任务,Claude 在长上下文和安全性方面有优势
- ✅ 模型本质上是"续写机器",这个特性既解释了它的能力也解释了它的局限
- ✅ 理解模型机制能帮我们写出更好的 Prompt、更高效地利用上下文
在后续的文章中,我们将实际应用这些原理——用正确的方式与 AI 对话,编写精确的 Prompt,让 AI 成为你真正的编程搭档。
下一篇:AI 编程工具全景图:GitHub Copilot、Claude、ChatGPT、Cursor 横向对比






