Sheet Agent 方向论文选读
Cursor, Windsurf 等 LLM 辅助编程工具得到了大量关注。另一方面,很多工作其实并不会非常多涉及编程,即使是有数据处理,也会使用 Excel、SPSS等工具。但是与编程不同,这些专门工具在 LLM 上是缺乏预训练支持的,我也体验过几款 Sheet Copilot 工具,发现距离真正可用还有比较大的差距。 比如飞书的 Sheet Agent,也就是他们多维表格的 AI 助手,几乎很难做到按照指令办事,更多时候只能处理简单的指令,比如求和、加粗等,如果要处理复杂指令,比如 统计 2010-2020年间销售量的分布,并对两款商品的销量进行 T 检验,创建一个新的工作表承载这个结果。 基本上是做不到的,然而其实后者才是大家真正需要的能力。要实现 Sheet Agent 有两个思路 生成代码去操作。比如使用 openxlsx 等。这种方法的好处是,可以借助 LLM 本身学到的代码能力,表示能力可能会更强。但坏处是,我们得专门为代码去设计沙盒,也很难对生成的代码进行性能优化。比如刚刚举的例子,「统计 2010-2020年间销售量的分布,并对两款商品的销量进行 T 检验」,这里使用 Python + openxlsx ,LLM 可能会更倾向于使用 Python 代码去计算分布、进行 T 检验,而非利用产品本身的能力。为了加速计算,各家文档产品都会做一些性能优化,比如算子的编排,使用 script(无论是 Python 还是 vbs)都有可能引起性能的大幅下降。 生成操作序列。对于文档产品来说,所有的操作都可以被刻画为 mutation,这里的 mutation 就是对表格的原子操作,所有的操作都能被还原为 mutation 的序列。好处是这真的像用户自己的操作,因此兼容原有的所有基建。但难点是:1. 不同的产品有不同的 mutation 设计,LLM 是无法 zero-shot 感知这些信息的;2. LLM 无法严格按照既定的格式输出 mutation 序列;3. 缺乏 mutation 层面的数据集,现有的数据集都是表格文件层面的 input 和 output。 现有的模型基本上都是使用第一种方法进行处理。在我看来当前的研究存在下列难题: 缺乏真实数据:当前的 benchmark 量都比较小,数据表也非常小,操作序列也很简单。这些都是脱离真实场景的,比如很多 Agent 是直接把整个数据表喂给了 LLM,这在真实场景上是不可能的。 缺乏有效的评估手段:和其他的生成任务一样,Sheet 操作任务也缺乏有效的评估手段,比如两个同样错误的操作,如何去评估哪个错得更多?两个同样正确的操作,如何去评估谁的实现更好? 缺乏 mutation 层面的支持:正如上文所言,现实场景不可能涉及一个沙箱容器来执行特定的代码,一方面存在安全性问题,另一方面,这对于数据一致性、性能都是巨大的挑战。 SheetCopilot (NeurIPS 2023) × ...