← 最新论文
🤖 AI

A Literate Programming Environment for Human and Machine Agents

本文提出了一种通过名称图(name-graph)架构将可执行代码、自然语言和结构化数据集成的文学编程环境,从而为大语言模型优化上下文,并为机器智能体提供与人类 IDE 相当的符号感知工具。

原作者: Adam T. Burke

发布于 2026-08-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Adam T. Burke

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

在现代计算时代,一种新型的伙伴进入了工作坊:语言模型。这些是基于庞大人类文本库训练而成的、具有高度灵活性的系统,能够以惊人的流畅度阅读指令并编写代码。对于许多人来说,这种转变感觉像是能力的突然扩张,让新手能够构建脚本,让专家能够处理大型系统。然而,一种根本性的张力依然存在。虽然这些机器可以处理语言,但一旦会话结束,它们并不会真正地“学习”或记住发生过的事情。它们完全依赖于当前可见的文本,即一个必须不断用相关细节来填充的有限上下文窗口。如果程序员希望机器理解一段代码背后的逻辑,那么该逻辑必须与代码本身并置在文本之中。这为我们如何编写软件提出了挑战。传统上,代码与人类对代码的解释被保存在不同的地方,或者埋藏在机器经常忽略的注释中。但如果机器要成为真正的协作伙伴,程序的叙述与程序本身必须共同存在,并肩生活在一个既能让机器也能让人类以同样轻松的方式阅读的格式中。

这就是由研究员亚当·T·伯克(Adam T. Burke)创建的新环境 notlob 所解决的核心问题。这项工作提议回归一种被称为“文学编程”(literate programming)的旧思想,但它是为人类与人工智能代理共同阅读同一文档的时代而更新的。在这个系统中,一个软件项目不再是代码、文档和测试的集合,而是一个单一的、流动的文档,看起来像一篇论文。文本解释了思想、动机和设计,而可执行的指令则直接嵌入在散文中。研究人员构建了一个工作系统,将这个组合文档视为唯一的真理来源。当系统读取文件时,它看到的不仅仅是文字;它构建了一张详细的地图,展示了每一个名称、概念和代码片段是如何相互关联的。这张被称为“名称图谱”(name-graph)的地图,允许机器代理不是通过搜索关键词,而是通过遵循思想之间的逻辑连接来导航项目,就像人类读者跟随书中的思路一样。

notlob 的设计由关于编程方式如何变化的三个简单观察驱动。首先,在与人工智能协作时,自然语言已成为指定和组织软件的主导方式。其次,用于验证代码是否仍然有效的计算机生成检查变得比以往任何时候都更有价值,它们作为可靠的反馈循环。第三,当前这一代语言模型严重依赖于它们一次能看到的文本量。为了解决这个问题,研究人员创建了一种语言,让解释、执行和验证都位于同一个文件中。一个典型的文档以标题和引言开始,随后是程序的核心逻辑。接着是一个用于测试和引用的部分,由一条简单的线分隔。系统使用特定的标记来区分散文段落、代码块、必须始终成立的属性以及特定的测试用例。例如,一个章节可能会描述一个数学序列,紧接着是生成该序列的代码,然后是一个声明该代码必须满足某些规则的文本块。系统随后运行这些规则,以确保代码的行为符合文本所声称的样子。

为了实现这一点,研究人员开发了一个将“名称”视为系统最重要对象的解析器。在传统编程中,名称只是变量或函数的标签。在 notlob 中,名称是一个一级公民,将书面解释与可执行代码联系起来。当系统处理文件时,它构建一个图谱,将描述概念的文本、实现它的代码以及验证它的测试连接在一起。这种结构允许机器代理从高层思想跳转到实现它的具体代码行,或者在不迷失在文件海洋中的情况下找到使用特定概念的所有地方。该系统包含可以将此图谱导出为标准格式的工具,允许其他软件查询不同项目部分之间的关系。这模仿了人类程序员使用集成开发环境来查找函数定义或调用者的方式,但它是通过理解文本的语义而非仅仅通过文件结构来实现的。

研究人员通过构建几个工作程序测试了这个环境,包括一个将数字转换为罗马数字的工具,以及一个基于 Petri 网(用于建模具有交互部件系统的图表)的网络游戏。在一个实验中,他们使用一个人工代理协助从头开始编写项目。该代理被赋予了高层目标的描述和几个空的函数签名。随后,该代理填写了代码、编写了测试并组织了散文,同时始终遵循 notлоb 文档的结构。该代理能够检测出文本与代码之间的不一致之处,例如函数定义的偏差,并请求澄清。在另一个案例中,该系统帮助一个代理在一个数字信号处理项目中发现了一个被其他测试方法漏掉的微妙错误。该错误与一个在特定条件下变得不稳定的计算有关,而该代理作为论文一部分编写的属性测试成功暴露了这一错误。

然而,研究人员也观察到代理并非完美无缺。在若干情况下,代理倾向于忽视文档中的声明部分(如形式属性和结构规则),转而关注编写代码的直接任务。它们有时将文本视为一种建议而非约束,导致了需要人工干预才能修复的不一致性。研究人员指出,这种动态在人类软件团队中也很常见,资深开发人员必须经常介入以确保文档与代码保持一致。这项研究表明,尽管这些语言模型功能强大,但它们仍然受益于一种迫使代码与解释保持紧密接触的结构。notlob 环境提供了这种结构,提供了一种将程序的理论与实践放在同一处的方法。

这项工作还将其与其他使用语言模型进行编程的方法区分开来。有些方法将自然语言描述视为在编写代码之前存在的独立规范,这一过程可能导致计划与结果之间的脱节。另一些方法则依赖模型在代码编写完成后进行总结或重新生成。notlob 采取了不同的路径,通过将规范、代码和测试共同置于一个迭代的工作空间中。这使得人类和机器可以同时处理这三个元素,协同完善逻辑与解释。研究人员认为,相比于将自然语言仅视为提示词或独立的文档,这种方法更为有效。通过使散文和代码成为不可分割的整体,该系统确保了语言模型的上下文窗口中充满了最相关的的信息。

notlob 的实现是一个开源项目,目前支持三种成熟的编程语言:Haskell、Python 和 TypeScript。该系统包含一套命令行工具,允许用户构建、测试和可视化项目。其中一个工具可以将文档渲染为标准的网页,另一个则可以生成名称图谱的可视化地图,展示项目的不同部分是如何连接的。研究人员还尝试使用该系统创建一个“评论家”代理,即一个负责审查项目逻辑一致性和风格的人工智能。该代理能够识别错误并提出改进建议,有时会采用不同的角色以提供多元化的视角。这些实验表明,该环境不仅可以支持代码的创建,还可以支持对整个项目的批判性审查与精炼。

最终,这篇论文呈现了一个愿景,即软件开发将是人类与机器之间基于文本与代码共享语言的协作行为。notlob 环境并不声称解决了人工智能在编程领域的所有问题,也不承诺机器很快就能自主编写完美的软件。相反,它提供了一个实用的工具,使思想与实现之间的关系变得更加透明和稳健。通过将论文与可执行代码视为一个单一的、互联的实体,该系统有助于弥合人类意图与机器执行之间的鸿沟。这项工作表明,未来的编程可能不在于编写更多的代码,而在于编写更好的故事,让代码得以遵循,从而确保系统的逻辑对机器而言如同对人类一样清晰。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →