跳到正文

Vibe Prolog

一个在「不许人类写代码」这条明规则下由 AI agent 写出来的 Prolog 解释器——附一份少见的清醒复盘。

Screenshot of Vibe Prolog
编辑截图, 28 Sep 2026Vibe Prolog ↗

这是什么

一个用 Python 写的 Prolog 解释器,产出过程遵守作者先写下来、然后照做的规则:不许人类写代码,只允许提示和指令。它始于一次意外——用剩的 Claude Code 额度加上手机上的一个周末——最后变成四周 825 次提交、一套 ISO 一致性测试、109 个测试文件,以及一份给干活 agent 的操作手册。README 对「这证明了什么、没证明什么」说得很坦率。

谁做的Apache Portals 的 committer 与项目管理委员会成员(Apache 站点上以 nlothian 列出),后来是 Tyto.AI 的创始人兼 CEO——一家位于悉尼与阿德莱德的 AI 咨询与产品公司;在此之前他在 Data2Decisions 合作研究中心担任总监,负责机器学习项目。他有大约二十年没写过 Prolog 了。

制作过程

6 个阶段
  1. 01

    用剩的额度,和手机上的一个周末

    起源是带着数字写的。2025 年 11 月初 Anthropic 发放 $250 的 Claude Code 网页版额度;11 月 18 日到期,到 15 日作者还剩 $220 没用。他本来在做别的事,结果「那个周末在手机上顺手 vibe code 出一个 Prolog 解释器」。他提到自己已经二十年没用过 Prolog。第一个提交日期是 2025 年 11 月 19 日。

  2. 02

    规则本身就是实验的一部分

    README 立了三条规则和两种态度,而这是整个仓库里最可复用的东西。不许人类写代码——提示和指令可以,而配置文件与文档明确不算代码。不要刻意制造垃圾:发现它在做错事,就去修好。把所有能用的工具都用上,多写测试、加自动代码审查、加安全审计。然后是:不要满足于平庸的代码,并且玩得开心。

  3. 03

    四周下来是什么样子

    2025 年 11 月 19 日到 12 月 14 日之间 825 次提交,分布在 29 个分支上,分支名读起来就是一份 Prolog 一致性工作的待办清单:尾调用优化、ISO 字符与字节 I/O 谓词、带引号字面量里的八进制转义、模块限定的谓词指令、残差目标的 library 投影。conformance 目录里放着 ISO 测试套件,另有 109 个测试文件,用 pytest 运行,并分成需显式开启的慢速与性能两档。

  4. 04

    真正有意思的产物是脚手架

    解释器旁边是那些指挥工作的文件:一份 AGENTS.md 写明目标、编码规则、文档与测试必须放在哪里;CLAUDE.md 与 GEMINI.md;一个 .gemini 目录;以及两个装着辅助工具的目录——ai-tools,和 tools 下十个 Python 脚本,用来检查重复内置谓词、抓取期望的一致性结果、测量库加载耗时。docs 里十二份文档覆盖架构、文法对比、递归优化与一致性测试。这个项目既是软件的记录,也是流程的记录。

  5. 05

    哪些不是 AI 生成的,写得很明白

    README 把一处标成加粗,免得被漏掉:Prolog 库和示例不是 AI 生成的。library 目录通过 git subtree 来自 scryer-prolog,并保留原有许可。考虑到仓库其余部分都处在「不许人类写代码」的规则之下,这条披露是在做实事——它区分了「一个能通过库测试的解释器」和「一个连库也是自己写的解释器」。

  6. 06

    作者自己的判词

    仓库的谨慎一节比大多数发布帖都有用。他不知道它到底能不能工作;它看起来能,有些测试也能过,主张到此为止。因为代码是 AI 写的,他指出它是否受版权保护并不清楚——这也是它采用 MIT 的原因。最后他把人往外指:有很多真正的 Prolog 实现可能比这个好,请去用它们。最后一次提交是 2025 年 12 月 14 日。

他会告诉你什么

  • 把界线画清楚,然后守住它。「不许人类写代码」之所以可行,是因为作者同时说了什么不算代码——配置与文档——以及什么算:提示和指令可以,悄悄改源码不行。
  • 垃圾要被指出来,而不是被容忍。五条规则里有两条都在讲拒绝接受它:发现做错就去修,产出平庸时就说清哪里不对,而不是将就。
  • 别让演示跑在证据前面。他写出了能跑的解释器,然后写下自己不知道它能不能工作、AI 生成代码的版权状态不清楚、以及存在更好的 Prolog 实现、应当去用那些。

相关档案

全部档案 →