共享程序状态:一种提升自然语言与形式化代码互操作性的编程抽象 / Sharing State Between Prompts and Programs
1️⃣ 一句话总结
本文提出了一种名为“共享程序状态”的新型编程抽象,允许自然语言代码直接读写宿主程序(如Python)的变量、操作对象并控制程序流程,消除了传统方法中手动序列化数据和连接代码的负担,并通过在NIGHTJAR系统中的实现与评估,证明了其在减少代码量和提升任务准确率方面的有效性。
2️⃣ 论文创新点
1. 共享程序状态(Shared Program State)
- 创新点:一种创新的编程模型,允许嵌入的自然语言代码(如LLM生成的指令)直接访问和操作宿主程序(如Python)的运行状态,包括变量作用域、堆内存和控制流状态。
- 区别/改进:解决了现有主流方法(如隔离程序状态、程序员定义工具)中需要程序员手动在自然语言与形式化代码环境之间传输数据、转换状态或定义额外工具的问题,显著减少了编程负担和代码量。
- 意义:极大地提升了自然语言编程与形式化语言编程的互操作性,使程序员能更高效地结合两者优势编写程序,为构建更紧密的人机协同编程系统奠定了基础。
2. 自然函数接口(Natural Function Interface, NFI)模式
- 创新点:一种用于系统化定义自然语言代码如何与宿主程序交互的规范模式。它基于“效果与处理器”(effects and handlers)的形式化设计,定义了自然代码发出的“效果”(如查找变量、赋值)以及宿主程序如何处理这些效果。
- 区别/改进:为编程系统集成自然语言代码提供了系统化的接口定义方法,超越了OpenAI函数调用等现有API,并增加了处理器可以取消自然代码执行的能力,从而支持更丰富的控制流模式。
- 意义:促进了自然语言编程与现有形式化语言编程框架的深度融合,将共享程序状态和隔离程序状态统一为接口的实例,推广了工具使用的概念。
3. NIGHTJAR系统实现与优化
- 创新点:一个基于共享程序状态NFI、以Python为宿主语言的具体实现系统。它使用LLM作为解释器来执行自然语言代码,并通过一系列工程优化(如Python专业化、预加载变量、缓存)来提升性能和准确性。
- 区别/改进:相比语言无关的基线版本,针对Python的专门化实现显著弥补了准确率差距,并将运行时开销从基线版本的2.0-2.1倍降低。系统还引入了
<var>和<:var>语法来明确变量读写权限,增强了安全性和可推理性。 - 意义:为LLM与宿主语言程序状态的安全、高效交互提供了一个可工程化的系统框架,证明了通过针对特定语言的工程优化可以显著提升共享程序状态抽象的实现性能。
3️⃣ 主要结果与价值
结果亮点
- 在创建的SPSBench基准测试套件(包含25个程序)上评估显示,采用共享程序状态的NIGHTJAR程序在任务准确率上达到或优于手动实现(提升4-19%)。
- 共享程序状态能显著减少代码量,NIGHTJAR程序相比手动实现平均减少了39.6%的代码行数。
- NIGHTJAR系统存在运行时开销,其执行时间约为手动实现的0.4-4.3倍,但通过针对Python的专门化优化,相比语言无关的基线版本在准确率和运行效率上均有显著提升。
实际价值
- 简化了智能代理、代码生成等应用中自然语言指令与现有程序逻辑的集成,开发者无需编写大量胶水代码来连接两者。
- 提升了编程的直观性和开发效率,使程序员可以更专注于核心逻辑,而非底层交互机制。
- 为未来构建更灵活、更强大的人机协同编程环境和AI编程助手提供了新的技术路径和理论基础。
4️⃣ 术语表
- 共享程序状态(Shared Program State):一种编程模型,其中嵌入的自然语言代码可以与宿主形式化语言代码(如Python)共享并直接操作程序的运行状态,包括变量作用域(共享作用域)、堆内存中的对象(共享堆)以及程序执行流程(共享控制状态)。
- 自然函数接口(Natural Function Interface, NFI):一种规范自然语言代码与宿主编程语言之间数据传递或服务使用的接口,定义了“值”、“效果”和“处理程序”。效果是自然代码向宿主语言发出的、需要被满足的特定请求(如查找变量、跳转),处理程序则实现这些请求。
- NIGHTJAR:本文实现的一个基于共享程序状态自然函数接口(NFI)的编程系统,使用Python作为宿主语言,通过LLM代理解释自然语言代码并产生效果(如Lookup, Assign, Goto等),以直接操作Python程序状态。
- 隔离程序状态(Isolated Program State):现有大多数研究采用的方法,自然代码执行与形式化代码执行状态隔离,自然代码无法直接访问程序状态,数据需要通过提示上下文序列化传递。
- 效果(Effects):在自然函数接口(NFI)中,指自然语言代码向宿主语言发出的、需要被满足的特定请求(如查找变量、赋值、跳转),以便自然代码执行能够继续。
- SPSBench:本文引入的、用于评估共享程序状态的基准测试套件,包含25个使用共享程序状态的自然语言程序。