hermes + gbrain 智能知识库 — 架构·部署·维护

🧠 gbrain:AI 智能知识库 — 架构·部署·维护

gbrain(Garry's Brain)是 AI 的外挂大脑——一个基于 PGLite(WASM 内嵌 PostgreSQL)的 结构化知识库,存储关于人、公司、交易、会议、概念的知识。它与 Hermes Agent 协作,在对话中自动检索和注入上下文,实现持久化记忆 + 按需检索的智能知识管理。

1. 智能知识库的概念

gbrain 的核心理念:脑 ≠ memory,两者分工明确:

💭 Memory(操作偏好)
  • 自动注入 system prompt
  • 记录用户偏好、工具习惯、环境事实
  • 轻量、高频、无需显式查询
🧠 gbrain(世界知识)
  • 按需检索、主动查询才拿得到
  • 存储公司、交易、会议纪要、概念
  • 结构化、可搜索、长周期持久化

脑-Agent 循环(Brain-Agent Loop)

用户消息 AI 检测实体 调 gbrain MCP 工具 注入上下文回复

智能知识库的体现

  • 主动感知 — AI agent 在对话中检测到人名/公司名/项目名,自动调用 gbrain MCP 工具(search/get_page/query)查询,无需用户手动操作
  • 语义理解 — 支持关键词搜索(最快)和语义搜索(需 embedding),理解查询意图而非简单匹配
  • 知识图谱 — 通过 wikilink 和时间线提取,构建实体之间的关联网络
  • 持续学习 — 新信息通过 gbrain put 即时写入,每日 1AM cron 自动同步 Trilium 笔记嵌入,知识保鲜
  • 评分机制 — gbrain doctor 输出综合健康评分(Brain Score),量化知识库完备度
  • 不阻塞对话 — gbrain 不是中间件,不自动注入 system prompt。AI 按需调用 MCP 工具查询,轻量无侵入

2. Hermes ↔ gbrain 架构关系

两者是 Agent + Knowledge Base 的分工协作关系,通过 MCP Server 原生集成:

Hermes Agent gbrain MCP Server Cron 同步管道
Hermes Agent
对话交互:接收用户消息 → AI 检测到实体(人名/公司/项目)→ 调用 gbrain MCP 工具
▼ MCP Call (search/get_page/query) ▼
gbrain MCP
知识检索:gbrain serve(stdio MCP Server)→ 处理 search/query/get_page 请求 → 返回结果
▼ 结 果 注 入 ▼
Hermes Agent
上下文增强回复:将 gbrain 检索结果注入对话 → 生成含知识的回复

集成模型

  • MCP Server 集成 — gbrain 通过 gbrain serve 作为 Hermes 的 MCP 子进程运行,search/get_page/query 等工具注册到 Hermes 的工具列表中,AI 可直接调用
  • AI 主动触发 — 对话中检测到人名/公司/项目等实体,AI 直接调用 gbrain MCP 工具查询,无需走 CLI 命令
  • 无中间件 — gbrain 不拦截对话流量,不自动注入 system prompt。AI 在对话中主动检测实体后调用 MCP 工具查询
  • 知识保鲜 — 新信息通过 gbrain put 即时写入。每日 1AM cron master 自动同步 Trilium 笔记并运行 gbrain dream 维护

分离优势

  • 框架无关 — gbrain 作为独立知识库,可从任意框架调用(Hermes / Claude Code / Cursor / LangChain),MCP 协议标准
  • 数据独立 — PGLite 数据库可 gbrain export 导出,不绑定 Hermes
  • 性能独立 — 知识检索不影响对话响应速度(按需调用而非流式过滤)

3. 部署

部署形态

类型嵌入在 Hermes Docker 容器内(CLI + MCP Server,非独立服务)
运行时Bun v1.3.13(aarch64),CLI wrapper:~/bin/gbrain
数据库PGLite(WASM 内嵌 PostgreSQL),~/.gbrain/brain.pglite
代码路径/opt/data/home/gbrain/
配置路径~/.gbrain/config.json
MCP 配置Hermes config.yamlmcp_servers.gbrain(stdio 子进程)
导出目录/opt/data/trilium-brain/(同步管道缓存的 .md 文件)

安装与初始化

# 前提:Bun 运行时(aarch64)
curl -fsSL https://github.com/oven-sh/bun/releases/latest/download/bun-linux-aarch64.zip -o /tmp/bun.zip
python3 -c "import zipfile; z=zipfile.ZipFile('/tmp/bun.zip'); z.extractall('/tmp/bun-extracted')"
chmod +x /tmp/bun-extracted/bun-linux-aarch64/bun
cp /tmp/bun-extracted/bun-linux-aarch64/bun /opt/data/home/.bun/bun/bun

# 初始化数据库(会清空数据,备份后再操作)
cd /opt/data/home/gbrain && /opt/data/home/.bun/bun/bun run src/cli.ts init

# 验证安装
gbrain doctor
gbrain stats

数据库状态

  • 规模:~1240 pages / ~3500 chunks / 100% embedded ✅
  • Embedding 维度:1024(V100 Qwen3-Embedding-0.6B)
  • Slug 规范people/companies/projects/concepts/meetings/
  • 数据源:Trilium 共享笔记(每日 1AM 自动同步)+ 手动 gbrain put 写入

数据来源与同步

gbrain 的数据来源分两条路径:

路径数据源频谱写入方式
🌉 自动同步 Trilium 共享笔记 每日 1AM sitemap.xml → ETAPI 并行导出 → gbrain import --no-embed
✍️ 手动写入 对话中产生的知识 即时 gbrain put <slug> 直接写 PGLite DB

同步管道脚本:/opt/data/scripts/cron-tasks/trilium-sync.py(6 并发,300s 超时)

4. 配置

主配置文件 — ~/.gbrain/config.json

{
  "engine": "pglite",
  "database_path": "/opt/data/home/.gbrain/brain.pglite"
}

Hermes MCP 配置(config.yaml)

⚠️ 注意:gbrain MCP 子进程在 Docker 容器内有 HOME 不一致问题(passwd 记录为 /opt/data,但 $HOME 实际指向 /opt/data/home)。
配置时必须做到:① 使用绝对路径 ② 不要用 2>&1 ③ 显式设置 HOME。否则 MCP 连接会因 JSON-RPC 解析失败而断开。

mcp_servers:
  gbrain:
    command: /opt/data/home/.bun/bin/bun
    args:
    - run
    - /opt/data/home/gbrain/src/cli.ts
    - serve
    env:
      HOME: /opt/data/home
      V100_API_KEY: ${V100_API_KEY}
      GBRAIN_EMBEDDING_MODEL: v100:embed
      GBRAIN_EMBEDDING_DIMENSIONS: '1024'

配置说明(踩坑记录):

  • 绝对路径 command — 不用 bash -c 包装,直接用 bun 绝对路径,避免 shell 注入问题和路径查找失败
  • 绝对路径 argssrc/cli.ts 用绝对路径,不依赖 cwd
  • 不要用 2>&1 — gbrain 启动时 console.warn/console.error 输出到 stderr,如果重定向到 stdout 会污染 JSON-RPC 协议流,导致 MCP 客户端解析失败
  • 显式设置 HOME — 因为 Docker passwd home=/opt/data 但实际 $HOME=/opt/data/home,gbrain 的 os.homedir() 依赖 HOME 环境变量才能找到 ~/.gbrain/config.json
  • env 中 V100_API_KEY 等 — 用于 gbrain 内部 embedding 调用 V100 推理服务

关键配置项

配置项说明当前值
embedding_model模型(provider:model_id)v100:embed
embedding_dimensions向量维度1024
GBRAIN_SOURCE_BOOST源类型优先级提升(可选)
schema_version数据库 schema44(latest)✅

5. 应用场景

场景 1:对话中知识召回
触发:用户提到公司名/人名 → AI 检测 → 调用 gbrain MCP 工具(search/get_page)
效果:agent 立即获取相关背景知识,回复不再凭 LLM 固有记忆
场景 2:投研信息结构化
操作:将尽调记录、交易条款、创始人背景写入 gbrain
检索:后续讨论同一项目时,自动调取全部已知信息,避免重复询问
场景 3:跨会话上下文
问题:LLM 每次对话从零开始,不记得上周讨论的结论
解决:关键结论写入 gbrain → 后续对话自动检索 → 跨会话记忆
场景 4:知识库健康巡检
操作:cron 每日 1AM 自动运行 gbrain dream 维护循环
检查gbrain doctor 输出健康评分,监控 embedding 覆盖率
场景 5:Trilium 笔记同步入库
管道:Trilium sitemap.xml → 提取笔记 ID → 并行 ETAPI 导出(6 并发)→ 生成带 frontmatter 的 .md → gbrain import --no-embed
效果:~1240 条 Trilium 共享笔记每日自动同步为 AI 可检索的结构化知识
查看:导出缓存在 /opt/data/trilium-brain/
场景 6:框架迁移的知识底座
场景:从 Hermes 切换到其他 AI 框架
优势:gbrain 数据独立于框架,gbrain export 后在新框架中通过 CLI 或 MCP Server 接入

6. 维护

Cron 维护任务(hermes-cron-master)

所有维护任务由 hermes-cron-master 统一调度,每日 凌晨 1AM 按顺序执行 4 个任务:

顺序任务命令超时
1💬 会话转录 → gbrainsession-transcripts.py60s
2🌉 Trilium → gbraintrilium-sync.py300s
3🧠 gbrain 知识库维护gbrain dream --pull --json600s
4🌐 Trilium Sitemaptrilium-crawl-sitemap.sh110s

触发关系:

session-transcripts → trilium-sync → gbrain (dream) → sitemap
(会话→transcript)    (笔记→gbrain)   (提取+嵌入+链接)   (更新sitemap.xml)

脚本路径:/opt/data/scripts/hermes-cron-master.sh,任务脚本在 /opt/data/scripts/cron-tasks/

维护命令速查

# ── 健康检查 ──
gbrain doctor              # 综合健康评分 + 各项检查
gbrain stats               # 数据库统计概览

# ── 知识写入 ──
gbrain put <slug>          # 创建/更新脑页(stdin 传入内容)
gbrain put <slug> < file.md

# ── 搜索 ──
gbrain search "关键词"     # 关键词搜索(最快,无需 embedding)
gbrain query "自然语言问题" # 语义搜索(需 embedding)
gbrain get <slug>          # 已知 slug 直接取

# ── Embedding 管理 ──
gbrain embed --stale       # 只处理缺失嵌入的 chunks(增量)
gbrain embed <slug>        # 单页嵌入测试

# ── 知识图谱 ──
gbrain extract links       # 提取 wikilinks
gbrain extract timeline    # 提取时间线条目
gbrain extract all         # 一次完成所有提取

# ── 全量维护 ──
gbrain dream               # 一键维护循环(cron 友好)

# ── 数据导出 ──
gbrain export --dir ./out/ # 导出为 markdown 文件
gbrain list -n 1000        # 列出所有脑页

健康评分解读

检查项含义常见警告
connection数据库连接状态
schema_versionSchema 版本需运行 apply-migrations
embeddings嵌入向量覆盖率<100% → gbrain embed --stale
graph_coverage链接+时间线丰富度Trilium 笔记无 wikilink,0% 是预期行为
brain_score综合评分<50 通常因 Trilium 笔记无 wikilink/timeline 格式
resolver_health技能路由匹配ROUTING_MISS → 补 routing-eval.jsonl

常见维护任务

  • 补全 Embeddinggbrain embed --stale — 增量处理缺失的 chunks,零成本收益最大
  • 修复 Schemagbrain apply-migrations --yes — 升级数据库 schema
  • 健康巡检gbrain doctor — 观察 brain_score 趋势,低于 50 查明原因
  • 释放锁:报 Another sync is in progress (lock gbrain-sync held) → 运行 gbrain doctor 释放
  • 即时同步 Trilium/opt/data/scripts/cron-tasks/trilium-sync.py — 编辑 Trilium 后立即同步到 gbrain

📅 最后更新: 2026-05-21 · gbrain v0.30.2 · PGLite · ~1240 pages · 💡 MCP 集成: search/get_page/query 对话中自动可用