上下文管理(LLM/Agent):从“全量回灌”到“结构化记忆+按需检索”
围绕 OpenClaw + qmd/“省 Token”线索的可复现落地方案
LLM上下文管理:结构化记忆+检索降Token并核验存储
TL;DR
- 定义:这里的“上下文管理”指 LLM/Agent 的对话上下文、记忆与检索(非编程语言的上下文管理器)。
- 省 Token 的主杠杆:把“长对话历史、花哨 Markdown 格式、工具原始日志”从提示词里移出,改为“结构化状态摘要 + 按需检索证据”。
- “YAML 比 Markdown 省 75%”“省 1 亿 Token”更像个案/营销口径;必须用同一 tokenizer、同一任务集做 A/B 才能复现与评估。
- “永久记忆”必然落在文件/数据库/向量库/云端之一;先查清存哪里、是否上传、如何删除,再谈长期记忆。
Key Insights
- Token 成本常见来源:历史消息全量回灌、系统提示词重复、Markdown 标题/表格/代码块等装饰性字符、以及工具调用的大段原始输出。
- 结构化上下文(YAML/JSON)通常更“可压缩”:固定字段 + 短 key + 少自然语言,模型也更容易稳定解析。
- 长期记忆的核心不是“记得更多”,而是“检索得准、可纠错、可淘汰”。向量检索解决相关性,时间衰减/命中率与白名单字段解决噪声。
- 任何优化都需要评测闭环:至少准备 20–50 条代表性任务,比较正确率/幻觉率/延迟/成本,避免“省 token 但更不准”。
- 对策:只让模型看到“当前任务必需的信息”,其余内容外置并通过检索引用。
- 注意:YAML 也会因缩进、长字段名膨胀;要用真实内容测 token,不要只看体感。
Playbook
- 先做基线与可观测性:
- 设计“分层记忆”,替代“全量对话”:
- 把提示词改成 schema(可直接复制起步):
- 明确目标模型与窗口(8k/32k/128k 等),制定每轮输入/输出 token 预算。 - 记录 system、memory、retrieved_docs、history、tool_outputs 各部分 token;使用 tiktoken 或对应模型 tokenizer 统一口径计数。
- Working Memory:每轮更新的结构化状态(目标、约束、决策、待确认问题),控制在 10–30 行。 - Long-term Memory:稳定事实卡片(偏好、项目背景、账号信息等)+ 向量索引;支持版本、撤销与删除。 - 如果你在用 Obsidian:建议把事实卡片做成独立笔记(YAML front matter 存字段,正文存原文),检索时只取字段+必要片段。
context:
user_profile: <可选:职业/偏好>
goal: <本轮目标>
constraints: ['必须...', '禁止...']
decisions:
- id: D1
text: <已确认结论>
date: '2026-02-03'
open_questions:
- id: Q1
text: <待确认问题>
retrieval:
query: <本轮检索查询>
top_k: 5
output_requirements:
format: json
- 核验“永久记忆”到底存哪(以 OpenClaw/clawdbot 一类项目为例):
- 在项目目录与运行日志里搜索关键词:memory、persist、sqlite、db、chroma、qdrant、vector、index;检查 .env/config.yaml/启动参数。 - 若用 Docker:检查 volume 挂载与容器内数据目录,验证停容器/重启后数据是否仍在。 - 增加“查看当前记忆/清空记忆/导出记忆”的显式指令与权限开关,避免不透明导致误存与信任问题。
Diagrams
Options
- 方案 A:沿着“OpenClaw + qmd”路线做轻量上下文层
- 方案 B:主流 RAG 组件化(LangChain/LlamaIndex + 向量库)
- 方案 C:使用“记忆优先”的 Agent 框架(如 Letta/MemGPT 思路)
- 分支(另一种定义):如果你指的是编程语言里的“上下文管理器”(例如 Python
with)
- 先确认 OpenClaw、qmd、PageIndex 的准确含义(repo/版本/协议/是否与 Quarto .qmd 或其他格式相关);未核验前不要对外承诺节省比例。 - 实现要点:对话只回灌一份 memory.yaml/json + 少量检索片段;历史全文落盘但不进提示词。
- 滚动摘要(summary memory)+ 混合检索(BM25+向量)是最常见、可替换性强的组合;适合与你的 Obsidian/文档库对接。
- 适合长期陪伴、多任务并行;代价是更复杂的记忆治理、评测与隐私控制。
- 重点将转向资源生命周期(文件句柄/锁/事务)与异常安全;需要补充语言与使用场景后再单独调研。
Expert Views
- 开源数据工程师(paraphrase):优先用 SQLite/纯文本做事实源与版本管理,向量库只做索引层;可备份、可回滚比“更智能的记忆”更重要。
- LLM 应用架构师(paraphrase):把系统指令(安全边界)与用户记忆(事实/偏好/决策)彻底分离;记忆写入前要做去幻觉校验,避免把模型猜测当事实固化。
- 数据隐私与合规顾问(paraphrase):长期记忆属于持续数据处理,需要告知与最小化收集;必须提供删除/导出与保留期设置;若会上传云端或训练用途要额外授权。
- 产品经理(paraphrase):用户需要“可控与可解释”的记忆——展示记忆摘要、允许纠错与一键清空,才能把“永久记忆”从卖点变成信任资产。
Evidence & Confidence
- “结构化摘要 + 按需检索”能显著减少输入 token(confidence: medium):是常见工程实践,但效果取决于检索质量与摘要策略,需本地评测确认。
- “YAML/JSON 往往比花哨 Markdown 更省 token”(confidence: medium):在字段名短、去掉装饰性格式时通常成立;但若 YAML 冗长或包含大量解释性文本,优势会下降。
- “省 75% / 省 1 亿 Token”(confidence: low):来自转述链接与个体实测描述,缺少可复现的基准(模型版本、样本、计数方法、对照组)。
- “永久记忆一定有明确存储位置且可被检查/清理”(confidence: high):任何持久化都必然落在磁盘/数据库/云端之一,可通过代码与运行时文件系统验证。
Next Steps
- 先把线索落地成“可核验信息”:打开小红书/微信链接,提取 OpenClaw、qmd、PageIndex、clawdbot 的准确 repo/产品页、配置项与宣称点(截图/摘录关键段落)。
- 做一次最小 A/B:同一段项目背景分别用 Markdown 与 YAML/JSON 表达,用 tokenizer 计数输入 token,并记录模型在关键任务上的正确率差异。
- 追踪“记忆永存”链路:运行一次带长期记忆的会话后,定位新增文件/DB/网络请求,验证重启后是否仍存在、是否会上传、如何一键清空。
- 根据目标选架构:个人知识库优先“本地存储+可检索+可删除”;若要做产品,再补齐多用户隔离、权限、审计与合规说明。
Details (Optional)
Details
TL;DR
- 定义:这里的“上下文管理”指 LLM/Agent 的对话上下文、记忆与检索(非编程语言的上下文管理器)。
- 省 Token 的主杠杆:把“长对话历史、花哨 Markdown 格式、工具原始日志”从提示词里移出,改为“结构化状态摘要 + 按需检索证据”。
- “YAML 比 Markdown 省 75%”“省 1 亿 Token”更像个案/营销口径;必须用同一 tokenizer、同一任务集做 A/B 才能复现与评估。
- “永久记忆”必然落在文件/数据库/向量库/云端之一;先查清存哪里、是否上传、如何删除,再谈长期记忆。
Key Insights
- Token 成本常见来源:历史消息全量回灌、系统提示词重复、Markdown 标题/表格/代码块等装饰性字符、以及工具调用的大段原始输出。
- 结构化上下文(YAML/JSON)通常更“可压缩”:固定字段 + 短 key + 少自然语言,模型也更容易稳定解析。
- 长期记忆的核心不是“记得更多”,而是“检索得准、可纠错、可淘汰”。向量检索解决相关性,时间衰减/命中率与白名单字段解决噪声。
- 任何优化都需要评测闭环:至少准备 20–50 条代表性任务,比较正确率/幻觉率/延迟/成本,避免“省 token 但更不准”。
- 对策:只让模型看到“当前任务必需的信息”,其余内容外置并通过检索引用。
- 注意:YAML 也会因缩进、长字段名膨胀;要用真实内容测 token,不要只看体感。
Playbook
- 先做基线与可观测性:
- 设计“分层记忆”,替代“全量对话”:
- 把提示词改成 schema(可直接复制起步):
- 明确目标模型与窗口(8k/32k/128k 等),制定每轮输入/输出 token 预算。 - 记录 system、memory、retrieved_docs、history、tool_outputs 各部分 token;使用 tiktoken 或对应模型 tokenizer 统一口径计数。
- Working Memory:每轮更新的结构化状态(目标、约束、决策、待确认问题),控制在 10–30 行。 - Long-term Memory:稳定事实卡片(偏好、项目背景、账号信息等)+ 向量索引;支持版本、撤销与删除。 - 如果你在用 Obsidian:建议把事实卡片做成独立笔记(YAML front matter 存字段,正文存原文),检索时只取字段+必要片段。
context:
user_profile: <可选:职业/偏好>
goal: <本轮目标>
constraints: ['必须...', '禁止...']
decisions:
- id: D1
text: <已确认结论>
date: '2026-02-03'
open_questions:
- id: Q1
text: <待确认问题>
retrieval:
query: <本轮检索查询>
top_k: 5
output_requirements:
format: json
- 核验“永久记忆”到底存哪(以 OpenClaw/clawdbot 一类项目为例):
- 在项目目录与运行日志里搜索关键词:memory、persist、sqlite、db、chroma、qdrant、vector、index;检查 .env/config.yaml/启动参数。 - 若用 Docker:检查 volume 挂载与容器内数据目录,验证停容器/重启后数据是否仍在。 - 增加“查看当前记忆/清空记忆/导出记忆”的显式指令与权限开关,避免不透明导致误存与信任问题。
Expert Views
- 开源数据工程师(paraphrase):优先用 SQLite/纯文本做事实源与版本管理,向量库只做索引层;可备份、可回滚比“更智能的记忆”更重要。
- LLM 应用架构师(paraphrase):把系统指令(安全边界)与用户记忆(事实/偏好/决策)彻底分离;记忆写入前要做去幻觉校验,避免把模型猜测当事实固化。
- 数据隐私与合规顾问(paraphrase):长期记忆属于持续数据处理,需要告知与最小化收集;必须提供删除/导出与保留期设置;若会上传云端或训练用途要额外授权。
- 产品经理(paraphrase):用户需要“可控与可解释”的记忆——展示记忆摘要、允许纠错与一键清空,才能把“永久记忆”从卖点变成信任资产。
Options
- 方案 A:沿着“OpenClaw + qmd”路线做轻量上下文层
- 方案 B:主流 RAG 组件化(LangChain/LlamaIndex + 向量库)
- 方案 C:使用“记忆优先”的 Agent 框架(如 Letta/MemGPT 思路)
- 分支(另一种定义):如果你指的是编程语言里的“上下文管理器”(例如 Python
with)
- 先确认 OpenClaw、qmd、PageIndex 的准确含义(repo/版本/协议/是否与 Quarto .qmd 或其他格式相关);未核验前不要对外承诺节省比例。 - 实现要点:对话只回灌一份 memory.yaml/json + 少量检索片段;历史全文落盘但不进提示词。
- 滚动摘要(summary memory)+ 混合检索(BM25+向量)是最常见、可替换性强的组合;适合与你的 Obsidian/文档库对接。
- 适合长期陪伴、多任务并行;代价是更复杂的记忆治理、评测与隐私控制。
- 重点将转向资源生命周期(文件句柄/锁/事务)与异常安全;需要补充语言与使用场景后再单独调研。
Evidence & Confidence
- “结构化摘要 + 按需检索”能显著减少输入 token(confidence: medium):是常见工程实践,但效果取决于检索质量与摘要策略,需本地评测确认。
- “YAML/JSON 往往比花哨 Markdown 更省 token”(confidence: medium):在字段名短、去掉装饰性格式时通常成立;但若 YAML 冗长或包含大量解释性文本,优势会下降。
- “省 75% / 省 1 亿 Token”(confidence: low):来自转述链接与个体实测描述,缺少可复现的基准(模型版本、样本、计数方法、对照组)。
- “永久记忆一定有明确存储位置且可被检查/清理”(confidence: high):任何持久化都必然落在磁盘/数据库/云端之一,可通过代码与运行时文件系统验证。
Next Steps
- 先把线索落地成“可核验信息”:打开小红书/微信链接,提取 OpenClaw、qmd、PageIndex、clawdbot 的准确 repo/产品页、配置项与宣称点(截图/摘录关键段落)。
- 做一次最小 A/B:同一段项目背景分别用 Markdown 与 YAML/JSON 表达,用 tokenizer 计数输入 token,并记录模型在关键任务上的正确率差异。
- 追踪“记忆永存”链路:运行一次带长期记忆的会话后,定位新增文件/DB/网络请求,验证重启后是否仍存在、是否会上传、如何一键清空。
- 根据目标选架构:个人知识库优先“本地存储+可检索+可删除”;若要做产品,再补齐多用户隔离、权限、审计与合规说明。
Sources
- GitHub Issue(原始上下文):https://github.com/EOMZON/myObsidian/issues/35 (无法在线核验)
- 小红书短链(需自行打开核对原文):http://xhslink.com/o/89M43PCDYVt ,http://xhslink.com/o/9TfGQsxv5SC ,http://xhslink.com/o/4alY0euCR0v (均无法在线核验)
- 微信文章(clawdbot 记忆相关线索):https://mp.weixin.qq.com/s/NkAh0yh9vP073Kcu7SsInw (无法在线核验)
- 参考工具/文档(用于实现与测量,均需自行核对):https://github.com/openai/tiktoken ,https://github.com/langchain-ai/langchain ,https://github.com/run-llama/llama_index ,https://github.com/qdrant/qdrant ,https://github.com/chroma-core/chroma ,https://github.com/facebookresearch/faiss ,https://github.com/microsoft/LLMLingua (无法在线核验)
Sources
- GitHub Issue(原始上下文):https://github.com/EOMZON/myObsidian/issues/35 (无法在线核验)
- 小红书短链(需自行打开核对原文):http://xhslink.com/o/89M43PCDYVt ,http://xhslink.com/o/9TfGQsxv5SC ,http://xhslink.com/o/4alY0euCR0v (均无法在线核验)
- 微信文章(clawdbot 记忆相关线索):https://mp.weixin.qq.com/s/NkAh0yh9vP073Kcu7SsInw (无法在线核验)
- 参考工具/文档(用于实现与测量,均需自行核对):https://github.com/openai/tiktoken ,https://github.com/langchain-ai/langchain ,https://github.com/run-llama/llama_index ,https://github.com/qdrant/qdrant ,https://github.com/chroma-core/chroma ,https://github.com/facebookresearch/faiss ,https://github.com/microsoft/LLMLingua (无法在线核验)
Closing Summary
- 结论:LLM上下文管理:结构化记忆+检索降Token并核验存储
- 下一步:先确认 OpenClaw/qmd 的真实实现与记忆存储位置,再做 token 量化对比。
One next action
先确认 OpenClaw/qmd 的真实实现与记忆存储位置,再做 token 量化对比。