Files
deerflow-code/offline-backend-20260512/backend/docs/HINDSIGHT_SETUP_ZH.md
T
xuhdandClaude Opus 4.7 f9d7610679 feat(memory): Memory V2 重写 - 可插拔 provider + Hindsight 集成
以 Hermes 的可插拔记忆架构为骨架重写 deerflow 记忆模块,兼容原有
结构化数据,并新增 Hindsight 作为外部记忆后端。

P1 - 抽象层 + builtin 本地记忆:
- MemoryProvider 抽象基类 + MemoryManager 编排层(builtin + ≤1 外部)
- BuiltinFileProvider:USER.md/MEMORY.md 二元存储、字符配额、文件锁、
  原子写、frozen snapshot
- memory 工具(LangChain @tool):LLM 主动写入用户画像/工作笔记
- 记忆内容安全扫描(注入/外渗模式 + 不可见 unicode)
- memory_config 改为嵌套结构 + 旧扁平字段兼容 + per-user 三层覆盖
- 迁移脚本 migrate_memory_to_v2.py:旧 memory.json -> USER.md/MEMORY.md
- Gateway 新增 /api/memory/v2 与 v2/config 端点(用户可配置白名单字段)

P2 - Hindsight 外部 provider:
- HindsightProvider:双 bank 隔离(user bank 跨 agent 共享 + work bank
  agent 私有)、并发召回合并、auto-retain、on_memory_write 镜像
- hindsight_recall/reflect/retain 三个 LangChain 工具
- MemoryMiddleware.before_model 注入 Hindsight 动态召回
- context/tools/hybrid 三种 memory_mode
- hindsight-client 作为可选依赖,未装时自动退回纯 builtin

注入走系统提示词(builtin frozen snapshot)+ before_model(Hindsight
动态召回)。后台抽取保留但默认关闭,P3 期重接入。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 12:15:55 +08:00

4.1 KiB

Hindsight 记忆后端接入指南

Memory V2 的外部 provider。详见 docs/MEMORY_V2_DESIGN_ZH.md。

Hindsight 是带知识图谱、实体消解、多策略检索的长期记忆服务。DeerFlow 以 HTTP 客户端方式接入一个你自己部署的 Hindsight Docker 实例(local_external 模式)。

DeerFlow 不负责 Hindsight 的部署与运维 —— 它只是一个 HTTP 客户端。Hindsight 不可达 或未配置时,记忆系统自动退回纯 builtin 本地记忆,不影响任何功能。


1. 部署 Hindsight Docker

Hindsight 的官方镜像与部署方式请以 Hindsight 官方文档为准。典型的本地部署:

# 下面的 8765 只是占位示例。端口随你的 Hindsight 实例实际暴露的来,
# 例如映射成 9999、8888 等都行 —— deerflow 只认 config.yaml 里的 api_url。
docker run -d \
  --name hindsight \
  -p <宿主端口>:<容器端口> \
  -v hindsight-data:/data \
  <hindsight-镜像>

# 确认服务可达 (端口换成你实际暴露的)
curl http://localhost:<宿主端口>/health

数据卷 hindsight-data 用于持久化记忆库,容器重建时不丢数据。

端口说明:deerflow 是纯 HTTP 客户端,只需要把 api_url 指向 Hindsight 的 HTTP API 端口即可。如果你的实例同时暴露了多个端口 (例如 API 与 Web UI 各一个), api_url 填 HTTP API 那个;Web UI 端口 deerflow 不需要。


2. 安装客户端依赖

DeerFlow 侧需要 hindsight-client Python 包(可选依赖,默认不装):

cd offline-backend-20260512/backend
uv pip install 'hindsight-client>=0.4.22'
# 或安装 harness 的 hindsight extra:
uv pip install -e 'packages/harness[hindsight]'

未安装时 HindsightProvider.is_available() 返回 False,provider 不会被注册。


3. 配置 config.yaml

在项目根 config.yaml 的 memory 段:

memory:
  enabled: true
  provider: hindsight              # 启用 Hindsight 外部 provider
  hindsight:
    mode: local_external
    api_url: http://localhost:8765  # 换成你实例实际暴露的 HTTP API 端口
    api_key: $HINDSIGHT_API_KEY    # 如果你的实例需要鉴权
    bank_id_template: "deerflow-user-{user_id}"
    work_bank_id_template: "deerflow-work-{user_id}-{agent_id}"
    memory_mode: context           # context / tools / hybrid
    recall_budget: mid             # low / mid / high
    auto_recall: true
    auto_retain: true
    retain_async: true

api_key 以 $ 开头时按环境变量解析。把密钥放进 .env:

HINDSIGHT_API_KEY=your-key

4. 双 bank 隔离

Memory V2 用两个 bank 隔离记忆(B 方案):

Bank 模板 内容
全局 user bank deerflow-user-{user_id} 用户身份、偏好,跨 agent 共享
agent 工作 bank deerflow-work-{user_id}-{agent_id} agent 私有工作笔记
  • LLM 调 memory(target="user") → 镜像到 user bank
  • LLM 调 memory(target="memory") → 镜像到 work bank
  • 自动 retain 的对话 → work bank
  • 召回时并发查两个 bank 并合并

模板占位符:{user_id} / {agent_id} / {thread_id}。


5. memory_mode 三种模式

模式 自动召回 自动写入 暴露工具给 LLM
context ✅ ✅ ❌ LLM 看不到 Hindsight
tools ❌ ❌ ✅ hindsight_recall / reflect / retain
hybrid ✅ ✅ ✅ 自动 + 工具齐发

tools / hybrid 模式下,get_available_tools 会额外暴露 3 个 Hindsight 工具。


6. 迁移旧记忆到 Hindsight

P1 的迁移脚本 scripts/migrate_memory_to_v2.py 只迁移本地 USER.md / MEMORY.md。 把这些记忆灌进 Hindsight bank 的步骤将在后续提供。


7. 排查

现象 检查
记忆没召回 curl api_url/health;memory.provider 是否为 hindsight;injection.include_hindsight
启动日志报 "Hindsight provider 已配置但不可用" hindsight-client 是否安装;api_url 是否配置
LLM 看不到 Hindsight 工具 memory_mode 是否为 tools 或 hybrid
写入慢 确认 retain_async: true