Biff.graph — Resolver 模式与代码库图查询
概述
Biff.graph 是一个约 600 行的轻量级图查询引擎(Clojure),允许将数据模型(数据库+业务逻辑)统一为可查询的图。查询引擎核心仅约 200 行代码。
核心模式:Resolver Chain
每个 resolver 声明输入/输出形状,查询引擎自动链式调用:
;; Resolver 定义
(defresolver user-by-id
{::resolver/input [:user/id]
::resolver/output [:user/name :user/email]})
;; 查询引擎自动编排 chain
;; 查询 {:user/id "123"} → resolver 返回 {:user/name "Alice" :user/email "alice@..."}技术特点
- 使用 EQL / Datomic pull pattern 描述查询形状
- Resolver = 纯函数 + 关联的 input/output query
- 支持 batch resolver(批量数据库查询优化)
- 无查询规划步骤(比 Pathom 简单但低效)
- 缓存和验证通过 middleware 实现
- 支持可选属性(
:?前缀)、join 属性(嵌套 map)
意义
- 600 行实现可用图查询引擎 — 证明在合适抽象层次可以做到简洁而不简单
- Resolver 模式直接适用于 codebase-memory MCP — codebase-memory 的图查询也面临类似的”如何从多个数据源自动组装结果”问题
- 知识图谱查询 — gbrain 的查询层可以借鉴这种 resolver-chain 模式
关联
- mcp_codebase_memory_mcp_query_graph — 现有 Cypher 查询(不同范式,但 resolver 层可叠加)
- 4-layer-agent-architecture — 数据层的 resolver 抽象
- 轻量级设计哲学与 “Good Tools Are Invisible” 一致
链接
- agent-engineering-ecosystem-index — 图查询作为 Agent 理解代码的基础能力
- good-tools-invisible — 共享”工具应无形”哲学