871 字
约 2 分钟
8
S20-J02 · 上下文与记忆:token 预算与管理

适用读者:被"上下文爆了"或"聊到后面忘了前面"困扰的人。
前置:S20-B01。
实测环境:tiktoken(cl100k_base),2026-11-05。
覆盖旧文:231(140) 656(138) 292(48) 743(161) = 487 点。
覆盖扩展:E-S20-013(记忆系统的三种范围)。
上一篇:S20-J01 · 评估:离线指标、在线 A/B 与失败模式
下一篇:S20-J03 · Agent。


1. 一句话结论

上下文是"预算"不是"容器":中文的 token 效率远低于英文(实测 0.94 字符/token vs 5.12),所以同样字数下中文更贵。

实测(cl100k_base 分词):

样本 字符 token 字符/token
中文 122 130 0.94
英文 210 41 5.12
代码 57 23 2.48

读法:1 个汉字 ≈ 1.06 个 token,而英文约 5 个字符 1 个 token——同样"看字数"的预算,中文消耗是英文的 5 倍以上。


2. 预算怎么分(E-S20-013)

总窗口 W
 ├─ 系统提示词        ~10%
 ├─ 检索片段(RAG)   ~40~60%
 ├─ 对话历史          ~20~30%
 └─ 输出预留          ~20%(必须留!)

"为什么必须给输出留预算":输入 + 输出共享窗口——输入塞满,输出会被截断(表现为回答戛然而止)。

判据:"我的输入占了窗口多少?" 超过 80% → 迟早出事。


3. 记忆的三种范围

范围 内容 实现
瞬时(本轮) 当前对话 直接放窗口
会话(跨轮) 摘要 + 关键事实 滑动窗口/摘要压缩
长期(跨会话) 用户偏好/历史决策 外部存储 + 检索(与 RAG 同构)

"为什么不能全放窗口":成本与注意力都会被稀释——这正好对应 S19-B03 的"上下文越长越不聚焦"。


4. 四种上下文管理策略

策略 说明 代价
滑动窗口 只留最近 N 轮 早期信息丢失
摘要压缩 把旧对话总结成一段 细节丢失、需额外调用
关键事实抽取 抽出事实存外部 实现复杂
分层记忆(MemGPT 类) 分页/换入换出 工程复杂

判据:"丢失早期细节会怎样?" 会(多轮任务)→ 摘要 + 事实抽取;不会 → 滑动窗口足够。


5. 五个误区

误区 真相
"字数≈token 数" 中文约 1 字符 1 token,英文约 1/5
"窗口大就不用管预算" 成本与注意力仍受限
"输出不用预留" 会被截断
"历史全留着更准确" 噪声与成本上升
"记忆=向量库" 会话记忆常是结构化存储

6. 自检

  1. 实测中英文的字符/token 差异?
  2. 预算的四个部分与比例?
  3. 为什么必须给输出留预算?
  4. 三种记忆范围分别存什么?
  5. 四种管理策略怎么选?

7. 下一篇

S20-J03 · Agent:Function Calling 与工作流

记忆讲完,下一篇讲"让模型动手":工具调用与循环终止。


本篇属于系列《S20 · AI 应用与工程》。旧文来源:A-231/656/292/743;扩展点 E-S20-013。token 数据为 tiktoken(cl100k_base) 实测。

S20-J02 · 上下文与记忆:token 预算与管理
https://www.clxhxhhr.top/posts/5469/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。