
DeerFlow Memory Settings 增删改流程本地评审指南从 Fixture 加载到 API 逐层验证【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow本文基于 DeerFlow 仓库中的 Memory Settings 评审文档完整介绍如何以最少手动步骤本地评审“记忆设置”页面的事实fact新增与编辑流程包括启动服务、加载样本 Fixture、执行最小手动测试与可选健全性检查并结合 Gateway 的 Memory API 路由、前端 Memory Settings 页面组件与 DeerMem 存储层源码说明每一步操作背后的接口与实现细节帮助读者既能照做验证、又能读懂其底层机制。评审目标与适用场景DeerFlow 的Settings Memory页面提供对全局记忆数据用户上下文摘要、历史摘要、记忆事实 facts的本地搜索、过滤、清空与单条增删改能力。backend/docs/MEMORY_SETTINGS_REVIEW.md就是为这套功能的评审者准备的操作手册它假设你已经有一个可用的本地开发环境通过预置一份“内容可预测”的样本数据把“新增事实立即生效、编辑立即生效、刷新后持久化”这三条核心验收标准压缩成 6 步以内的手动操作。适用前提本地已按任意可用方式运行 DeerFlowmake dev、make docker-start或已有环境使用 Python 3 执行 Fixture 加载脚本脚本自身无第三方依赖仅用标准库argparse/json/shutil。第一步启动本地服务文档给出的两种启动方式都定义在仓库根目录的 Makefile 中make dev对应 Makefile 中的dev目标先执行./scripts/check.py做前置检查再通过./scripts/serve.sh --dev以开发模式启动前后端。make docker-start对应 Makefile 中的docker-start目标实际调用./scripts/docker.sh start走 Docker Compose 环境。如果本地已有运行中的 DeerFlow 实例文档明确允许直接复用无需重启。启动后文档给出了两个默认本地地址地址说明http://localhost:2026完整应用前端 Gateway入口http://localhost:3000仅前端的本地降级入口frontend-only fallback第二步加载样本记忆 Fixture进入评审状态的关键一步是把预置的样本记忆写入本地运行时文件python scripts/load_memory_sample.py该脚本 scripts/load_memory_sample.py 的默认行为是把 backend/docs/memory-settings-sample.json 拷贝到backend/.deer-flow/memory.json即默认本地运行时目标见脚本中的default_source/default_targetscripts/load_memory_sample.py。脚本支持三个可选参数--help可见参数默认值作用--sourcebackend/docs/memory-settings-sample.json相对仓库根指定样本 JSON 路径--targetbackend/.deer-flow/memory.json指定运行时memory.json目标路径--no-backup未启用跳过备份直接覆盖目标文件备份机制值得单独说明若目标文件已存在且未传--no-backup脚本会先用当前时间戳%Y%m%d-%H%M%S格式把旧文件复制为memory.json.bak-timestamp再执行覆盖拷贝并打印备份路径这是文档中“loader 脚本在覆盖已有运行时记忆文件前会自动创建带时间戳的备份”一句的源码依据scripts/load_memory_sample.py。脚本还会先对源文件做json.load校验避免把坏 JSON 写进运行时scripts/load_memory_sample.py。样本 Fixture 的结构backend/docs/memory-settings-sample.json 是一个完整的记忆文档顶层包含version1.0、lastUpdated、user、history、facts五部分user三个上下文小节workContext/personalContext/topOfMind每项为{summary, updatedAt}history三个历史小节recentMonths/earlierContext/longTermBackgroundfacts10 条fact_review_001到fact_review_010的示例事实覆盖preference、workflow、project、testing等 categoryconfidence在 0.78–0.95 之间source多为thread_*形式的会话来源标识其中fact_review_010的source为manual——这正是“编辑测试”步骤要用的那条样例事实This sample fact is intended for edit testing.而fact_review_009Delete fact testing can target this disposable sample entry.则是专门留给“单条删除”检查的一次性条目。这份 Fixture 与后端 API 的响应模型一一对应Gateway 路由中的MemoryResponse/UserContext/HistoryContext/FactPydantic 模型backend/app/gateway/routers/memory.py字段名与 Fixture 的 JSON 键完全一致因此同一份文件既可被脚本写入磁盘也可直接通过POST /api/memory/import导入。第三步打开 Settings Memory 页面服务就绪、Fixture 加载后在http://localhost:2026或前端的http://localhost:3000进入Settings Memory。页面组件为 frontend/src/components/workspace/settings/memory-settings-page.tsx它会通过 frontend/src/core/memory/api.ts 请求GET /api/memory拉取当前用户的全部记忆并渲染两个区块摘要区块Summaries把user与history的 6 个小节渲染为 MarkdownbuildMemorySectionGroupssummariesToMarkdownmemory-settings-page.tsx事实列表Facts渲染facts数组每条显示内容、category、置信度与来源source。最小手动测试Minimal Manual Test文档的核心验收流程共 6 步以下是完整步骤及对应的后端接口点击Add fact。创建一条新事实ContentReviewer-added memory factCategorytestingConfidence0.88确认新事实立即出现在列表中且来源显示为Manual。编辑样本事实This sample fact is intended for edit testing.即fact_review_010改为ContentThis sample fact was edited during manual review.CategorytestingConfidence0.91确认被编辑的事实立即更新。刷新页面确认新增事实与被编辑事实仍然持久存在。前端到后端的调用链步骤 2 触发useCreateMemoryFact最终POST {backend}/api/memory/facts请求体为FactCreateRequestcontent必填、category默认context、confidence限定 0–1默认 0.5见 frontend/src/core/memory/api.ts 与后端模型 backend/app/gateway/routers/memory.py步骤 4 触发useUpdateMemoryFact走PATCH {backend}/api/memory/facts/{factId}请求体是“保留缺省字段”的FactPatchRequest三个字段均为可空对应后端update_fact调用backend/app/gateway/routers/memory.py两个接口的响应均为完整MemoryResponse前端据此立即刷新列表——这就是“立即出现/立即更新”验收点的机制来源每次写操作返回全量文档而非让前端局部推断。“Manual” 来源标记的实现依据新增事实后来源显示Manual这一点在存储层有明确定义DeerMem 的写入路径会把人工新增事实的source标记为manual见update_fact/create_fact实现中的source: manualbackend/packages/harness/deerflow/agents/memory/backends/deermem/deermem/core/updater.py且存储层将manual/consolidation/import/unknown识别为一组“非会话来源”的合法取值backend/packages/harness/deerflow/agents/memory/backends/deermem/deermem/core/storage.py。DeerMem 更新器还会对source.type manual的高置信度用户手写事实打上[MANUAL]标记避免其被后续自动更新逻辑改写updater.py。因此“来源显示Manual”不仅是 UI 文案而是贯穿存储与更新策略的数据语义。写接口的错误语义评审时可能遇到从 backend/app/gateway/routers/memory.py 的路由实现看写操作返回的错误码是有约定的状态码触发条件400confidence越界、内容为空等校验错误_map_memory_fact_value_errormemory.py409内容重复Duplicate fact或事实数达到memory.max_facts容量策略上限后新事实被驱逐memory.py404PATCH/DELETE时 fact id 不存在memory.py501当前配置的 memory backend 不支持该操作最小化 backend 只实现add/get_contextmemory.py500并发冲突之外的存储损坏MemoryCorruptionError或文件 IO 失败本地评审默认使用 DeerMem 后端正常走完上述 6 步不应遇到这些错误码它们主要用于解释“如果手动测试失败页面报错该如何解读”。可选健全性检查Optional Sanity Checks文档在最小测试之外列出了 5 项可选检查逐项对应源码行为搜索Reviewer-added确认新事实被命中。前端搜索为纯本地过滤输入经useDeferredValue归一化后对每条事实做${fact.content} ${fact.category}的小写包含匹配memory-settings-page.tsx不走服务端。搜索workflow确认 category 文本也参与搜索。上式把category拼进匹配串正是“category 文本可被检索”的实现Fixture 中fact_review_002的 category 恰为workflow因此该关键词必然命中。在All/Facts/Summaries三种视图间切换。视图切换由MemoryViewFilter all | facts | summaries控制showSummaries filter ! facts、showFacts filter ! summaries决定两个区块的显隐memory-settings-page.tsx。删除一次性样本事实Delete fact testing can target this disposable sample entry.fact_review_009确认列表立即更新。删除走DELETE /api/memory/facts/{factId}memory.py同样返回全量MemoryResponse驱动即时刷新。清空全部记忆确认页面进入空态。清空走DELETE /api/memorymemory.py前端空态由isMemorySummaryEmpty6 个摘要小节全空与 facts 列表为空共同决定memory-settings-page.tsx。补充说明用户归属与运行时文件位置记忆按用户隔离。Gateway 通过_resolve_memory_user_id解析本次请求的记忆属主内部通道调用可携带受信 owner 头经AuthMiddleware校验后生效浏览器/API 调用则回退到 contextvar 中的有效用户原始 id 会经make_safe_user_id归一化保证记忆桶与文件/上传桶对齐backend/app/gateway/routers/memory.py、backend/packages/harness/deerflow/config/paths.py。本地单用户评审场景下这一层无感但它解释了为什么运行时文件默认落在backend/.deer-flow/这一项目级目录。除评审文档点名的两个文件外页面还提供GET /api/memory/export与POST /api/memory/import前端 Export/Import 按钮、GET /api/memory/config返回enabled/mode/injection_enabled/shutdown_flush_timeout_seconds/manager_class/backend_config等后端无关配置、GET /api/memory/status配置数据一体以及POST /api/memory/reload外部改动文件后强制从存储重载等端点均可在 backend/app/gateway/routers/memory.py 中逐一核对评审“手动改memory.json后点 reload 是否生效”这类场景时可直接使用。评审检查单速查#操作预期结果对应接口/实现1python scripts/load_memory_sample.py打印目标路径与备份路径scripts/load_memory_sample.py2Add fact0.88 / testing立即出现来源ManualPOST /api/memory/facts3编辑fact_review_0100.91立即更新PATCH /api/memory/facts/{id}4刷新页面两条事实仍在GET /api/memory 磁盘memory.json5搜索Reviewer-added/workflow分别命中新事实 / category 匹配前端本地过滤6删除fact_review_009、清空全部列表即时更新 / 进入空态DELETE /api/memory/facts/{id}、DELETE /api/memory按此清单完成最小测试后即覆盖了 Memory Settings 增/改/删/查四条主链路与搜索、过滤、持久化三个验收点若需继续深入可分别阅读 backend/docs/MEMORY_IMPROVEMENTS.md 与 backend/docs/MEMORY_IMPROVEMENTS_SUMMARY.md 了解记忆机制的改进脉络以及 backend/app/gateway/routers/memory.py 中各端点的完整错误处理约定。【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考