为什么 OpenHuman 的记忆树始终显示 0 buffer(s)?一次从 Vault 到 Summary Tree 的完整排障

本文核心问题:为什么 OpenHuman 明明已经同步了文件,但点击“构建摘要树”后始终提示 Building summary trees · 0 buffer(s)

简短答案先说结论:

如果你只添加了本地 Vault(例如 Markdown、TXT 文件),即使显示 synced 成功,也可能无法生成记忆树。当前流程中,记忆树构建依赖 Gmail、Slack、Notion 等来源的数据,而本地 Vault 仅同步,不会自动进入 Summary Tree。

这篇文章记录了一次完整的排障过程:从怀疑文件路径错误、怀疑 Embedding 配置问题、查看日志、分析 worker,到最终确认产品当前行为边界。过程本身,比答案更有价值。


什么是 OpenHuman 的“记忆”?

本段核心问题:OpenHuman 的记忆功能到底在做什么?它和聊天记录有什么区别?

很多人第一次接触 OpenHuman,都会自然地理解为:

“它会把我所有东西记住。”

但实际体验很快会发现:

它并不是一个无限聊天记录系统,而是一个结构化的长期上下文系统。

在使用过程中,可以看到几个明显的概念:

  • Vault
  • Sync
  • Summary Tree(摘要树)
  • Tree View(树状视图)
  • Storage(存储库)

这些名字容易让人产生一种预期:

“只要把本地文件加进去,它就能自动理解我的知识库。”

事实并非如此。

在实际使用里,OpenHuman 更像一个:

个人数字上下文系统

它希望从:

  • Gmail
  • Slack
  • Notion

这类持续产生行为数据的来源中,提取结构化记忆。

例如:

  • 联系人
  • 项目
  • 决策
  • 会议
  • 偏好

而不是简单地把文件全文塞给模型。

这一点,是后面所有误解的起点。


问题出现:为什么 Summary Tree 永远是空的?

本段核心问题:为什么文件已经同步成功,但记忆树仍然构建失败?

问题出现得很直接。

在 OpenHuman 中添加了一个本地 Vault:

F:\12

界面最初显示:

0 file(s)

这意味着:

系统还没有读取到任何内容。

第一反应通常是:

  • 路径错了?
  • 权限问题?
  • 文件格式不支持?
  • Sync 没执行?

于是开始排查。

后来目录里加入测试文件后,状态变成:

3 file(s) · synced 1m ago

这时直觉上会认为:

已经同步成功,接下来点击「构建摘要树」就行。

但真正点击后,却出现了一个令人困惑的提示:

Building summary trees · 0 buffer(s)

Force-sealing every L0 buffer through the configured AI summariser. The graph will refresh once the worker drains.

问题来了:

为什么已经同步了 3 个文件,却还是 0 buffer?


第一步误判:怀疑是文件路径问题

本段核心问题:路径中的 \\?\F:\12 是不是错误?

在界面中,Vault 路径后来显示成:

\\?\F:\12

很多人第一次看到这个都会紧张。

尤其是:

为什么多了一个问号?

第一反应是:

文件系统是不是坏了?

实际上并不是。

这是 Windows 的扩展路径格式。

例如:

普通路径:

F:\12

内部路径:

\\?\F:\12

它的意义是:

按原始路径访问,不做路径解析。

在很多桌面应用里都属于正常行为。

因此:

路径不是问题。

更关键的是:

3 file(s) · synced

已经证明:

文件确实被读取到了。

排除路径问题后,问题开始进入下一阶段。


第二步误判:怀疑是 Embedding 或模型没有配置

本段核心问题:是不是因为没有配置模型,导致摘要树无法构建?

看到:

0 buffer(s)

一个很自然的推断是:

Embedding 没配置。

或者:

Summary model 没启动。

于是开始寻找:

  • Embedding provider
  • Model settings
  • Local AI
  • Inference

甚至开始检查:

  • OpenAI API Key
  • Ollama
  • 本地模型

这是一个非常合理的推断。

因为:

构建记忆树,看起来像是一个需要模型参与的动作。

而且提示中也出现了:

AI summariser

让人更加确信:

一定是模型问题。


第三步:查看系统日志

本段核心问题:日志到底透露了什么信息?

随后查看日志。

关键日志包括:

[memory:ingestion_queue] background worker started

这说明:

ingestion worker 已经启动。

还有:

openhuman.inference_status -> ok

以及:

openhuman.local_ai_downloads_progress -> ok

这些信息表面上看似正常。

最关键的是:

日志里没有任何真正的 memory build 行为。

例如没有:

embedded chunk
summary tree
sealed buffer
memory summarising

理论上,如果 Summary Tree 正在构建,应该能看到类似行为。

但完全没有。

这意味着:

系统甚至没有进入真正的 summarisation 阶段。

这时问题变得奇怪起来:

为什么 worker 启动了,却没有任何 buffer?


第四步误判:怀疑是 Ingestion Bug

本段核心问题:会不会是 Sync 成功,但 Chunk 没进入 Buffer?

随后发现一个 issue。

一开始的推断是:

可能是 ingestion queue 没 flush。

即:

文件存在
↓
sync 成功
↓
但 chunk 没进入 L0 buffer
↓
summary tree = 0

这个猜测当时很合理。

因为表面现象完全一致:

3 file(s)

但:

0 buffer(s)

从逻辑上看,似乎只能解释为:

ingest 出问题。

但后来发现:

这仍然不是根因。


真正根因:Summary Tree 并不消费本地 Vault

本段核心问题:为什么本地 Markdown 文件无法进入记忆树?

最终定位到真正的问题:

当前记忆树只支持 Gmail / Slack / Notion 等来源。

这意味着:

即使你:

Add Vault
↓
Sync 成功
↓
3 file(s)

也不会进入:

L0 buffer
↓
summary tree

因为:

本地 Vault 并不是 Summary Tree 的数据来源。

换句话说:

系统行为更像:

Gmail / Slack / Notion
        ↓
Structured Events
        ↓
L0 Buffer
        ↓
Summary Tree

而不是:

Local Markdown Files
        ↓
Summary Tree

这解释了所有现象。

包括:

为什么:

3 file(s) synced

却依然:

0 buffer(s)

因为:

没有符合条件的 buffer。

它并不是报错。

而是:

没有可构建对象。


一个容易误解的地方:Vault 为什么看起来像知识库?

本段核心问题:既然不能生成记忆树,为什么还支持添加 Vault?

这是整个体验里最容易让人误解的地方。

从界面设计来看:

用户会自然联想到:

本地文件
↓
同步
↓
AI 理解
↓
记忆树

尤其当界面出现:

  • Sync
  • Tree View
  • Storage
  • Summary

时,预期会更强。

但实际情况是:

Vault 更多是一个同步能力。

而不是:

一个自动进入长期记忆的知识库入口。

因此:

“能 Sync” ≠ “能进入 Summary Tree”。

这是理解 OpenHuman 当前状态最重要的一点。


一次最小可复现测试

本段核心问题:如何快速验证自己是不是遇到了同样的问题?

可以做一个最简单的测试。

创建:

F:\12\test.md

内容:

项目名:Atlas

技术栈:
Rust
SQLite

不要 ORM

然后:

Step 1:添加 Vault

路径:

F:\12

Step 2:点击 Sync

观察:

是否变成:

3 file(s)

或者:

1 file(s)

如果成功:

说明文件读取没问题。


Step 3:点击构建摘要树

此时如果出现:

Building summary trees · 0 buffer(s)

基本可以确认:

你遇到的是同一个限制。

不是:

  • 路径问题
  • 权限问题
  • 文件格式问题
  • API Key 问题
  • Embedding 配置问题

而是:

Summary Tree 不消费本地 Vault。


一个重要反思:不要把产品预期强行套给现实行为

本段核心问题:这次排障最大的经验是什么?

这次过程里,一个很典型的问题是:

我们不断在寻找技术错误。

例如:

  • 路径
  • 权限
  • Embedding
  • Summariser
  • Worker
  • API Key
  • Queue

但最后发现:

系统根本不是这么设计的。

换句话说:

不是系统坏了,而是预期错了。

这是一种很常见的工程误区。

当一个产品界面给出:

Vault
Sync
Memory Tree

时,用户会自然推断:

它像 Obsidian + RAG。

但真实行为是:

它更像 Personal Digital Memory。

也就是:

从 Gmail、Slack、Notion 中抽取长期上下文。

理解这一点后,整个系统 suddenly makes sense。

虽然体验上仍然容易误导,但逻辑开始一致。


当前可行的测试方式

本段核心问题:如果想验证记忆树,应该怎么测试?

既然本地 Vault 不会进入 Summary Tree。

当前最直接的方法是:

连接一个支持的数据源。

例如:

  • Gmail
  • Slack
  • Notion

然后:

1. 同步来源

等待 ingestion。


2. 构建摘要树

点击:

构建摘要树

3. 查看树状视图

理论上应该开始出现:

People
Projects
Conversations
Tasks

以及:

  • 联系人
  • 邮件主题
  • 对话
  • 决策

如果这里开始有节点:

说明:

Summary Tree 真正开始工作。


实用摘要

如果你看到 0 buffer(s),优先检查什么?

先看:

3 file(s) synced

有没有。

没有

说明:

文件读取失败。

检查:

  • 路径
  • 文件格式
  • 权限

有,但仍是 0 buffer(s)

优先判断:

是否只用了本地 Vault。

如果是:

当前属于预期行为。

不是配置问题。


不要优先排查什么?

在确认来源前,不建议优先折腾:

  • OpenAI API Key
  • Ollama
  • Embedding model
  • Summariser provider

因为:

根因可能根本不在模型层。


一页速览(One-page Summary)

问题 结论
\\?\F:\12 是错误吗? 不是,Windows 扩展路径格式
3 file(s) synced 是否说明成功? 说明文件已读取
为什么还是 0 buffer(s) 本地 Vault 不进入 Summary Tree
是 Embedding 没配置吗? 不是根因
是 ingestion bug 吗? 最终不是
Summary Tree 支持什么来源? Gmail、Slack、Notion
Vault 能做什么? 文件同步,但不自动进入记忆树

FAQ

1. 为什么显示 3 file(s) 但记忆树还是空?

因为:

文件同步成功,不代表进入 Summary Tree。

本地 Vault 当前不会自动生成记忆树。


2. 0 buffer(s) 是报错吗?

不是。

更准确地说:

没有可构建的 buffer。


3. \\?\F:\12 说明路径坏了吗?

不是。

这是 Windows 的内部路径格式。

属于正常现象。


4. 我需要配置 Embedding 吗?

仅从当前问题来看:

不是优先原因。

因为问题发生在:

数据来源层。


5. 本地 Markdown 文件会进入记忆树吗?

根据当前测试结果:

不会。

至少当前流程中不会进入 Summary Tree。


6. 如何验证记忆树真的工作?

连接:

  • Gmail
  • Slack
  • Notion

然后重新同步与构建。


7. 为什么这个问题容易误导人?

因为界面上的:

Vault
Sync
Summary Tree

很容易让人自然联想到:

本地知识库 → AI 记忆。

但当前行为并不是这样。


8. 最重要的经验是什么?

一句话:

先确认产品真实边界,再排查技术问题。