Présentation du modèle Phi-3-Mini-128K-Instruct
Le modèle Phi-3-Mini-128K-Instruct est un modèle de langage léger (SLM) de 3,8 milliards de paramètres, conçu pour offrir des performances élevées tout en restant économe en ressources. Ses principales caractéristiques incluent :
- Fenêtre contextuelle : Supporte jusqu'à 128 000 jetons (tokens), idéal pour l'analyse de documents longs.
- Entraînement : Basé sur des données de haute qualité combinant des jeux de données synthétiques et des contenus web filtrés.
- Optimisation : Ajusté par SFT (Supervised Fine-Tuning) et DPO (Direct Preference Optimization) pour une meilleure conformité aux instructions.
Validation du service d'inférence
Avant de lancer l'interface utilisateur, il est impératif de s'assurer que le backend du modèle est opérationnel. Vous pouvez vérifier l'état du serveur d'inférence en consultant les journaux système :
tail -f /var/log/llm_service.log
Le service est prêt lorsque le message suivant appparaît dans le terminal :
INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)
INFO: Application startup complete.
Mise en œuvre de l'interface Chainlit
Pour interagir avec le modèle via une interface web moderne, nous utilisons Chainlit. Voici un exemple de structure pour le fichier app.py permettant de lier l'interface au serveur d'inférence :
import chainlit as cl
import httpx
API_URL = "http://localhost:8000/v1/chat/completions"
@cl.on_message
async def traiter_message(message: cl.Message):
corps_requete = {
"model": "phi-3-mini",
"messages": [{"role": "user", "content": message.content}],
"temperature": 0.7,
"stream": True
}
ui_msg = cl.Message(content="")
async with httpx.AsyncClient() as client:
async with client.stream("POST", API_URL, json=corps_requete, timeout=None) as response:
async for chunk in response.aiter_text():
# Logique de traitement du flux (streaming)
await ui_msg.stream_token(chunk)
await ui_msg.send()
Lancez l'application avec la commande suivante :
chainlit run app.py -w
Exploitation de l'interface utilisateur
Interaction de base
Une fois l'interface chargée dans votre navigateur, vous pouvez soumettre des requêtes directes. Le modèle Phi-3 est particulièrement efficace pour vulgariser des concepts techniques ou générer du code.
Gestion des paramètres de génération
Le panneau de configuration latéral permet d'ajuster le comportement du modèle :
- Température : Une valeur basse (0.2) produit des réponses factuelles et déterministes, tandis qu'une valeur haute (0.8) favorise la créativité.
- Max Tokens : Définit la limite de longueur de la réponse générée.
- Top-P : Filtre les mots les plus probables pour affiner la diversité du vocabulaire.
Analyse des performances et réponses
Lors de l'utilisation de Phi-3 avec Chainlit, plusieurs aspects de la réponse peuvent être analysés :
- Formatage Markdown : Le modèle structure naturellement ses réponses avec des titres, des listes à puces et des blocs de code syntaxiquement colorés.
- Suivi du contexte : Grâce à la gestion native des sessions par Chainlit, vous pouvez poser des questions de suivi (ex: "Peux-tu approfondir le deuxième point ?").
- Vitesse d'inférence : En raison de sa taille réduite (3.8B), le temps de génération du premier jeton est extrêmement rapide, même sur des configurations matérielles modestes.
Résolution des problèmes courants
Le serveur ne répond pas
Si l'interface affiche une erreur de connexion, vérifiez que l'URL de l'API dans votre script Python correspond exactement à l'adresse fournie par votre serveur d'inférence (souvent localhost:8000 ou 127.0.0.1:8000).
Qualité de réponse insuffisante
Si les réponses manquent de précision :
- Réduisez la Temperature pour limiter les hallucinations.
- Fournissez un "System Prompt" plus explicite pour cadrer le rôle du modèle (ex: "Tu es un expert en cybersécurité").
- Utilisez des techniques de "Few-shot prompting" en donnant un exemple de format attendu dans votre question.