Auteurs:
(1) Kexun Zhang, UC Santa Barbara et contribution égale ;
(2) Hongqiao Chen, Northwood High School et contribution égale ;
(3) Lei Li, Université Carnegie Mellon ;
(4) William Yang Wang, UC Santa Barbara.
Un appel d'outil syntaxiquement correct doit faire référence à un nom d'outil existant et transmettre des arguments conformes au type. Motivés par le fait qu'il est simple de vérifier la syntaxe d'un appel d'outil à l'aide d'une machine à états finis (FSM), nous proposons TOOLDEC, un algorithme de décodage contraint guidé par une FSM. Au cours de chaque étape de décodage, le modèle échantillonne un sous-ensemble du vocabulaire qui ne contient que des jetons syntaxiquement corrects. Le FSM qui spécifie les sous-ensembles de jetons peut être construit à partir de la documentation de l'outil. Par exemple, dans la figure 2, un FSM est construit pour les fonctions add, exp, square et sqrt. Le tableau 2 montre comment TOOLDEC répond à la question « le côté d'un carré est 5, quelle est son aire ? en utilisant le FSM. Avec les conseils du FSM, TOOLDEC atteint les objectifs suivants :
• Modes de commutation. Basculez entre le « mode texte » lorsque le modèle est libre de générer n’importe quel texte et le « mode outil » lorsque le modèle ne peut générer que des appels d’outils valides.
• Génération de noms d'outils. Au début d'un appel d'outil, générez uniquement les noms d'outils existants corrects à partir d'une liste d'outils prédéfinie.
• Passer des arguments. Transmettez uniquement des arguments conformes au type à l’outil.
TOOLDEC est guidé par une machine à états finis (FSM). Un FSM est un 5-tuple (S, V, g, s0, R), constitué d'un ensemble d'états finis S, d'un alphabet V , d'une fonction de transition g : S ×V → S, d'un état initial s0 et d'un ensemble de acceptant les états R. Dans notre cas, S et g sont construits à partir de la signature de l’outil. V est le vocabulaire symbolique du modèle de langage. R correspond à des jetons prédéfinis qui peuvent déterminer que le LM a terminé la tâche, comme ''.
A chaque étape de décodage t, TOOLDEC maintient un état courant s. Il ne peut générer que les jetons autorisés par le FSM, c'est-à-dire les jetons pour lesquels g(s, ·) est défini. Ces
Pour construire un trie, nous y insérons toutes les chaînes une par une. Insérer une chaîne dans un trie signifie parcourir de la racine le chemin tracé par la chaîne et créer de nouveaux nœuds lorsque l'étape suivante du chemin n'existe pas. Par exemple, nous montrons comment deux noms d'outils supplémentaires, exp10 et expand, peuvent être ajoutés au trie de la figure 3.
Notez que la construction de trie dépend d’une hypothèse : il n’y a pas deux outils portant le même nom. Bien qu’il s’agisse d’une hypothèse raisonnable, il pourrait y avoir des exceptions dans les applications réelles. Dans ce cas, nous pourrions réécrire les noms des outils pour inclure plus de détails afin de lever toute ambiguïté. La réécriture des noms d'outils abstraits et difficiles à comprendre peut également permettre au modèle de langage de les sélectionner plus facilement par nom.
Génération d'arguments d'outil syntaxiquement valides. Les arguments de l'outil ont des types spécifiés. Comme les arguments d’un programme, ils doivent suivre certaines règles de grammaire. Ces règles peuvent être spécifiées par des machines à états finis. Par exemple, le « IntFSM » de la figure 2 représente une machine à états finis qui n'accepte que les littéraux entiers. Pour tous les arguments d'un outil, nous chaînons leurs FSM correspondants et utilisons le dernier état correspondant au nom de l'outil comme état initial de cette chaîne FSM. Notez qu'en pratique, il n'est pas nécessaire de construire explicitement ce FSM. Tout vérificateur de grammaire indiquant l’ensemble des prochains jetons valides suffit.
Cet article est disponible sur arxiv sous licence CC 4.0 DEED.