Context(上下文)是大语言模型(LLM)理解和生成文本的核心机制,它决定了模型在生成响应时能够参考的历史信息的范围。本教程将详细讲解Context的核心概念、组成结构、作用机制,以及Context Window(上下文窗口)的关键特性。
1. Token : Context的基础单位
1.1 什么是 Token?
Token 是LLM处理文本的基本单位,Context的大小以Token为单位计量。
| Token类型 | 示例 | 说明 |
|---|---|---|
| 完整单词 | hello、世界 |
常见的完整词汇 |
| 子词片段 | ##ing、##world |
稀有词、新词 |
| 单个字符 | a、! |
标点符号和特殊字符 |
1.2 Token 与字数的关系
| 语言 | 大致比例 | 说明 |
|---|---|---|
| 英文 | 1 Token ≈ 0.75 单词 | 一个单词通常拆分为1-2个Token,长单词可达3-4个;此比例为平均值,实际因单词长度而异 |
| 中文(现代主流模型) | 1 Token ≈ 1 个常用汉字 | 常用汉字(如"我""吃""饭")通常一字一Token |
| 中文(生僻字) | 1 Token ≈ 0.5 个生僻字 | 如"龘""爨"等罕见字可能拆为2-3个Token ,日常文本中极少出现,影响可忽略 |
| 混合文本 | 视具体内容而定 | 中英文混合、含数字/符号/URL时需分别计算 ,标点符号、空格、Emoji通常各占1个Token |
简单理解:每个英文单词大约是1.5个Token,汉字接近1个Token。
1.3 Token 对 Context 的影响
| 方面 | 说明 |
|---|---|
| Context计量 | 模型的上下文窗口以Token数量计算 |
| 成本计费 | 大多数LLM API按Token数量计费 |
| 处理效率 | Token越少,LLM处理速度越快 |
2. Context(上下文): LLM 的"记忆"
2.1 什么是 Context?
Context 指的是模型在生成响应时所参考的所有前文信息。它是模型理解当前输入、维持对话一致性的基础。
Context就相当于LLM的"短期记忆",帮助它理解对话背景和语境。
2.2 Context 的组成结构
在对话场景中,Context通常包含以下几个部分:
| 组成部分 | 说明 | 示例 |
|---|---|---|
| 系统提示词(System Prompt) | 定义模型角色和行为的指令 | "你是一个专业的编程助手,请用简洁的语言回答问题。" |
| 用户历史消息(User Messages) | 用户之前发送的所有消息 | "请解释什么是Python中的装饰器?" |
| 模型历史回复(Assistant Messages) | 模型之前生成的所有回复 | "Python装饰器是一种用于修改函数或类行为的语法结构..." |
| 当前用户消息(Current Message) | 用户当前的输入 | "请给我一个装饰器的示例代码。" |
2.3 Context 的作用
| 作用 | 说明 | 示例 |
|---|---|---|
| 理解语境 | 帮助模型理解当前对话的背景和上下文 | 用户说"那明天呢?",模型知道"那"指代北京的天气 |
| 维持一致性 | 确保多轮对话中回答的一致性 | 对话中模型始终使用"你"称呼用户 |
| 引用前文 | 允许模型引用之前提到的信息 | 用户提到"张三",后续对话中模型知道"他"指代张三 |
| 消除歧义 | 解决代词指代、一词多义等问题 | "苹果"可以指水果或公司,Context帮助模型确定正确含义 |
2.4 Context 的工作机制
自回归生成:
LLM采用自回归方式生成文本,每次只生成一个Token。在生成每个Token时,模型会根据整个Context(包括已生成的所有Token)来预测下一个最可能的Token。
输入:"北京今天天气怎么样?"
↓
模型生成:"今天北京天气"
↓
基于Context生成下一个Token:"晴"
↓
继续生成:"朗,气温25-32摄氏度。"
注意力机制:
Transformer架构中的注意力机制允许模型在生成每个Token时,关注Context中与当前Token相关的其他Token。例如,生成"它"时,模型会关注前文提到的名词(判定"它"是否代指"书"、"天气")。
2.5 Context 的局限性
| 局限 | 说明 | 影响 |
|---|---|---|
| 长度限制 | 受模型上下文窗口(后文展开)大小限制 | 长对话中早期信息可能被截断 |
| 遗忘问题 | 长对话中,早期信息可能被"遗忘" | 模型可能重复回答或前后矛盾 |
| 中间丢失 | 长文本中,模型可能忽略中间部分的信息 | 重要信息可能被遗漏 |
| 计算成本 | Context越长,推理成本越高 | 增加API费用和计算延迟 |
3. Context Window(上下文窗口): LLM 的"记忆容量"
3.1 什么是 Context Window?
Context Window 指的是模型能够处理的最大文本长度,通常以Token为单位。它决定了模型的"记忆容量"。
| 术语 | 说明 |
|---|---|
| 上下文窗口 | 模型单次能处理的最大Token数量 |
| 输入窗口 | 模型能接受的输入Token数量 |
| 输出窗口 | 模型能生成的输出Token数量 |
3.2 主流模型的上下文窗口
| 模型系列 | 典型窗口大小 | 说明 |
|---|---|---|
| Qwen 3.6系列 | 256K | 阿里云 |
| GLM-5.2系列 | 1M | 智谱AI |
| DeepSeek-V4-Flash | 1M | 深度求索 |
LLM版本更新极快,具体模型的上下文窗口请以各厂商最新公告为准。
3.3 上下文窗口的影响
| 影响方面 | 小窗口(如4K) | 大窗口(如128K+) |
|---|---|---|
| 适用场景 | 短对话、简单问答 | 长文档处理、代码分析 |
| 推理速度 | 快 | 较慢 |
| 计算成本 | 低 | 高 |
| 记忆能力 | 有限 | 强大 |
| 上下文保持 | 容易丢失早期信息 | 能保持更长对话一致性 |
上下文窗口越大越好吗?
不一定。大窗口虽然能处理更长的文本,但也会带来以下问题:
- 推理速度变慢
- 计算成本增加
- 可能出现模型忽略中间部分信息
选择合适的窗口大小取决于具体应用场景。
4. Context 的优化策略
4.1 Context 管理方法
| 方法 | 说明 | 适用场景 |
|---|---|---|
| 滑动窗口 | 只保留最近N轮对话 | 长对话场景(简单粗暴的常规办法) |
| 摘要压缩 | 对历史对话进行摘要 | 需要保留关键信息的场景(相对高级) |
| 关键信息提取 | 只保留与当前问题相关的信息 | 信息密集型对话 |
| 分层上下文 | 将Context分为短期和长期 | 需要长期记忆的场景(Memory管理) |
4.2 Context Engineering 上下文工程
Context Engineering 是一种通过设计和管理上下文来优化Agent性能的技术。它包括以下方面:
- 上下文管理:有效利用历史对话,避免丢失重要信息。
- 上下文增强:通过外部知识库或工具调用,补充模型上下文。
- 上下文优化:根据模型输出,动态调整上下文,提高响应质量。
这一部分内容我们会通过更深入的教程内容展开。
5. Context 在实际应用中的案例
场景:智能代码助手
用户:帮我分析这个Python函数的问题。
用户:[粘贴函数代码]
模型:这个函数存在以下问题:1. 缺少错误处理;2. 变量命名不规范;3. 没有文档字符串。
用户:请帮我修复这些问题。
模型:修复后的代码如下:
[修复后的代码]
Context管理:
- 代码作为Context的一部分
- 模型需要理解代码上下文
- 修复建议基于代码分析
6. 总结
6.1 核心内容回顾
经过本节内容的学习,你已经掌握了以下知识:
| 知识点 | 核心要点 | 掌握程度 |
|---|---|---|
| Token | LLM处理文本的基本单位,Context的计量基础 | 掌握 |
| Context | 模型生成响应时参考的前文信息,对话一致性的关键 | 掌握 |
| Context Window | 模型能处理的最大文本长度,以Token为单位 | 掌握 |
| Context组成 | 系统提示词、用户历史消息、模型历史回复、当前消息 | 掌握 |
6.2 常见问题与解答(FAQ)
问: Context 和 Prompt 有什么区别?
Prompt是用户输入给模型的文本指令,而Context是模型生成响应时参考的所有前文信息,包括Prompt、系统提示词和历史对话。可以理解为:Prompt是单次输入,Context是累积的上下文信息。
问: 为什么Context很重要?
Context是模型的"记忆",它帮助模型理解对话背景、维持回答一致性、引用前文信息、消除歧义。没有Context,模型只能处理孤立的句子,无法进行多轮对话或理解复杂任务。
举手提问