Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

什么是 Dr Strange?

Dr Strange 是一个用 Rust 编写的 AI 原生嵌入式图数据库。这句话包含三项主张, 下文逐一说明:它存储的是图,它是嵌入式的,它是 AI 原生的。所谓 AI 原生,是指它从设计之初就面向 AI 工作负载,而非事后加装。

数据模型:以"平面"组织的属性图

Dr Strange 存储的是一张属性图(property graph):

  • 节点(Node) 是实体,比如一个人、一篇文档、一件商品。每个节点都有一组 标签(label,即它的类型,如 Person、Doc),以及一段自由形式的 属性(property) 映射。
  • 边(Edge) 是节点之间有向、带类型的关系,例如 (alice) -[:KNOWS]-> (bob)。 边同样可以携带属性。
  • 属性 是带类型的值:字符串、数字、布尔、字节块、列表、嵌套映射,以及至关 重要的向量(vector,即嵌入)。向量是一等值类型,而非事后才补上的功能。

节点除了引擎内部的数字 id,还可以携带调用方提供的 外部键(external key): 一个稳定、对人友好、在所属平面内唯一的标识。

Dr Strange 按 平面(plane) 组织数据:平面是存在于同一个数据库文件中、彼此 独立的具名图命名空间。平面就像 schema 或 namespace,你可以为每个项目、每个租户 或每次实验各用一个平面。id 在整个数据库范围内全局唯一,但每一次查询都只在某一个 平面的上下文中执行,因此各平面之间保持干净的隔离。一个全新的数据库总是包含一个 startup 平面。

"AI 原生"的主张

多数为数据库添加 AI 能力的做法,是在传统引擎上附加一列向量,再外呼一个模型服务。 Dr Strange 反过来:AI 应用所需的能力,本身就是引擎的核心特性。

  • 嵌入是一等公民。 向量和其它属性值一样用 HNSW 原生建立索引,相似度检索因此 既快,又运行在查询引擎内部,而不是外部服务里。
  • 检索融合多路信号。 向量相似度、BM25 关键词相关性、图上邻近度会融合成一个 统一的排序结果,这正是 GraphRAG 的核心。
  • 引擎与智能体对话。 用自然语言提问,拿回一个查询计划并执行它,就能得到一张 连通的子图;订阅一个平面,变更一提交就能实时收到;还能读取图在任意历史时刻的 样子。

一个具体例子:GraphRAG

假设你已经把一批文档导入为图:Doc 节点带有 embedding 属性,通过 CITES、 MENTIONS 边连到 Concept 节点。一次 GraphRAG 查找就是一条查询:

SEARCH (d:Doc) ON embedding NEAR "how does time-travel work" TOPK 5 RETURN d

它先把问题嵌入为向量,检索出最相似的五篇文档;由于结果本身就是图节点,遍历可以 直接从这里继续,进入它们提及的概念、找到引用它们的文档,组装出纯向量库单凭自身 无法企及的扎实上下文。

Dr Strange 的定位

  • 像 SQLite 一样,它是嵌入式的:一个库加一个磁盘上的数据库,无需运行任何 服务。需要仪表盘、HTTP/WebSocket 接口和多客户端访问时,也可以额外启动一个服务 (drsg serve)。
  • 不同于传统图数据库(如 Neo4j),向量与混合检索内建于核心,整套接口也是 围绕智能体设计的:自然语言、变更流、时间旅行。
  • 不同于纯向量数据库,它的存储单位是一张图,得到的是关系、遍历与图算法, 而不仅仅是最近邻。

对于围绕知识图谱、GraphRAG 流水线或智能体长期记忆构建的应用,Dr Strange 意在 作为容纳这一切的单一存储。

特性一览

能力它带给你什么
平面(Planes)一个数据库中容纳多张相互独立的图
一等嵌入向量属性,原生 HNSW 索引
混合检索向量 + 关键词(BM25)+ 图邻近度的融合检索
查询语言可序列化的逻辑计划,以及一套 openCypher 子集
图算法PageRank、连通分量、最短路径、Louvain
自然语言查询用自然语言提问 → 生成计划 → 执行
时间旅行读取图在某个历史提交或时间戳时的样子
变更流订阅一个平面,实时接收其变更
代码图化沙箱化的 wasm 解析器插件将代码仓库转化为已解析的调用图(官方支持 8 种语言)
提交同步监视serve watch 将每次提交折叠进平面
智能体工具context · search · describe · grep · trace · impact · fathom · snippet · history · recall · wire,每个问题一次往返
备份 / 恢复一致、保 id 的整库快照
只读副本serve --follow 镜像一个正在运行的服务,用于跨集群扩展读取
访问方式Web 界面、六种语言 SDK、命令行,以及 MCP 服务

v1.0 意味着什么

v1.0 是一个完整的、嵌入式的、AI 原生的图数据库,具备上述全部能力:一个存储引擎 (一个手写的 LSM,另有一个遗留可选项),以及一套稳定的、SDK 由其生成的 JSON-RPC 线协议。接下来的各章将带你使用它的每一个部分。

v2.0 提供了什么

v2.0 把代码仓库自身的源码树也变成了一种图。沙箱化的 wasm 解析器插件把源文件解析 为一张已解析的调用图,包含符号、带调用位置的调用者,以及其它每一种结构性边,全程 无需模型参与,开箱即支持八种语言。serve watch 让生成的平面随代码仓库自身的提交 历史保持同步,每次提交落地就把这次的变更折叠进图中。十二个智能体动词——context、 search、describe、grep、trace、impact、fathom、snippet、history、 deployed、recall、wire——把这张图变成编码 智能体一次往返即可拿到的答案,每一个都会说明自己结果的边界:给出候选清单而不是 猜一个匹配,用 UnresolvedRef 台账条目代替一条悄悄出错的边。drsg init 把这 一切合并成一条命令,一次做完图化、监视,以及为当前使用的宿主工具写入 MCP 配置。 插件与编码智能体两章详细展开了这部分内容。