Kb – Prolog 知识库
摘要
Kb 是一个本地优先、超关系型知识库,使用 Prolog 构建,具有内容可寻址存储、时间旅行版本控制和基于 Raylib 的图形用户界面,作为硕士论文原型开发。
查看缓存全文
缓存时间: 2026/06/29 23:07
mat-mgm/kb-prolog 源: https://github.com/mat-mgm/kb-prolog
kb — Prolog 知识库
一个本地优先、超关系型知识库,采用内容可寻址存储 (CAS)。作为硕士论文原型构建。

功能特性
- 超关系型图:知识存储为
statement(Subject, Predicate, Object, Properties)。主语和宾语本身也可以是语句(具体化),从而支持“关于声明的声明”。 - 内容可寻址存储:文件经过暂存、SHA-256 哈希计算,并与其图元数据一起原子提交。自动去重。
- 时间旅行:更新会创建新版本的语句,通过
replaces_id链接。pl history可遍历版本链。 - Prolog 优先:主运行环境为 Trealla Prolog (https://github.com/trealla-prolog/trealla)。通过 FFI 加载 C 共享库来访问 SQLite 和 Raylib。
- 交互式 GUI:基于 Raylib 的图查看器,支持图像预览、查询栏和节点搜索。
构建
依赖:Clang、X11 (Linux) 或 Xcode CLT (macOS)。Trealla Prolog、Raylib、raygui 和 SQLite 作为子模块包含在内。
git clone --recurse-submodules
cd kb
make
上述命令会在项目根目录构建 libcas.so、libgui.so 和 libsqlite3.so。Raylib 在 make 期间从源码编译。
若要从源码构建 Trealla:
cd vendor/trealla && make
然后确保 tpl 在 $PATH 中。
使用
# 将上下文加载到内存并打开 REPL
tpl -l main.pl -- pl load concept(mathematics)
# 断言一条新语句
tpl -l main.pl -- pl assert \
"statement(concept(mathematics), foundation_of, concept(logic), [])"
# 全文搜索
tpl -l main.pl -- pl search mathematics
# 查看术语的版本历史
tpl -l main.pl -- pl history concept(mathematics)
# 将文件摄入 CAS
tpl -l main.pl -- cas add document.pdf
# 列出 CAS 对象
tpl -l main.pl -- cas list
# 启动 GUI
tpl -l main.pl -- gui
# 检查数据库一致性
tpl -l main.pl -- pl verify
# 运行垃圾回收
tpl -l main.pl -- pl gc
架构
main.pl CLI 路由器和 REPL
prolog/
sync.pl 两阶段提交:将 Prolog 项 <-> SQLite 序列化
cas.pl FFI 绑定到 libcas.so
db.pl SQLite 查询
gui.pl Raylib 前端(yield-loop 模式)
ontology.pl 内存中的知识图谱
src/
cas.c / cas.h CAS:暂存、SHA-256 哈希、原子提交、校验
gui.c / gui.h Raylib 渲染器和输入处理
graph.c / graph.h 图布局
util.c / util.h SHA-256、MD5
sql/
schema.sql SQLite 模式(WAL 模式、FTS5、具体化)
vendor/
Trealla、Raylib、raygui、SQLite(子模块)
数据模型
每条知识都是一个 statement/4 项:
statement(Subject, Predicate, Object, Properties)
Subject 和 Object 可以是 Prolog 项,也可以是引用 statement 表其他行的整数 ID,从而实现任意嵌套。SQLite 模式用 ANY 类型的列和用于版本化的 replaces_id 外键来反映这一点。
示例:
% Alice 声称(确信度 0.9)Bob 喜欢披萨
statement(
person(alice),
claims,
statement(person(bob), likes, food(pizza), []),
[certainty(0.9)]
)
上下文加载使用双向递归 CTE,仅将从种子项可达的子图拉入 Prolog 的内存工作集。
Nix
提供了 kb.nix shell 用于可重现构建:
nix-shell kb.nix
许可
GPL-3.0 — 参见 LICENSE.md。
相似文章
@tom_doerr: OpenKB 使用 PageIndex 构建了一个维基风格的知识库,实现无向量检索。 https://github.com/VectifyAI/OpenKB…
OpenKB 是一个开源 CLI 工具,它使用 PageIndex 将文档编译成维基风格的知识库,用于无向量的长文档检索,从而实现无需向量数据库的基于推理的检索。
GPTKB 2.0:浏览、查询和审计去歧义的 LLM 派生知识库
本文介绍了 GPTKB 2.0,这是一个由 LLM 派生的大规模去歧义知识库,包含 160 万个规范化实体上的 3840 万条三元组。它提供了一个网页界面,用于浏览、SPARQL/自然语言查询,以及审计事实来源和消歧决策。
KARLA: 基于知识库增强检索的语言模型
KARLA 提出了一种方法,让大型语言模型在生成过程中查询知识库,从而无需重新训练即可更新事实知识,并提高透明度。实验表明,该方法在短文本和长文本生成中均提升了事实依据性。
@AlphaSignalAI: LLM 知识库 最近我发现非常有用的东西:使用 LLM 为各种研究兴趣主题构建个人知识库...
Google 的开放知识格式(OKF)提出了一种可移植的组织知识标准,帮助 AI 代理检索正确的上下文,解决了数据目录、维基和代码之间的碎片化问题。
KC-Bench: 一个用于评估LLM智能体中知识冲突的动态交互式基准
KC-Bench 是一个动态交互式基准,用于评估LLM智能体如何检测和解决用户指令、参数知识与环境观察之间的知识冲突,评估显示没有模型能可靠地处理所有冲突类型。