Wir stellen Eleven v4 vorLernen Sie Eleven v4 kennen, unser bisher ausdrucksstärkstes Modell.

Zum Inhalt springen

Sprechen Sie mit einer Statue: Entwicklung einer multimodalen App mit ElevenAgents

Verfasst von
Joe Reeve
Veröffentlicht
Zuletzt aktualisiert

AnhörenArtikel anhören

Fotografieren Sie eine Statue. Identifizieren Sie die dargestellten Figuren. Führen Sie dann ein Sprachgespräch in Echtzeit mit ihnen – jede Figur spricht mit einer eigenen, zeitlich passenden Stimme.

Genau das können Sie mit den Voice Design- und Agent-APIs von ElevenLabs entwickeln. In diesem Beitrag zeigen wir die Architektur einer mobilen Web-App, die Computer Vision mit Sprachgenerierung verbindet und öffentliche Denkmäler in interaktive Erlebnisse verwandelt. Alles lässt sich mit den untenstehenden APIs und Codebeispielen nachbauen.

Tutorial überspringen – mit einem Prompt erstellen

Die gesamte App unten wurde mit einem einzigen Prompt erstellt und erfolgreich als One-Shot in Cursor mit Claude Opus 4.5 (high) aus einem leeren NextJS-Projekt getestet. Wenn Sie direkt Ihre eigene App erstellen möchten, fügen Sie Folgendes in Ihren Editor ein:

We need to make an app that:
- is optimised for mobile
- allows the user to take a picture (of a statue, picture, monument, etc) that includes one or more people
- uses an OpenAI LLM api call to identify the statue/monument/picture, characters within it, the location, and name
- allows the user to check it's correct, and then do either a deep research or a standard search to get information about the characters and the statue's history, and it's current location
- then create an ElevenLabs agent (allowing multiple voices), that the user can then talk to as though they're talking to the characters in the statue. Each character should use voice designer api to create a matching voice.
The purpose is to be fun and educational.

https://elevenlabs.io/docs/eleven-api/guides/how-to/voices/voice-design
https://elevenlabs.io/docs/eleven-agents/quickstart 
https://elevenlabs.io/docs/api-reference/agents/create


Alternativ können Sie die ElevenLabs Agent Skills verwenden, statt auf die Dokumentation zu verlinken. Sie basieren auf der Dokumentation und können noch bessere Ergebnisse liefern.

Im weiteren Verlauf dieses Beitrags erläutern wir, was dieser Prompt erzeugt.

So funktioniert es

Die Pipeline umfasst fünf Schritte:

  1. Ein Bild aufnehmen
  2. Das Kunstwerk und seine Figuren identifizieren (OpenAI)
  3. Die Geschichte recherchieren (OpenAI)
  4. Einzigartige Stimmen für jede Figur generieren (ElevenAPI)
  5. Ein Sprachgespräch in Echtzeit über WebRTC starten (ElevenAgents)

Die Statue mit Vision identifizieren

Wenn ein Nutzer eine Statue fotografiert, wird das Bild an ein visionsfähiges OpenAI-Modell gesendet. Ein strukturierter System-Prompt extrahiert den Namen des Kunstwerks, Ort, Künstler, Datum und – entscheidend – eine detaillierte Stimmbeschreibung für jede Figur. Der System-Prompt enthält das erwartete JSON-Ausgabeformat:

{
  "statueName": "string - name of the statue, monument, or artwork",
  "location": "string - where it is located (city, country)",
  "artist": "string - the creator of the artwork",
  "year": "string - year completed or unveiled",
  "description": "string - brief description of the artwork and its historical significance",
  "characters": [
    {
      "name": "string - character name",
      "description": "string - who this person was and their historical significance",
      "era": "string - time period they lived in",
      "voiceDescription": "string - detailed voice description for Voice Design API (include audio quality marker, age, gender, vocal qualities, accent, pacing, and personality)"
    }
  ]
}
const response = await openai.chat.completions.create({
  model: "gpt-5.2",
  response_format: { type: "json_object" },
  messages: [
    { role: "system", content: SYSTEM_PROMPT },
    {
      role: "user",
      content: [
        {
          type: "text",
          text: "Identify this statue/monument/artwork and all characters depicted.",
        },
        {
          type: "image_url",
          image_url: {
            url: `data:image/jpeg;base64,${base64Data}`,
            detail: "high",
          },
        },
      ],
    },
  ],
  max_completion_tokens: 2500,
});

Für ein Foto der Boudica-Statue an der Westminster Bridge in London sieht die Antwort so aus:

{
  "statueName": "Boudica and Her Daughters",
  "location": "Westminster Bridge, London, UK",
  "artist": "Thomas Thornycroft",
  "year": "1902",
  "description": "Bronze statue depicting Queen Boudica riding a war chariot with her two daughters, commemorating her uprising against Roman occupation of Britain.",
  "characters": [
    {
      "name": "Boudica",
      "description": "Queen of the Iceni tribe who led an uprising against Roman occupation",
      "era": "Ancient Britain, 60-61 AD",
      "voiceDescription": "Perfect audio quality. A powerful woman in her 30s with a deep, resonant voice and a thick Celtic British accent. Her tone is commanding and fierce, with a booming quality that projects authority. She speaks at a measured, deliberate pace with passionate intensity."
    },
    // Other characters in the statue
  ]
}

Wirksame Stimmbeschreibungen schreiben

Die Qualität der Stimmbeschreibung bestimmt direkt die Qualität der generierten Stimme. Der Voice Design Prompting-Leitfaden behandelt dies ausführlich. Zu den wichtigsten Attributen gehören: ein Marker für die Audioqualität („Perfect audio quality.“), Alter und Geschlecht, Tonfall/Timbre (tief, resonant, rau), ein präziser Akzent („thick Celtic British accent“ statt nur „British“) und das Sprechtempo. Aussagekräftigere Prompts liefern genauere Ergebnisse – „a tired New Yorker in her 60s with a dry sense of humor“ ist „an older female voice“ stets überlegen.

Einige Hinweise aus dem Leitfaden: Verwenden Sie „thick“ statt „strong“, um die Ausprägung eines Akzents zu beschreiben, vermeiden Sie vage Begriffe wie „foreign“, und schlagen Sie für fiktive oder historische Figuren zur Inspiration reale Akzente vor, z. B. „an ancient Celtic queen with a thick British accent, regal and commanding“.

Figurenstimmen erstellen mit Voice Design

Die Voice Design API generiert neue synthetische Stimmen aus Textbeschreibungen – ohne Sprachproben oder Klonen. Dadurch eignet sie sich besonders für historische Figuren, für die kein Quellaudio existiert.

Der Prozess umfasst zwei Schritte.

Vorschauen generieren

const { previews } = await elevenlabs.textToVoice.design({
  modelId: "eleven_multilingual_ttv_v2",
  voiceDescription: character.voiceDescription,
  text: sampleText,
});

Der Textparameter ist wichtig. Längere, zur Figur passende Beispieltexte (über 50 Wörter) liefern stabilere Ergebnisse – stimmen Sie den Dialog auf die Figur ab, statt eine allgemeine Begrüßung zu verwenden. Der Voice Design Prompting-Leitfaden behandelt dies ausführlicher.

Stimme speichern

Sobald Vorschauen generiert wurden, wählen Sie eine aus und erstellen eine permanente Stimme:

const voice = await elevenlabs.textToVoice.create({
  voiceName: `StatueScanner - ${character.name}`,
  voiceDescription: character.voiceDescription,
  generatedVoiceId: previews[0].generatedVoiceId,
});

Bei Statuen mit mehreren Figuren erfolgt die Stimmerstellung parallel. Die Stimmen von fünf Figuren werden in ungefähr derselben Zeit generiert wie eine einzelne:

const results = await Promise.all(
  characters.map((character) => createVoiceForCharacter(character))
);

Einen ElevenLabs Agent mit mehreren Stimmen erstellen

Nachdem die Stimmen erstellt wurden, konfigurieren Sie im nächsten Schritt einen ElevenLabs Agent, der in Echtzeit zwischen Figurenstimmen wechseln kann.

const agent = await elevenlabs.conversationalAi.agents.create({
  name: `Statue Scanner - ${statueName}`,
  tags: ["statue-scanner"],
  conversationConfig: {
    agent: {
      firstMessage,
      language: "en",
      prompt: {
        prompt: systemPrompt,
        temperature: 0.7,
      },
    },
    tts: {
      voiceId: primaryCharacter.voiceId,
      modelId: "eleven_v3",
      supportedVoices: otherCharacters.map((c) => ({
        voiceId: c.voiceId,
        label: c.name,
        description: c.voiceDescription,
      })),
    },
    turn: {
      turnTimeout: 10,
    },
    conversation: {
      maxDurationSeconds: 600,
    },
  },
});

Wechsel zwischen mehreren Stimmen

Das Array supportedVoices teilt dem Agent mit, welche Stimmen verfügbar sind. Die Agents-Plattform übernimmt den Stimmenwechsel automatisch: Wenn die Antwort des LLM anzeigt, dass eine andere Figur spricht, leitet die TTS-Engine dieses Segment an die richtige Stimme weiter.

Prompt Engineering für Gruppengespräche

Damit mehrere Figuren wie eine echte Gruppe wirken – statt wie eine Abfolge von Fragen und Antworten –, ist ein gezieltes Prompt-Design erforderlich:

const multiCharacterRules = `
MULTI-CHARACTER DYNAMICS:
You are playing ALL ${characters.length} characters simultaneously.
Make this feel like a group conversation, not an interview.

- Characters should interrupt each other:
  "Actually, if I may -" / "Wait, I must say -"

- React to what others say:
  "Well said." / "I disagree with that..." / "Always so modest..."

- Have side conversations:
  "Do you remember when -" / "Tell them about the time you -"

The goal is for users to feel like they are witnessing a real exchange
between people who happen to include them.
`;

Sprache in Echtzeit über WebRTC

Das letzte Element ist die Client-Verbindung. ElevenLabs Agents unterstützen WebRTC für Sprachgespräche mit geringer Latenz – deutlich schneller als WebSocket-basierte Verbindungen, was für natürliche Sprecherwechsel entscheidend ist.

Serverseitig: Ein Conversation-Token abrufen

const { token } = await client.conversationalAi.conversations.getWebrtcToken({
    agentId,
});

Clientseitig: Sitzung starten

import { useConversation } from "@elevenlabs/react";

const conversation = useConversation({
  onConnect: () => setIsSessionActive(true),
  onDisconnect: () => setIsSessionActive(false),
  onMessage: (message) => {
    if (message.source === "ai") {
      setMessages((prev) => [...prev, { role: "agent", text: message.message }]);
    }
  },
});

await conversation.startSession({
  agentId,
  conversationToken: token,
  connectionType: "webrtc",
});

Der useConversation-Hook übernimmt Audioaufnahme, Streaming, Sprachaktivitätserkennung und Wiedergabe.

Mehr Recherchetiefe durch Websuche

Für Nutzer, die vor einem Gespräch mehr historischen Kontext wünschen, können Sie mit dem Websuche-Tool von OpenAI einen erweiterten Recherchemodus hinzufügen:

const response = await openai.responses.create({
  model: "gpt-5.2",
  instructions: RESEARCH_SYSTEM_PROMPT,
  tools: [{ type: "web_search_preview" }],
  input: `Research ${identification.statueName}. Search for current information
including location, visiting hours, and recent news about the artwork.`,
});

Was wir gelernt haben

Dieses Projekt zeigt: Wenn wir verschiedene KI-Modalitäten – Text, Recherche, Vision und Audio – kombinieren, können wir Erlebnisse entwickeln, die die digitale und die reale Welt verbinden. In multimodalen Agents steckt viel unerforschtes Potenzial, das mehr Menschen für Bildung, Arbeit und Unterhaltung erkunden sollten.

Jetzt entwickeln

Die in diesem Projekt verwendeten APIs – Voice Design, ElevenAgents und OpenAI – sind heute alle verfügbar.

Verfasst von

Joe arbeitet im Growth-Team bei ElevenLabs und konzentriert sich darauf, Entwicklern zu helfen, das Beste aus den fortschrittlichen Audiomodellen von ElevenLabs herauszuholen.

Ähnliche Artikel

Erstellen Sie mit hochwertiger KI-Audio