加入 Hanzo 測試,任何付費方案享 50% 折扣

Hanzo Brain:面向代理的本機優先知識圖譜

一個 SQLite 檔案,你的代理從每個執行環境讀取它。圖操作不做語言模型往返,寫入時同時做 FTS5、向量和帶型別邊的抽取。

本頁內容

你的代理聰明,但健忘。我們把這件事修好了。今天交付 Hanzo Brain:一支二進位檔,位於 ~/.hanzo/brain/brain.db 的一個 SQLite 檔案,以及 TypeScript、Python、Rust、Go 與 C++ 上同一套演算法表面。把 markdown 檔案放進 ~/.hanzo/workspace/。大腦會吞下它,抽出帶型別的邊,並為混合檢索建立內容索引。不呼叫語言模型。圖譜會累積。

這是每個 Hanzo 執行環境的記憶層:機器人、MCP 伺服器、Hanzo Node,以及你嵌進自己宿主的任何東西。

大腦是什麼

大腦是同一行程裡的三件事:

  1. 頁面 — 用短識別定址的內容,可以從任何地方寫入,並在磁碟上被監看。
  2. 邊 — 帶型別的關係(mentions、attended、works_at、invested_in、founded、advises),每次寫入時用正規表示式和角色推斷抽出。不用語言模型。
  3. 事實 — (subject, predicate, object, ts, confidence) 元組,可以跨工作階段即時查詢。

頁面有 FTS5 索引。邊在 (source, target, type) 上有主鍵。事實有識別與時間戳。綱要短到可以記在腦子裡:

CREATE TABLE pages (slug TEXT PRIMARY KEY, content TEXT, frontmatter TEXT, updated_at TEXT);
CREATE VIRTUAL TABLE pages_fts USING fts5(content, content='pages', content_rowid='rowid');
CREATE TABLE edges (source TEXT, target TEXT, type TEXT, evidence TEXT, PRIMARY KEY (source, target, type));
CREATE TABLE facts (id TEXT PRIMARY KEY, subject TEXT, predicate TEXT, object TEXT, source TEXT, ts TEXT, confidence REAL);

這就是全部契約。每個後端都遵守它。每個執行環境都寫出逐位元組相同的檔案。

為什麼不用語言模型來抽取

基於語言模型的抽取器在每次寫入時燒掉詞元、延遲和錢。它們讓各次執行之間產生漂移。它們讓圖譜不確定。

大腦在寫入時用正規表示式和角色推斷抽邊。它快,它免費,同樣的輸入每次都得到同樣的邊。當你吞入 "Alice founded Acme. She invested in Foobar," 時,你會得到:

people/alice -[founded]->     companies/acme
people/alice -[invested_in]-> companies/foobar

每一次。在每個執行環境上。沒有往返。

如果還想在上面做語言模型增強,實體消歧、主張核驗、摘要,就在這張確定的圖上呼叫你的模型。圖是基底。語言模型是可選的收尾。

一個檔案。每個執行環境。

同一個 brain.db 能在 TypeScript、Python、Rust、Go 與 C++ 裡打開。沒有格式翻譯,也沒有遷移。如果你在伺服器上從 hanzobot/go 寫入,在瀏覽器工作執行緒裡從 @hanzo/bot-memory 讀取,你讀到的就是伺服器寫下的那個檔案。

功能TSPythonRustGoC++
BrainStore 介面支援支援支援支援支援
SQLite(預設)支援支援支援支援支援
FTS5 混合檢索支援支援特性支援支援
圖連結抽取器支援支援支援支援支援
配方載入器支援支援支援支援支援
可抽換後端支援支援支援支援支援

發布時的跨執行環境測試合計:121 TS + 53 Python + 58 Go + 38 Rust (mcp) + 38 Rust (node) + 98 C++ = 406 項測試,全部通過。每個執行環境交付同一套融合、同一套重排(MMR)、同一套 RRF、同一套短識別正規化、同一套邊抽取器。

可以從 MCP 查詢

大腦透過 MCP 暴露為三個工具:

  • brain.recall <entity> — 關於一個實體曾經斷言過的每條事實,帶時間戳。
  • brain.search <query> — FTS 與向量的混合檢索,用 RRF 融合,可選 MMR 重排。
  • brain.ingest <slug> <content> — 寫一頁,自動抽邊,更新 FTS。

每個與 Hanzo Node、Hanzo MCP 伺服器,或建在 hanzobot/* 上的機器人交談的代理,都免費得到這些工具。沒有邊車,沒有額外服務,也沒有另一套要維運的資料庫。

Go 的單一二進位路徑:

go install github.com/hanzobot/go/cmd/hanzo-bot@latest

hanzo-bot brain init                  # opens ~/.hanzo/brain/brain.db
hanzo-bot brain ingest people/alice.md
hanzo-bot brain recall people/alice
hanzo-bot brain search "founded"

Python:

from hanzo_memory.graph_links import extract_edges
edges = extract_edges(slug="people/alice", content="Alice founded Acme.")

Rust,嵌在 hanzo-mcp 裡面:

use hanzo_mcp::brain::{extract_edges, slugify};
let edges = extract_edges("people/alice", "Alice is CEO of Acme.", Some("person"));

可抽換儲存,同一份契約

SQLite 是預設。它夠一台筆記型電腦上的前十萬頁。超出之後,登記另一個後端,不用改應用程式碼:

後端何時
sqlite單人,< 100K 頁
qdrant大規模向量 ANN
meilisearch大規模關鍵詞 FTS
zapdb作為規範的多語言原生儲存
replicate把 SQLite 的 WAL 串流到 S3 做備份
vfsS3 上的串流區塊檔案系統,大小不限
postgres多租戶團隊部署

多機上呈 SQLite 形狀的分散式語意,我們用 ZAP 傳輸加上 Quasar 共識和 zapdb。大腦保持不變。位元組進、位元組出的契約仍然成立。

會累積的記憶

大腦的意義不是一個資料庫。它是假設的轉變。你的代理不再每次工作階段從空白開始。一年前寫的 markdown 已經是一張圖。昨天的對話產生了邊和事實,今天的工作階段可以查詢它們,而不必為此付詞元。兩台機器上的兩個代理可以透過 replicate 共享 brain.db,並匯合到同一視圖。

這就是我們說的累積記憶。圖譜長大。模型變便宜。使用者看到一個記得住的助手。

拿到這顆大腦

  • TypeScript 正本(隨機器人一起交付):npm install -g @hanzo/bot && hanzo-bot serve
  • Python:pip install hanzo-memory
  • Go 單一二進位:go install github.com/hanzobot/go/cmd/hanzo-bot@latest
  • Rust:hanzoai/node 與 hanzoai/mcp 的工作區成員
  • C++:僅標頭檔,位於 hanzobot/cpp/include/hanzo/brain/

原始碼:github.com/hanzoai/brain。授權:MIT。


一個檔案。五個執行環境。圖操作為零次語言模型呼叫。本機優先,出自設計。

留言

使用 Hanzo ID 登入後即可留言。

正在載入留言…

繼續閱讀