Kb – Prolog 知识库

Hacker News Top 工具

摘要

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.solibgui.solibsqlite3.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

相似文章

GPTKB 2.0:浏览、查询和审计去歧义的 LLM 派生知识库

arXiv cs.CL

本文介绍了 GPTKB 2.0,这是一个由 LLM 派生的大规模去歧义知识库,包含 160 万个规范化实体上的 3840 万条三元组。它提供了一个网页界面,用于浏览、SPARQL/自然语言查询,以及审计事实来源和消歧决策。

KARLA: 基于知识库增强检索的语言模型

arXiv cs.AI

KARLA 提出了一种方法,让大型语言模型在生成过程中查询知识库,从而无需重新训练即可更新事实知识,并提高透明度。实验表明,该方法在短文本和长文本生成中均提升了事实依据性。