推测式程序化工具调用

推测式程序化工具调用

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

推测式程序化工具调用(sPTC)是一种在生成代码时预启动工具调用的技术,尤其适用于子代理或子LLM等高延迟工具。通过影子REPL解析部分代码,缓存工具输出,可重叠计算与生成,提升推理速度约1-1.2倍。实现需处理字面量、依赖变量及条件循环等场景,并控制安全性与开销。该技术对本地模型和编码代理尤为有效,未来可结合JIT编译进一步优化。

🔎

延伸解读

适用场景与收益

推测式程序化工具调用(sPTC)主要针对高延迟工具(如子代理或子LLM)和本地推理引擎。在本地运行时,推理引擎常受内存带宽限制,推测可提高算术强度;在高吞吐服务中,收益来自与主上下文生成或慢速REPL调用的重叠。实测加速约1-1.2倍,但实际效果取决于工具延迟、生成token数、服务负载和轨迹选择。

实现机制与安全性

实现通过影子REPL解析部分代码,对可推测的工具调用异步预执行并缓存结果。为安全起见,外部库和函数(如open)被标记为不安全,依赖这些函数的调用不会被推测。同时,推测执行不会修改真实REPL状态,避免错误代码或未完成调用造成副作用。

与现有方法的区别

与Conveyor和AsyncFC等早期方法不同,sPTC针对程序化工具调用(PTC)场景,代码执行使工具调用模式更复杂,重叠空间更大。传统工具调用在生成完工具调用后剩余token不多,而PTC中程序运行时间未知,推测收益更显著。

Q&A

什么是推测式程序化工具调用(sPTC)?

推测式程序化工具调用(sPTC)是一种在生成代码时预启动工具调用的技术,通过影子REPL解析部分代码并缓存工具输出,从而重叠计算与生成,提升推理速度。

推测式程序化工具调用主要解决什么问题?

主要解决高延迟工具(如子代理或子LLM)成为瓶颈的问题,通过预启动工具调用,将工具执行与主上下文生成重叠,减少等待时间。

推测式程序化工具调用如何实现?

实现方式是在REPL中为工具调用添加钩子,通过影子REPL解析部分代码,预启动工具调用并缓存输出,当实际调用时直接使用缓存结果。

推测式程序化工具调用能带来多少性能提升?

在RLM实验中,推理速度提升约1-1.2倍,具体取决于工具延迟、生成token数、服务引擎负载等因素。

推测式程序化工具调用有哪些限制或挑战?

挑战包括处理条件循环和变量依赖,需要控制安全性和额外开销,以及避免对非纯函数或外部状态的副作用。

推测式程序化工具调用与传统的工具调用有何不同?

传统工具调用在生成完整工具调用后才执行,而sPTC在生成过程中预启动工具调用,重叠计算,尤其适用于复杂程序中的工具调用。

推测式程序化工具调用适用于哪些场景?

适用于本地运行的模型和编码代理,特别是子代理或子LLM等高延迟工具的场景,如RLM和CodeAct类框架。

🏷️

标签

➡️

继续阅读