记忆如何工作
提炼记录、原文记录、文档 RAG、可重建投影与限定作用域的召回。
1. 选择规范写入
对聊天与智能体事件,默认使用 infer:true。FishMem 只进行一次提取,在批次内去重,并只保存提炼后的记录。提取失败会让写入失败。
如果应用或智能体已经整理出持久陈述,使用 infer:false。它不调用 LLM,会按原文保存 content 或每条非空消息。FishMem 不会双写两种形式;更正通过明确的更新、失效或删除完成。
2. 文档走独立路径
长文本和文件应保留来源及用于 RAG 的分块/索引元数据。文本通过同步 documents.ingest 保存准确 UTF-8 原件、不可变版本和当前来源指针;确定性分块记录 UTF-8 字节偏移,关键词与向量行可重建。documents.search 返回命中分块与可选相邻证据。
PDF、Office、EPUB、邮件、图片与文本文件走异步 document-uploads:FishMem 保存不可变原始字节,排队交给 Docling 提取,保留 Markdown 与无损 JSON 结构,再调用同一文档写入器。原文件不会经过 memories.add。
不要把整份文件塞进个人事实写入并把每段都当作记忆。真正需要跨会话保存的结论应单独写入。直接文本上限为 1,000,000 UTF-8 字节;文件上传上限为 25,000,000 原始字节与 300 个提取页面;音视频不在当前契约内。
3. 构建投影
FishMem 可以从规范记录构建关键词/嵌入索引,以及用于当前值、历史和替代关系的可选派生状态。投影带来源关系且可重建,投影失败不能删除或改写规范记忆。
Desktop 使用本地嵌入模型与 SQLite 索引,不需要托管嵌入密钥。其他部署可选择 OpenAI 兼容嵌入或自定义本地模型。
4. 在作用域内召回
每条记忆属于结构化命名空间,也可按 userId、agentId 与 runId 过滤。搜索使用相同作用域,防止不同用户或智能体之间发生泄漏。排名可组合词法相关性、语义相似度、最近时间与事件时间、图关系、访问与重要性。
智能体侧摘要
FishMem Desktop 要求连接的 Skill 决定什么值得长期保存,并提交简洁、自包含的记忆。这是智能体策略,不是存储引擎内的隐藏改写。用户可以在 Desktop 查看并纠正准确内容。Desktop 不支持远程嵌入或聊天 LLM,本地多语言 E5 索引未就绪前会拒绝写入与搜索。