WERBEPLATZ VERFÜGBAR · PARTNERSCHAFTEN WILLKOMMEN

Wie Entwickler die D-ID Streaming API integrieren, um interaktive Konversations-KI-Avatare in Echtzeit zu erstellen

365Finds Editorial
11.430 Wiki-Artikel erfasst

365 Wiki mit deiner KI nutzen

Kopiere den Prompt unten, füge ihn in deine gewohnte KI ein und stelle direkt deine Frage.

Vollständigen Skill herunterladen

Probiere es zuerst mit dem Prompt aus. Wenn du 365 Wiki häufig nutzt, installiere den vollständigen 365Wiki Skill, damit du ihn nicht jedes Mal einfügen musst. Ohne bevorzugte KI funktionieren auch die Webversionen von Gemini oder Microsoft Copilot.

Der Aufbau visueller Echtzeit-Dialog-KI erfordert die Bewältigung eines grundlegenden technischen Engpasses: Latenz. Herkömmliche Pipelines zur Generierung synthetischer Videos arbeiten asynchron im Batch-Modus und benötigen mehrere Sekunden bis Minuten, um eine MP4-Videodatei zu rendern, zu codieren und bereitzustellen. Bei interaktiven Anwendungsfällen – wie KI-Vertriebsmitarbeitern, virtuellen Assistenten im Gesundheitswesen, Avataren im Kundensupport und interaktiven digitalen Tutoren – unterbricht eine Verzögerung von mehreren Sekunden den Gesprächsfluss und beeinträchtigt das Nutzerengagement erheblich.

D-ID begegnet dieser Herausforderung mit einer Echtzeit-Streaming-Infrastruktur, die latenzarme Video-Generierungsalgorithmen mit dem Datentransport über WebRTC und LiveKit kombiniert. Anstatt vollständige Videodateien auf der Festplatte zu erzeugen, rendert die Streaming-Engine von D-ID lippensynchrone Avatar-Videoframes in Echtzeit und streamt sie mit einer Reaktionszeit von unter einer Sekunde direkt an die Client-Browser. Während frühere Implementierungen auf die veralteten Talks- und Clips-Streaming-Endpunkte (/talks/streams) angewiesen waren, basiert die moderne Architektur von D-ID auf dem D-ID Agents-Framework und dem offiziellen @d-id/client-sdk.

Dieser Leitfaden führt durch die gesamte Architektur-Pipeline zur Integration der D-ID Streaming API mit großen Sprachmodellen (LLMs), einschließlich der Backend-Agentenkonfiguration, WebRTC-Sitzungsaushandlung, Frontend-Medienstream-Einbindung, Interaktionsmustern, Latenzoptimierung und dem Management des Guthaben-Lebenszyklus.


Architekturüberblick: Die Pipeline für dialogorientierte Avatare

Eine interaktive Echtzeit-Avatar-Anwendung funktioniert als koordinierter Kreislauf aus Benutzereingabe, Sprachverarbeitung, Sprachsynthese, Gesichtsanimation und Peer-to-Peer-Medienübertragung:

+-------------+      Audio / Text      +-------------------+
|             | ---------------------> | Application Logic |
| User Client |                        | (STT / LLM / RAG) |
|  (Browser)  | <--------------------- +-------------------+
|             |     WebRTC Video / Audio         |
|             | <---------------------------+    | Text / Audio Chunks
+-------------+                             |    v
                                       +-------------------+
                                       | D-ID Streaming    |
                                       | Engine & Agents   |
                                       +-------------------+

Entwickler wählen je nach ihren Infrastrukturanforderungen typischerweise eines von zwei Integrationsparadigmen:

  1. Verwalteter D-ID Agent-Workflow: D-ID verwaltet den LLM-System-Prompt, die externe Wissensdatenbank (Retrieval-Augmented Generation / RAG) und den Text-to-Speech (TTS)-Sprachanbieter intern. Die Client-Anwendung stellt über das @d-id/client-sdk eine direkte Verbindung zum Agenten her und sendet Benutzer-Prompts über agentManager.chat().
  2. Benutzerdefinierter Backend-Orchestrierungs-Workflow: Das Backend des Entwicklers behält die vollständige Kontrolle über den Konversationsstatus, die Benutzerauthentifizierung, proprietäre Tools, Vektordatenbanken und LLM-Aufrufe (z. B. OpenAI GPT-4o, Anthropic Claude oder selbst gehostete Modelle). Das Backend streamt den generierten Text oder das synthetisierte Audio anschließend über agentManager.speak() oder REST-Streaming-Endpunkte an D-ID, um den Avatar zu animieren.

Schritt 1: Bereitstellung und Konfiguration des Agenten über die REST-API

Bevor ein Echtzeit-Stream gestartet werden kann, konfigurieren Entwickler die Persona des Avatars, die Stimmeigenschaften und die Intelligenzebene. Zwar können Agenten über die D-ID Studio-Oberfläche erstellt werden, Produktionsanwendungen automatisieren diese Bereitstellung jedoch in der Regel über die REST-API.

Erstellen eines Agenten

Senden Sie eine mit Ihrem D-ID-API-Schlüssel authentifizierte POST-Anfrage an https://api.d-id.com/agents:

curl -X POST "https://api.d-id.com/agents" \
  -H "Authorization: Basic <YOUR_BASE64_ENCODED_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "presenter": {
      "type": "clip",
      "presenter_id": "v2_public_Amber@0zSz8kflCN",
      "voice": {
        "type": "microsoft",
        "voice_id": "en-US-JennyMultilingualV2Neural"
      }
    },
    "llm": {
      "type": "openai",
      "provider": "openai",
      "model": "gpt-4o",
      "instructions": "You are an AI customer success specialist for an enterprise SaaS platform. Keep responses under two sentences, maintain an empathetic and professional tone, and guide users to relevant product features."
    }
  }'

Wichtige Konfigurationsparameter

KonfigurationsobjektParameterBeschreibung
presentertypeAvatar-Rendering-Typ: talk (fotobasiert V2), clip (vorgerenderte Studio-Präsentatoren V3) oder expressive (LiveKit-basierte V4-Avatare).
presenterpresenter_id oder source_urlDie Kennung eines Standard-D-ID-Präsentators oder eine öffentlich zugängliche HTTPS-Bild-URL für benutzerdefinierte Foto-Avatare.
presenter.voicetypeSprachanbieter-Engine, üblicherweise microsoft (Azure Neural) oder elevenlabs.
presenter.voicevoice_idSpezifische Sprachmodellkennung entsprechend dem Katalog des Anbieters (z. B. en-US-JennyMultilingualV2Neural).
llmtype & provideropenai für native verwaltete Vervollständigungen oder custom für externes Backend-Routing.
llminstructionsSystemanweisungen, die Persona, Einschränkungen und Konversationsgrenzen des Avatars definieren.

Die API gibt eine JSON-Antwort zurück, die die eindeutige agentId enthält. Speichern Sie diese Kennung in Ihrer Anwendungsdatenbank.

Absicherung der Client-Anmeldeinformationen

Web- und mobile Anwendungen in der Produktionsumgebung dürfen primäre D-ID-API-Schlüssel niemals im clientseitigen Code offenlegen. Generieren Sie stattdessen über Ihr Backend einen bereichsbeschränkten Client Key:

curl -X POST "https://api.d-id.com/agents/<AGENT_ID>/client-key" \
  -H "Authorization: Basic <YOUR_BASE64_ENCODED_API_KEY>" \
  -H "Content-Type: application/json"

Beschränken Sie diesen Client-Schlüssel im D-ID Studio-Dashboard über die Einstellung Allowed Domains auf Ihre Produktionsdomänen, um unbefugte Zugriffe zu verhindern.


Schritt 2: Aufbau des latenzarmen WebRTC-Streams

Echtzeit-Interaktion erfordert eine WebRTC-Peer-Verbindung zwischen dem Client-Browser und dem Rendering-Cluster von D-ID. D-ID bietet zwei Integrationswege: das automatisierte @d-id/client-sdk (dringend empfohlen) und direkte REST-basierte WebRTC-Signalisierung.

Methode A: Client-Integration über @d-id/client-sdk (Empfohlen)

Das offizielle @d-id/client-sdk abstrahiert die Sitzungsaushandlung, den Austausch von Angebot und Antwort nach dem Session Description Protocol (SDP) sowie die Sammlung von Interactive Connectivity Establishment (ICE)-Kandidaten in eine optimierte JavaScript-Schnittstelle.

1. SDK installieren

npm install @d-id/client-sdk

2. AgentManager initialisieren und Medienspuren binden

import * as did from "@d-id/client-sdk";

// DOM-Elemente
const videoElement = document.getElementById("avatar-video");
const statusElement = document.getElementById("connection-status");
const chatInputElement = document.getElementById("chat-input");
const sendButton = document.getElementById("send-btn");

let agentManager = null;

async function initializeAvatar() {
  const agentId = "agt_xxxxxxxxxxxxxxxx";
  const clientKey = "YOUR_CLIENT_KEY";

  agentManager = await did.createAgentManager(agentId, {
    auth: {
      type: "key",
      clientKey: clientKey
    },
    callbacks: {
      // Zugeordneter Medienstream vom D-ID WebRTC-Peer empfangen
      onSrcObjectReady(mediaStream) {
        videoElement.srcObject = mediaStream;
        videoElement.play().catch((err) => console.error("Video autoplay error:", err));
      },
      // Verbindungszustandsübergänge verfolgen: connecting, connected, disconnected, closed
      onConnectionStateChange(state) {
        statusElement.textContent = `Status: ${state}`;
        console.log("WebRTC Connection State:", state);
      },
      // Eingehende Gesprächsrunden verarbeiten
      onNewMessage(messages) {
        const latest = messages[messages.length - 1];
        console.log(`[${latest.role}]: ${latest.content}`);
      },
      // Sprachlebenszyklus des Avatars überwachen
      onVideoStatusChange(status) {
        console.log("Avatar Video Status:", status); // z. B. "playing", "idle"
      },
      onError(error, errorData) {
        console.error("D-ID Agent Error:", error, errorData);
      }
    }
  });

  // WebRTC-Sitzung verbinden
  await agentManager.connect();
}

initializeAvatar().catch(console.error);

Methode B: Manueller WebRTC-Signalisierungs-Handshake (Hinter den Kulissen)

Für Headless-Umgebungen, Nicht-Browser-Clients (wie native mobile Apps oder eingebettete Geräte) oder Altsysteme können Entwickler den WebRTC-Handshake direkt über die REST-Endpunkte von D-ID durchführen:

  1. Stream-Sitzung initialisieren: Senden Sie eine POST-Anfrage an https://api.d-id.com/agents/{agentId}/streams (oder den Legacy-Endpunkt /talks/streams). D-ID liefert:

    • id: Die eindeutige Stream-Sitzungs-ID.
    • session_id: Sitzungsverfolgungskennung.
    • offer: Ein vom D-ID WebRTC-Medienserver generiertes SDP-Angebot.
    • ice_servers: Eine Liste von STUN- und TURN-Server-Anmeldeinformationen für das NAT-Traversal.
  2. Lokale RTCPeerConnection initialisieren: Der Client erstellt eine mit den ice_servers von D-ID konfigurierte RTCPeerConnection-Instanz:

    const pc = new RTCPeerConnection({ iceServers: response.ice_servers });
    
  3. Remote Description setzen und lokale Antwort erstellen:

    await pc.setRemoteDescription(new RTCSessionDescription(response.offer));
    const answer = await pc.createAnswer();
    await pc.setLocalDescription(answer);
    
    // SDP-Antwort an D-ID zurücksenden
    await fetch(`https://api.d-id.com/agents/${agentId}/streams/${response.id}/sdp`, {
      method: "POST",
      headers: {
        "Authorization": `Basic ${API_KEY}`,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        answer: answer,
        session_id: response.session_id
      })
    });
    
  4. ICE-Kandidaten austauschen: Hören Sie auf das onicecandidate-Ereignis der Client-Peer-Verbindung und leiten Sie jeden Kandidaten an den ICE-Endpunkt von D-ID weiter:

    pc.onicecandidate = (event) => {
      if (event.candidate) {
        fetch(`https://api.d-id.com/agents/${agentId}/streams/${response.id}/ice`, {
          method: "POST",
          headers: {
            "Authorization": `Basic ${API_KEY}`,
            "Content-Type": "application/json"
          },
          body: JSON.stringify({
            candidate: event.candidate.candidate,
            sdpMid: event.candidate.sdpMid,
            sdpMLineIndex: event.candidate.sdpMLineIndex,
            session_id: response.session_id
          })
        });
      }
    };
    
  5. Medienspur empfangen: Sobald die Medienspur eintrifft, binden Sie den Remote-Stream an das DOM:

    pc.ontrack = (event) => {
      videoElement.srcObject = event.streams[0];
    };
    

Schritt 3: Dialog-Interaktion: chat() vs. speak()

Sobald die WebRTC-Sitzung aktiv ist, lösen Entwickler Avatar-Animationen über zwei vom SDK bereitgestellte Hauptmethoden aus.

Muster 1: Autonome Gesprächsrunden (chat)

Wenn der Agent mit integrierter LLM-Logik konfiguriert ist, senden Sie Textnachrichten direkt in den Konversations-Thread des Agenten:

// Benutzer sendet Prompt über UI
async function handleUserSubmit(userText) {
  if (!agentManager) return;

  // Sendet Benutzernachricht an Agent; Agent fragt LLM ab, generiert Sprache und streamt Video
  await agentManager.chat(userText);
}

Der D-ID-Agent verarbeitet Gesprächsrunden, LLM-Inferenz, TTS-Generierung und Videosynthese automatisch und löst onNewMessage-Callbacks aus, sobald Tokens und Nachrichten aufgelöst werden.

Muster 2: Benutzerdefinierte Backend-Orchestrierung (speak)

Wenn die Anwendungslogik proprietäre Workflows erfordert – wie mehrstufige RAG-Abfragen auf Unternehmensdatenbanken, LangChain-Agenten mit Tool-Calling oder benutzerdefinierte LLM-Endpunkte –, nutzen Entwickler die Methode speak(). Dadurch kann das Backend Antworten unabhängig generieren und den Avatar anweisen, bestimmte Inhalte zu sprechen.

Senden von Texteingaben

// Avatar anweisen, beliebigen Text mit der konfigurierten TTS-Stimme des Agenten zu sprechen
await agentManager.speak({
  type: "text",
  input: "Welcome back, Sarah. I have pulled your quarterly analytics report."
});

Senden von vorab synthetisiertem Audio

Für Anwendungen, die spezielle Sprach-Engines verwenden (wie maßgeschneiderte Klonstimmen oder proprietäre Sprachmodelle), können Entwickler direkt eine öffentlich zugängliche HTTPS-Audio-URL übergeben:

// Mund- und Gesichtsausdrücke des Avatars animieren synchron zum bereitgestellten Audio
await agentManager.speak({
  type: "audio",
  audio_url: "https://storage.yourdomain.com/audio/response_chunk_01.mp3"
});

Latenzoptimierung und Performancestrategien in der Produktion

In der interaktiven Dialog-KI ist die menschliche Toleranz gegenüber Latenz extrem gering; Gesprächspausen von mehr als 1.000 bis 1.500 Millisekunden wirken unnatürlich. Ein flüssiger Dialog erfordert die Optimierung jeder Phase der Pipeline.

1. Verbindungs-Pre-Warming

Der Aufbau einer WebRTC-Verbindung (SDP-Austausch, STUN/TURN-Kandidatensuche und ICE-Konnektivitätsprüfungen) dauert je nach Netzwerkbedingungen typischerweise zwischen 800 ms und 2.500 ms.

2. Stream-Chunking für lange LLM-Antworten

Das Warten auf die Generierung eines vollständigen, mehrsätzigen Absatzes durch das LLM vor dem Aufruf von speak() führt zu erheblicher Latenz (Time-to-First-Token plus vollständige Generierungszeit).

So minimieren Sie die wahrgenommene Verzögerung:

3. Barge-In- und Unterbrechungsbehandlung

Natürliche Konversation erfordert, dass Benutzer den Avatar mitten im Satz unterbrechen können. In der modernen Streaming-Architektur von D-ID werden Unterbrechungsfunktionen nativ über flüssige Streaming-Bedienelemente unterstützt:

// Benutzerstimme erkennen, während der Avatar spricht
function onUserSpeechDetected() {
  if (agentManager) {
    // Aktuelle Sprachwiedergabe unterbrechen und Avatar in den Ruhezustand (Zuhören) versetzen
    agentManager.interrupt();
  }
}

Wenn ein Unterbrechungsereignis ausgelöst wird, schneidet D-ID die aktive Sprachwarteschlange auf dem Server ab und stoppt die Videoübertragung, um sicherzustellen, dass der Avatar nicht über die Stimme des Nutzers hinweg weiterspricht.

4. Expressive Avatare (V4) mit LiveKit

Für Anwendungen, die höchsten Wert auf eine natürliche Präsenz legen, nutzen die V4 Expressive Avatars von D-ID den LiveKit-Transport anstelle von standardmäßigem Punkt-zu-Punkt-WebRTC. Expressive Avatare behalten auch zwischen den Gesprächsrunden kontinuierliche Ruhezustandsbewegungen bei (subtiles Blinzeln, minimale Kopfbewegungen und Atembewegungen), wodurch der bei früheren Avatar-Engines übliche Standbildeffekt eliminiert wird.


Ressourcen-Lifecycle-Management und Abrechnungsökonomie

Die skalierte Bereitstellung von Echtzeit-Video-Avataren erfordert die strikte Einhaltung von Sitzungsabbau-Regeln und genaue Guthabenabrechnung.

1. Ordnungsgemäßer Sitzungsabbau

Nicht geschlossene WebRTC-Sitzungen verbrauchen weiterhin Serverressourcen und können zu einem unerwarteten Verbrauch von Guthaben führen. Implementieren Sie immer explizite Trennungshandler beim Unmounten von Komponenten und beim Entladen des Fensters:

// Sitzung beim Entladen des Fensters bereinigen
window.addEventListener("beforeunload", () => {
  if (agentManager) {
    agentManager.disconnect().catch(console.error);
  }
});

// Bereinigung in Single-Page-Anwendungen (React / Vue / Svelte Unmount)
function cleanupAvatarSession() {
  if (agentManager) {
    agentManager.disconnect();
    agentManager = null;
  }
}

Bei REST-Implementierungen senden Sie bei Beendigung der Sitzung eine DELETE-Anfrage an https://api.d-id.com/agents/{agentId}/streams/{streamId}.

2. Guthabenverbrauch und 15-Sekunden-Rundungsregel

D-ID zieht die Nutzung der Videogenerierung direkt vom einheitlichen Minutenguthaben Ihres Kontos ab (geteilt zwischen Creative Reality™ Studio und der API).

3. Leerlauf-Timeouts und Inaktivitätsschutz

Um verwaiste Sitzungen zu verhindern, wenn Benutzer Browser-Tabs geöffnet lassen, implementieren Sie einen Inaktivitäts-Timer. Wenn 90 bis 120 Sekunden lang keine Benutzerinteraktion erfolgt, fordern Sie den Benutzer auf oder beenden Sie die WebRTC-Verbindung automatisch über agentManager.disconnect().


Zusammenfassung der Integrations-Checkliste

PhaseKernaktionEmpfohlenes Tool / Endpunkt
BereitstellungAgent mit Stimme, Persona und LLM-Anweisungen erstellenPOST /agents
SicherheitEingeschränkte Client-Anmeldeinformationen mit Domain-Allowlisting ausstellenPOST /agents/{agentId}/client-key
VerbindungsaufbauWebRTC-Peer-Sitzung etablieren und <video>-Stream binden@d-id/client-sdk (agentManager.connect())
InteraktionDialog-Prompts oder externe LLM-Text-Chunks sendenagentManager.chat() oder agentManager.speak()
UX-OptimierungBenutzerunterbrechungen (Barge-In) und Verbindungs-Pre-Warming aktivierenagentManager.interrupt() bei Mikrofonaktivität
LebenszyklusWebRTC-Streams beim Verlassen der Seite oder bei Inaktivität schließenagentManager.disconnect() / DELETE /streams/{id}

Durch die Kombination der Echtzeit-Streaming-Engine von D-ID mit strukturierter LLM-Prompt-Orchestrierung und clientseitigem WebRTC-Lifecycle-Management können Entwicklungsteams reaktionsschnelle, natürliche Konversations-KI-Avatare bereitstellen, die auf Web- und Mobilplattformen Leistung auf Enterprise-Niveau erbringen.