0Pricing
AI Agents · 课时

上下文窗口中的短期记忆

将对话历史存储在消息数组中——这是最简单的记忆形式,同时了解它为何存在严格限制。

上下文窗口中的短期记忆 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 上下文窗口中的短期记忆
  2. 长上下文为何无法扩展
  3. 将摘要作为压缩方式
  4. 简单记忆存储(键值)
← 返回 AI Agents