作者:
(1)加州大学圣巴巴拉分校的张克迅及其同等贡献;
(2)Northwood High School的Hongqiao Chen,以及同等贡献;
(3) 李蕾,卡内基梅隆大学;
(4)威廉杨·王(William Yang Wang),加州大学圣巴巴拉分校。
语法正确的工具调用需要引用现有的工具名称并传递符合类型的参数。由于使用有限状态机 (FSM) 可以轻松验证工具调用的语法,因此我们提出了 TOOLDEC,这是一种由 FSM 引导的受限解码算法。在每个解码步骤中,模型都会从词汇表中仅包含语法正确的标记的子集中进行采样。可以根据工具文档构建指定标记子集的 FSM。例如,在图 2 中,为函数 add、exp、square 和 sqrt 构建了一个 FSM。表 2 显示了 TOOLDEC 如何使用 FSM 回答“正方形的边长为 5,它的面积是多少?”这个问题。在 FSM 的指导下,TOOLDEC 实现了以下目标:
• 切换模式。当模型可以自由生成任何文本时,在“文本模式”和当模型只能生成有效的工具调用时在“工具模式”之间切换。
• 生成工具名称。在工具调用开始时,仅从预定义的工具列表中生成正确的现有工具名称。
• 传递参数。仅向工具传递类型一致的参数。
TOOLDEC 由有限状态机 (FSM) 引导。FSM 是一个 5 元组 (S, V, g, s0, R),由有限状态集 S、字母表 V、转换函数 g : S ×V → S、初始状态 s0 和一组接受状态 R 组成。在我们的例子中,S 和 g 是根据工具签名构建的。V 是语言模型的标记词汇表。R 对应于可以确定 LM 已完成任务的预定义标记,例如 ''。
在每个解码步骤 t 中,TOOLDEC 保持当前状态 s。它只能生成 FSM 允许的标记,即定义 g(s, ·) 的标记。这些
要构建一个 trie,我们需要将所有字符串逐个插入其中。将字符串插入 trie 意味着从根开始沿着字符串所构成的路径向下走,并在路径中的下一步不存在时创建新节点。例如,我们在图 3 中展示了如何将另外两个工具名称 exp10 和 expand 添加到 trie 中。
请注意,字典树的构造取决于一个假设:没有两个工具具有相同的名称。虽然这是一个合理的假设,但在实际应用中可能会有例外。在这种情况下,我们可以重写工具名称以包含更多细节以消除歧义。重写抽象且难以理解的工具名称也可以使语言模型更容易按名称选择它们。
生成语法有效的工具参数。工具参数具有指定的类型。与程序中的参数一样,它们需要遵循某些语法规则。这些规则可以由有限状态机指定。例如,图 2 中的“IntFSM”描述了一个仅接受整数文字的有限状态机。对于工具的所有参数,我们将它们对应的 FSM 链接在一起,并使用与工具名称相对应的最后一个状态作为此 FSM 链的初始状态。请注意,在实践中,没有必要明确构建此 FSM。任何可以告知有效下一个标记集的语法检查器都可以。