Rejoignez la bêta Hanzo et obtenez 50 % de réduction sur toute offre payante

Hanzo Brain : le graphe de connaissances d'abord local pour les agents

Un seul fichier SQLite que votre agent lit depuis chaque environnement d'exécution. Zéro aller-retour vers un LLM pour les opérations de graphe, FTS5 plus vecteurs plus extraction d'arêtes typées à l'écriture.

Sur cette page

Votre agent est malin, mais il oublie. Nous avons corrigé cela. Aujourd'hui nous publions Hanzo Brain — un seul binaire, un seul fichier SQLite à ~/.hanzo/brain/brain.db, et la même surface d'algorithmes en TypeScript, Python, Rust, Go et C++. Déposez un fichier markdown dans ~/.hanzo/workspace/. Le cerveau l'ingère, extrait des arêtes typées et indexe le contenu pour une recherche hybride. Aucun LLM n'est appelé. Le graphe se capitalise.

C'est la couche mémoire de chaque environnement d'exécution Hanzo — le bot, le serveur MCP, le Hanzo Node, et tout ce que vous intégrez dans votre propre hôte.

Ce qu'est le cerveau

Le cerveau, ce sont trois choses dans un seul processus :

  1. Pages — du contenu adressé par slug, écrit de n'importe où, surveillé sur disque.
  2. Arêtes — des relations typées (mentions, attended, works_at, invested_in, founded, advises) extraites à chaque écriture par regex et inférence de rôle. Zéro LLM.
  3. Faits — des tuples (subject, predicate, object, ts, confidence) interrogeables en temps réel d'une session à l'autre.

Les pages reçoivent un index FTS5. Les arêtes reçoivent une clé primaire sur (source, target, type). Les faits reçoivent un id et un horodatage. Le schéma est assez court pour tenir en tête :

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);

C'est tout le contrat. Chaque backend le respecte. Chaque environnement d'exécution écrit un fichier identique octet pour octet.

Pourquoi l'extraction sans LLM compte

Les extracteurs fondés sur un LLM brûlent des tokens, de la latence et de l'argent à chaque écriture. Ils produisent une dérive d'une exécution à l'autre. Ils rendent le graphe non déterministe.

Le cerveau extrait les arêtes par regex et inférence de rôle au moment de l'écriture. C'est rapide, c'est gratuit, et cela produit les mêmes arêtes à chaque fois pour la même entrée. Quand vous ingérez « Alice a fondé Acme. Elle a investi dans Foobar », vous obtenez :

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

À chaque fois. Sur chaque environnement d'exécution. Sans aller-retour.

Si vous voulez un enrichissement LLM par-dessus — désambiguïsation d'entités, vérification d'affirmations, résumé — vous appelez votre modèle au-dessus du graphe déterministe. Le graphe est le substrat. Le LLM est la finition facultative.

Un fichier. Chaque environnement d'exécution.

Le même brain.db s'ouvre en TypeScript, Python, Rust, Go et C++. Pas de traduction de format, pas de migration. Si vous écrivez depuis hanzobot/go sur un serveur et lisez depuis @hanzo/bot-memory dans un worker de navigateur, vous lisez le fichier que le serveur a écrit.

FonctionTSPythonRustGoC++
Interface BrainStoreouiouiouiouioui
SQLite (par défaut)ouiouiouiouioui
Recherche hybride FTS5ouiouitraitouioui
Extracteur de liens du grapheouiouiouiouioui
Chargeur de recettesouiouiouiouioui
Backends enfichablesouiouiouiouioui

Totaux de tests inter-environnements au lancement : 121 TS + 53 Python + 58 Go + 38 Rust (mcp) + 38 Rust (node) + 98 C++ = 406 tests, tous verts. Chaque environnement livre la même fusion, le même rerank (MMR), le même RRF, la même normalisation de slug, le même extracteur d'arêtes.

Interrogeable depuis MCP

Le cerveau est exposé via MCP sous la forme de trois outils :

  • brain.recall <entity> — chaque fait jamais affirmé sur une entité, avec horodatages.
  • brain.search <query> — FTS hybride plus vecteur, fusionnés par RRF, rerank MMR facultatif.
  • brain.ingest <slug> <content> — écrit une page, extrait les arêtes tout seul, met à jour le FTS.

Chaque agent qui parle à un Hanzo Node, au serveur MCP de Hanzo ou à un bot bâti sur hanzobot/* reçoit ces outils gratuitement. Pas de sidecar, pas de service en plus, pas de base de données séparée à opérer.

Pour la voie du binaire unique 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"

Pour Python :

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

Pour Rust, intégré dans hanzo-mcp :

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

Stockage enfichable, même contrat

SQLite est le choix par défaut. Il suffit pour les cent mille premières pages sur un ordinateur portable. Quand vous le dépassez, enregistrez un autre backend sans changer le code de l'application :

BackendQuand
sqlitesolo, < 100K pages
qdrantANN vectorielle à l'échelle
meilisearchFTS par mots-clés à l'échelle
zapdbstockage natif canonique et multilingue
replicateWAL SQLite diffusé vers S3 pour la sauvegarde
vfssystème de fichiers par blocs en flux sur S3, taille illimitée
postgresdéploiements d'équipe multi-locataires

Pour une sémantique distribuée en forme de SQLite sur plusieurs machines, nous utilisons le transport ZAP, le consensus Quasar et zapdb. Le cerveau reste le même. Le contrat octets entrants, octets sortants tient.

Une mémoire qui se capitalise

L'intérêt du cerveau n'est pas une base de données. C'est le changement d'hypothèse. Votre agent ne commence pas chaque session à vide. Le markdown que vous avez écrit il y a un an est déjà un graphe. Les conversations d'hier ont produit des arêtes et des faits que la session d'aujourd'hui peut interroger sans payer de tokens pour cela. Deux agents sur deux machines peuvent partager brain.db via replicate et converger vers la même vue.

C'est ce que nous appelons une mémoire qui se capitalise. Le graphe grandit. Le modèle coûte moins. L'utilisateur voit un assistant qui se souvient.

Obtenir le cerveau

  • Canon TypeScript (livré avec le bot) : npm install -g @hanzo/bot && hanzo-bot serve
  • Python : pip install hanzo-memory
  • Binaire unique Go : go install github.com/hanzobot/go/cmd/hanzo-bot@latest
  • Rust : membre de l'espace de travail de hanzoai/node et de hanzoai/mcp
  • C++ : en-têtes seuls à hanzobot/cpp/include/hanzo/brain/

Source : github.com/hanzoai/brain. Licence : MIT.


Un fichier. Cinq environnements d'exécution. Zéro appel LLM pour les opérations de graphe. D'abord local, par conception.

Commentaires

Connectez-vous avec votre identifiant Hanzo pour commenter.

Chargement des commentaires…

Lire la suite