chore:协议改 Apache-2.0(用户拍)——LICENSE 换 Apache License 2.0 官方正文(agentscope 本地权威本切纯形 + 本仓版权行 2026 thy1016)+ moon.mod license 字段同笔;MulanPSL 面撤
一款由 MoonBit 驱动、面向本地 Agent 的 Agentic Database Engine,将向量检索、RDF/图谱推理与 SQLite 兼容的关系型引擎整合到同一个本地优先底座中。
MoonRDB 是一款 Agentic Database Engine——面向本地 Agent 的嵌入式、本地优先多模数据库,服务知识密集型应用。它不再需要把向量数据库、图数据库和关系型存储拼凑在一起,而是提供一个统一的数据库内核,支持:
MoonRDB 尤其适合:
现代 AI 应用通常需要同时处理三类数据:
分开管理会带来同步成本、部署复杂性和一致性风险。MoonRDB 将这些能力放进同一个进程,使语义检索、图遍历和关系查询共享同一事务边界和存储布局。
向量一路的口径:MoonRDB 复用两件既有引擎而非自研——sqlite-vec(在线 KNN + SQL 过滤)与 FAISS(离线大规模召回 / 重排候选集);被替换的是「另起一个独立向量数据库服务」的部署形态。
sqlite-vec
FAISS
MoonRDB 采用六边形架构,存储引擎和检索策略通过明确定义的端口接入。应用层不直接调用驱动,而是通过 SemanticRouter 在推理语义与向量检索之间做边界决策。
SemanticRouter
用例 / 执行面 UseCase · Orchestrator 按 plan 调 port,合成答案 │ 组合件 SemanticRouter 只产 RetrievalPlan;不实现 port、不直呼引擎 │ ──────┼──── 六边形 ─────────────────────────────────────────────────────────── 带① 内核 core(ProtoDB) 持 port 抽象;只依赖抽象,禁引引擎符号 带② 驱动侧 port VectorQueryPort · VectorSyncPort 外界调入(可换装:算子 / gRPC / CLI) 带③ 被驱动 port VectorPort · GraphPort · DocPort 内核调出(Faiss / 内存 / 图引擎 / SQL) FrameStream/FrameStore · BM25Port · ReasoningPort ──────┼──── 边界 ──────────────────────────────────────────────────────────── 带④ 适配器 引擎词唯一存活处:faiss.mbt(FAISS)· Memory*(原型)· @moondb.Driver(SQL) storage_schema gen(RocksDB 物理面)· sqlite-vec(在线 KNN)· FAISS(离线召回)
四带:① 内核(六边形中心,持抽象)· ② 驱动侧 port(左,外界调入)· ③ 被驱动 port(右,内核调出)· ④ 适配器(边界之外,引擎词唯一存活处)。
SemanticRouter 不是业务层,也不是驱动层,而是 Port 之上的组合件(决策面,只产 RetrievalPlan)。它决定:
RetrievalPlan
各 Port 只负责自身能力,不互相耦合。
已定(2026-10-05):ReasoningPort = 被驱动侧 port(推理执行),OwlLayer = port 之上的编排(只出规则计划);答案合成归执行面(UseCase / Orchestrator),不归 port。 全量方位与落地细节见 spec.md §2 方位表(本图是它的投影,表改 ⇒ 图同笔)。
ReasoningPort
OwlLayer
UseCase
Orchestrator
spec.md
MoonRDB 不使用全局 enable_vector 这类硬编码布尔开关,而是把“开关”设计成推理语义边界上的路由策略集合,由 SemanticRouter 统一决策。
pub enum ReasoningLevel { None Rdfs OwlEl } pub enum DeviceCapability { Low Medium High } pub struct RouterPolicy { default_reasoning: ReasoningLevel, max_vector_k: Int, enable_cache: Bool, cache_ttl_seconds: Int64, allow_owl_el: Bool, vector_pre_filter: Bool, fallback_on_cache_miss: Bool, } pub struct DeviceProfile { capability: DeviceCapability, available_memory_mb: Int, max_embedding_dim: Int, inference_latency_budget_ms: Int, }
pub struct InferenceCacheKey { ontology_module: String, input_ids: Array[String], reasoning_level: ReasoningLevel, } pub struct InferenceCacheEntry { inferred_triples: Array[Triple], computed_at: Int64, expires_at: Int64, } pub trait InferenceCache { fn get(self, key: InferenceCacheKey) -> Option[InferenceCacheEntry] fn put(self, key: InferenceCacheKey, entry: InferenceCacheEntry) -> Unit fn invalidate(self, ontology_module: String) -> Unit }
缓存策略: 写入时预计算:Jelly 帧入库 → 提取三元组 → 跑 RDFS/OWL-EL → 闭包写入 RocksDB; 查询时命中缓存:InferenceCache.get() 命中则零推理延迟; TTL 过期:本体更新时按 ontology_module 批量失效; 缓存未命中降级:fallback_on_cache_miss = true 时退回 Rdfs 或 None。 3. 降级决策逻辑
fn decide_reasoning_level( self, policy: RouterPolicy, profile: DeviceProfile, intent: QueryIntent, cache_hit: Bool, ) -> ReasoningLevel { // 降级链(已定):OwlEl → Rdfs → None,逐档下退、不跳档 if !policy.allow_owl_el { return Rdfs } match profile.capability { Low => None Medium => if cache_hit { policy.default_reasoning } else if policy.fallback_on_cache_miss { Rdfs } else { policy.default_reasoning } High => if intent.needs_deep_reasoning { OwlEl } else { policy.default_reasoning } } } fn decide_vector_k( self, policy: RouterPolicy, profile: DeviceProfile, reasoning_level: ReasoningLevel, ) -> Int { let base = policy.max_vector_k if reasoning_level != None && profile.capability != High { base / 2 } else { base } }
降级规则: | 条件 | 决策 | |—|—| | 低配设备 | 取 None(关闭推理),只走向量 + Jelly 帧 | | 中配 + 缓存未命中 + fallback_on_cache_miss | 退回 RDFS | | 高配 + 需深度推理 | 开启 OWL-EL | | 推理开启 + 资源紧张 | 向量 k 减半 | | 本体模块更新 | 缓存失效,下次查询重算 | | 降级链 | OwlEl → Rdfs → None——逐档下退、不跳档(降到哪一档由设备能力与资源预算决定) | 4. SemanticRouter 完整接口
None
OwlEl → Rdfs → None
pub struct RetrievalPlan { reasoning_level: ReasoningLevel, vector_k: Int, use_cache: Bool, need_doc_load: Bool, frame_ids: Option[Array[String]], ontology_modules: Array[String], } pub trait SemanticRouter { fn route( self, query: QueryContext, policy: RouterPolicy, profile: DeviceProfile, ) -> RetrievalPlan raise RouterError fn on_ontology_update(self, module: String) -> Unit }
实现骨架:
fn route( self, ctx: QueryContext, policy: RouterPolicy, profile: DeviceProfile, ) -> RetrievalPlan { let intent = classify_intent(ctx.query) let cache_key = build_cache_key(intent, policy.default_reasoning) let cache_hit = policy.enable_cache && self.cache.get(cache_key) != None let reasoning = decide_reasoning_level(policy, profile, intent, cache_hit) let k = decide_vector_k(policy, profile, reasoning) { reasoning_level: reasoning, vector_k: k, use_cache: policy.enable_cache && cache_hit, need_doc_load: intent.needs_raw_frame, frame_ids: ctx.frame_ids, ontology_modules: intent.relevant_modules, } } fn on_ontology_update(self, module: String) -> Unit { self.cache.invalidate(module) }
fn execute(self, plan: RetrievalPlan, ctx: QueryContext) -> Answer { let intent = classify_intent(ctx.query) // 与 route 同源:两处缓存键必须同一构造 let vectors = if plan.vector_k > 0 { vector_port.search(ctx.embedding, plan.vector_k) } else { [] } let owl_results = if plan.reasoning_level != None { if plan.use_cache { self.cache.get(build_cache_key(intent, plan.reasoning_level)) } else { reasoning_port.reasonize( // 推理执行归 port(B-D14);OwlLayer 只在 route 决策期出规则计划 ctx.query, vectors.map(|v| v.document_id), plan.reasoning_level, plan.ontology_modules, ) } } else { None } let frames = if plan.need_doc_load { let ids = plan.frame_ids ?? vectors.map(|v| v.frame_id) ids.map(|id| doc_port.load_frame(id)) } else { [] } synthesize_answer(ctx.query, vectors, owl_results, frames) // 合成归执行面(UseCase/Orchestrator),不归 port }
这样 SemanticRouter 就是一个完整的策略集合开关:它根据设备能力、查询意图、缓存命中情况动态决定推理级别和向量规模,并在本体更新时自动失效缓存,手机端推理引擎侧也能通过 DeviceProfile 动态适配资源约束。
移动端推理引擎受内存与延迟约束较强,RouterPolicy 按设备能力动态调整——本节不另立一份规则,一切以上方「降级规则」表为唯一口径:
RouterPolicy
fallback_on_cache_miss
Rdfs
OwlEl
不设 enable_vector 这类全局开关(与本节开头「不使用全局开关」一致):关哪一路由 RetrievalPlan 的 reasoning_level / vector_k 表达。 降级链(已定 2026-10-05,B-D11):OwlEl → Rdfs → None——逐档下退、不跳档;「降到哪一档」由 DeviceProfile.capability 与资源预算(inference_latency_budget_ms)共同决定,最终表达在 RetrievalPlan.reasoning_level。低配设备 = 链底 None(关推理),只走向量 + Jelly 帧。
enable_vector
reasoning_level
vector_k
DeviceProfile.capability
inference_latency_budget_ms
RetrievalPlan.reasoning_level
MoonBit 工具链 支持的运行时目标,例如 Wasm、Native 或 JS
moon build
moon test
// 伪 API;实际接口取决于具体实现 let db = MoonRDB.open("agent_memory.db") db.sql("CREATE TABLE documents (id TEXT PRIMARY KEY, content TEXT)") db.upsert_node("doc:1", { title: "MoonRDB Design" }) db.upsert_edge("doc:1", "REFERENCES", "doc:2") db.insert_vector("doc:1", [0.12, 0.45, -0.33]) let candidates = db.semantic_search("database architecture", top_k=10) let context = db.graph_context(candidates, depth=2)
本地优先:在应用进程内运行,无需独立数据库服务器。 多模:关系型、图谱/RDF 和向量数据共存于同一数据库。 可嵌入:适合移动端、边缘端、桌面端和 Agent 运行时。 MoonBit 原生:利用静态类型、trait 和快速编译构建可靠内核。 可插拔后端:向量索引、图谱存储和 SQL 引擎可独立演进。 面向 AI:为检索、记忆和推理工作负载设计,而非仅面向通用 OLTP。 显式边界:通过 SemanticRouter 管理推理语义与向量检索的组合策略。 可降级:根据设备能力、缓存状态和查询意图动态调整推理级别与检索规模。
MoonRDB 处于早期开发阶段。API、存储格式和查询接口可能会发生变化。 规划里程碑(K1–K6 能力编号,与下方路线图一一对应;交付阶段轴另见范式卷 S1–S6,两轴正交): SQLite 兼容的关系型引擎 RDF 三元组存储与基础图遍历 向量检索集成 SemanticRouter 路由策略层 InferenceCache 推理缓存层 混合 SQL + 图谱 + 向量查询 MoonBit 原生绑定与示例 面向检索和推理工作负载的基准测试
SQLite 兼容 SQL 引擎 基础表、索引和事务支持 嵌入式存储后端 MoonBit 原生查询接口
RDF 风格三元组存储 节点 / 边 API 基础图遍历和多跳查询 混合 SQL + 图谱查询
向量列与嵌入存储 KNN / 语义搜索 可插拔向量索引后端 混合 SQL + 图谱 + 向量查询
SemanticRouter 策略层 RetrievalPlan 与 RouterPolicy ReasoningPort / VectorPort / DocPort 边界定义 移动端自适应路由策略 RDFS/OWL-EL 子集 做轻量约束和解释层
InferenceCache 缓存层 RDFS / OWL-EL 预计算闭包 缓存失效与 TTL 策略 设备能力感知降级逻辑
面向 AI Agent 的检索 API 记忆召回与上下文组装 本地优先工作负载基准测试 移动端 / 边缘端部署示例
MoonRDB 不止于「多模数据库 + AI 插件」,而是朝 Agentic Database Engine——面向本地 Agent 的多模记忆与执行引擎——演进:把 Agent 所需的能力收进同一进程,经统一 Port 暴露。
上层 Agent 不必知道底层实现(sqlite-vec / RocksDB / …),只需经 Port 调用。进一步的方向是在这三者之上补齐可审计、可回放、可回滚的执行闭环——从「多模检索库」走向「Agentic Database Engine」的关键一步。
欢迎贡献。添加新存储后端、路由策略或查询算子时,请遵循: 保持公共接口稳定并提供清晰文档。 为关键不变量补充属性测试或模糊测试。 提供 SQL、图谱、向量和路由策略的使用示例。 设计说明和接口文档优先使用 AsciiDoc 编写。
本项目采用 木兰宽松许可证,第 2 版(MulanPSL v2)(裁定 2026-10-05,B-D1;换文已落,2026-10-05)。
LICENSE
版权所有 (c) 2026 thy1016
moon.mod
license = "MulanPSL-2.0"
moonttl
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MoonRDB
一款由 MoonBit 驱动、面向本地 Agent 的 Agentic Database Engine,将向量检索、RDF/图谱推理与 SQLite 兼容的关系型引擎整合到同一个本地优先底座中。
概述
MoonRDB 是一款 Agentic Database Engine——面向本地 Agent 的嵌入式、本地优先多模数据库,服务知识密集型应用。它不再需要把向量数据库、图数据库和关系型存储拼凑在一起,而是提供一个统一的数据库内核,支持:
MoonRDB 尤其适合:
为什么需要 MoonRDB
现代 AI 应用通常需要同时处理三类数据:
分开管理会带来同步成本、部署复杂性和一致性风险。MoonRDB 将这些能力放进同一个进程,使语义检索、图遍历和关系查询共享同一事务边界和存储布局。
架构
MoonRDB 采用六边形架构,存储引擎和检索策略通过明确定义的端口接入。应用层不直接调用驱动,而是通过
SemanticRouter在推理语义与向量检索之间做边界决策。四带:① 内核(六边形中心,持抽象)· ② 驱动侧 port(左,外界调入)· ③ 被驱动 port(右,内核调出)· ④ 适配器(边界之外,引擎词唯一存活处)。
SemanticRouter 不是业务层,也不是驱动层,而是 Port 之上的组合件(决策面,只产
RetrievalPlan)。它决定:各 Port 只负责自身能力,不互相耦合。
路由策略设计
MoonRDB 不使用全局 enable_vector 这类硬编码布尔开关,而是把“开关”设计成推理语义边界上的路由策略集合,由 SemanticRouter 统一决策。
缓存策略: 写入时预计算:Jelly 帧入库 → 提取三元组 → 跑 RDFS/OWL-EL → 闭包写入 RocksDB; 查询时命中缓存:InferenceCache.get() 命中则零推理延迟; TTL 过期:本体更新时按 ontology_module 批量失效; 缓存未命中降级:fallback_on_cache_miss = true 时退回 Rdfs 或 None。 3. 降级决策逻辑
降级规则: | 条件 | 决策 | |—|—| | 低配设备 | 取
None(关闭推理),只走向量 + Jelly 帧 | | 中配 + 缓存未命中 + fallback_on_cache_miss | 退回 RDFS | | 高配 + 需深度推理 | 开启 OWL-EL | | 推理开启 + 资源紧张 | 向量 k 减半 | | 本体模块更新 | 缓存失效,下次查询重算 | | 降级链 |OwlEl → Rdfs → None——逐档下退、不跳档(降到哪一档由设备能力与资源预算决定) | 4. SemanticRouter 完整接口实现骨架:
这样 SemanticRouter 就是一个完整的策略集合开关:它根据设备能力、查询意图、缓存命中情况动态决定推理级别和向量规模,并在本体更新时自动失效缓存,手机端推理引擎侧也能通过 DeviceProfile 动态适配资源约束。
手机端推理引擎适配
移动端推理引擎受内存与延迟约束较强,
RouterPolicy按设备能力动态调整——本节不另立一份规则,一切以上方「降级规则」表为唯一口径:None(不做推理),只走向量检索 + Jelly 帧精确读取;fallback_on_cache_miss为真 → 退回Rdfs;推理开启且资源紧张 → 向量 k 减半;OwlEl,向量 + 本体 + 文档三路并行。快速开始
前置条件
MoonBit 工具链 支持的运行时目标,例如 Wasm、Native 或 JS
构建
运行测试
基本用法
设计目标
本地优先:在应用进程内运行,无需独立数据库服务器。 多模:关系型、图谱/RDF 和向量数据共存于同一数据库。 可嵌入:适合移动端、边缘端、桌面端和 Agent 运行时。 MoonBit 原生:利用静态类型、trait 和快速编译构建可靠内核。 可插拔后端:向量索引、图谱存储和 SQL 引擎可独立演进。 面向 AI:为检索、记忆和推理工作负载设计,而非仅面向通用 OLTP。 显式边界:通过 SemanticRouter 管理推理语义与向量检索的组合策略。 可降级:根据设备能力、缓存状态和查询意图动态调整推理级别与检索规模。
当前状态
MoonRDB 处于早期开发阶段。API、存储格式和查询接口可能会发生变化。 规划里程碑(K1–K6 能力编号,与下方路线图一一对应;交付阶段轴另见范式卷 S1–S6,两轴正交): SQLite 兼容的关系型引擎 RDF 三元组存储与基础图遍历 向量检索集成 SemanticRouter 路由策略层 InferenceCache 推理缓存层 混合 SQL + 图谱 + 向量查询 MoonBit 原生绑定与示例 面向检索和推理工作负载的基准测试
路线图
K1 · 关系型底座
SQLite 兼容 SQL 引擎 基础表、索引和事务支持 嵌入式存储后端 MoonBit 原生查询接口
K2 · RDF / 图谱层
RDF 风格三元组存储 节点 / 边 API 基础图遍历和多跳查询 混合 SQL + 图谱查询
K3 · 向量检索
向量列与嵌入存储 KNN / 语义搜索 可插拔向量索引后端 混合 SQL + 图谱 + 向量查询
K4 · 路由与推理边界
SemanticRouter 策略层 RetrievalPlan 与 RouterPolicy ReasoningPort / VectorPort / DocPort 边界定义 移动端自适应路由策略 RDFS/OWL-EL 子集 做轻量约束和解释层
K5 · 推理缓存与降级
InferenceCache 缓存层 RDFS / OWL-EL 预计算闭包 缓存失效与 TTL 策略 设备能力感知降级逻辑
K6 · Agent 与检索工作负载
面向 AI Agent 的检索 API 记忆召回与上下文组装 本地优先工作负载基准测试 移动端 / 边缘端部署示例
演进方向
MoonRDB 不止于「多模数据库 + AI 插件」,而是朝 Agentic Database Engine——面向本地 Agent 的多模记忆与执行引擎——演进:把 Agent 所需的能力收进同一进程,经统一 Port 暴露。
上层 Agent 不必知道底层实现(sqlite-vec / RocksDB / …),只需经 Port 调用。进一步的方向是在这三者之上补齐可审计、可回放、可回滚的执行闭环——从「多模检索库」走向「Agentic Database Engine」的关键一步。
贡献
欢迎贡献。添加新存储后端、路由策略或查询算子时,请遵循: 保持公共接口稳定并提供清晰文档。 为关键不变量补充属性测试或模糊测试。 提供 SQL、图谱、向量和路由策略的使用示例。 设计说明和接口文档优先使用 AsciiDoc 编写。
许可证
本项目采用 木兰宽松许可证,第 2 版(MulanPSL v2)(裁定 2026-10-05,B-D1;换文已落,2026-10-05)。
LICENSE(官方正文逐字,仅前置版权行版权所有 (c) 2026 thy1016)。moon.mod记license = "MulanPSL-2.0"(与LICENSE两处一致,同笔)。moonttl的许可在其自身仓另行裁定(子模块边界,本轮不动)。