KI-Chatbot
Regeln
- Verwende das Vercel AI SDK (
ai-Paket) für Streaming — useChat()-Hook auf dem Client, streamText() auf dem Server
- Stream-Antworten mit
text/event-stream — puffere niemals vollständige Antworten vor dem Senden
- Nachrichtenformat:
{ role: "user" | "assistant" | "system", content: string }
- Kontextfenster-Verwaltung: Entferne die ältesten Nachrichten, wenn sich die Token-Grenze nähert, behalte immer den System-Prompt bei
- RAG-Muster: Benutzeranfrage einbetten → Vektorsuche → Top-k-Ergebnisse als Kontext vor der Benutzernachricht einfügen
- Chat-UI: Automatisch nach unten scrollen, Ladeanzeige mit animierten Punkten, Markdown in Assistent-Nachrichten rendern
- Konversationsverlauf serverseitig persistieren — verwende eine
messages-Tabelle mit chatId, role, content, createdAt
- Der System-Prompt steht immer an erster Stelle im Nachrichten-Array — lasse niemals zu, dass Benutzernachrichten ihn überschreiben
- YepAPI-Chat-Endpunkt:
POST /v1/ai/chat mit { messages, model?, stream? }
- Stop-Button — verwende
AbortController, um laufende Streams abzubrechen
Muster
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();
}
Vermeide
- Den gesamten Konversationsverlauf ohne Kürzung zu senden — dies überschreitet das Kontextfenster
- Die UI zu blockieren, während auf die vollständige Antwort gewartet wird — stream immer
- Nachrichten nur im Client-Status zu speichern — persistiere sie serverseitig für den Verlauf
- Modellnamen hart zu codieren — verwende Umgebungsvariablen oder Konfiguration