总结
- LLM 的输入是模型能看到的文本上下文,
- LLM 的输出是模型一个 Token 一个 Token 生成的回答,
- LLM 的缓存是为了复用已计算内容、加速生成和降低成本而保存的中间结果
1. LLM 输入是什么?
LLM 输入就是模型在回答前能看到的内容。 它不只是用户当前说的一句话,还可能包括很多部分:输入通常包括哪些?
1. 用户问题
也就是你真正问模型的话:2. 系统提示词
系统提示词通常用于规定模型的身份、风格和边界,比如:3. 历史对话
如果是多轮聊天,模型需要看到前面的对话,才能理解上下文。 例如:4. 工具或外部信息
有些 LLM 应用会把搜索结果、数据库内容、文档片段也塞进输入里。 例如:2. 输入会被变成 Token
LLM 不直接处理文字,而是先把文字切成 Token。 比如:3. 什么是上下文窗口?
LLM 能看到的输入不是无限长的,而是有长度限制,叫 上下文窗口。 比如一个模型支持:- 超过限制,直接报错
- 系统自动截断较早内容
- 模型忘掉很久以前的对话
- 需要做摘要或检索来压缩上下文
4. LLM 输出是什么?
LLM 输出就是模型生成的回答。 例如你输入:模型不是一次性写完整答案
LLM 通常是这样生成的:根据当前已经看到的内容,预测下一个最可能的 Token。然后把新生成的 Token 加回上下文,再继续预测下一个。
5. 输出也有长度限制
输出通常也有最大长度限制,例如:6. 什么是 LLM 缓存?
LLM 里的“缓存”可以有几种意思,最常见的是:- KV Cache
- Prompt Cache / 前缀缓存
- 应用层缓存
避免重复计算,提高速度,降低成本。这里主要讲述KV Cache
7. KV Cache 是什么?
KV Cache 是 Transformer 推理时最重要的一种缓存。 在生成回答时,模型需要不断参考前面已经出现过的 Token。 如果每生成一个新 Token,都把前面所有内容重新计算一遍,会非常浪费。 所以模型会把前面 Token 的一些中间计算结果保存起来,这些中间结果通常叫:用类比理解 KV Cache
假设模型已经读过一句话:KV Cache 的作用
KV Cache 主要带来几个好处:- 生成速度更快
- 避免重复计算
- 长文本生成时尤其重要
- 会占用显存/内存
- 上下文越长,缓存越大
- 并发用户越多,缓存压力越大
8. 输入、输出、缓存之间的关系
可以用一个简化流程表示:9. 一个简单比喻
可以把 LLM 想象成一个学生在做阅读理解。输入
老师给学生看的材料:输出
学生写下来的答案:缓存
学生边读边做的笔记:11. 常见误区
误区一:LLM 真的“永久记住”了所有聊天内容?
通常不是。 在一次对话里,历史消息会作为输入再次发给模型。模型看起来像记得,是因为系统把历史对话放进了上下文。 如果历史内容没有被传进去,模型通常就不知道了。
误区二:缓存等于记忆?
不完全是。 KV Cache 主要是推理过程中的临时缓存,通常只在当前请求或当前会话生成过程中有效。 它不是长期记忆。 长期记忆一般需要额外系统支持,比如:- 数据库
- 向量库
- 用户画像
- 历史摘要
- RAG 检索系统
误区三:输入越长越好?
不一定。 输入太长会带来:- 成本更高
- 延迟更高
- 重要信息被淹没
- 可能超过上下文窗口
- 模型注意力被无关内容分散