App öffnen
Moonborn — Developers

Eine Chat-Session aufsetzen

Eine Chat-Session gegen eine Persona öffnen, eine Nachricht senden und die streaming Antwort mit Drift-Envelope lesen.

Eine Chat-Session ist der Runtime-Container der Persona. Sie trägt den Prompt, das Kurzzeit-Context-Window, den Langzeit-Memory-Pointer und das Per-Antwort-Drift-Envelope. Dieses Tutorial setzt voraus, dass du bereits eine Persona hast — wenn nicht, durchlaufe zuerst Baue deine erste Persona.

1. Eine Session öffnen

import Moonborn from '@moonborn/sdk';
 
const client = new Moonborn({ apiKey: process.env.MOONBORN_API_KEY });
 
const session = await client.chat.createSession({
  personaId: 'persona_01H...',
  metadata: { ticketId: 'cs-4421' },
});
 
console.log(session.id);

Die Session-ID ist die Adresse für jede nachfolgende Nachricht. metadata ist ein free-form Key/Value-Beutel (string → string) — Moonborn liest ihn nicht, aber er taucht im Audit Log und in Webhook-Deliveries auf, also nutze ihn, um Sessions an deine eigene Produktoberfläche zurückzubinden.

2. Eine Nachricht senden

const reply = await client.chat.sendMessage({
  sessionId: session.id,
  content: 'Was treibt dich an, weiter zu bauen?',
});
 
console.log(reply.content);
console.log(reply.driftScore, reply.driftAlert);

Jede Antwort trägt driftScore (0–1 Cosine-Distance zum Voice Fingerprint der Persona), driftThreshold (der Workspace-Wert) und einen driftAlert-Boolean. Unter der Schwelle versenden. Darüber routen — siehe das Drift-Handling-Tutorial.

3. Die Antwort streamen

Für UX, wo jedes Token zählt, wechsle zur Streaming-Variante. SSE- Chunks kommen mit dieser Form an:

event: token        data: { delta: "Was mich antreibt" }
event: token        data: { delta: ", ist die Lücke" }
event: completed    data: { messageId, driftScore, driftThreshold }
const stream = await client.chat.streamMessage({
  sessionId: session.id,
  content: 'Was treibt dich an, weiter zu bauen?',
});
 
for await (const chunk of stream) {
  if (chunk.type === 'token') process.stdout.write(chunk.delta);
  if (chunk.type === 'completed') console.log('\ndrift:', chunk.driftScore);
}

Das detaillierte Wire-Format steht im Streaming patterns guide.

4. Die History lesen

const history = await client.chat.listMessages({ sessionId: session.id });
for (const m of history) {
  console.log(`${m.role}: ${m.content}`);
}

history paginiert per cursor + limit. Memory jenseits des Kurzzeit-Windows wurde zusammengefasst — das rohe Transcript endet am Rand des aktiven Windows. Um Memory-Chunks direkt zu inspizieren, geh an GET /v1/chat/sessions/{id}/memory.

5. Die Session beenden

await client.chat.endSession({ sessionId: session.id });

endSession bewahrt das Transcript + Memory für retrospektive Queries. Verwende DELETE /v1/chat/sessions/{id}, wenn du hard-deleten willst (das Soft-Delete-Fenster steuert privacy.retention.chat_sessions_days).

Weiter