问题域/PD-06

记忆持久化

Memory Persistence

跨会话的用户偏好、历史上下文、事实知识如何存储和检索。Agent 的"长期记忆"。

子问题

1.记忆存储:选择合适的存储后端(向量库、KV 存储、文件系统)

2.记忆检索:如何高效检索相关记忆

3.记忆更新:新信息如何更新或覆盖旧记忆

4.记忆过期:过时信息的清理策略

5.跨会话:不同会话间共享记忆

6.情感权重检索:如何将 emotional_impact 和 importance 融入向量检索排序公式

7.三维度向量列冗余:同表多维度列并存时如何处理历史数据的维度不一致

8.事件记忆参与者解析:JSONB 数组存储的 participants 如何高效查询特定参与者的所有事件

9.目标树完整性:parent_goal_id 自引用外键在删除父目标时的级联策略选择

10.灵感来源追溯:ideas 的 source_id 引用 dream/conversation 等异构来源时的类型安全

11.Hook 注入兼容:不同 Agent(Claude/Codex/Aider)的 hook 配置格式差异如何统一抽象

12.元数据与运行时状态一致性:metadata 文件记录 working 但 runtime 已 exited 时的检测与修正

13.跨项目会话发现:如何在不预知项目列表的情况下扫描所有项目的会话目录

14.mark 标记系统设计:如何支持一条消息关联多个 mark 且高效过滤

15.TTL 滑动窗口实现:如何在每次访问时批量刷新所有 session 相关 key 的过期时间

16.三策略记录降级:Mem0 的 LLM 提取失败时如何确保内容不丢失

17.工具记忆结构化:如何设计 JSON schema 平衡灵活性和查询效率

18.嵌套状态序列化:如何递归序列化包含多个 StateModule 的复杂对象

19.异步上下文生命周期:如何确保 ReMe/Mem0 的资源在异常时也能正确释放

20.marks_index 迁移:如何兼容旧数据(无 marks_index)和新数据(有 marks_index)

21.Redis pipeline 原子性:如何在批量操作中保证 add/delete/update 的一致性

22.parent chunk 排序一致性:多 ID 批量加载时如何保证返回顺序与文档原始顺序一致

23.摘要覆写丢失:每轮重新生成 conversation_summary 可能丢失早期对话的关键细节

24.双格式记忆一致性:JSONL 和 Markdown 两种格式并存时如何保证内容同步

25.经济状态多文件原子性:balance/costs/completions 三文件更新的一致性保证

26.评估阈值与记忆关联:工作评估分数如何影响记忆价值判断和学习策略调整

27.多渠道 session_id 文件名安全:含冒号等特殊字符的 session_id 如何安全映射到文件系统路径

28.平台自适应后端选择:同一代码在 Windows/Linux/macOS 上如何自动选择兼容的向量存储后端

29.摘要注入格式设计:压缩摘要以何种标签格式注入对话上下文才能让 LLM 正确理解其为历史摘要

30.tool_use/tool_result 配对完整性:压缩分割点如何避免破坏工具调用与结果的配对关系

31.记忆自更新闭环:Agent 如何通过工具调用自主判断并写回记忆文件

32.渐进式技能披露:如何在系统提示中只展示技能摘要而非全量内容以节省 token

33.后端工厂延迟绑定:需要运行时信息的后端如何通过工厂函数延迟初始化

34.摘要结构化:如何将代码实现摘要拆分为可查询的结构化 section

35.文件进度追踪:在记忆清洗后如何准确追踪已实现/未实现文件列表

36.客户端驱动重建:服务端无状态时如何从前端 messages 数组高效重建对话上下文

37.embedding 缓存有效性校验:加载已缓存的 pkl 后如何验证 embedding 维度一致性和非空性

38.多 embedder 后端兼容:同一持久化层如何适配 OpenAI/Google/Ollama/Bedrock 不同 embedding 维度

39.消息过滤策略:如何从包含工具调用的完整对话中只提取有记忆价值的 human/ai 消息

40.记忆更新 prompt 工程:如何设计 prompt 让 LLM 准确判断 shouldUpdate 并输出结构化 JSON

41.防抖窗口调优:debounce_seconds 过短浪费 LLM 调用,过长导致记忆延迟

42.双子系统记忆协调:代码理解引擎和 Agent 框架各自有独立记忆需求时如何分层而不冲突

43.会话元数据快速枚举:如何在不加载全部消息的情况下快速列出所有会话的元信息

44.多轮摘要注入策略:对话历史摘要应注入查询改写还是回答生成还是两者兼顾

45.FK 约束松绑:Flow 删除后消息保留的外键策略选择

46.CancelledError 写入中断:asyncio 取消信号导致 commit 失败的重试策略

47.会话重命名:批量更新已有消息的 session_id 而不丢失关联

48.多模态内容块序列化:ContentBlock 联合类型(text/code/media/tool_use)的 JSON 存储与反序列化

49.图结构自组织:如何在记忆增长时自动构建语义层级树而非扁平列表

50.多租户记忆聚合:跨 Cube 并行搜索时如何合并异构结果并去重

51.记忆版本血统:更新/合并记忆时如何保留完整的版本历史和来源追溯

52.后台重组资源控制:KMeans+LLM 重组的 CPU/API 开销如何限制在可控范围

53.容量触发转储:短期记忆超过阈值时如何自动迁移到长期存储

54.经验结构化:如何将 Agent 的 req→resp 对连同 metric 和 trajectory 结构化存储

55.双检索后端切换:同一经验池如何在 BM25 和向量检索间无缝切换

56.LLM 摘要压缩:超长对话历史如何通过滑动窗口分段摘要保持可控长度

57.循环检测:基于记忆内容识别 Agent 陷入重复输出的死循环

58.偏好面粒度控制:如何确保每条 preferences 记忆只覆盖一个独立可更新的面(facet),避免更新时破坏无关偏好

59.去重决策归一化:LLM 返回矛盾决策(如 create+merge)时如何安全降级而非报错

60.多语言记忆输出:如何检测用户语言并确保提取的记忆以用户语言存储而非 LLM 默认语言

61.Profile 单文件合并:用户画像作为单文件总是合并而非创建新条目的策略与冲突处理

62.多模态双阶段完成检测:文本处理完成但多模态未完成时的状态表达

63.存储后端委托:如何零配置复用宿主框架的存储抽象层

64.选择器漂移修复:缓存的 CSS 选择器因页面更新失效时如何自动修复而非报错

65.缓存键敏感信息剥离:如何在生成缓存键时自动过滤 API key 等敏感配置

66.跨实例缓存传输:服务端内存缓存如何安全传输到客户端文件系统持久化

67.流式响应缓存包装:如何让缓存命中的结果透明地模拟 AsyncGenerator 流式接口

68.大字段裁剪:持久化前如何识别并删除 screenshot base64 等膨胀字段

69.角色记忆隔离:多角色系统中如何防止不同立场的经验交叉污染

70.后验反思触发:如何确定反思时机以及需要哪些结果指标才能生成有效教训

71.BM25 金融分词:金融术语(如 S&P500、10-year yield)的分词策略对检索精度的影响

72.记忆增长控制:纯追加模式下如何防止记忆池无限膨胀导致检索质量下降

73.防幽灵写入:persist 前验证父实体存在防止向已删除实体写入数据

74.DashScope 兼容:json_mode 模型的 session summaries 兼容性处理

75.数据目录迁移:向量库目录从旧位置自动迁移到新系统目录

76.哈希命名空间碰撞:多项目共享目录时如何检测 SHA256 截断碰撞

77.Hook 被动同步:如何通过 Agent 工具调用 Hook 零侵入地更新编排器元数据

78.JSONL 大文件尾部读取:100MB+ 会话文件如何只读末尾提取摘要和成本

79.Cell-level merge:如何在合并时按字段级检测冲突而非整行覆盖

80.Time-travel 查询:如何高效查询历史状态而不维护手动 snapshot 表

81.Federation 同步:如何在多个 Agent 实例间同步状态而不依赖中心化服务器

82.Ephemeral 分离:如何将临时数据排除在版本控制外以减少存储开销

83.事务内提交:如何保证 SQL 事务与版本提交的原子性

84.自动重试:如何处理 Dolt Server 的瞬态错误(连接断开、只读模式、catalog 竞态)

85.Schema 迁移:如何在版本控制数据库中安全地执行 DDL 变更

86.AUTO_INCREMENT 同步:Pull 后如何重置自增 ID 防止冲突

87.粒度化嵌入:如何将单条记忆拆分为多个语义独立的向量文档以提高匹配精度

88.增量回填:如何高效同步 SQLite 与向量库之间的数据差异

89.迁移版本冲突:多套迁移系统共享版本表时如何保证幂等性

90.suspect detector 误判:如何区分 detector 未运行和 findings 真正消失

91.主观评估联动失效:机械 findings 变化时如何精确标记受影响的主观维度

92.chronic reopener 处理:反复 reopen 的 finding 如何升级处理策略

93.suppression 与统计一致性:被忽略的 findings 在统计和分数计算中的排除时机

94.模块化导入循环检测:@import 嵌套引用时如何用栈式检测防止无限递归

95.子目录扫描性能控制:向下递归发现记忆文件时如何限制扫描目录数防止启动卡顿

96.影子 Git 与项目 Git 隔离:检查点快照如何使用独立 Git 仓库避免污染项目提交历史

97.多文件名上下文共存:IFLOW.md/AGENTS.md/CONTEXT.md 多种命名文件如何并行加载不冲突

98.自动压缩触发阈值:token 使用率达到阈值时自动压缩对话历史的时机与策略

99.Scope 字段动态注入:如何在不修改核心模型的情况下为不同租户添加过滤字段

100.工具调用记忆建模:如何结构化存储工具名、输入输出、耗时、评分以支持经验复用

101.三层渐进检索深度控制:每层 sufficiency check 的判断标准和提前终止策略

102.FTS5 查询安全化:用户输入含特殊字符(坐标、运算符)时如何防止 FTS5 语法错误

103.Embedding 缓存键碰撞:不同 API 端点的同模型同文本如何区分缓存

104.Batch API 降级:OpenAI Batch API 超时或失败时如何透明回退到逐条 embed

105.会话导出自动清理:导出文件数量和年龄超限时的 LRU 清理策略

106.写后即搜一致性:write_memory 后立即 sync_path 保证记忆可检索的时序保证

107.Rehydration 时序竞态:多 store 依赖同一 project-store 的 activeProjectId,如何保证读取时序正确

108.跨项目资源共享开关:同一 store 的数据如何按配置动态切换隔离/共享模式

109.三源数据丰富度判断:如何在不完全解析的情况下快速判断哪个存储源的数据更完整

110.迁移后数据覆盖恢复:项目切换竞态导致 per-project 文件被空数据覆盖时的自动修复

111.跨阶段 checkpoint 复用:base→SFT→RL 流水线中如何从上一阶段加载模型和优化器动量并重置学习率

112.优化器分片与 rank 数绑定:变更 GPU 数量后如何重新分片或合并优化器状态

113.torch.compile 键名前缀兼容:编译后 state_dict 键名带 _orig_mod. 前缀的自动剥离

114.dataloader 位置近似恢复:parquet row group 粒度的恢复不可避免地跳过或重复少量数据的容忍策略

115.写作偏好 profile 结构化:如何将风格/长度/受众/配图等多维偏好组织为可查询的结构

116.记忆注入 token 预算:注入内容超过 max_injection_tokens 时的截断策略

各项目的解法36 solutions

Signals

横向对比

维度DeerFlowAIRIAgentOrchestratorAgentScopeagentic-rag-for-dummiesClawWorkCoPawDeepAgentsDeepCodeDeepTutorDeepWikiFastCodeGPT-ResearcherLangflowLightRAGMemOSMetaGPTOpenClawOpenManusOpenStorylineOpenVikingRAG-AnythingStagehandTradingAgentsValueCellagent-orchestratorbeadsclaude-memdesloppifyiflow-climemUMoltismoyin-creatornanochatvibe-blog
记忆结构三层结构:user 画像(3 section)+ history 时间线(3 section)+ facts 事实数组5 表分层:fragments(4类型) + episodic + tags + goals + ideasflat-file key=value 纯文本,每会话一个文件双层架构:Working Memory(对话级)+ Long-Term Memory(跨会话)三层分离:InMemorySaver 会话状态 + State 内嵌摘要字段 + JSON 文件知识块双格式并存:JSONL(topic+knowledge+date+timestamp)+ Markdown(分隔符追加)三层分离:InMemoryMemory 短期 + ReMe 长期语义 + SafeJSON 会话状态AGENTS.md 纯 Markdown 文件,人类可读可编辑双层:ConciseMemoryAgent(工作流摘要)+ MemoryStore(daily notes + MEMORY.md)三层分离:L1 DialogTurn 列表 / L2 LocalDB pkl / L3 JSON 文件三层分离:KV 对话缓存 + Markdown Agent 记忆 + JSONL 会话历史MessageTable SQLModel 模型,含 text/sender/properties/content_blocks 字段TreeTextMemory 树状结构,8 种 memory_type 枚举,4 级 Pydantic metadata 继承四层分离:Memory(短期list) → LongTermMemory(FAISS去重) → RoleZeroLTM(Chroma转储) → BrainMemory(Redis+LLM摘要)Pydantic Memory 模型,List[Message] + max_messages 滑动窗口6 类枚举(profile/preferences/entities/events/cases/patterns)+ L0/L1/L2 三层粒度四层分离:parse_cache / doc_status / KG+VDB / llm_response_cache双层:ActCache 存 Action[] 操作序列,AgentCache 存 AgentReplayStep[] 完整会话双列表对齐:situations[] + recommendations[],BM25Okapi 索引四层分离:会话元数据、消息条目、业务数据、向量知识库flat key=value 文件,每 Session 一个文件,15+ 字段关系表(issues/events/comments/labels)+ 系统表(dolt_history_*/dolt_diff/dolt_log)三层结构:observations(发现)+ session_summaries(摘要)+ user_prompts(用户输入),每层独立表单 JSON 文件 StateModel,findings dict + scan_history list + subjective_assessments dict三层 Markdown 文件:全局→项目→子目录,按优先级合并三层层级:Resource→MemoryItem(6类型)→MemoryCategory,CategoryItem 关联表files→chunks→embedding 三层,SQLite 单库统一Zustand persist StateStorage 适配器,项目级 JSON 文件三文件分离:model.pt + optim_rankN.pt + meta.json四层结构:writingProfile + topicHistory + qualityPreferences + facts
更新机制MemoryUpdateQueue 防抖队列,30s Timer + thread_id 去重批处理access_count + last_accessed 追踪访问,软删除 deleted_atread-merge-write 全文件更新,空字符串语义删除Working Memory 支持 mark 标记和去重,Long-Term Memory 通过 LLM 提取事实conversation_summary 每轮 LLM 重新生成,context_summary token 超阈值时压缩覆写纯追加 append-only,无更新/删除操作pre_reasoning Hook 自动检测 token 超阈值触发压缩Agent 通过 edit_file 工具自主写回 AGENTS.md事件驱动:write_file 工具调用触发清洗 + LLM 摘要生成L1 客户端驱动每次请求重建;L2 惰性加载缓存命中跳过CacheManager 按轮次覆盖写入,MemoryStore 追加写入,SessionManager 全量重写upsert 语义:有 id 则 sqlmodel_update,无则 insertArchivedTextualMemory 版本历史 + MERGED_TO 边保留血统容量触发转储(memory_k=200阈值) + watch Action 过滤写入add_message 后立即检查长度,超限尾部保留截断LLM 驱动三决策(skip/create/none)+ per-memory merge/delete增量追加 chunks_list + upsert 覆盖写入Self-Heal:回放后对比 selector/method/args 差异,有变化自动刷新缓存条目后验反思写入:交易完成后 LLM 分析盈亏生成教训INSERT OR REPLACE upsert + expunge 分离 sessionread-merge-write 全量覆盖,空值删除键事务内自动提交(RunInTransaction 结束时调用 DOLT_COMMIT)Hook 驱动实时写入 + ChromaSync 同步向量嵌入,增量回填缺失记录三阶段合并管道:upsert → auto_resolve → recompute_stats,支持 reopen 追踪/memory add 手动追加 + save_memory AI 自动提取写入全局SHA256 内容哈希去重 + reinforcement_count 递增强化mtime 快速路径 + SHA256 hash 双重变更检测Zustand 自动 persist,setItem 时从数据提取 pid 防竞态定期覆写(--save-every N 步),同 step 直接覆盖add_fact 追加 + 低置信度淘汰(max_facts=200)
事实提取LLM 驱动,5 类 category + 4 级 confidence,shouldUpdate 门控消息级自动向量化,多模态(文本/贴纸/照片)统一 embedPostToolUse bash hook 从命令输出正则提取 PR/branch无独立事实提取,依赖 LLM 摘要隐式保留关键事实Agent 自主决定学习内容,200 字符最小门控ReMe 库文件监听 MEMORY.md 自动索引,Agent 通过 memory_search 工具检索依赖 LLM 在 memory_guidelines 指导下自主判断LLM 结构化摘要:6 section(core_purpose/public_interface/dependencies/notes/next_steps)无 LLM 提取,直接存储原始 user-assistant 对无自动提取,依赖 Agent 主动调用 append_today/write_long_term无 LLM 提取,直接存储原始消息文本LLM 双模式提取(fast 原始/fine LLM 精炼),mem_reader 管道无独立事实提取,依赖 Message.content 整体存储无事实提取,仅存储原始消息YAML prompt 模板 + 6 类 few-shot 示例 + 语言自动检测LLM 驱动实体关系抽取 + 多模态处理器描述生成LLM 4 步结构化反思(Reasoning→Improvement→Summary→Query)XML 解析器从 SDK 响应提取 <observation> 块,ModeManager 校验类型有效性机械 detector 自动产出 findings,主观评估由人工 review 注入AI 对话中自动识别 + save_memory 持久化到 ~/.iflow/IFLOW.mdLLM XML 结构化提取,6 种记忆类型并行 asyncio.gatherSessionMemoryHook 自动导出会话日志为 Markdown,由 chunker 索引手动 add_fact API,支持 category/confidence 标注
存储方式单 JSON 文件(.deer-flow/memory.json),temp+rename 原子写入PostgreSQL + pgvector 单库,Drizzle ORM 类型安全文件系统 ~/.agent-orchestrator/{hash}-{projectId}/sessions/Working Memory 三后端(InMemory/Redis/SQLAlchemy),Long-Term Memory 双集成(Mem0/ReMe)InMemorySaver 进程内存 + parent chunk JSON 文件磁盘本地文件系统 JSONL,按 agent signature 目录隔离Chroma/本地向量库 + FTS 双模式,会话 JSON 文件原子写入三后端可插拔:文件系统/LangGraph State/LangGraph StoreMarkdown 追加(implement_code_summary.md)+ 日期分片 MD + JSONL 会话L1 内存 / L2 pickle 序列化 / L3 JSON 文件diskcache/Redis + 文件系统 Markdown + JSONL 文件SQLite/PostgreSQL 关系型数据库,JSON 列存储元数据Neo4j 图数据库,支持 multi_db 物理隔离和 shared_db 逻辑隔离FAISS 向量索引(磁盘JSON) + Chroma 向量库 + Redis KV缓存纯内存 List,无持久化,进程结束即丢失VikingFS .md 文件 + VikingDB 向量索引,URI 驱动委托 LightRAG KV 存储抽象,支持 JSON/PostgreSQL 等后端CacheStorage 双后端:文件系统(JSON 文件)+ 内存(Map),私有构造+工厂方法纯内存 Python List,无持久化,进程结束即丢失SQLite(aiosqlite) + SQLAlchemy(PostgreSQL/SQLite) + LanceDB纯文件系统,~/.agent-orchestrator/{hash}/sessions/Dolt(版本控制 SQL 数据库),MySQL 兼容协议SQLite WAL 为主 + ChromaDB 向量库为辅,FTS5 全文索引作为第三搜索通道单 JSON 文件 .desloppify/state.json,无外部数据库依赖纯 Markdown 文件系统,无数据库依赖三后端工厂:inmemory(dict)/sqlite(SQLModel)/postgres(pgvector)SQLite 单库:关系表 + BLOB embedding + FTS5 虚拟表Electron fs JSON 文件,三源竞选(file > localStorage > IDB)torch.save(.pt) + JSON,文件系统目录结构按用户隔离 JSON 文件({user_id}.json)
注入方式system prompt <memory> 标签,tiktoken 精确计数 + 字符比例截断余弦相似度 + 时间衰减混合排序,上下文窗口 ±5 条扩展环境变量 AO_SESSION + AO_DATA_DIR 传递路径_compressed_summary 字段存储历史摘要,get_memory 时自动前置conversation_summary 注入 rewrite_query prompt,context_summary 注入 orchestrator promptAgent 主动调用 get_memory() 工具按需拉取,不自动注入<previous-summary> XML 标签包裹摘要注入对话头部中间件 wrap_model_call 注入 <agent_memory> 标签到系统提示清洗后注入 initial_plan + 文件列表 + 知识库;read_code_mem MCP 工具按需查询Jinja2 模板遍历 OrderedDict 注入对话历史摘要注入 QueryProcessor + 记忆注入 system prompt + 历史注入 messagesLCBuiltinChatMemory 适配 LangChain BaseChatMessageHistorysearch API 返回 TextualMemoryItem 列表,由调用方注入 promptfind_news 向量去重过滤 + get 合并短期+长期检索结果self.messages 直接传入 LLM ask_tool,system_msgs 单独拼接HierarchicalRetriever 递归目录搜索 + 热度加权混合排序parse_document 缓存优先,命中则跳过解析直接返回V3 构造时通过 cacheDir 配置注入,ActCache/AgentCache 共享同一 CacheStorage 实例system prompt 拼接:检索 top-2 教训直接注入角色 prompt构造函数注入 store 实现 + 全局单例 get_repository()环境变量 AO_SESSION + AO_DATA_DIR 传递路径SQL 查询(标准 SELECT/JOIN),支持 AS OF 语法查询历史MCP 工具暴露 search/timeline/get_observations,Agent 主动调用检索记忆merge_scan() 将新扫描结果合并到内存 state,save_state() 持久化启动时全量扫描合并后注入 system prompt三层渐进检索注入,每层 sufficiency check 控制深度Agent Tool(memory_search)返回 JSON,含 citationcreateJSONStorage 包装自定义 StateStorage,对 store 透明load_state_dict 直接注入模型/优化器,JSON 解析恢复循环变量format_for_injection → XML 标签注入 background_knowledge
生命周期管理facts 按 confidence 排序截断至 max_facts,history 按时间分层覆盖四类型分层(working/short_term/long_term/muscle) + 软删除16 态状态机 + 30s 轮询 + archive-on-deleteRedisMemory 支持 TTL 滑动窗口,每次访问自动刷新过期时间reset_thread 删除 checkpoint + uuid4 新建,clear_store 全量清除 JSON无过期机制,记忆永久保留/compact /new /clear 命令 + Hook 自动压缩 + start/close 生命周期before_agent 幂等加载,PrivateStateAttr 防泄露L1 随请求 / L2 随仓库永久 / L3 手动删除CacheManager 30天 TTL 自动过期,MemoryStore 永久,SessionManager 手动删除按 session_id/context_id 批量删除,支持会话重命名4 态状态机(activated/resolving/archived/deleted)+ 容量驱动 FIFO 清理recover_memory 启动恢复 + clean/clear 显式清理 + persist 手动持久化sigmoid×exp_decay 热度衰减(7天半衰期)+ active_count 自增asyncio.gather 并发 finalize + atexit 兜底清理版本号校验(version:1),无 TTL 过期,Self-Heal 替代过期策略进程级生命周期,无过期淘汰,记忆只增不减三态状态机(active/inactive/require_user_input) + touch 时间戳spawn→working→pr_open→merged/killed,归档+恢复Ephemeral 数据存储在 dolt_ignore 表中,不参与版本控制23 版本幂等迁移系统,每个迁移检查实际状态而非仅版本号5 态状态机 open→fixed/auto_resolved/wontfix/false_positive,支持 reopen/memory refresh 重载 + /compress 压缩 + /clear 清空半衰期指数衰减 salience 评分,recency_decay_days 可配置SessionExporter 自动清理:max_exports + max_age_daysApp useEffect 启动迁移,项目删除时 removeDir 递归清理按 step 编号命名,多 checkpoint 共存,手动清理无过期机制,容量淘汰替代时间衰减
记忆检索无独立检索,全量注入 system prompt(受 max_injection_tokens 限制)HNSW 索引 + cosineDistance + 0.5 阈值 + Top3 + 上下文扩展Long-Term Memory 通过向量检索(Mem0)或结构化查询(ReMe)Qdrant 混合检索 child chunk → parent_id → JSON 文件加载 parent chunk全量读取 + 关键词过滤,无向量索引memory_search 语义搜索 + memory_get 片段读取,min_score 阈值过滤全文加载注入,无语义检索,依赖 LLM 上下文理解动态 WHERE 子句构建,支持 sender/timestamp/limit 过滤AdvancedSearcher 多阶段检索 + BM25/向量/全文三路 + reranker全局向量搜索 + 递归子目录搜索 + rerank + 热度混合SHA256 精确匹配,无模糊检索;缓存键含 instruction+url+variableKeys+configSignatureLanceDB hybrid search + SQLite json_extract 过滤JSONL 尾部 128KB 读取 + 文件名前缀匹配dict key 直接查找 finding_id,path_scoped_findings 按路径过滤全量注入无检索,依赖 LLM 自身从 prompt 中提取相关信息RAG(cosine/salience) + LLM 排序双策略,三层 Category→Item→Resourcehybrid search:cosine vector + FTS5 keyword 加权合并按 category 线性过滤 + confidence 排序取 Top-10
Schema 迁移Drizzle Kit 自动生成 SQL 迁移,增量演进(0000→0005)Alembic 迁移链,SQLite 用 create-copy-rename 模式CREATE TABLE IF NOT EXISTS 懒建表 + SQLAlchemy create_all版本化迁移框架(migrations.go),每次迁移自动提交version 字段 + ensure_state_defaults 防御性补全,向前兼容sqlx::migrate! 宏 + set_ignore_missing(true)幂等标志位 + Record/FlatArray 双策略 + 启动时自动恢复
粒度化嵌入三维度向量列并存(768/1024/1536),运行时按环境变量选择TextSplitter 分片后逐片 embeddingMessage 整体作为单个向量文档,未拆分子语义L0 abstract 用于向量化索引,L2 content 用于合并和注入MarkdownChunking 按标题切片 + PDFReader 分页切片每个 observation 的 narrative/facts/text 拆分为独立向量文档,提高语义匹配精度Markdown 按 token 数分块(默认 400),重叠窗口 80 token
多渠道会话隔离platform + in_chat_id 字段组合隔离不同平台和群组RedisMemory 通过 session_id + user_id + key_prefix 实现三层隔离uuid4 thread_id 隔离,每个 RAGSystem 实例独立会话SafeJSONSession sanitize session_id,按 channel+user_id+session_id 三元组隔离L3 按 type+owner+repo+lang 四维度隔离channel:chat_id 键设计,每渠道独立 JSONL 文件session_id + flow_id + context_id 三维查询模型MemCube 多租户:SingleCubeView 单租户 + CompositeCubeView 跨 Cube 聚合UserMemory/AgentMemory 双空间 + user_space/agent_space URI 隔离conversation_id + user_id + agent_name 三维隔离merge_scope_model 动态注入 user_id 等 scope 字段做 WHERE 过滤_p/{pid}/ 目录级隔离,SplitStorage 支持 _shared/ 跨项目共享
角色记忆隔离未实现,所有记忆共享同一命名空间Mem0 通过 agent_id/user_id/run_id 元数据隔离不同角色的记忆NamespaceFactory 动态生成命名空间元组实现 per-assistant 隔离cube_id 绑定租户,user_name 逻辑隔离,不同 Cube 物理隔离UserMemory(profile/preferences/entities/events)vs AgentMemory(cases/patterns)
记忆增长控制max_facts=100 硬上限 + confidence 排序淘汰低价值事实importance 1-10 评分 + emotional_impact 提供清理依据,但未实现自动清理动态 token 阈值触发压缩,retrieval_keys 集合防止重复检索无控制机制,纯追加无限增长COMPRESSED mark 标记旧消息排除,keep_recent 保留最近 N 条无自动控制,依赖人工编辑 AGENTS.md 或 Agent 自主精简无自动清理,依赖 limit 参数和手动 delete API每类型独立上限(WM:20/LTM:1500/UM:480),80% 阈值触发清理LLM 去重 skip/merge 减少冗余;facet 粒度防止偏好膨胀scan_history 保留最近 20 条窗口,suppressed findings 不计入统计compressionTokenThreshold 0.8 自动触发 /compress 摘要压缩reinforcement 合并重复记忆,但无主动清理/归档机制
情感维度建模emotional_impact(-10~10) + importance(1~10) + excitement(1~10)
并发安全threading.Lock + _processing 标志位防重入,daemon TimerO_EXCL 原子文件创建,10 次重试循环RedisMemory 使用 pipeline 保证原子性,InMemoryMemory 通过 deepcopy 防止外部修改单 Agent 单进程,无锁设计tmp + replace 原子写入,单机无跨进程锁StoreBackend 委托 LangGraph BaseStore 事务保证无并发保护,单进程文件读写diskcache 内置文件锁,SessionManager 无并发保护AsyncSession + CancelledError 最多 3 次重试无锁设计,依赖文件系统原子性;内存后端为单进程 Map 无并发问题asyncio.Lock 双检锁懒初始化 + StaticPool 连接池O_EXCL 原子文件创建,10 次重试循环Cell-level merge,字段级冲突检测,减少假冲突单进程 CLI 无并发,原子写入防中断但不防并发Rust Send+Sync trait bound,SqlitePool 连接池写入时从 JSON value 提取 projectId 而非全局状态,避免 rehydration 竞态rank 分片天然隔离,rank 0 独占模型/元数据写入单进程 mtime 缓存安全,多进程无文件锁
碰撞检测SHA256 哈希 + .origin 文件校验防止目录碰撞命名空间正则校验拒绝通配符字符防注入SHA256 全量哈希,无截断,碰撞概率极低SHA256 前 12 位 + .origin 文件比对suspect_detector 检测 detector 未运行,防止误 auto_resolveSHA256 截断 16 位 hex,理论碰撞率极低但无显式处理
版本控制无版本控制,archive/ 目录按 ISO 时间戳保留历史无版本控制,归档按 ISO 时间戳命名原生支持,每次写操作自动创建 Dolt commit,支持 time-travel 查询state.json 可 git 追踪,tool_hash 检测工具代码变更影子 Git 仓库 ~/.iflow/snapshots/<hash> 独立于项目 Git迁移标志位 version 字段,persist payload 携带 versionstep 编号 + _patch_missing_keys 向后兼容补丁
MCP 协议集成无 MCP,通过 Claude Code PostToolUse hook 集成通过 stdio MCP 与 chroma-mcp 子进程通信,消除 ONNX/WASM 依赖
存储后端委托通过抽象基类 MemoryBase 和 LongTermMemoryBase 实现后端可插拔直接文件 I/O,无抽象层MEMORY_STORE_BACKEND=auto 按平台自适应,Windows→local 其他→chromaBackendProtocol ABC + 工厂函数零配置适配宿主框架DatabaseService 统一管理引擎,session_scope 委托给 lfxCacheStorage 统一抽象,ServerAgentCache 可临时替换为内存后端再传输回文件ABC 抽象类 InMemory/SQLite 双实现零改动切换Protocol + 工厂模式,懒导入避免不必要依赖fileStorage 适配器统一封装 Electron IPC / localStorage / IndexedDB
模块化导入Working Memory 和 Long-Term Memory 独立导入,可单独使用CompositeBackend 路径前缀路由组合多后端@file.md 语法支持嵌套导入,路径验证 + 深度限制 + 权限检查load_model(source) 按阶段路由 base/sft/rl 三套 checkpoint
经验结构化ReMe 工具记忆要求 JSON 格式,包含 tool_name/input/output/token_cost/success/time_cost三文件分离:balance/token_costs/task_completions7 种 AgentReplayStep 类型(act/fillForm/goto/scroll/wait/navback/keys)+ 结果裁剪situation→recommendation 对,含归一化相似度分数ToolCallResult 模型:tool_name/input/output/success/time_cost/token_cost/score/call_hash
双检索后端切换Mem0 支持多种向量存储后端(Qdrant/Chroma/Pinecone),通过 vector_store_config 切换vector_enabled 控制向量搜索,fts_enabled 控制全文检索,可独立开关仅 BM25 词法检索,无向量检索,零 API 调用vector_weight/keyword_weight 可配置,无 embedder 时自动降级 keyword-only
成本追踪ReMe 工具记忆记录 token_cost 和 time_cost,支持成本分析get_memory_statistics 提供压缩率和文件进度指标Experience.metric 记录 time_cost/money_cost/scoreLLM 单例累计 total_input/completion_tokens + max_input_tokens 限额parse_cache 避免重复解析,llm_response_cache 避免重复 LLM 调用discovery_tokens 列记录每条 observation/summary 的发现 token 成本
被动状态同步StateModule 的 state_dict 和 load_state_dict 支持状态快照和恢复PostToolUse Bash Hook 拦截 git/gh 命令自动更新getItem 等待 project-store onFinishHydration 回调后再读取dataloader (pq_idx, rg_idx, epoch) 三元组追踪数据位置
循环检测文件追踪去重:all_files_list vs implemented_files 模糊路径匹配无显式循环检测,依赖 find_news 语义去重间接避免is_stuck() 基于 assistant 消息内容重复度,阈值 2 次doc_status 6 态状态机 + multimodal_processed 布尔标记防重复content_hash SHA256 + 30s 窗口去重,防止高频对话重复存储@import 栈式循环引用检测,最大嵌套 5 层
多提供商摘要摘要生成支持 Anthropic/OpenAI/Google 三种 LLM 客户端路由BrainMemory 区分 MetaGPTLLM 与 OpenAI 两种摘要路径不涉及(单一 LightRAG 存储抽象,后端可切换)FallbackEmbeddingProvider 熔断链:3 次失败 → 60s 冷却
缓存失效策略文件 st_mtime 比对,外部修改自动感知刷新缓存L2 检查 embedding 有效性;L3 仅手动 DELETEdiskcache size_limit 自动淘汰 + TTL 过期双重机制Redis TTL 30分钟自动过期 + is_dirty 脏标记避免冗余写入mtime + config_hash 双重校验,文件修改或配置变更自动失效无主动失效,依赖 Self-Heal 自动修复;configSignature 变化导致自然 miss90 天滑动窗口过滤搜索结果,超期记录不参与语义排序embedding_cache LRU 淘汰(50,000 行上限),按 updated_at 排序mtime 比对:文件未修改则命中内存缓存
容量触发转储drop() 先 dump 到临时目录备份再删库,保留最近 N 个备份num_history_runs 滑动窗口(SuperAgent=5, Research=3)
图结构自组织GraphStructureReorganizer 双线程:KMeans 聚类 + LLM 摘要自动构建 PARENT 层级树
经验池复用ExperiencePool 独立于记忆系统,BM25/Chroma双后端 + LLM Reranker + req→resp结构化经验对5 个角色独立记忆实例,互不共享,避免交叉污染
敏感信息过滤prompt 中约束只提取个性化信息,排除通用知识和临时信息SENSITIVE_CONFIG_KEYS 集合过滤 apikey,pruneAgentResult 删除 screenshot base64suppression 机制通过 ignore pattern 过滤不需要的 findingssession_export sanitize_content 过滤 system 标签和 JSON 工具结果
Federation 支持原生 DOLT_PUSH/DOLT_PULL,支持 peer-to-peer 同步
Time-travel 查询AS OF 语法 + dolt_history_* 表,无需手动 snapshot
冲突解决dolt_conflicts 表暴露冲突,支持 --ours/--theirs 策略upsert 语义:已存在则更新 last_seen/detail,已 resolve 则 reopenrank 分片无冲突,模型参数 rank 0 单写者
远程认证支持 Hosted Dolt(--user + DOLT_REMOTE_PASSWORD 环境变量)
自动重试指数退避重试(30s 窗口),处理 12+ 瞬态错误模式load_state 三级降级:主文件 → .bak → empty_state,不重试写入

最佳实践

1.LLM 提取优于手动记录:LLM 能捕获对话中隐含的偏好和背景,手动 add_fact 粒度太粗

2.防抖是必须的:30s 窗口 + thread_id 去重,避免高频对话场景下 LLM 调用浪费

3.置信度门控:不是所有信息都值得记住,0.7 阈值过滤低价值事实

4.配置化而非硬编码:8 项参数都应可配置,支持运行时动态调整

5.原子写入保护数据:temp + rename 模式防止写入中断导致数据损坏

6.中间件模式对业务透明:记忆的读写不应侵入业务代码

7.三维度向量列并存:同表定义多维度列避免切换 embedding 模型时的数据迁移

8.余弦相似度+时间衰减混合排序:1.2*sim+0.2*time 平衡语义相关性和时间新鲜度

9.上下文窗口扩展:检索到相关消息后自动获取前后 N 条还原完整对话场景

10.HNSW 索引 + cosine_ops:pgvector 的 HNSW 索引比 IVFFlat 更适合中小规模高精度场景

11.单库混合存储:PostgreSQL 同时承载结构化数据和向量检索,减少运维复杂度

12.O_EXCL 优于 flock:文件创建级原子性比文件锁更轻量且无死锁风险

13.空字符串作删除语义:update 接口中空字符串表示删除 key,undefined 表示不修改,比 null/delete 标记更直观

14.归档用 ISO 时间戳命名:天然字典序排序,无需额外索引即可找到最新归档

15.分层解耦优于单一系统:短期记忆关注性能和序列化,长期记忆关注语义检索,需求不同应分层设计

16.抽象基类实现后端可插拔:测试用 InMemory,生产用 Redis,无需改代码

17.mark 标记优于多表存储:一条消息可关联多个 mark,避免为每种消息类型创建独立表

18.TTL 滑动窗口优于固定过期:每次访问刷新过期时间,避免活跃会话被误删

19.三策略降级确保数据不丢失:LLM 提取失败时至少保留原文

20.pipeline 批量操作优于逐条执行:Redis 操作使用 pipeline 保证原子性和性能

21.deepcopy 防止外部修改:InMemoryMemory 存储时 deepcopy 消息和 marks,避免外部修改影响内部状态

22.异步上下文管理优于手动 close:使用 async with 确保资源正确释放

23.双图嵌套记忆隔离:外层图持有跨轮次摘要,子图持有单轮工作记忆,互不污染

24.retrieval_keys 集合去重:用 set_union reducer 跨压缩周期累积已执行检索,避免 Agent 重复调用相同工具

25.task_completions 作为断点续跑唯一依据:只记录成功完成的任务,API 错误不写入

26.幂等去重写入:record_task_completion 先读取过滤再重写,保证同一 task_id 只有一条记录

27.Agent 主动检索优于自动注入:通过工具调用让 Agent 决定何时需要记忆,节省 token

28.闭包工厂注册工具:用 create_memory_search_tool 闭包绑定 MemoryManager 实例,避免全局状态

29.XML 标签包裹摘要:<previous-summary> 标签让 LLM 明确区分摘要与实际对话

30.0.9 安全系数:压缩阈值在 ratio 基础上再乘 0.9,预留 token 余量防止溢出

31.check_valid_messages 分割校验:压缩分割前验证保留消息的完整性,防止 tool_use 与 tool_result 被拆散

32.文件即记忆:AGENTS.md 作为记忆载体,人类可读可编辑,版本控制友好

33.幂等加载:before_agent 检查 state 中是否已有记忆内容,避免重复下载

34.命名空间正则校验:拒绝通配符字符防止 glob 注入攻击

35.Next Steps 与持久化分离:LLM 生成的 next_steps 仅存内存不写文件,避免过时建议污染知识库

36.事件驱动优于轮次驱动:以 write_file 调用而非固定轮次触发记忆清洗,精确匹配实际需要

37.模糊路径匹配追踪文件:支持部分路径匹配和路径边界检查,容忍 LLM 生成的路径不一致

38.惰性加载优先:先检查 pkl 缓存是否存在且有效,避免重复 embedding 计算

39.客户端驱动无状态:对话历史由前端维护,服务端每次请求从 messages 重建,天然支持水平扩展

40.embedding 维度校验:加载缓存后统计 non_empty/empty 数量,全空则触发重建而非返回无效数据

41.多维度缓存键:按 repo_type+owner+repo+language 组合生成缓存文件名,避免不同维度数据互相覆盖

42.中间件触发优于显式调用:通过 after_agent hook 自动入队,Agent 代码零侵入

43.mtime 缓存避免重复解析:用文件修改时间作为缓存键,外部修改自动感知

44.REST API 暴露记忆状态:提供 GET/POST 端点便于调试和前端展示记忆内容

45.JSONL 首行 metadata 设计:第一行存 _type:metadata,list_sessions 只读首行即可获取元信息

46.multi_turn 单向状态机:会话一旦标记为多轮就不回退,避免状态抖动

47.双后端统一接口:disk/Redis 通过 backend 字段切换,get/set 方法内部分支处理,调用方无感知

48.读写 DTO 分离:MessageTable/MessageRead/MessageUpdate 继承同一基类,避免 ORM 对象泄露到 API 层

49.模块级函数优于单例服务:memory.py 的顶层函数让任何组件都能直接 import 调用,降低耦合

50.error 消息默认过滤:查询时 WHERE error=False 自动排除错误消息,避免污染对话历史

51.双写缓冲:每条记忆同时写入 WorkingMemory 和目标类型,通过 working_binding 绑定,异步清理临时节点

52.优先级消息队列:merge 操作优先于 add/remove,确保冲突解决不被新写入阻塞

53.80% 阈值清理优于固定周期:只在接近上限时触发清理,减少不必要的数据库操作

54.watch 过滤写入:只将 Role 关注的 Action 消息写入长期记忆,避免噪声污染向量库

55.三重条件门控:检索长期记忆前检查 k!=0、用户消息、容量超限三个条件,减少不必要的向量查询

56.读写分离开关:经验池的 enable_read/enable_write 独立控制,支持灰度发布和只读模式

57.脏标记优化:is_dirty 标记避免无变更时的冗余 Redis 序列化写入

58.单例 LLM 共享 token 计数:多 Agent 共用同一 config_name 的 LLM 实例,全局统一成本追踪

59.消息数截断简单但有风险:system 消息可能被丢弃,生产环境应增加首条保护

60.分类驱动更新策略:不同类别采用不同更新策略(profile 总是合并、events 总是创建、preferences 按 facet 去重)

61.三决策安全归一化:create+merge 自动降级为 none,同一 URI 矛盾操作两个都丢弃

62.热度衰减优于手动清理:sigmoid×exp_decay 让时间和使用频率自动调节排序,无需定期批量清理

63.facet 隔离防误删:去重 prompt 中明确约束不同偏好面的记忆不应互相删除

64.mtime+config_hash 双重校验:文件修改或解析配置变更都能自动失效缓存,比单一 mtime 更可靠

65.atexit 兜底 + asyncio.gather 并发 finalize:即使用户忘记手动清理,数据也能落盘

66.委托式存储优于自建:复用宿主框架的 KV 存储抽象,存储后端随配置自动切换,零额外维护

67.Self-Heal 优于 TTL 过期:回放成功后自动检测并更新变化的选择器,比设置过期时间更精准

68.缓存键只含变量名不含值:同一指令模板不同变量值共享缓存条目,回放时动态替换

69.深拷贝隔离缓存条目:存储和读取时都做 JSON 深拷贝,防止外部引用意外修改缓存

70.版本号字段预留迁移路径:缓存条目包含 version 字段,格式升级时旧条目自动视为 miss

71.角色隔离优于标签过滤:为每个角色创建独立记忆实例比共享池+标签过滤更简单且无噪声

72.BM25 适合领域术语密集场景:金融/医疗等专业领域词法精确匹配往往优于通用语义向量

73.后验反思需要量化指标:仅有定性反馈不够,必须传入 returns_losses 等量化结果才能判断决策质量

74.expunge 分离 session:查询后立即 expunge 避免 SQLAlchemy lazy-load 陷阱

75.双检锁懒初始化:asyncio.Lock 延迟创建避免在 __init__ 中绑定事件循环

76.三态状态机:active/inactive/require_user_input 比简单布尔值更精确地表达会话生命周期

77.O_EXCL 优于 existsSync+write:内核级原子性消除 TOCTOU 竞态

78.ISO 时间戳天然排序:归档文件名用 ISO 格式,字典序即时间序

79.Session ID 正则校验:/^[a-zA-Z0-9_-]+$/ 防止路径穿越攻击

80.归档优于软删除:物理移动到 archive/ 子目录,恢复时重建 active 文件

81.事务内提交:在 SQL 事务内调用 DOLT_COMMIT,保证原子性,失败时自动回滚

82.Ephemeral 分离:临时数据存储在 dolt_ignore 表中,避免污染版本历史

83.Cell-level merge:利用 Dolt 的字段级冲突检测,减少假冲突,提高并发写入成功率

84.Time-travel 优先:优先使用 AS OF 语法而非手动 snapshot 表,查询性能更高

85.Federation 原生支持:直接使用 DOLT_PUSH/DOLT_PULL,无需自定义同步协议

86.自动重试必须:Dolt Server 有多种瞬态错误(连接断开、只读模式、catalog 竞态),必须实现指数退避重试

87.显式 BEGIN/COMMIT:Dolt Server 默认 --no-auto-commit,必须显式开启事务保证持久化

88.Pull 后重置自增:Pull 后必须重置 AUTO_INCREMENT,防止 ID 冲突

89.凭据环境变量传递:远程认证凭据通过环境变量传递,避免命令行泄漏

90.Schema 版本化:DDL 变更通过迁移框架执行,每次迁移自动提交到 Dolt 历史

91.3 层搜索工作流:先索引再详情,10x token 节省,强制 Agent 遵循 search→timeline→get 模式

92.粒度化向量文档:narrative/facts/text 分别嵌入,避免长文档语义稀释

93.幂等迁移检查实际状态:PRAGMA table_info 检测列存在性,而非仅依赖版本号

94.MCP 协议替代直接依赖:通过 stdio MCP 连接 chroma-mcp,消除 ONNX/WASM 等重依赖

95.备份在写入前而非写入后:shutil.copy2 在 safe_write_text 之前执行,确保备份始终是上一次成功状态

96.校验在序列化两端:load 时 ensure_defaults + validate,save 时也 ensure_defaults + validate,双重保障

97.suspect detector 保护:≥3 个 open findings 的 detector 本次 0 结果时不自动 resolve,防止 detector 未运行导致误判

98.Markdown 即记忆:用人类可读的 Markdown 文件作为记忆载体,天然支持 Git 版本控制和团队协作

99.影子仓库隔离:检查点使用独立 Git 仓库而非项目内 stash/branch,彻底避免污染项目历史

100.模块化拆分记忆:通过 @import 将大型记忆文件拆分为独立模块,各团队成员可独立维护自己负责的模块

101.懒导入重依赖:工厂函数中按需 import postgres/sqlite 模块,避免未使用后端的依赖污染

102.哈希在摘要后做:对 LLM 提取的 summary 而非原文做哈希,同义不同词经摘要后趋同

103.extra 字典扩展 schema:reinforcement 等元数据存 extra dict 而非新增列,避免 migration

104.双重变更检测:mtime 快速路径 + SHA256 hash 避免不必要的 re-embed

105.FTS5 触发器同步:用 AFTER INSERT/UPDATE/DELETE 触发器保持 FTS 索引与主表一致

106.熔断而非无限重试:3 次连续失败后 60s 冷却,避免雪崩

107.路径白名单写入:严格限制记忆写入路径防止路径遍历攻击

108.过采样后合并:hybrid search 先 3x 过采样再合并去重,提高召回率

109.写入时数据自证:从 persist 的 JSON value 中提取 projectId 而非依赖全局状态,根治 rehydration 竞态

110.迁移不删旧文件:旧单体文件保留为 fallback,getItem 自动降级读取,零风险回退

111.启动时恢复守卫:每次启动对比 legacy 与 per-project 数据丰富度,自动修复竞态覆盖

112.三文件分离优于单文件打包:模型参数可独立用于推理,优化器仅续训需要,元数据 JSON 人类可读

113.rank 分片保存优化器:DDP 下每个 rank 的优化器状态不同,独立保存避免跨 rank 通信

114.向后兼容补丁机制:_patch_missing_keys 为旧 checkpoint 自动填充新增参数默认值,避免旧模型作废

115.自动发现优于手动指定:find_largest_model + find_last_step 让恢复训练无需记忆具体路径和 step 编号

116.mtime 缓存避免重复 I/O:同一进程内多次 load 只需一次 stat 系统调用

117.记忆注入与存储解耦:format_for_injection 独立于 load/save,便于替换注入格式

118.环境变量开关保护:MEMORY_ENABLED 默认关闭,显式启用才加载记忆模块