Implémentation des fonctionnalités de l'outil dans l'IA conversationnelle

DEV - 18/10
Dans le cadre de la construction de Glama, j'essaie de mieux comprendre les concepts derrière...

Dans le cadre de la création de Glama, j'essaie de mieux comprendre les concepts derrière les services existants, tels que les outils d'assistance d'OpenAI. J'ai donc décidé d'écrire un petit PoC qui tente de reproduire la fonctionnalité.

Que sont les outils d'assistance ?

Cet article de blog capture bien les concepts derrière les outils. En bref, les outils sont un moyen de définir un ensemble de fonctions pouvant être appelées par le modèle en réponse aux requêtes des utilisateurs. De plus, le modèle peut appeler plusieurs fonctions en séquence pour répondre à des requêtes complexes. Il peut déduire l'ordre correct des appels de fonction pour accomplir une tâche, éliminant ainsi le besoin d'une logique de routage complexe.

Des exemples pratiques d’outils comprennent :

  • Récupérer des informations à partir de sources externes (par exemple, récupérer la météo actuelle dans un endroit donné)
  • Calculer des expressions mathématiques complexes (par exemple calculer le coût total d'un panier)
  • Effectuer des actions au nom de l'utilisateur (par exemple envoyer un e-mail)

Cependant, tous les modèles ne prennent pas en charge les outils. Je voulais écrire ma propre implémentation de routage afin de pouvoir permettre l'accès aux outils pour tous les modèles.

Outils de mise en œuvre

J'ai commencé par écrire un cas de test simple qui décrit le chemin heureux.

importer { routeMessage } depuis './routeMessage' ; importer { attendre, ça } depuis 'vitest' ; importer { z } depuis 'zod' ; it('utilise des outils si des outils pertinents sont disponibles', async() => { const plan = wait routeMessage({ messages : [ { content : 'Qu'est-ce que 2+2 ?', role : 'user' as const, }, ], outils : [ { description : 'Ajoute deux nombres.', exécution : async ({ a, b }) => { return { sum : a + b, }, nom : 'addNumbers', paramètres : z. object({ a : z.numb...
[Courte citation de 8% de l'article original]
Loading...