Autores:
(1) Kexun Zhang, UC Santa Bárbara e contribuição igual;
(2) Hongqiao Chen, Northwood High School e contribuição igual;
(3) Lei Li, Universidade Carnegie Mellon;
(4) William Yang Wang,UC Santa Bárbara.
Uma chamada de ferramenta sintaticamente correta precisa fazer referência a um nome de ferramenta existente e passar argumentos em conformidade com o tipo. Motivados pelo fato de ser simples verificar a sintaxe de uma chamada de ferramenta usando uma máquina de estados finitos (FSM), propomos o TOOLDEC, um algoritmo de decodificação restrita guiado por uma FSM. Durante cada etapa de decodificação, o modelo faz amostras de um subconjunto do vocabulário que contém apenas tokens sintaticamente corretos. O FSM que especifica os subconjuntos de tokens pode ser construído a partir da documentação da ferramenta. Por exemplo, na Figura 2, um FSM é construído para as funções add, exp, square e sqrt. A Tabela 2 mostra como o TOOLDEC responde à pergunta “o lado de um quadrado é 5, qual é a sua área?” usando o FSM. Com a orientação do FSM, a TOOLDEC atinge os seguintes objetivos:
• Modos de comutação. Alterne entre “modo de texto” quando o modelo está livre para gerar qualquer texto e “modo de ferramenta” quando o modelo só pode gerar chamadas de ferramenta válidas.
• Gerando Nomes de Ferramentas. No início de uma chamada de ferramenta, gere apenas nomes corretos de ferramentas existentes a partir de uma lista predefinida de ferramentas.
• Passando argumentos. Passe apenas argumentos em conformidade com o tipo para a ferramenta.
TOOLDEC é guiado por uma máquina de estados finitos (FSM). Um FSM é uma tupla de 5 (S, V, g, s0, R), consistindo de um conjunto de estados finitos S, um alfabeto V , uma função de transição g : S ×V → S, um estado inicial s0 e um conjunto de aceitando estados R. No nosso caso, S e g são construídos a partir da assinatura da ferramenta. V é o vocabulário simbólico do modelo de linguagem. R corresponde a tokens predefinidos que podem determinar se o LM completou a tarefa, como ''.
A cada etapa de decodificação t, o TOOLDEC mantém um estado atual s. Ele só pode gerar os tokens permitidos pelo FSM, ou seja, os tokens para os quais g(s, ·) está definido. Esses
Para construir um teste, inserimos todas as strings nele, uma por uma. Inserir uma string em um try significa ir da raiz até o caminho feito pela string e criar novos nós quando a próxima etapa do caminho não existir. Por exemplo, mostramos como mais dois nomes de ferramentas, exp10 e expand, podem ser adicionados ao teste na Figura 3.
Observe que a construção de try depende de uma suposição: não existem duas ferramentas com o mesmo nome. Embora esta seja uma suposição razoável, pode haver exceções em aplicações reais. Nesse caso, poderíamos reescrever os nomes das ferramentas para incluir mais detalhes para eliminá-los. Reescrever nomes de ferramentas abstratos e difíceis de entender também pode tornar mais fácil para o modelo de linguagem selecioná-los por nome.
Gerando argumentos de ferramenta sintaticamente válidos. Os argumentos da ferramenta têm tipos especificados. Assim como os argumentos de um programa, eles precisam seguir certas regras gramaticais. Estas regras podem ser especificadas por máquinas de estados finitos. Por exemplo, o “IntFSM” na Figura 2 representa uma máquina de estado finito que aceita apenas literais inteiros. Para todos os argumentos de uma ferramenta, encadeamos seus FSMs correspondentes e usamos o último estado correspondente ao nome da ferramenta como o estado inicial desta cadeia de FSM. Observe que, na prática, não é necessário construir explicitamente este FSM. Qualquer verificador gramatical que informe o conjunto de próximos tokens válidos é suficiente.
Este artigo está disponível no arxiv sob licença CC 4.0 DEED.