xbot 支持可插拔的记忆提供者。Agent 使用记忆在对话间持久化信息、回忆过往交互、维护用户专属上下文。内置默认是 xbot;flat、letta 是可选实现,none 则完全关闭记忆(无工具、无提示词)。
| Flat | Letta(MemGPT 风格) | None | |
|---|---|---|---|
| 核心记忆 | 内存块 | SQLite(始终在提示词中) | 无 |
| 归档记忆 | Grep 可搜索的文本块 | 向量搜索(chromem-go) | 无 |
| 回顾记忆 | 事件历史 | FTS5 全文搜索 | 无 |
| 依赖 | 无 | 需要嵌入模型 | 无 |
MEMORY_PROVIDER=xbot # xbot(默认)| flat | letta | none
none 是显式模式:Agent 完全拿不到记忆工具和记忆提示词——不回忆、不整理、不注入任何记忆内容。
Letta 模式需配置嵌入模型:
LLM_EMBEDDING_PROVIDER=openai
LLM_EMBEDDING_BASE_URL=https://api.openai.com/v1
LLM_EMBEDDING_API_KEY=sk-xxx
LLM_EMBEDDING_MODEL=text-embedding-3-small
所有长期记忆存储为单个文本块,每次请求时注入系统提示词。当你通过 /new 归档记忆并重置当前对话时,LLM 会合并和压缩记忆块。
工具: memory_write、memory_list
| 特性 | 详情 |
|---|---|
| 存储 | 文件文本块 |
| 持久化 | 与会话状态一起保存/恢复 |
| 合并 | /new 时由 LLM 驱动 |
| 搜索 | 基础文本匹配(grep 风格) |
TipFlat 极其简单——想要人类可读、不依赖 SQLite 的文本块时很合适。内置xbot才是默认值。
受 MemGPT 启发的三层记忆架构。基于 SQLite 构建,支持 chromem-go 向量嵌入和 FTS5 全文搜索。
以下三个记忆块始终存在于系统提示词中:
| 记忆块 | 用途 | 隔离策略 |
|---|---|---|
persona | Agent 的身份和性格 | 全局——所有用户共享 |
human | 每用户观察和偏好 | 按用户——通过发送者 ID 隔离 |
working_context | 当前任务状态和活跃上下文 | 按会话——/new 时重置 |
工具: core_memory_append、core_memory_replace、rethink
面向详细事实、事件和上下文的长期向量存储。基于 SQLite + chromem-go 嵌入,支持语义搜索。
工具: archival_memory_insert、archival_memory_search
完整的对话历史,可按日期范围搜索。由 SQLite FTS5(全文搜索)提供支持,关键词匹配速度极快。
工具: recall_memory_search
设置 memory_provider: "none" 后,Agent 完全不具备记忆能力:
- 不注册任何记忆工具(
memory_*、core_memory_*、archival_memory_*、recall_memory_search),模型根本看不到它们。 - 系统提示词中不注入任何记忆章节。
- 不注入回忆内容、不做自动记忆整理、不触发压缩记忆钩子;SubAgent 同样没有记忆。
Notenone是显式模式,不是兜底。未知/未注册的 provider 名仍会拿到通用的 flat 提示词引导;只有none会关闭记忆。
当使用 /new 重置当前对话时:
| Provider | 行为 |
|---|---|
| Flat | LLM 合并和压缩记忆块——旧记忆被总结,冗余内容被移除 |
| Letta | 核心记忆跨会话保留;归档记忆保留;working_context 被清除 |
在多租户部署中(Server 模式,多个渠道如飞书 + Web):
persona是全局的——Agent 的核心身份在所有用户之间共享human是按用户的——Agent 了解到的关于 Alice 的信息对 Bob 不可见working_context是按会话的——每个对话维护自己的任务上下文
Important通过core_memory_append/core_memory_replace设置的核心记忆块在会话之间是持久化的。使用rethink触发 Agent 重新审视和演进其记忆,类似于 MemGPT 的自我编辑机制。
详见核心记忆隔离设计。