问题域/PD-01

上下文管理

Context Window Management

LLM 上下文窗口有限,长任务中如何保留关键信息、裁剪冗余内容、避免 token 超限崩溃。这不是一个"优化"问题,而是一个"生存"问题。

子问题

1.Token 估算:在调用 LLM 前精确估算当前 prompt 的 token 数

2.超限裁剪:按优先级裁剪内容(旧消息、工具结果、搜索素材)

3.摘要压缩:将长历史对话压缩为摘要,保留关键信息

4.滑动窗口:只保留最近 N 轮对话或最近 N 个工具结果

5.预算分配:为不同内容类型分配 token 预算

6.实时数据注入:每次会话前从外部数据源查询最新状态并填充 prompt 模板变量

7.多市场规则差异化注入:不同业务场景需要在 prompt 中注入不同的领域规则(如 A 股 T+1)

8.步数与信号双重终止:max_steps 硬限 + Agent 自主 STOP_SIGNAL 的协同终止策略

9.上下文边界自主管理:LLM 通过工具调用自主决定任务块的开始和结束,而非系统自动切割

10.归档摘要二级折叠:归档池本身超限时需要将多条归档合并为 meta-summary 防止前缀膨胀

11.感知差分注入:只在环境状态变化时注入感知信息,避免每轮重复相同的环境描述占用 token

12.历史查询按需加载:LLM 通过 REPL 查询接口按需搜索归档历史,无需全量加载到 prompt

13.裁剪通知机制:裁剪后注入系统消息告知 LLM 历史已丢失,防止 LLM 引用不存在的上下文

14.终端中间层截断:tmux/screen 等终端复用器对 send-keys 的字符数限制导致 prompt 被截断

15.多角色 Prompt 分层:编排器与 Worker Agent 需要不同结构的上下文,需要独立的生成路径

16.用户规则双源合并:内联配置与外部文件两种规则来源的合并与容错处理

17.工具 JSON Schema token 计算:将工具描述的 JSON Schema 也纳入 token 预算,遵循 OpenAI Cookbook 规则

18.记忆标记系统:用 Enum 标记消息状态(COMPRESSED/HINT),支持按标记过滤、排除、清理

19.压缩模型独立配置:为压缩任务选择成本效益最优的模型(如 GPT-3.5)而非主模型(如 GPT-4)

20.检索去重元数据持久化:压缩后保留已执行的搜索查询和已获取的文档 ID,防止 Agent 重复检索相同内容

21.动态压缩阈值自适应:摘要本身占用 token,固定阈值会导致摘要越长越频繁触发压缩的恶性循环

22.双层图上下文分治:外层会话摘要与内层检索压缩各自独立,避免不同粒度的上下文管理互相干扰

23.Observation 经济学量化:对比发现成本与读取成本,计算压缩 ROI 并展示给用户

24.Mode 继承与类型过滤:不同工作模式自动切换 observation 类型/概念过滤器

25.跨会话 transcript 恢复:从 JSONL transcript 反向提取先前 assistant 消息注入上下文

26.Observation 内容去重:基于 SHA256 哈希的 30 秒滑动窗口去重防止重复存储

27.经济意识注入:将 token 成本转化为 Agent 可感知的生存压力,引导自主控制输出长度

28.迭代预算提前提交:计算安全提交点并注入 prompt,避免 Agent 在最后一轮才提交导致超时

29.超限产物回收:迭代超限后通过独立工作流回收已生成但未提交的产物,避免浪费已消耗 token

30.工具消息修复链:压缩前需修复空 input、无效 ID、重复 block、乱序配对等 4 类 tool 消息缺陷

31.反向遍历截断:从最新消息开始逐条累加 token,超阈值时丢弃更早消息保证最新上下文完整

32.异步摘要双写:压缩摘要同时异步写入长期记忆库,实现会话内压缩与跨会话持久化的并行

33.Agent 自主压缩门控:compact 工具需要 50% 阈值门控防止过早压缩浪费 LLM 调用

34.链式摘要 cutoff 累加:多次摘要后有效列表与 state 列表的索引偏移需正确转换

35.摘要消息标记与过滤:链式摘要时需标记并过滤旧 summary 消息避免重复 offload

36.知识库外置持久化:将压缩后的摘要写入外部文件而非仅存内存,确保跨清除周期可用

37.读取拦截优化:对已实现文件的 read_file 调用重定向到摘要,避免重复读取原始文件消耗 token

38.事件驱动清除:以工具调用事件(如 write_file)而非 token 阈值作为清除触发条件

39.Agent 自主压缩决策:让 LLM 在输出中生成压缩指令,自主决定折叠哪些历史步骤

40.步骤级上下文重建:将压缩后的步骤列表重新格式化为结构化的 Previous Steps 文本

41.工具输出分片增量摘要:超长网页内容按 token 阈值分片,逐片增量提取 evidence 和 summary

42.双轨轨迹记录:同时维护压缩后的 messages 和完整的 full_trajectory 用于不同用途

43.工具输出压缩:将工具返回的大量原始数据压缩为结构化摘要,保留核心知识

44.Prompt 模板管理:通过外置配置文件系统化管理 system prompt,支持多语言切换

45.嵌入阶段文件过滤:根据文件类型设置差异化 token 阈值决定是否入库

46.RAG 上下文动态裁剪:根据输入大小决定是否执行检索以及检索结果是否注入 prompt

47.多提供商 tokenizer 选择:不同嵌入模型使用不同编码器,需运行时动态适配

48.记忆注入预算控制:跨会话记忆注入 system prompt 时的 token 预算精确控制与截断策略

49.去抖动记忆更新:多轮对话中记忆更新的去抖动批量处理,避免频繁 LLM 调用

50.中间件顺序依赖:压缩/修复/注入等中间件的执行顺序对正确性的影响

51.AI/Tool 消息对保护:压缩时不拆分工具调用与结果的配对关系

52.子 Agent 上下文隔离:通过架构设计避免子 Agent 内部对话污染主 Agent 上下文

53.摘要模型选择:为压缩任务选择成本效益最优的模型而非主模型

54.查询驱动预算分配:根据查询复杂度评分动态调整上下文预算比例

55.检索 ROI 量化:用 confidence_gain/lines_added 衡量每轮检索的成本效益

56.智能裁剪优先级:按来源类型×元素类型×相关度评分的多因子优先级裁剪超预算内容

57.压缩方向选择:根据场景决定保留最新消息(对话)还是最旧消息(任务上下文)

58.递归摘要收敛:超长文本需多轮滑动窗口摘要,需防止无限递归(MetaGPT 用 max_count=100 兜底)

59.ProviderChain 错误分类隔离:区分上下文溢出与可重试错误,避免无效 failover

60.压缩前记忆保存:在摘要替换历史前用隐藏 Agent 循环将重要信息持久化到文件

61.压缩安全性:使用结构化消息对象构建摘要 prompt,防止用户内容中的角色前缀注入

62.异常驱动 vs 预估驱动:不依赖 tokenizer 预估而是通过异常捕获触发截断的权衡

63.字符-token 粗估比例:token_limit * 4 作为字符上限的近似精度与适用范围

64.搜索结果预压缩:在工具层对原始网页内容做第一层 LLM 摘要减少下游 token 压力

65.累计预算追踪:跨多次 LLM 调用追踪总 token 消耗,而非仅检查单次请求

66.工具描述计入预算:将工具的 JSON Schema 描述也纳入 token 预算计算

67.六类记忆分类提取:从会话中按 profile/preferences/entities/events/cases/patterns 分类提取长期记忆

68.记忆合并决策:新提取记忆与已有记忆的 skip/create/merge/delete 四种处理策略

69.记忆语言检测:根据用户消息的 Unicode 范围自动检测语言,确保提取记忆与用户语言一致

70.归档摘要结构化:LLM 生成包含里程碑/意图/概念/错误/待办的 Markdown 结构化摘要

71.归档相关性检索:commit 后的归档通过关键词匹配 + 时间排序按需召回

72.多模态元素上下文:为图片/表格/公式等非文本元素提取周围文本作为 LLM 理解辅助

73.上下文粒度选择:根据文档类型选择页面级或块级上下文窗口

74.上下文配置热更新:运行时动态调整上下文参数并传播到所有处理组件

75.缓存前缀保护:压缩时保护消息前缀的字节一致性以维持 prompt caching 命中率

76.归档内容可追溯:被压缩的消息不丢弃而是归档为文件,Agent 可按需读取

77.元数据优先注入:上下文只注入文件/结果的元数据,LLM 按需通过工具读取全文

78.ToolMessage 二次截断:历史压缩后仍超预算时对工具输出内容做 head/tail 截断兜底

79.关键词驱动摘要提取:用中英文完成/总结关键词从内容末尾反向定位摘要段落

80.多供应商消息格式适配:同一压缩逻辑需为 Anthropic/OpenAI/Google 各实现一套检测和替换

81.视觉操作结果精细压缩:区分截图工具(全替换)和操作工具(保留文本移除media)的差异化处理

82.服务端 vs 客户端上下文管理:OpenAI previousResponseId 模式下客户端无需压缩的架构选择

83.DOM 无障碍树压缩:ariaTree 等大型结构化文本数据的独立保留策略(仅保留最新1份)

84.辩论历史双轨管理:共享 history 与角色独立 history 的同步维护

85.LLM 提供商占位消息兼容:不同 API 对空消息列表的差异化要求

86.报告字段提取时机:工具调用循环中仅在最终响应时提取报告内容

87.Tensor 级滚动窗口:在 GPU Tensor 上直接截断而非字符串操作,保持梯度计算图完整

88.批量轨迹停用:同一 batch 中不同样本轨迹长度差异大,需按样本级别停用超长轨迹

89.多模态 token 长度失真:vision token 展开后数量远超语义长度,需去重后再判断是否超限

90.GPU batch 对齐填充:多 GPU 推理要求 batch size 整除 GPU 数,需 dummy 序列填充和裁剪

91.Tier 分级压缩:根据关闭时间分级压缩(30 天 Tier1、90 天 Tier2),渐进式信息衰减

92.Agent 审查工作流:analyze 导出候选 → 人工/Agent 审查 → apply 应用摘要,关键任务可人工确认

93.压缩效果强制验证:摘要长度必须 < 原始长度,否则跳过并记录警告,防止无效压缩

94.Git 集成追踪:记录压缩时的 commit hash,支持版本控制和审计

95.批量并发控制:Semaphore 限流 + 独立错误处理,单个失败不影响其他

96.Mode 继承与深度合并:parent--override 模式配置的递归加载与 deepMerge 策略

97.Worktree 多项目上下文合并:git worktree 场景下父仓库与工作树 observation 的统一时间线

98.Timeline 按文件聚合:将散落的 observation 按修改文件分组,减少上下文碎片化

99.显示层截断与模型层完整的解耦:UI 折叠大文本但模型收到完整内容的双轨处理

100.上下文文件名多态配置:支持单文件名或文件名数组,适配不同项目约定

101.子目录记忆扫描限流:限制子目录扫描数量(默认 200)防止大型 monorepo 启动卡顿

102.分类摘要隔离:不同语义类别的记忆需要独立维护摘要,避免主题混杂导致信息丢失

103.CRUD 级增量 patch:单条记忆变更时用 before/after 差异判断是否需要更新摘要,避免全量重写

104.检索充分性提前终止:多层检索中每层后判断已有信息是否足够,避免不必要的深层检索消耗 token

105.引用追溯:摘要中嵌入 [ref:ITEM_ID] 引用,支持从压缩摘要反向定位原始记忆条目

106.推理模型 token 耗尽:reasoning 占用 >80% completion tokens 导致 content 为空,需检测并自动扩容重试

107.模型限制动态发现:中转平台可能施加额外限制,需从 API 错误中自动学习真实值并持久化

108.批处理双重约束:同时满足 input token 预算和 output token 预算的贪心分组策略

109.Lost-in-the-middle 防护:即使模型支持超长上下文,单批 input 也需 Hard Cap 防止注意力衰减

110.混合注意力 cache hit 对齐:同一模型中 FullAttention 和 SlidingWindow 层的 cache hit 长度需跨组对齐到 LCM

111.Speculative decoding block 回退:draft token 被拒绝后已分配的 block 需要安全回收而非立即释放

112.RLHF 权重更新后缓存失效:模型权重更新后所有 prefix cache 必须失效,需要原子性 reset 机制

113.分布式 KV 传输协调:P/D 分离架构中 prefill 节点和 decode 节点间的 KV block 异步传输与调度协调

114.Agent 角色定制压缩:为 Writer/Reviewer 等不同角色提供差异化的上下文视图

115.节点级 token 预算权重分配:按 Agent 重要性分配 token 预算比例

116.增量摘要与全量摘要切换:根据是否有历史摘要选择增量或全量 ReSum 策略

117.中间件透明注入:通过 wrap_node 包装使节点代码无需感知压缩逻辑

各项目的解法39 solutions

Signals

横向对比

维度MiroThinkerDeerFlowDeepResearchGPT-ResearcherAI-TraderAIRIAgentOrchestratorAgentScopeagentic-rag-for-dummiesClaudeMemClawWorkCoPawDeepAgentsDeepCodeDeepTutorDeepWikiFastCodeLightRAGMetaGPTMoltisOpenClawOpenOpenManusOpenVikingPageIndexRAG-AnythingReflyStagehandsystem-prompts-and-models-of-ai-toolsTradingAgentsVRAGbeadsclaude-memiflow-climemUmoyin-creatorseedance-2vLLMvibe-blog
估算方式tiktoken o200k_base 精确估算tokens/messages/fraction 三阈值AutoTokenizer 精确计数trim_context_to_word_limit 词数上限无 token 估算,依赖 max_steps 步数间接控制上下文增长字符数/4 粗估 token(brain.ts:1925),无精确 tokenizer无显式 token 估算,依赖 Agent 插件自身的上下文管理tiktoken 精确计数,支持 vision/tool tokenstiktoken cl100k_base 逐消息 encode,仅计算 content 字段字符数/4 常量估算,无 tokenizer 依赖无预估算,依赖 LLM 响应后的 usage_metadata 实时扣减Qwen2.5 HuggingFace tokenizer 精确编码,异常降级 len//4count_tokens_approximately 近似估算,支持 tools 参数计入tiktoken 精确计算 + 字符数/4 回退双轨四级降级:API响应 > tiktoken > litellm > 词数×1.3tiktoken 精确计数 + len//4 fallback,按 embedder_type 选编码器tiktoken 精确编码计数,模型自适应 + cl100k_base 回退tiktoken(OpenAI) + anthropic SDK(Claude) + 字符×0.5 fallback 三级适配不做预估,依赖 API 错误响应触发(9 种模式匹配)无预估,异常驱动:捕获 token 超限异常后才触发截断tiktoken 精确编码,含图片 tile 计算和工具描述计数len(content)//4 粗估 token,auto_commit_threshold=8000 触发归档tiktoken 按模型编码精确计算每页 tokenLightRAG tokenizer 精确 encode/decode,支持字符级 fallback双模:字符/3.5 快速估算 + Kitoken 精确计数 + 大文件中位数积分 O(1)无显式 token 估算,依赖滑动窗口固定保留数量控制无 token 估算,不计算当前 prompt 大小attention_mask.sum() 计算有效 token 数,image_pad 连续去重后计语义长度SQL CHAR_LENGTH 函数计算 4 字段总和字符数/4 简单估算,CHARS_PER_TOKEN_ESTIMATE=4 常量比例阈值(currentTokens/tokensLimit),默认 128K 窗口prompt 模板注入 target_length 硬约束,LLM 自行控制输出长度字符数/1.5 保守粗估,不引入 tiktoken,前端友好block 级精确计算:cdiv(num_tokens, block_size) 得到所需 block 数tiktoken o200k_base 优先,降级字符估算(中文/1.5 + 英文/4)
压缩策略移除最后一轮对话对LLM 摘要替换旧消息 + 悬挂工具调用修复AgentFold 步骤级合并 + ReSum 全量替换25000 词硬裁剪 + visited_urls 去重无压缩,消息列表只追加不裁剪启发式摘要(动作序列+玩家指令提取),零 LLM 调用无压缩,通过三层分离控制各层内容量LLM 生成 5 字段结构化摘要(任务/状态/发现/下一步/上下文)LLM 驱动结构化摘要(Focus/Findings/Gaps),400-600 词上限结构化 observation 替代原始对话,6 字段拆解存储WrapUp 滑动窗口取最近10条+关键词过滤,截断至5条摘要LLM 增量摘要(ReMeFs compact),previous_summary 累积LLM 摘要 + 工具参数截断双管齐下Clean-Slate 全量清除 + LLM 生成结构化代码摘要外置NoteAgent LLM 摘要压缩 + ToolTrace 50KB 源头截断无压缩,超限直接跳过文件或去掉 RAG 上下文无摘要压缩,直接从尾部截断 context 保留头部高相关内容4 种 CompressType 枚举:pre/post × msg/token 组合,配置驱动选择LLM 流式摘要,全量历史替换为单条 [Conversation Summary] 消息LLM 压缩节点:独立 compression_model 将研究消息压缩为结构化摘要无压缩,仅滑动窗口截断(max_messages=100)LLM 结构化摘要归档 + 六类记忆提取,非就地替换而是归档+提取双轨树结构节点合并 + token 阈值瘦身无压缩,仅截断;80% 阈值句子边界回退缓存友好:从最新消息向最旧压缩,保护前缀字节一致性多模态滑动窗口:截图保留最近2张、ariaTree保留最近1份,旧内容替换为文本占位符全量清除(RemoveMessage),非压缩/摘要无压缩/摘要,纯左截断滚动窗口丢弃最旧内容Tier 分级:Tier1 结构化摘要(70%),Tier2 极简化(95%)SDK Agent 将工具输出压缩为结构化 XML observation(type/title/facts/narrative)/compress 全量摘要替换,AI 生成对话摘要Category Summary 增量合并:新记忆 + 旧摘要 → LLM 生成受控长度新摘要无历史压缩;safeTruncate 在段落/句子边界截断 + 提示后缀无压缩,通过 block 分页避免浪费;sliding window 自动回收窗口外 block三层递进:L1 embedding 筛选 → L2 LLM 主动压缩 → L3 ReSum 增量摘要
触发机制ensure_summary_context() 调用前检查三触发 OR 逻辑(任一满足)LLM 主动 <compress> 标签 + 90% 阈值递归搜索完成后裁剪每个交易日重建 Agent,STOP_SIGNAL 主动终止活跃上下文>30条自动裁剪 + LLM主动调用enterContext/exitContextspawn/start 时一次性组合,运行时不动态调整双层:Formatter 超 max_tokens 截断 + Agent 超阈值压缩动态阈值:BASE + summary_tokens * 0.9,每轮工具调用后判定Hook 事件驱动(startup/resume/clear/compact)max_iterations=15 硬编码循环上限触发 WrapUppre_reasoning Hook 阈值触发(max_input × 0.7 × 0.9)fraction 0.85 自适应 + ContextOverflowError 降级兜底write_file 事件驱动 + 190K token 阈值 + 50 条消息硬限每次工具调用后自动触发 NoteAgent 压缩三层:入库阈值过滤 → 请求 8000 token 预检 → 运行时错误捕获prompt_tokens > available_input_tokens 时触发截断aask() 调用前自动触发 compress_messages,对上层透明错误驱动:API 返回 context_length_exceeded 等错误后自动压缩重试子图出口自动触发:Researcher 子图的 compress_research 节点在研究完成后必经累计 input token 超 max_input_tokens 时抛异常终止Session.commit() 手动触发,可配置 auto_commit_threshold 自动触发分组 token 总数超过 LLM 上限时自动分割每次多模态元素处理时按需提取上下文剩余预算比 < 20% 时触发,每轮 Agent Loop 调用前检查每步执行前自动触发(prepareStep 回调 + CUA executeStep 入口)图拓扑驱动:分析师完成后固定进入清除节点每轮生成前自动触发:rolling_state 截断 + deactivate_batch 停用时间驱动:30 天/90 天阈值自动识别候选PostToolUse Hook 事件驱动,每次工具调用自动触发 observation 采集compressionTokenThreshold 比例阈值(默认 0.8)自动触发写入触发:memorize 时全量更新;CRUD 时 patch 增量更新调用前预估:90% 硬拒绝 + 50% 输出空间软警告每步调度时 allocate_slots 检查,不足时触发 preemption 抢占usage_ratio 双阈值:0.7 触发 L1,0.9 触发 L2/L3
实现位置openai_client.py LLM 客户端内部AgentMiddleware 独立中间件infer.py 推理主循环 + react_agent.pydeep_research.py 技能层prompts/ 模板层 + BaseAgent 循环层双层实现Brain类内聚管理,context-summary.ts纯函数辅助独立 prompt-builder.ts + orchestrator-prompt.ts 双模块Formatter 层(截断)+ Agent 层(压缩)LangGraph 独立节点 should_compress_context + compress_context独立 MCP 插件,通过 system prompt 注入上下文prompt 层经济引导 + 代码层迭代限制 + LangGraph WrapUp 工作流AgentScope register_instance_hook + Formatter 双层AgentMiddleware.wrap_model_call 中间件拦截独立 ConciseMemoryAgent 类 + CodeImplementationAgent 协作Agent 层(NoteAgent)+ 数据结构层(ToolTrace.__post_init__)data_pipeline.py + simple_chat.py + rag.py 分布式三文件AnswerGenerator(token 层)+ IterativeAgent(行数层)双层BaseLLM 基类统一实现,所有 Provider 子类继承三层分布:provider_chain 分类 → runner 检测 → chat 压缩重试LangGraph 子图节点:compress_research 作为 ResearcherState 子图的最后一个节点LLM 层(TokenCounter + check_token_limit)Session/SessionCompressor/MemoryExtractor/MemoryDeduplicator 四层分离utils.py count_tokens + page_index.py 分组算法独立 ContextExtractor 类,注入到所有 ModalProcessor独立 context-manager.ts 模块,与 Agent 循环解耦双层:CUA 客户端层(供应商格式)+ AI SDK 层(统一格式)LangGraph 图节点(Msg Clear X),框架原语级Tensor 原生操作,generation.py 的 _update_rolling_state 方法存储层(Dolt 表字段)+ 独立压缩引擎(internal/compact)独立 Worker 进程 + SQLite,与主 Claude Code 会话解耦CLI 内置,闭源 Node.js 实现MemorizeMixin._update_category_summaries + CRUDMixin._patch_category_summariesmodel-registry 注册层 + script-parser 调度层 + batch-processor 分批层推理引擎核心层:Scheduler → KVCacheManager → BlockPoolMiddlewarePipeline 中间件,before_node 钩子透明注入
容错设计降级 len//4 估算摘要失败回退保留最后 15 条独立 ReSum 模型服务器不占主模型窗口Semaphore(2) 并发控制指数退避重试 max_retries=3,无上下文溢出处理exitContext自动触发(enterContext时auto_exit),200条硬上限兜底agentRulesFile 读取失败静默跳过,buildPrompt 无内容返回 null压缩失败时记录警告但不中断流程fallback_response 节点在超限时消费压缩上下文生成兜底答案数据库初始化失败返回空字符串,transcript 解析跳过畸形行WrapUp 回收已有产物,不浪费已消耗 tokentokenizer 降级 + 4 步 tool 消息修复链 + 全局 try/exceptoffload 失败非致命,ContextOverflowError 降级到摘要tokenizer 不可用时回退字符估算,摘要生成 3 次重试LLMContextError + ProviderContextWindowError 双层异常 + 消息匹配自动映射tiktoken 异常降级为 char/4;LLM 报错降级为无 RAG 重试未知模型回退 cl100k_base,context_budget<0 时降级空 context未知 CompressType 返回 NO_COMPRESS,未知模型 fallback cl100k_baseContextWindow 不 failover(换提供商无用),压缩失败返回原始错误渐进式截断重试:remove_up_to_last_ai_message 逐轮移除 + 最多 3 次重试TokenLimitExceeded 不重试,Agent 优雅终止并记录错误create+merge 矛盾决策自动归一化为 none,LLM 不可用时降级为 CREATE三级降级 + validate_and_truncate 索引越界防护tokenizer 不可用时回退字符截断;异常返回空字符串DriveFile 上传失败则跳过压缩,ToolMessage 二次截断兜底Google CUA 5次指数退避重试;output.type 校验防止非 content 类型被误压缩占位 HumanMessage 保证 Anthropic API 兼容超长轨迹静默停用不影响 batch 其他样本,图片裁剪失败回退文本提示指数退避重试(3 次,1s→2s→4s),429/5xx 可重试Worker 不可用时静默降级返回空上下文,不阻塞主会话maxSessionTurns 硬限兜底,超限开启新会话patch 返回 need_update=false 跳过无效更新;updated_content='empty' 清空摘要Error-driven Discovery 从 400 错误自动学习模型限制并持久化缓存分配失败返回 None 触发抢占链,RLHF 场景支持 reset_prefix_cache三层降级链 L3→L2→L1 + tiktoken→字符估算降级
Prompt模板化SYSTEM_PROMPT_TEMPLATE 含 memory/skills/subagent 动态占位符三市场独立模板文件,str.format() 动态变量注入三层分离:常量基础指令 + 配置派生 + 用户规则,Markdown 段落拼接ModeConfig 定义完整 prompt 模板,支持继承覆盖f-string 模板注入6项经济指标+分级生存引导CONVERSATION_SUMMARY_PROMPT 外置于 code_prompts.pyYAML 多语言 prompt + 单例缓存 + zh→cn→en 降级链Jinja2 模板 RAG_TEMPLATE 含 contexts 条件注入分段限额:Memory 8K / ProjectContext 8K / Workspace 6K 字符独立上限Python 常量定义,按 Agent 类型分文件(toolcall/swe)YAML+Jinja2 PromptManager,支持变量校验/max_length截断/线程安全缓存SkillPromptModule 接口 + ContextBlock 结构化注入f-string 内联模板,无外置配置文件Go template 渲染,强调 COMPRESS 目标和结构化输出ModeConfig JSON 文件驱动所有 prompt 模板,支持继承(parent--override)contextFileName 支持多文件名配置,环境变量引用6-block 模块化 prompt(objective/workflow/rules/output/examples/input),支持 per-category 覆盖PromptCompiler Mustache 插值引擎,4 模板 + 运行时热更新trim_prompt 占位符替换 + ReSum 初始/增量双 prompt 模板
多维停止决策150 分钟超时 + 100 次调用上限 + 110K token 硬限三重终止STOP_SIGNAL + max_steps 双重终止条件迭代上限(15) + 活动完成标志 + 破产检测 三重停止条件置信度+行数+ROI+停滞+连续低效+严格停滞 6 重检查max_turns 步数限制 + active_mask done 信号 + max_model_len 长度停用单一停止条件:摘要长度 >= 原始长度则跳过
保留策略keep 参数支持 messages/tokens/fraction 三种保留方式ReSum 保留 system+摘要;AgentFold 保留最新步骤原文+历史折叠摘要全量保留,每步 assistant+tool 消息线性追加Minecraft保留最新半数活跃消息;Satori保留最近5条全量保留,不裁剪——通过文件化注入绕过 shell 截断而非压缩内容反向遍历保留最近 N 条消息,保护工具对完整性全量清除 messages[1:] + 摘要替代,retrieval_keys 跨周期累积配置驱动:最近 N 条 observation + M 条 session summary全量消息累积无压缩,仅在 WrapUp 时取最近10条保留 system prompt + 最近 N 条(默认 3),配对感知动态调整fraction 0.10 保留最近消息,无 profile 时 keep 6 条仅保留 system_prompt + initial_plan + 知识库摘要,历史全清代码文件 81920 token 入库,文档文件 8192 token 入库,无历史裁剪保留头部(高相关度),尾部截断;智能裁剪按优先级评分选取System Prompt 永不裁剪,threshold=0.8 为输出预留 20%压缩前 silent_turn 将重要信息写入 MEMORY.md,压缩后仅保留摘要双轨保留:compressed_research(精简)+ raw_notes(完整原始内容)归档消息完整保留在 history/archive_NNN/,Agent 可按需回溯滑动窗口保留前后 N 页/块,默认 window=1ArchivedRef 路由表永不截断,归档内容可通过 read_file 按需读取截图/视觉操作保留最近2个,ariaTree保留最近1个,视觉操作保留文本移除media报告提取到顶层字段,消息全量丢弃左截断保留最新上下文,right_side 同步截断保持 prompt/response 对齐永久性优雅衰减:原始内容不可恢复,只保留摘要按 totalObservationCount 配置限制查询数量(默认 50),LIMIT SQL 裁剪大文本 UI 层首尾各 2000 字符截断,模型层保留完整引用计数 + LRU 驱逐队列,ref_cnt=0 的 block 按 FIFO 顺序驱逐低优先级先裁(research→content→instructions),工具结果替换为占位文本
供应商适配DeepSeekChatOpenAI 子类修复 tool_calls.args 格式差异OpenRouter 直接用 reported cost,其他用本地 price/1M 公式DashScope 专用 Formatter,多模态固定 100 token 估算ProviderErrorKind 枚举统一分类,9 种模式覆盖 Anthropic/OpenAI/Google8 供应商 30+ 模型映射表 + 三家异常模式匹配(OpenAI/Anthropic/Gemini)vlm.get_completion_async 统一接口,vlm.is_available() 可用性检查Anthropic/Google/OpenAI 三套独立 find+compress 函数,OpenAI 用服务端 previousResponseId 免压缩OpenAI 兼容协议,支持多模型切换三层查表按模型名查找,prefix 降序匹配,覆盖 50+ 模型
实时数据注入每日从 JSONL 查询价格/持仓/收益注入 system prompt感知差分注入:仅环境状态变化时注入[PERCEPTION]块PromptCompiler {{variable}} 动态注入场景/角色/风格等运行时数据
滑动窗口回收Satori Bot slice(-5)激进裁剪 + 系统消息通知LLM历史丢失SlidingWindowManager 自动计算窗口外 token 数并替换为 null_block
摘要提取从llmLog提取动作序列+从消息提取玩家指令,固定格式≤600字符LLM 生成 Markdown 结构化摘要(里程碑/意图/概念/错误/待办)39 个中英文关键词反向搜索 + 段落边界扩展,≤ 100 tokens
子Agent隔离task 工具独立上下文,结果以单条 ToolMessage 返回双服务独立上下文:Minecraft Brain vs Satori Bot各自管理Worker 走 buildPrompt 三层组合,Orchestrator 走独立生成器,互不干扰每个子 Agent 独立 AgentState,context_summary 和 retrieval_keys 天然隔离每个子Agent独立 SummarizationMiddleware 实例和阈值每个文件实现周期独立,write_file 后 clean-slate 天然隔离每个 Researcher 子图独立压缩,压缩后的摘要才传递给 Supervisoruser/agent/session/resources 四 scope 隔离,owner_space 权限校验元数据优先:ContextBlock 只存 meta,LLM 按需 read_file 读取内容TypedDict 双轨制:辩论状态与消息流完全分离不涉及(beads 无子 Agent 概念)compress_for_writer/reviewer 按角色定制上下文视图
摘要模型选择优先用轻量模型(thinking_enabled=False)节省成本ReSum-Tool-30B 独立摘要模型,不占用主模型推理资源不使用LLM摘要,纯确定性启发式生成支持独立压缩模型(如 GPT-3.5)降低成本复用主模型(ChatOllama qwen3:4b),未使用独立压缩模型复用主模型(通过 MemoryManager.chat_model 共享)复用主模型,不单独指定摘要模型独立 compression_model 可配置为 gpt-4.1-mini 等低成本模型
归档折叠超10条归档时合并最旧N条为meta-summary(二级压缩)
上下文边界自主管理LLM通过REPL调用enterContext/exitContext自主划分任务块
历史查询接口history runtime提供search/recent/turns/contexts等REPL查询方法
运行时热更新不支持——prompt 在 spawn 时一次性生成,运行中不可变3 级配置优先级(env > file > defaults),env 变量即时生效update_context_config 动态修改参数并传播到所有处理器不支持(压缩后需重启查询才能看到效果)
文件化注入长 prompt 写入 .md 文件,通过 $(cat file) shell 替换注入避免 tmux 截断viking:// URI 寻址,.abstract.md/.overview.md 隐藏文件存储 L0/L1不涉及(压缩后内容直接存数据库,非文件)通过 SessionStart Hook 的 additionalContext 注入,或写入 AGENTS.md 文件IFLOW.md 三级分层加载 + @file.md 模块化导入
AI/Tool消息对保护DanglingToolCallMiddleware 在 before_model 修复悬挂对ReSum 整体压缩所有历史,不拆分消息对;AgentFold 按步骤粒度折叠用 set 追踪 tool_call_id,成对删除/保留未显式保护,RemoveMessage 删除 messages[1:] 含所有 AI/Tool 对check_valid_messages 验证 ID 匹配,动态缩小 keep_lengthPatchToolCallsMiddleware 自动补全悬挂 tool_call压缩为全量替换(单条摘要),不存在拆分配对问题remove_up_to_last_ai_message 按 AI 消息边界截断,隐式保护消息对完整性ToolPairGroup 原子组:AIMessage + 所有 ToolMessage 整体归档或保留
记忆标记系统Enum 标记(COMPRESSED/HINT),支持按标记过滤
工具描述计入预算遵循 OpenAI Cookbook 规则计算工具 JSON Schema tokens
多模态上下文支持 vision token 计算(base+tile 模式)为图片/表格/公式提取周围文本作为 LLM 理解辅助截图+ariaTree+视觉操作结果三类多模态内容分类压缩pixel_values/image_grid_thw 增量 torch.cat 拼接,image_pad 连续去重不支持(仅文本压缩)CrossAttentionManager 独立管理 encoder KV,不参与 prefix caching
压缩效果验证检查 metadata 是否存在,失败时记录警告CLI 层计算并展示 token 节省百分比摘要为空时返回错误拒绝替换,但不验证摘要长度 < 原始长度merge_memory_bundle 要求 LLM 返回 decision=merge 且 abstract+content 非空强制验证:摘要长度 < 原始长度,否则跳过并记录警告无显式验证,依赖 usage_ratio 阈值判断
增量摘要与全量摘要切换有 last_summary 时用增量模板 QUERY_SUMMARY_PROMPT_LAST,否则全量支持增量:existing_summary 作为 PRIOR COMPRESSED CONTEXT 前缀传入始终增量:传入 previous_summary 在历史摘要基础上追加仅全量摘要,链式摘要时过滤旧 summary 避免重复memorize 走全量合并(新条目+旧摘要),CRUD 走 patch(before/after 差异)
检索去重追踪retrieval_keys Set 用 parent::/search:: 前缀区分,注入摘要尾部指导 Agentenable_item_references 时 summary 内嵌 [ref:ITEM_ID] 引用,检索时可追溯原始条目
知识库外置SQLite WAL 模式持久化,跨会话可用implement_code_summary.md 文件持久化代码摘要,跨轮次可读所有记忆写入 VikingFS 文件系统,跨会话持久化Dolt 数据库持久化,支持 Git 版本控制SQLite 持久化 + 可选 Chroma 向量库,跨会话跨清除周期可用
读取拦截优化Context Index 语义索引替代原文,按需 get_observations 获取详情read_file 调用被拦截重定向到 read_code_mem 返回摘要不涉及(无读取拦截机制)三层渐进检索:Context Index → get_observations → mem-search,避免重复读取原始文件
分割粒度AI/Tool 消息对保护,不拆分工具调用序列AgentFold 按步骤级折叠,ReSum 按整体对话压缩,NestBrowse 按 64K 分片observation 级(每条独立记录),非消息级或对话级按工具调用粒度,每次调用独立压缩为一个 ToolTraceTextSplitter 按词分割,350 词/块,100 词重叠检索层按代码元素(函数/类)粒度,LLM 层按 token 粒度BrainMemory 字符级滑动窗口(window_size - 20 步进),非语义分割消息级别截断,不拆分单条消息六类记忆(profile/preferences/entities/events/cases/patterns)独立存储页级分组,overlap_page 保证语义连贯性page(页面级)和 chunk(块级)双模式Issue 级别(单个任务整体压缩)固定 block_size(1/8/16/32/64/128/256 token),GPU 上限 32
累计预算未实现跨调用累计追踪,仅单次触发检查EconomicTracker 跨调用累计 total_token_cost 并实时扣减 balanceIterativeAgent 跨轮追踪 total_lines 和 budget_usage_pctCostManager 跨调用累计 prompt/completion tokens 和 cost,支持 max_budgetrunner 用 saturating_add 累计 total_input/output_tokens,但不用于触发压缩跨调用累加 total_input_tokens,单例模式保证全局唯一OpenTelemetry 指标追踪 token 累计使用量TokenBudgetMiddleware 按节点权重分配预算,总预算 500K token
工具输出压缩NestBrowse 的 process_response 将网页内容分片提取 evidence+summaryhead+tail 截断(默认 10000 字符),保留首尾各半write_file/edit_file 参数 >2000字符截断为前20字符+标记搜索阶段预压缩:max_content_length 截断 + summarize_webpage 结构化摘要summarizeToolOutput 按 tokenBudget 独立压缩 shell 输出
二次截断兜底Formatter 反向遍历逐条计数,超阈值直接 break 丢弃旧消息sanitize_tool_result 50KB 硬限制 + base64/hex blob 剥离final_report 阶段:token_limit*4 字符估算 → 每次重试缩减 10%压缩后仍超预算时,每条 ToolMessage 截断至 ≤ 4096 tokens
Agent审查工作流compact_conversation 可配置 HITL 审批三模式:analyze 导出 → 人工/Agent 审查 → apply 应用无,压缩自动执行无人工确认
批量并发控制SubagentLimitMiddleware 硬限 [2,4] 截断超额 task 调用OpenAI embedder batch_size=500,Ollama 单文档串行处理active_mask 位图追踪活跃轨迹,GPU padding 对齐确保 batch 可整除Semaphore 限流(默认 5 并发)+ 独立错误处理60K Hard Cap + 双重约束贪心分批 + runStaggered 并发 + 单批次指数退避重试无并发压缩,中间件串行执行
记忆注入预算max_injection_tokens=2000 + tiktoken 精确截断留 5% 余量per-category target_length 覆盖全局默认 400 token
渐进式加载Skills 只注入索引(名称+路径),Agent 按需 read_file 加载Category → Item → Resource 三层递进检索,每层后 LLM 判断是否继续
查询驱动预算按查询复杂度 0-100 动态分配 60%-100% 行数预算不涉及(压缩不依赖查询复杂度)三层 sufficiency check:category 够用就不查 item,item 够用就不查 resource无,使用固定权重分配(writer 35%、revision 15%)
树构建BuildingTree URI 索引树 + DirectoryDefinition 预设目录 + 递归初始化自底向上合并,token 超限节点递归拆分不涉及(无树状结构)
缓存前缀保护system + 前 N 条 ≥ 4096 tokens 作为不可压缩前缀Anthropic system message 标记 cacheControl ephemeral 利用 prompt cachingSHA256/xxHash 内容寻址,block hash 链式依赖保证前缀一致性
就地修改策略所有压缩操作 in-place 修改消息数组,避免 base64 大字符串深拷贝
辩论轮次控制count 计数器 + max_rounds 参数硬性截止
Git集成记录压缩时的 commit hash(compacted_at_commit 字段)
Observation经济学discovery_tokens vs read_tokens 对比,计算并展示 savings 百分比
分类摘要隔离每个 category 独立 summary,10 个默认类别各自维护,互不干扰
推理模型适配检测 reasoning_tokens 占比 >80% 时自动双倍 max_tokens 重试
混合注意力协调HybridKVCacheCoordinator 迭代定点算法对齐多组 cache hit 长度

最佳实践

1.必须有估算:不管用什么方案,调用前必须知道当前 token 用量

2.预留安全边际:MiroThinker 的 85% 策略值得借鉴,为输出预留 15-20% 空间

3.分层裁剪优于一刀切:工具结果 > 旧对话 > 系统提示,按重要性分级

4.压缩后要验证格式:悬挂工具调用修复是容易被忽略但很关键的细节

5.考虑多提供商差异:不同 LLM 的 tokenizer 不同,需要适配

6.周期性任务优先考虑会话隔离:每个周期重建 Agent 比跨周期压缩更简单可靠

7.步数限制应配置化:不同场景(日线 30 步 vs 加密货币 10 步)需要不同的 max_steps

8.领域规则直接写入 prompt 模板:A 股 T+1 等硬性规则比工具返回更可靠

9.启发式摘要优于 LLM 摘要:游戏等实时场景中,从动作日志提取摘要比调用 LLM 更快且零成本

10.双层裁剪互为兜底:活跃上下文裁剪保证 LLM 输入可控,总历史硬上限保证内存安全

11.归档前缀需要缓存:buildContextHistoryMessage 结果缓存到 exitContext 时才失效,避免每轮重建

12.长 prompt 写文件再用 $(cat) 注入,比内联传递更可靠

13.buildPrompt 无内容时返回 null 而非空字符串,保持向后兼容

14.用户规则文件读取失败应静默跳过,不阻塞 Agent 启动流程

15.双层防护优于单层:Formatter 保证不超 API 限制,Agent 压缩保留语义,两层互补

16.结构化摘要优于自由文本:用 Pydantic Schema 约束摘要格式,确保包含任务/状态/发现/下一步/上下文 5 要素

17.反向遍历保留策略:从最新消息开始倒序遍历,保留最近 N 条完整消息,避免拆分工具对

18.压缩摘要应附带操作元数据(已检索 ID、已执行查询),而非仅保留语义内容

19.动态阈值公式应考虑摘要自身的 token 占用,避免压缩-膨胀循环

20.经济学可视化:展示 savings 百分比让用户理解压缩价值,而非仅静默压缩

21.结构化存储优于原文保留:拆解为 type/title/facts 等字段后可按维度过滤聚合

22.渐进式披露分层:最近 N 条展开 + 其余压缩为表格行,兼顾信息密度和 token 效率

23.配置优先级链:env > file > defaults 三级覆盖,支持运行时动态调整无需重启

24.双层限制互补:prompt 告知预算(软限制)+ 代码硬编码上限(硬限制),防止 Agent 忽略提示

25.WrapUp 自身也要追踪 token:回收工作流的 LLM 调用同样扣减余额,避免回收成本超过回收价值

26.双重防线互补:Hook 层做语义摘要保留信息,Formatter 层做硬截断保证绝不超限

27.配对感知分割:压缩边界必须检查 tool_use/tool_result 配对完整性,动态调整保留数量

28.本地 tokenizer 优先:优先加载本地 tokenizer 避免网络依赖,失败时降级为字符估算

29.参数截断前置于摘要:先截断大工具参数再做 LLM 摘要,减少摘要模型输入量和成本

30.ContextOverflowError 降级兜底:即使估算未触发阈值,实际调用超限时自动降级到摘要流程

31.offload 与摘要并行:两者互不依赖,asyncio.gather 并行执行减少延迟

32.Clean-Slate 适合文件级独立任务:当每个子任务(如实现一个文件)相对独立时,激进清除比渐进压缩更高效

33.知识库外置比内存摘要更可靠:写入文件的摘要不受上下文清除影响,且可被多个 Agent 共享

34.read_file 拦截可显著节省 token:已有摘要的文件无需重新读取原始内容

35.三重终止兜底:时间 + 调用次数 + token 数三维限制确保 Agent 不会无限运行

36.摘要模型与主模型分离:用更小的专用模型做摘要,主模型专注推理任务

37.Agent 自主压缩优于外部规则:让 LLM 判断哪些步骤可折叠,比 FIFO 滑动窗口更有语义感知

38.源头截断优于下游裁剪:在数据结构创建时就限制大小,防止大数据进入后续流水线

39.多级降级保证可用性:API > tiktoken > litellm > 估算,确保任何环境都能追踪 token

40.压缩后保留原始数据引用:ToolTrace 同时存储 summary 和 truncated raw_answer,支持回溯

41.代码文件与文档文件应设置不同的 token 阈值,代码可分块所以阈值更宽松

42.运行时降级应捕获多种错误关键词而非单一字符串匹配

43.token 计数器必须有 fallback 路径,避免 tiktoken 加载失败导致整个流水线中断

44.悬挂修复必须在压缩之后、模型调用之前:DanglingToolCallMiddleware 的 before_model 时机是关键

45.记忆注入用 tiktoken 精确计量而非字符估算:不同语言的 token/字符比差异大

46.Skills 用索引+按需加载替代全量注入:10 个 Skill 可节省 4000+ token

47.悬挂修复先于压缩:DanglingToolCallMiddleware 必须在 SummarizationMiddleware 之前执行

48.fraction 触发适配多模型:使用窗口占比而非绝对 token 数,自动适配不同模型的上下文窗口

49.配置驱动而非硬编码:所有阈值通过 YAML 配置,运维可调无需改代码

50.双层漏斗优于单层控制:检索层用行数预算粗筛,LLM 层用 token 预算精裁

51.安全边际独立配置:reserve_tokens 与 max_tokens 分离,避免输出截断

52.截断后必须验证:重建 prompt 后再次 count_tokens 确认未超限

53.压缩对调用者透明:在 LLM 基类统一拦截,上层 Role/Action 无需感知 token 限制

54.多 tokenizer 分级适配:精确 SDK > tiktoken > 字符估算,逐级降级而非一刀切

55.ContextWindow 错误不应触发 failover:消息太长在所有提供商都会失败,应回传调用方处理

56.压缩前先保存记忆:silent_turn 模式确保压缩丢失的细节仍可通过记忆搜索恢复

57.独立压缩模型降本:压缩任务用 gpt-4.1-mini 等便宜模型,不必复用主研究模型

58.按 AI 消息边界截断:比按字符数截断更安全,自动保护消息对完整性

59.搜索结果入口即压缩:在工具返回时就做第一层摘要,减少后续压缩压力

60.异常终止优于静默裁剪:超限时明确抛异常让调用方决策,避免静默丢上下文导致幻觉

61.单例模式保证计数器唯一:同一配置的 LLM 实例共享累计计数器,防止多处创建导致计数分散

62.工具描述也要计入 token:工具越多 token 开销越大,必须纳入预算检查

63.分层按需加载优于全量读取:L0 摘要满足 90% 浏览需求,仅深入时加载 L2

64.压缩应产出结构化知识而非简单截断:归档+记忆提取比丢弃消息更有价值

65.记忆去重需向量+LLM双重判断:纯向量阈值不够精确,LLM 理解语义重复更可靠

66.矛盾决策需安全网:LLM 返回 create+merge 等矛盾组合时自动归一化,防止数据损坏

67.截断时用 80% 阈值在句子边界回退,避免语义断裂

68.复用下游 LLM 的 tokenizer 做上下文截断,确保 token 计数一致

69.为有/无上下文场景准备双 prompt 模板,避免发送空 context 字段

70.缓存友好压缩方向:从最新消息开始压缩而非最旧,保护前缀缓存命中率(Anthropic 90% / OpenAI 50% 成本节省)

71.归档而非丢弃:被压缩的消息上传为文件并留下引用消息,Agent 可通过工具按需回溯

72.两级 Prompt 缓存:全局静态点(System Prompt 后)+ 会话动态点(最后 3 条消息),最大化缓存复用

73.占位符替换优于直接删除:保留 'screenshot taken' 让 LLM 知道此处曾有截图,维持对话连贯性

74.多模态内容分类保留:截图需前后对比保留2张,DOM树只需最新状态保留1份,不同类型不同策略

75.就地修改避免深拷贝:base64 图片数据量大,in-place 修改比创建新数组节省大量内存

76.全量清除适合无需跨节点共享消息的串行管道,比滑动窗口更简单可靠

77.辩论状态用 TypedDict 而非消息列表,可精确控制每个角色看到的上下文范围

78.双阈值分层控制:用 max_prompt_length 做软截断(可继续生成),用 max_model_len 做硬停用(防 OOM)

79.active_mask 位图优于动态 resize:用布尔掩码追踪活跃样本,避免动态删除 batch 元素导致索引混乱

80.多模态 token 去重计长:连续 image_pad 压缩为 1 个再计算语义长度,避免过早停用有效轨迹

81.永久性优雅衰减:压缩后原始内容不可恢复,强制信息衰减防止数据库无限膨胀

82.时间驱动触发优于 token 阈值:避免过早压缩活跃引用的任务,30 天阈值平衡信息保留与空间节省

83.结构化摘要模板:Summary + Key Decisions + Resolution 三段式,保留语义而非字面内容

84.压缩前强制验证:摘要长度 < 原始长度才应用,否则跳过并记录警告,防止无效压缩浪费 API 调用

85.Agent 审查可选:支持 analyze → 人工/Agent 审查 → apply 流程,关键任务可人工确认避免误压缩

86.用经济学指标(savings%)量化压缩效果,让用户和 Agent 都能评估记忆系统的 ROI

87.三层渐进检索比一次性注入更经济:大多数情况标题索引就够,按需深入

88.去重窗口要足够短(30秒):太长会误杀合法的相似 observation,太短则无法去重

89.比例阈值优于固定值:用占比而非绝对 token 数触发压缩,自动适配不同模型窗口大小

90.工具输出独立预算:shell 等高膨胀工具应有独立的 tokenBudget,不与对话压缩混为一谈

91.per-category 差异化预算:不同类别的记忆重要性不同,应支持独立的 target_length 配置

92.patch 优于全量重写:单条记忆变更时先让 LLM 判断 need_update,跳过无效更新节省成本

93.并行更新受影响类别:asyncio.gather 同时更新所有受影响的 category summary,而非串行处理

94.prefix 匹配按 key 长度降序排列,避免短前缀误匹配更具体的模型变体

95.依赖注入解耦注册表与持久化层,避免 model-registry ↔ store 循环依赖

96.Error-driven Discovery 的正则要覆盖主流 API 的多种错误格式(DeepSeek/OpenAI/智谱)

97.批处理设置 60K Hard Cap,即使模型支持 1M 上下文也不要一次塞满

98.用引用计数而非标记清除管理共享 block,释放时尾部优先保证 LRU 语义

99.block hash 使用链式依赖(前一个 block 的 hash 参与下一个的计算),保证前缀匹配的正确性

100.null_block 哨兵模式:用单个不可释放的 null_block 替代已回收位置,避免数组重排

101.低成本操作优先:embedding 筛选成本远低于 LLM 压缩,应作为第一道防线

102.工具结果替换而非删除:保持消息列表结构完整,避免悬挂引用

103.环境变量驱动阈值:FOLD_THRESHOLD 和 SUMMARY_THRESHOLD 可运行时调整

104.编码器双降级:o200k_base → cl100k_base → 字符估算,覆盖所有模型系列