Je veux utiliser qwen 3 en tant que LLM avec tools...
# ask-ai
g
Je veux utiliser qwen 3 en tant que LLM avec tools calling sur vllm qu est ce que je dois faire commen j'implémente cela
t
Thanks for reaching out, Michael. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Merci — je vois que vous voulez utiliser Qwen 3 comme LLM et activer le « tool calling » (appel d'outils) via vLLM. Pour vous donner des instructions précises, j'ai besoin de quelques détails. Pendant ce temps, je vous indique les grandes étapes générales pour que vous sachiez à quoi vous attendre. Questions rapides pour clarifier votre contexte • Sur quel environnement travaillez-vous ? (Linux/macOS/Windows, cloud provider ou serveur local) • Quelle version de vLLM utilisez-vous ou prévoyez-vous d'installer ? • Utilisez-vous déjà une implémentation d’API (FastAPI, Flask, ou autre) pour exposer le modèle ? • Avez-vous accès à Qwen 3 via une image Docker, un modèle local ou une API d’un fournisseur (par ex. accès propriétaire) ? • Quels types d’outils voulez-vous appeler ? (ex. exécution de code Python, accès à une base de données, appels HTTP vers des services externes, actions sur le système) • Souhaitez-vous que les appels d’outils soient gérés automatiquement par le modèle (routing/agent) ou préférez-vous une logique applicative qui interprète la sortie du modèle et appelle les outils ? Grandes étapes générales (workflow) 1. Préparer l’accès au modèle Qwen 3 ◦ Assurez-vous d’avoir Qwen 3 disponible localement ou via l’image/fournisseur. vLLM doit pouvoir charger le modèle (format compatible). 1. Installer et configurer vLLM ◦ Installer vLLM dans votre environnement (pip/conda ou image Docker). ◦ Vérifier que vLLM peut charger Qwen 3 et répondre à des requêtes simples en mode inference. 1. Concevoir l’interface de tool-calling ◦ Définir un format conventionnel pour que le modèle demande un outil (ex. JSON structuré dans la sortie : {"tool":"run_code","input":"..."}). ◦ Ajouter des prompts ou des instructions systèmes pour encourager ce format (tool instruction prompt). 1. Implémenter le “agent” ou le gestionnaire d’outils ◦ Côté application, parser la sortie du modèle pour détecter les appels d’outils. ◦ Mappez le nom de l’outil vers une fonction locale qui exécute l’action (ex. exécution de code sandboxée, requête HTTP, DB query). ◦ Retournez le résultat de l’outil au modèle (ex. en l’injectant dans le prompt suivant) pour permettre des chaînes d’actions. 1. Boucle d’itération (contexte) ◦ Maintenez l’historique de la conversation / d’appels pour que le modèle prenne en compte les résultats précédents. ◦ Gérez les erreurs, timeouts, et la sécurité (sandboxing pour exécution de code). 1. Tests et sécurité ◦ Testez avec prompts contrôlés pour vérifier le format d’appel. ◦ Sandboxez toute exécution potentiellement dangereuse et limitez les permissions. 1. Déploiement ◦ Déployer vLLM + votre service d’agent derrière une API (FastAPI, etc.) et monitorer les performances/mémoire. Points techniques à confirmer (je peux vous détailler après votre réponse) • Exemple de prompt template pour forcer un format d’appels d’outils. • Exemple de parsing de la sortie JSON et d’un flow de requêtes/réponses entre vLLM et votre agent. • Meilleures pratiques pour sandboxing et limites de ressources. • Exemple minimal en FastAPI (ou Flask) avec vLLM + un outil simple (ex. exécution de calcul ou appel HTTP). Dites-moi : 1) quelles réponses aux questions de la section “Questions rapides” ; 2) si vous voulez un exemple de code concret (et en quel framework : FastAPI, Flask, Node.js) ; 3) si vous avez des contraintes particulières de sécurité ou d’infrastructure. Avec ces éléments je vous fournis un guide pas-à-pas et un exemple de code adapté.
g
En python avec AgentSession
t
Merci — vous avez précisé Python et AgentSession. Je peux vous aider à concevoir et implémenter ce flux, mais je n’ai pas d’instructions pré‑existantes montrant une intégration prête à l’emploi de Qwen 3 + vLLM dans AgentSession. Je vais donc proposer une approche pratique et modulaire que vous pouvez adapter : un AgentSession Python qui utilise vLLM pour l’inférence du modèle (Qwen 3) et qui effectue le tool-calling via un gestionnaire d’outils. Avant de fournir un exemple concret, j’ai besoin de deux confirmations rapides : • Pouvez‑vous charger Qwen 3 localement avec vLLM (modèle au format compatible) ou passez‑vous par un fournisseur qui l’héberge ? • Utilisez‑vous une bibliothèque AgentSession existante (précisez le package / version) ou s’agit‑il d’une classe applicative maison nommée
AgentSession
? Si vous confirmez ces points, je fournis un exemple complet en Python. En attendant, voici le plan et un exemple minimaliste que vous pourrez adapter. Plan d’ensemble (ce que fera l’AgentSession) 1. Démarrer vLLM et charger Qwen 3 pour l’inférence. 2. Envoyer un prompt structuré au modèle en lui demandant d’émettre des appels d’outils au format JSON prédéfini. 3. Parser la sortie du modèle côté application ; détecter un appel d’outil (ex. {"tool":"run_code","input":"..." }). 4. Exécuter l’outil via un gestionnaire sécurisé (sandbox pour du code, requête HTTP, accès DB, etc.). 5. Renvoyer le résultat de l’outil au modèle dans un nouveau prompt pour qu’il poursuive le raisonnement. 6. Boucler jusqu’à réponse finale ou timeout/erreur. Exemple minimal — structure et composants (conceptuel) • AgentSession (classe) : ◦ gère le contexte de conversation et l’état de l’agent. ◦ méthode
step(user_message)
qui : i. construit le prompt avec l’historique et les instructions d’outil. ii. appelle vLLM pour obtenir la réponse. iii. si la réponse contient un appel d’outil, appelle ToolManager, injecte le résultat, puis répète. iv. retourne la réponse finale au caller. • ToolManager (dictionnaire de fonctions) : ◦ mappe les noms d’outils vers des fonctions Python sûres. ◦ ex. "run_code" -> exécution sandboxée en subprocess ou via un container. ◦ ex. "http_get" -> requête sortante avec timeout et validation des URLs. • Format d’appel d’outils (à imposer dans le prompt) : ◦ Demander explicitement du JSON strict, par exemple : {"tool": "<nom_tool>", "input": "<données>"} • Et exiger un champ final "final_response" quand l’agent a terminé. Prompt system (extrait à inclure dans chaque requête) • Indiquez au modèle comment formater les appels d’outils (ex. « Si vous devez appeler un outil, retournez uniquement un JSON valide... »). • Donnez la liste des outils disponibles et leurs contrats d’entrée/sortie. Sécurité et bonnes pratiques • Sandboxez toute exécution de code (exécution dans un container ou subprocess isolé, avec ressources limitées). • Validez et nettoyez toute entrée/sortie (pas d’exécution directe de chaînes non vérifiées). • Mettez des timeouts stricts sur les appels d’outils et l’inférence. • Journalisez les actions d’outils pour audit. Souhaitez‑vous l’un des éléments suivants en exemple prêt à l’emploi ? • A) Exemple de code complet en Python utilisant FastAPI + AgentSession + vLLM (recommandé si vous exposez une API). • B) Classe Python
AgentSession
+
ToolManager
autonome (exécutable en local, sans serveur). • C) Un prompt template détaillé et des exemples d’échanges modèle <-> outils. Dites-moi quelle option (A, B ou C) vous préférez et confirmez les deux points de clarification sur Qwen 3 / vLLM et la version de votre AgentSession. Je vous fournis ensuite le code et les instructions pas à pas adaptés. Sources: LiveKit turn detector plugin | LiveKit Documentation | Improved End-of-Turn Model Cuts Voice AI Interruptions 39% | Large language models (LLM) overview | LiveKit Documentation