Chatbot IA
Règles
- Utiliser le SDK Vercel AI (paquet
ai) pour le streaming — hook useChat() côté client, streamText() côté serveur
- Streamer les réponses avec
text/event-stream — ne jamais mettre en mémoire tampon les réponses complètes avant de les envoyer
- Format des messages :
{ role: "user" | "assistant" | "system", content: string }
- Gestion de la fenêtre de contexte : tronquer les messages les plus anciens lorsque la limite de tokens est approchée, toujours conserver le prompt système
- Pattern RAG : intégrer la requête utilisateur → recherche vectorielle → injecter les k premiers résultats en tant que contexte avant le message utilisateur
- Interface de chat : défilement automatique vers le bas, indicateur de chargement avec points animés, afficher le Markdown dans les messages de l'assistant
- Persistance de l'historique des conversations côté serveur — utiliser une table
messages avec chatId, role, content, createdAt
- Le prompt système doit être en premier dans le tableau de messages — ne jamais laisser les messages utilisateur le remplacer
- Point de terminaison YepAPI chat :
POST /v1/ai/chat avec { messages, model?, stream? }
- Bouton d'arrêt de génération — utiliser
AbortController pour annuler les flux en cours
Modèles
const { messages, input, handleInputChange, handleSubmit, isLoading, stop } = useChat({
api: "/api/chat",
});
import { streamText } from "ai";
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({ model, messages });
return result.toDataStreamResponse();
}
À éviter
- Envoyer l'intégralité de l'historique des conversations sans le tronquer — cela dépassera la fenêtre de contexte
- Bloquer l'interface utilisateur en attendant une réponse complète — toujours streamer
- Stocker les messages uniquement dans l'état du client — persister côté serveur pour l'historique
- Coder en dur les noms de modèles — utiliser des variables d'environnement ou une configuration