记忆系统
💾
记忆让 DeerFlow 在多个会话中保留有用信息。Agent 记住用户偏好、项目背景和反复出现的事实,这样它可以在不每次从零开始的情况下给出更好的响应。
记忆是 DeerFlow Harness 的一个运行时功能。它不是简单的对话日志,而是跨多个独立会话持久化、在未来对话中影响 Agent 行为的结构化事实和上下文摘要存储。
记忆存储什么
记忆存储包含几类信息:
- 工作上下文:用户正在进行的项目摘要、目标和反复出现的话题。
- 个人上下文:Agent 学到的偏好、沟通风格和其他用户特定细节。
- 近期关注:最近的关注领域和活跃任务。
- 历史:近几个月的上下文、早期背景和长期事实。
- 事实:Agent 从对话中提取的离散具体事实(例如偏好的工具、团队名称、项目约束)。
每个类别随着 Agent 从持续对话中学习而随时间更新。
工作原理
记忆由 MemoryMiddleware 管理,在每次 Lead Agent 轮次上运行:
- 注入:每次对话开始时,Agent 当前记忆以受控的 token 预算(
max_injection_tokens)注入到系统提示中。 - 学习:对话结束后,后台任务提取新事实并更新相关记忆类别。更新通过
debounce_seconds防抖以批量处理快速变化。 - 按 Agent 记忆:当自定义 Agent 激活时,其记忆独立于全局记忆存储。这保持不同 Agent 的知识隔离。
配置
memory:
enabled: true
# 全局记忆文件的存储路径。
# 默认:{base_dir}/memory.json(解析为 backend/.deer-flow/memory.json)
# 绝对路径按原样使用,相对路径相对于 base_dir 解析。
storage_path: memory.json
# 存储类(默认:基于文件的 JSON 存储)
storage_class: deerflow.agents.memory.storage.FileMemoryStorage
# 处理排队记忆更新前等待的秒数(防抖)
debounce_seconds: 30
# 记忆更新提取使用的模型(null = 使用默认模型)
model_name: null
# 要存储的最大事实数
max_facts: 100
# 存储事实所需的最低置信度分数(0.0–1.0)
fact_confidence_threshold: 0.7
# 是否将记忆注入到系统提示中
injection_enabled: true
# 注入到系统提示的最大 token 数
max_injection_tokens: 2000全局记忆与按 Agent 记忆
DeerFlow 支持两级记忆:
- 全局记忆:存储在
{base_dir}/memory.json。在没有特定 Agent 激活或 Agent 没有按 Agent 记忆文件时使用。 - 按 Agent 记忆:存储在
{base_dir}/agents/{agent_name}/memory.json。当自定义 Agent 激活时使用,使该 Agent 学到的知识保持独立。
MemoryMiddleware 根据请求配置中的活跃 agent_name 自动选择正确的记忆文件。
用于记忆存储的 Agent 名称通过 AGENT_NAME_PATTERN 验证,以确保文件系统安全。
存储位置
默认情况下,记忆文件存储在后端基础目录下:
- 基础目录:
backend/.deer-flow/ - 全局记忆:
backend/.deer-flow/memory.json - 按 Agent 记忆:
backend/.deer-flow/agents/{agent_name}/memory.json
你可以用 storage_path 字段更改存储路径。相对路径相对于基础目录解析;使用绝对路径可以将记忆存储在自定义位置。
自定义存储后端
storage_class 字段允许你用自定义实现替换默认的基于文件的存储。任何继承 MemoryStorage 并实现 load()、reload() 和 save() 方法的类都可以使用:
memory:
storage_class: mypackage.storage.RedisMemoryStorage如果配置的类无法加载,系统回退到默认的 FileMemoryStorage 并记录错误。
禁用记忆
完全禁用记忆:
memory:
enabled: false保留记忆存储但阻止注入到系统提示:
memory:
enabled: true
injection_enabled: false