POST /chats/{id}/messages antwortet mit einem Stream im UI Message Stream-Format des Vercel AI SDK. Der Stream enthält den Antworttext, Tool Calls mit ihren Ergebnissen und Freigabe-Anfragen, während der Assistent noch arbeitet.
Format
Server-Sent Events: ein JSON-Objekt prodata:-Zeile, am Ende data: [DONE]. Der Content-Type ist text/plain. Lies den Body als Stream, nicht erst nach Abschluss.
React: useChat
@ai-sdk/react parst den Stream und verwaltet die Nachrichtenliste. Transport auf die Messages-Route zeigen lassen, Token in prepareSendMessagesRequest setzen:
ChatView.tsx
message.parts iterieren: Text-Parts durch einen Markdown-Renderer, Tool-Parts als Status-Anzeige.
Die Versionen müssen zum Service passen:
ai@6 und @ai-sdk/react@3. Ältere Major-Versionen verwenden ein anderes Stream-Protokoll.Tool-Freigaben
Manche Tools verändern Daten (Prompt speichern, Automation anlegen, in eine Integration schreiben). Dafür fragt der Assistent vorher nach: Der Tool-Part kommt mitstate: "approval-requested", der Stream endet. Antworte mit addToolApprovalResponse. Mit dem sendAutomaticallyWhen von oben schickt useChat den Verlauf erneut und der Assistent macht weiter.
messages als Body. Ein Client, der nur text sendet, kann keine Tools freigeben.
Ohne SDK
Body an Leerzeilen splitten,data:-Zeilen parsen, text-delta-Parts zusammensetzen. Ein fetch-Beispiel steht unter Beispiele.