- L’équipe Node.js de Red Hat expérimente des méthodes d’intégration entre les LLM et Node.js, ainsi que TypeScript/JavaScript
- Comparaison de plusieurs frameworks, avec un examen particulièrement centré sur les appels d’outils/de fonctions et le fonctionnement des agents
- Analyse des fonctionnalités de Llama Stack, récemment lancé, et de ses possibilités d’intégration avec Node.js
Configuration et exécution de Llama Stack
- Llama Stack est un framework modulaire qui distribue différentes implémentations avec pour objectif la standardisation des API
- L’utilisation d’un conteneur basé sur Ollama offre la méthode d’exécution la plus simple
- Exemple de script d’exécution pour configurer le serveur :
- Modèle :
meta-llama/Llama-3.1-8B-Instruct
- Port :
8321
- IP du serveur Ollama :
10.1.2.38
- Le modèle doit être lancé à l’avance dans Ollama, et il faut l’utiliser au moins une fois par jour pour maintenir le keepalive
- Le point de terminaison de documentation (
/docs) permet de consulter le schéma de l’API et d’effectuer des tests interactifs
Premier exemple d’application Node.js
- Utilisation de la bibliothèque
llama-stack-client-typescript pour communiquer avec Llama Stack
- Définition de deux outils :
favorite_color_tool : fournit des informations de couleur en fonction d’une ville ou d’un pays
favorite_hockey_tool : fournit des informations sur des équipes de hockey sur glace en fonction d’une ville ou d’un pays
- Test du flux d’appel d’outils à travers un scénario de questions
- Problème initial : lorsqu’un outil ne dispose pas des informations nécessaires, il n’affiche pas d’invite claire pour orienter la suite
- Solution : l’insertion du mot "assistant" dans le message de réponse rend le flux plus naturel
Gestion des appels d’outils dans Llama Stack
- Lors de l’utilisation de l’API
chatCompletion(), les appels d’outils doivent être gérés directement
- La fonction
handleResponse() permet de détecter les requêtes d’outil et de renvoyer le résultat sous forme de message
tool_choice est réglé sur "auto" par défaut, mais le système a une forte tendance à utiliser un outil lorsqu’il en existe un
- Il a été observé que, même lorsqu’une question n’a aucun lien avec les outils, le système abandonne après avoir tenté d’en utiliser un et répond qu’il ne peut pas répondre
Expérimentation de l’intégration entre MCP et Llama Stack
- MCP (Model Context Protocol) permet d’héberger les outils sur un serveur externe et de les partager entre différents frameworks
- Le serveur MCP s’appuie sur Supergateway pour faire le pont entre un serveur basé sur stdio et un mode SSE
- Après l’enregistrement du serveur MCP, l’API agent de Llama Stack permet d’appeler automatiquement les outils MCP
- L’API agent :
- gère automatiquement l’état et les messages
- exécute en interne le flux d’appel d’outils au niveau du framework
- En revanche, il n’est pas possible de voir directement les journaux des appels d’outils, seul le résultat final est visible
Utilisation de MCP pour accéder à un environnement local
- Il est possible d’exécuter un serveur MCP en local via stdio et de le connecter à Llama Stack
- Un code est nécessaire pour convertir le JSON de définition des outils du serveur MCP vers un format compatible avec Llama Stack
mcpClient.callTool() permet de renvoyer le résultat de l’outil dans le flux de réponse du LLM
- Cela permet de mettre en œuvre des scénarios d’accès à un environnement applicatif local, plutôt qu’à un serveur centralisé
Conclusion
- Mise en pratique de l’intégration des LLM et des appels d’outils via Llama Stack dans un environnement Node.js
- Présentation de différents usages via des outils locaux, un MCP distant et un MCP local
- Le guide propose en particulier aux développeurs JavaScript/TypeScript des exemples de code concrets et des flux d’exécution pratiques
- Il constitue un bon point de départ pour les développeurs qui souhaitent intégrer des LLM à Node.js
Ressources supplémentaires
Aucun commentaire pour le moment.