Zum Inhalt springen
EN DE

Message Metadata

Die metadata-Property auf UIMessage ist ein beliebiges Objekt, das nicht an das LLM gesendet wird. Es beschreibt die Message selbst — wer sie gesendet hat, wann, mit welchem Modell, wie viele Tokens verbraucht wurden. Metadata ist unsichtbar für das LLM, aber nuetzlich für Logging, Analytics und Persistenz.

Der Unterschied zu Data Parts: Metadata beschreibt die Message (wer, wann, womit), Data Parts sind dynamischer Content innerhalb der Message (Wetter-Karten, Fortschrittsbalken, Quellen). Metadata ändert sich nicht nach dem Erstellen, Data Parts können sich über ID-Reconciliation weiterentwickeln.

Auf der Server-Seite setzt Du Response-Metadata über die messageMetadata-Option in toUIMessageStreamResponse. Incoming-Metadata von User-Messages kannst Du auf dem Server auslesen und für Logging oder Analytics nutzen.

import type { UIMessage } from 'ai';
// User-Message mit Metadata
const message: UIMessage = {
id: 'msg-1',
role: 'user',
parts: [{ type: 'text', text: 'Erklaere Streaming.' }],
metadata: {
userId: 'user-42',
timestamp: Date.now(),
sessionId: 'session-abc',
},
};
import { streamText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: anthropic('claude-sonnet-4-5-20250514'),
messages,
});
return result.toUIMessageStreamResponse({
messageMetadata: ({ part }) => {
if (part.type === 'start') {
return {
modelId: 'claude-sonnet-4-5-20250514',
generatedAt: Date.now(),
};
}
},
});
}
Metadata-FeldZweck
userIdZuordnung zu einem User
timestampZeitstempel der Erstellung
sessionIdZuordnung zu einer Session
modelIdWelches Modell die Antwort generiert hat
tokenUsageToken-Verbrauch für Kosten-Tracking
latencyMsAntwortzeit für Performance-Monitoring
feedbackScoreUser-Bewertung der Antwort
EigenschaftMetadataData Parts
BeschreibtDie Message selbstContent innerhalb der Message
AenderbarNein (einmal gesetzt)Ja (via ID-Reconciliation)
Sichtbar für LLMNeinNein
Typischer InhaltuserId, timestamp, modelIdWetter-Daten, Fortschritt, Quellen
Zugriff im Frontendmessage.metadatamessage.parts (type 'data')

Part of AI Learning — free courses from prompt to production. Jan on LinkedIn