SuperAPI AI 工具集

prolog-reasoner

prolog-reasoner 是一个将 SWI-Prolog 作为“逻辑计算器”提供给大语言模型(LLM)使用的工具,提供 MCP 服务器和 Python 库两种形式。它旨在弥补 LLM 在形式逻辑推理上的不足:LLM 擅长自然语言但难以处理形式逻辑,而 Prolog 擅长逻辑推理但无法处理自然语言。该工具让 LLM 将问题写成 Prolog 代码,由 Prolog 执行约束满足、多步推理和穷举搜索等组合性任务,推理过程以可读、可重跑、可调试的代码形式存在。MCP 服务器提供 execute_prolog 工具以及规则库管理工具,无需外部 LLM API 密钥;Python 库则提供完整的自然语言到 Prolog 的翻译管道,需要 OpenAI 或 Anthropic 的 API 密钥。项目包含一个 30 题逻辑基准测试,用于对比纯 LLM 推理与 LLM+Prolog 推理的效果。

访问官网

工具介绍

用途

prolog-reasoner 将 SWI-Prolog 作为“逻辑计算器”暴露给大语言模型(LLM),以消除 LLM 逻辑推理中的黑箱问题。LLM 擅长自然语言但难以处理形式逻辑,Prolog 擅长逻辑推理但无法处理自然语言,该工具通过让 LLM 编写 Prolog 代码并执行来弥合这一差距。

主要能力

  • MCP 服务器:Claude 或任何 MCP 客户端可在对话中将其作为逻辑求解器调用。规则库允许 LLM 一次性保存稳定的领域规则,并在每次调用时按名称引用。
  • Python 库:提供完整的自然语言到 Prolog 管道,并带有自我纠正循环,需要 OpenAI 或 Anthropic 的 API 密钥。
  • MCP 工具:execute_prolog 用于执行任意 SWI-Prolog 代码;list_rule_bases、get_rule_base、save_rule_base、delete_rule_base 用于管理可复用的命名规则库。
  • 规则库:一次性保存稳定的 Prolog 规则(例如国际象棋走子规则、法律公理),并通过名称从 execute_prolog 引用,使 LLM 每次调用只需编写与具体情境相关的事实。
  • 透明的中间表示:Prolog 代码本身就是审计线索,可在执行前检查、修改或验证。
  • CLP(FD) 支持:用于调度和优化的约束逻辑编程。
  • 否定即失败、递归以及所有标准 SWI-Prolog 特性。
  • 库模式:自然语言到 Prolog 的翻译,带自我纠正循环(OpenAI / Anthropic)。

使用方式

环境要求

  • 已安装 SWI-Prolog 并在 PATH 中(版本 ≥ 9.0)。
  • OpenAI 或 Anthropic 的 API 密钥——仅库模式需要,MCP 服务器不需要。

MCP 服务器设置

MCP 服务器暴露五个工具:execute_prolog 运行连接的 LLM 编写的 Prolog 代码,四个规则库工具管理命名的可复用 Prolog 模块。它不调用任何外部 LLM API,因此无需 API 密钥。

支持 Claude Desktop / Claude Code,也可在直接安装 prolog-reasoner 后使用。若不想在本地安装 SWI-Prolog,可使用 Docker(已捆绑 SWI-Prolog)。

execute_prolog 参数

execute_prolog(prolog_code, query, rule_bases=None, max_results=100, trace=False)

  • prolog_code — Prolog 事实和规则(字符串)。
  • query — 要运行的 Prolog 查询,例如 "mortal(X)"(字符串)。
  • rule_bases — 可选,要前置到 prolog_code 的已保存规则库名称列表(按顺序)。用于跨调用复用稳定领域规则,无需重复发送。
  • max_results — 返回解的数量上限(默认 100)。
  • trace — 为 True 时,为每个解在 metadata.proof_trace 中附加结构化证明树。这是可选子特性,有性能开销,且不支持 CLP(FD)、高阶谓词或 assert/retract。

返回包含 success、output、query、error 和 metadata 的 JSON 对象。成功时,metadata 包含 execution_time_ms、result_count、truncated 和 rule_bases_used;请求规则库时还会附加 rule_base_load_ms(磁盘 I/O 计时)。失败时,metadata 还包含 error_category(syntax_error、undefined_predicate、unbound_variable、type_error、domain_error、evaluation_error、permission_error、timeout、trace_mechanism_error、unknown 之一)和 error_explanation——供连接的 LLM 或人类决定如何修复 Prolog 代码的自然语言提示。

规则库工具

在 PROLOG_REASONER_RULES_DIR(默认 ~/.prolog-reasoner/rules/)下管理命名的可复用 Prolog 模块。名称限制为 [a-z0-9_-],长度 1–64。

  • save_rule_base(name, content) — 写入或覆盖规则库。写入前对内容进行语法验证(仅解析);失败以 RULEBASE_003 呈现。返回 {"success": true, "name": ..., "created": bool},首次写入时 created 为 true,覆盖时为 false。超过 max_rule_size 的文件以 RULEBASE_005 拒绝。
  • list_rule_bases() — 返回所有已保存规则库及其 name、description 和 tags。元数据从每个文件开头的 % description: / % tags: 注释中提取。
  • get_rule_base(name) — 返回已保存规则库的原始 Prolog 源码。
  • delete_rule_base(name) — 删除已保存的规则库。

对于名称/大小/存在性错误,工具返回 {"success": false, "error": "...", "error_code": "RULEBASE_001"|"RULEBASE_002"|"RULEBASE_003"|"RULEBASE_005"} 而非抛出异常。I/O 失败(RULEBASE_004)作为基础设施错误传播。

规则库约定:每个规则库文件以开头注释作为 list_rule_bases 的元数据,然后从 execute_prolog 引用。规则库也可作为领域专用分支的基础:通过 BUNDLED_RULES_DIR 捆绑一组精选规则(法律公理、游戏规则、税务场景等)作为即用型推理包。

Python 库

库暴露 PrologExecutor(仅 Prolog,无 LLM)和 PrologReasoner(自然语言到 Prolog 管道,需要 LLM API 密钥)。

  • 直接执行 Prolog(无 LLM)。
  • 完整自然语言到 Prolog 管道(需要 LLM API 密钥)。

所有设置通过环境变量(前缀 PROLOG_REASONER_)。

适用场景

  • 约束满足问题(如 SEND+MORE、6 皇后、背包、K4 着色、爱因斯坦谜题简化版)。
  • 多步推理(如 Nim 博弈论、三人骑士与骗子、TSP-4、斑马谜题)。
  • 需要可审计、可调试推理过程的逻辑任务。
  • 作为 LLM 的临时逻辑求解器,而非智能体记忆的骨干。

限制

  • 需要 SWI-Prolog ≥ 9.0 并位于 PATH 中。
  • 库模式需要 OpenAI 或 Anthropic API 密钥;MCP 服务器不需要。
  • trace 特性有性能开销,且不支持 CLP(FD)、高阶谓词或 assert/retract。
  • 在纯演绎或传递性问题上,LLM 本身已很强,Prolog 会增加延迟而无准确率提升。
  • 基准测试中 LLM+Prolog 的失败均来自 LLM 生成代码的 Prolog 执行错误(缺少谓词定义、未绑定的 CLP(FD) 变量),而非推理错误,可通过提示调优解决。
  • 项目有意设计为无状态和临时使用;若需要持久化智能体记忆、防幻觉事实存储或完整的神经符号基底,其他项目可能更合适。

基准测试

benchmarks/ 包含 30 个逻辑问题,分为 5 类(演绎、传递、约束、矛盾、多步),用于比较纯 LLM 推理与 LLM+Prolog 推理。基准测试使用库路径(翻译器 + 执行器),因为需要自然语言到 Prolog 步骤。在 anthropic/claude-sonnet-4-6 上单次运行 30 个问题的测量结果显示,差距集中在约束和多步类别——正是符号求解器优于模式补全的组合/搜索密集型领域。结果保存到 benchmarks/results.json。