上下文窗口中的短期记忆
将对话历史存储在消息数组中——这是最简单的记忆形式,同时了解它为何存在严格限制。
上下文窗口中的短期记忆 是 CoddyKit 上的免费 AI Agents 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
记忆就是一个列表
聊天式 LLM 的“记忆”就是您每次调用时发送的 messages 列表。模型是无状态的,在请求之间不会记住任何内容。
“短期记忆”就是当前列表中的全部内容。
它为何有效
您会追加每条用户消息和每个助手响应。当您提出第三个问题时,模型看到的内容是:
messages = [
{'role': 'system', 'content': 'You are helpful.'},
{'role': 'user', 'content': 'My name is Alice.'},
{'role': 'assistant', 'content': 'Nice to meet you, Alice.'},
{'role': 'user', 'content': 'What is my name?'}
]
# Model replies: 'Alice'
for m in messages:
print(f"{m['role']}: {m['content']}")
print("Model replies: Alice")
上下文窗口限制
每个模型都有一个严格的上下文窗口,限制输入令牌数与输出令牌数的总和。
- gpt-4o-mini:128k 个令牌
- claude-sonnet-4-5:200k 个令牌
- gemini-1.5-pro:2M 个令牌
超过限制后,接口就会返回错误。
令牌成本是线性的
每一轮中的每个令牌都要付费。在一段 30 轮的聊天中,如果每轮包含 500 个令牌,那么仅最后一次调用就会产生 15,000 个输入令牌的费用,因为整个历史记录都会重新发送。
会话一长,成本就会迅速增加。
中间内容遗失
即使上下文达到 200k,模型对长提示词中间部分的关注也会更少。重要信息应放在开头(系统消息)或结尾(最近的用户消息)。
滑动窗口截断
最简单的记忆管理方式——保留系统消息和最近的 N 轮:
MAX_TURNS = 20 # 10 user + 10 assistant
def trim(messages):
system = messages[0]
rest = messages[1:]
return [system] + rest[-MAX_TURNS:]
demo_messages = [{'role': 'system', 'content': 'sys'}] + [
{'role': 'user' if i % 2 == 0 else 'assistant', 'content': f'msg {i}'} for i in range(30)
]
trimmed = trim(demo_messages)
print(f"Original messages: {len(demo_messages)}")
print(f"Trimmed messages: {len(trimmed)}")
基于令牌的裁剪
更精确的做法是:根据令牌数而不是轮数进行裁剪:
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o-mini')
def trim_by_tokens(messages, max_tokens=8000):
out = [messages[0]] # keep system
tokens_left = max_tokens - len(enc.encode(messages[0]['content']))
# walk backwards from newest
for m in reversed(messages[1:]):
cost = len(enc.encode(m['content'])) + 4
if cost > tokens_left:
break
out.insert(1, m)
tokens_left -= cost
return out保持成对
在成对内容的中间进行截断会留下孤立的工具调用。请始终将用户轮次和助手轮次一起裁剪:
# Bad: cuts after assistant call but before tool result
# Good: trim whole turns (user + all responses)
print("Bad: cuts after assistant call but before tool result")
print("Good: trim whole turns (user + all responses)")
短期记忆不足时
短期记忆会在以下情况下失效:
- 对话超过 20 轮
- 用户第二天回来并期待系统记得之前的内容
- 多个用户共享同一个智能体
您需要采用其他策略——请参阅接下来的课程。
系统提示词始终固定
系统消息必须始终是第一项。请勿裁剪它。它承载着身份、规则和工具说明。
固定最近的系统更新
如果您将“记住用户偏好摄氏度”追加为系统备注,请像原始系统提示词一样将其固定在最前面:
SYSTEM_PROMPT = 'You are a helpful assistant.'
messages = [
{'role': 'system', 'content': SYSTEM_PROMPT},
{'role': 'system', 'content': 'USER PREFERENCE: Celsius units'},
{'role': 'user', 'content': 'What is the weather in Paris?'},
{'role': 'assistant', 'content': 'It is 21C and sunny.'},
]
print('Pinned system messages:')
for m in messages:
if m['role'] == 'system':
print(' -', m['content'])
print('Total messages:', len(messages))
上下文限制
当您超出模型的上下文窗口时,会发生什么?
回顾
短期记忆 = 消息列表。请使用滑动窗口或基于令牌的裁剪来管理它,固定系统消息,并接受成本会随轮次增加而增长。
常见问题解答
「上下文窗口中的短期记忆」课时是免费的吗?
是的 — 「上下文窗口中的短期记忆」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「上下文窗口中的短期记忆」这节课中我会学到什么?
将对话历史存储在消息数组中——这是最简单的记忆形式,同时了解它为何存在严格限制。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「上下文窗口中的短期记忆」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 上下文窗口中的短期记忆
- 长上下文为何无法扩展
- 将摘要作为压缩方式
- 简单记忆存储(键值)