Multimodale Sprach- und Textagenten
Gesprochene Antworten mit Bildschirmtext in Sprachagentensystemen koordinieren.
Multimodale Sprach- und Textagenten ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Nur Sprache oder multimodale Kontexte
Sprach-KI-Agenten werden in zwei grundlegend unterschiedlichen Kontexten eingesetzt:
- Nur Sprache: Smart Speaker, IVR und Telefonate — Nutzer hören ausschließlich Audio und sehen keinen Bildschirm
- Multimodal: Mobile Apps, Web-Apps und Armaturenbretter im Auto — Nutzer können gleichzeitig einen Bildschirm sehen und Audio hören
Diese Kontexte erfordern unterschiedliche Antwortstrategien. Bei ausschließlich sprachlicher Interaktion muss alles gesprochen werden. In multimodalen Kontexten können Sie koordinieren, was gesprochen und was angezeigt wird.
Prompts für Antworten ohne Bildschirm
In Kontexten ohne Bildschirm muss das LLM Antworten erzeugen, die vollständig ohne visuelle Elemente funktionieren. Das bedeutet: keine Verweise auf Bildschirmelemente, keine Listen, die visuelles Überfliegen erfordern, und keine Inhalte, die nur durch Formatierung verständlich sind.
VOICE_ONLY_SYSTEM_PROMPT = (
'You are a voice-only assistant. The user cannot see any screen.\n\n'
'Requirements:\n'
'- Never reference visual elements ("tap here", "see the chart", "the blue button")\n'
'- Never use numbered or bulleted lists — use spoken sequences instead:\n'
' BAD: "1. First do X 2. Then do Y"\n'
' GOOD: "Start by doing X. When that is done, do Y."\n'
'- Limit responses to what can be comfortably spoken in 30 seconds\n'
'- Offer to give more detail rather than overwhelming the user\n'
'- Use verbal signposts: "First", "Next", "Finally"\n'
'- Read out all important data: codes, dates, amounts as full words'
)
print(VOICE_ONLY_SYSTEM_PROMPT)Gesprochene und angezeigte Texte koordinieren
In multimodalen Kontexten können Sie Inhalte zwischen Audio und Bildschirm aufteilen. Audio übernimmt dialogische, emotionale und dynamische Inhalte. Der Bildschirm übernimmt umfangreiche Informationen, Tabellen und längere Texte.
MULTIMODAL_SYSTEM_PROMPT = (
'You are a multimodal assistant with both a voice and a screen.\n\n'
'When responding, consider what each modality does best:\n\n'
'SPEAK (voice):\n'
'- Conversational summary, emotional tone, key highlights\n'
'- Guide the user to look at the screen when needed:\n'
' "I have shown the details on screen. The key number to notice is..."\n\n'
'SHOW (screen):\n'
'- Detailed data, tables, long lists, code, maps, images\n\n'
'When your response includes structured data, respond in this format:\n'
'SPOKEN: <what to say aloud>\n'
'VISUAL: <what to display on screen in markdown>'
)
# Example LLM output for multimodal response:
EXAMPLE_MULTIMODAL_OUTPUT = (
'SPOKEN: Your top three expenses this month are food, transport, and entertainment. '
'Food was the biggest, almost double your budget. Check the screen for the full breakdown.\n\n'
'VISUAL: | Category | Budget | Actual | Difference |\n'
'|---|---|---|---|\n'
'| Food | $400 | $780 | -$380 |\n'
'| Transport | $150 | $162 | -$12 |\n'
'| Entertainment | $100 | $145 | -$45 |'
)
print(EXAMPLE_MULTIMODAL_OUTPUT)LLM-Ausgaben für Sprachagenten strukturieren
Fordern Sie das LLM bei Anwendungen mit Sprachagenten auf, strukturierte Ausgaben zurückzugeben, die Sie analysieren und getrennt an Audio oder Bildschirm weiterleiten können. JSON oder ein festgelegtes Abschnittsformat eignen sich dafür gut.
import anthropic
import json
client = anthropic.Anthropic(api_key='sk-ant-...')
VOICE_AGENT_SYSTEM = (
'You are a financial voice assistant. For each response, return JSON with:\n'
'{\n'
' "spoken": "Short spoken response (max 2 sentences)",\n'
' "visual_title": "Header for the on-screen card (optional)",\n'
' "visual_content": "Detailed content for screen (markdown, optional)",\n'
' "action_label": "Button label if action needed (optional)",\n'
' "action_type": "one of: none, confirm, navigate, call"\n'
'}\n'
'Return only the JSON object.'
)
def voice_agent_query(user_message):
r = client.messages.create(
model='claude-opus-4-5',
max_tokens=500,
system=VOICE_AGENT_SYSTEM,
messages=[{'role': 'user', 'content': user_message}]
)
try:
response_data = json.loads(r.content[0].text)
return response_data
except json.JSONDecodeError:
return {'spoken': r.content[0].text, 'visual_content': None}
result = voice_agent_query('What is my account balance?')
print('SPEAK:', result.get('spoken'))
print('SHOW:', result.get('visual_content', 'Nothing to display'))Transkriptformatierung für Sprachagenten
Gespräche mit Sprachagenten müssen zum Debugging, zur Einhaltung von Compliance-Vorgaben und zur Qualitätsprüfung als Transkripte protokolliert werden. Formatieren Sie Transkripte so, dass sie die Identität der Sprecher, Zeitstempel sowie die Audio- und visuellen Ausgaben erfassen.
import datetime
import json
class VoiceTranscript:
def __init__(self, session_id):
self.session_id = session_id
self.turns = []
def add_user_turn(self, text, audio_duration_ms=None):
self.turns.append({
'speaker': 'user',
'timestamp': datetime.datetime.utcnow().isoformat(),
'text': text,
'audio_duration_ms': audio_duration_ms,
})
def add_agent_turn(self, spoken_text, visual_content=None, action=None):
self.turns.append({
'speaker': 'agent',
'timestamp': datetime.datetime.utcnow().isoformat(),
'spoken': spoken_text,
'visual': visual_content,
'action': action,
})
def save(self, filepath):
with open(filepath, 'w') as f:
json.dump({'session_id': self.session_id, 'turns': self.turns}, f, indent=2)
print(f'Transcript saved: {filepath}')
# Usage
transcript = VoiceTranscript('session_001')
transcript.add_user_turn('What is my balance?', audio_duration_ms=1200)
transcript.add_agent_turn('Your balance is four hundred dollars.', visual_content='Balance: $400')
transcript.save('/tmp/session_001_transcript.json')Fehler bei Spracheingaben behandeln
Sprachagenten müssen Fehler bei der Spracherkennung souverän behandeln — falsch verstandene Wörter, unvollständige Äußerungen oder Hintergrundgeräusche. Fordern Sie das LLM auf, mehrdeutige Eingaben zu erkennen und sich davon zu erholen.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-...')
AMBIGUITY_HANDLING_SYSTEM = (
'You are a voice assistant. User input comes from speech recognition '
'and may contain transcription errors.\n\n'
'When input seems unclear or ambiguous:\n'
'1. State what you think the user might have meant.\n'
'2. Ask a single clarifying yes/no question to confirm.\n'
'3. Never ask more than one question at a time.\n'
'4. Offer the most likely interpretation as the default.\n\n'
'Example:\n'
'Input: "transfer five hundred to john or gene" (ambiguous name)\n'
'Response: "It sounds like you want to transfer five hundred dollars. '
'Did you mean John Smith or Gene Lee?"'
)
def handle_voice_input(user_speech):
r = client.messages.create(
model='claude-opus-4-5',
max_tokens=200,
system=AMBIGUITY_HANDLING_SYSTEM,
messages=[{'role': 'user', 'content': user_speech}]
)
return r.content[0].text
print(handle_voice_input('pay the electric company bill thing'))Sprecherwechsel in Sprachdialogen
Anders als bei Text-Chats erfordert Sprache eine ausdrückliche Steuerung des Sprecherwechsels. Der Agent muss wissen, wann er aufhören und zuhören soll, und der Nutzer muss erkennen, wann der Agent fertig ist. Entwerfen Sie Prompts, die Antworten mit natürlichen Signalen für das Gesprächsende erzeugen.
TURN_TAKING_SYSTEM = (
'You are a voice assistant. Responses must be designed for spoken conversation:\n\n'
'End each response with exactly ONE of:\n'
'- A direct question inviting the user to respond\n'
'- A clear statement that the task is complete (e.g., "That is done.")\n'
'- An explicit offer to continue (e.g., "Is there anything else?")\n\n'
'Never end mid-thought. Never trail off. '
'Avoid open-ended statements that leave the user unsure if they should speak.\n\n'
'GOOD endings:\n'
'- "The transfer is complete. Would you like a confirmation number?"\n'
'- "That is all I have. Is there anything else?"\n'
'BAD endings:\n'
'- "You might also want to consider..." (open, unclear)\n'
'- "The balance is..." (incomplete)'
)
print(TURN_TAKING_SYSTEM[:300])Unterbrechungen behandeln
Nutzer unterbrechen Sprachagenten. Das System muss Unterbrechungen erkennen (über VAD — Voice Activity Detection) und den Agenten anweisen, souverän fortzufahren oder das Gespräch umzulenken. Fordern Sie das LLM auf, Themenwechsel mitten im Gespräch zu akzeptieren.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-...')
INTERRUPTION_SYSTEM = (
'You are a voice assistant. Users may interrupt mid-conversation.\n\n'
'If the user changes topic abruptly, smoothly acknowledge the change:\n'
'"Of course. Let us switch to that." Then answer the new question.\n\n'
'If the user says something like "wait", "stop", "hold on":\n'
'Pause and say "Sure, take your time" and wait for them to continue.\n\n'
'If the user repeats a question, they likely did not hear the answer:\n'
'Say "Let me repeat that." and say it again more slowly.\n\n'
'Never express frustration at interruptions or repetition.'
)
def handle_conversation(turns):
"""Handle multi-turn voice conversation with interruptions."""
messages = []
for speaker, text in turns:
messages.append({'role': speaker, 'content': text})
r = client.messages.create(
model='claude-opus-4-5',
max_tokens=200,
system=INTERRUPTION_SYSTEM,
messages=messages
)
return r.content[0].text
# Simulate an interruption scenario
conversation = [
('user', 'What is my balance?'),
('assistant', 'Your checking account balance is four hundred dollars and—'),
('user', 'Actually wait, can you tell me my savings instead?'),
]
print(handle_conversation(conversation))Bildschirmbegleitung zur Sprache
Wenn ein Bildschirm verfügbar ist, sollten Sie die angezeigten Inhalte so gestalten, dass sie die gesprochene Ausgabe ergänzen, statt sie zu wiederholen. Der Bildschirm übernimmt Details, die Sprache übernimmt Navigation und emotionale Einbindung.
def render_multimodal_response(agent_output):
"""
Render a voice agent response to both TTS and screen components.
agent_output: dict with 'spoken', 'visual_content', 'action_label'
"""
# Route to TTS
spoken = agent_output.get('spoken', '')
if spoken:
send_to_tts(spoken) # Your TTS function
print(f'[AUDIO] {spoken}')
# Route to screen
visual = agent_output.get('visual_content')
if visual:
render_card_on_screen(visual) # Your UI function
print(f'[SCREEN] {visual[:100]}')
# Optional action button
action_label = agent_output.get('action_label')
if action_label:
show_action_button(action_label) # Your UI function
print(f'[BUTTON] {action_label}')
def send_to_tts(text):
print(f'TTS: {text}')
def render_card_on_screen(content):
print(f'Screen card: {content[:50]}')
def show_action_button(label):
print(f'Button: {label}')
# Test it
render_multimodal_response({
'spoken': 'I found three flights to New York.',
'visual_content': '| Flight | Departs | Price |\n|---|---|---|\n| AA101 | 08:00 | $299 |',
'action_label': 'Book cheapest'
})Aspekte der Barrierefreiheit
Sprach-KI ist selbst eine Funktion zur Barrierefreiheit für Nutzer mit Sehbeeinträchtigungen oder motorischen Einschränkungen. Gestalten Sie Ihren Agenten außerdem so, dass er Nutzer unterstützt, die Sprache als primäre Schnittstelle verwenden.
ACCESSIBILITY_VOICE_SYSTEM = (
'This voice assistant serves users who may be using voice as their '
'primary access method due to disability or preference.\n\n'
'Guidelines:\n'
'- Never require the user to see a screen to complete a task.\n'
'- Read out all information that matters, including confirmation codes, '
'totals, and status messages.\n'
'- Offer to repeat any information: '
'"I can repeat that if you would like."\n'
'- Describe any actions you took: '
'"I have sent the confirmation to your email."\n'
'- Accept multiple phrasings for the same command — users phrase '
'voice commands inconsistently.\n'
'- Confirm all destructive or financial actions before executing:\n'
' "Just to confirm: you want to transfer $500 to John. Is that right?"'
)
print(ACCESSIBILITY_VOICE_SYSTEM[:300])Antworten von Sprachagenten testen
Das Testen von Antworten eines Sprachagenten erfordert einen anderen Ansatz als das Testen von Textantworten. Sie müssen sowohl die gesprochene Audioausgabe (Prosodie, Verständlichkeit, Natürlichkeit) als auch die visuelle Komponente (Vollständigkeit, Formatierung) bewerten. Eine Textantwort kann sich beim Lesen gut eignen, aber gesprochen unnatürlich klingen.
Erstellen Sie eine Testpipeline, die Agentenausgaben mithilfe Ihrer TTS-Engine in Audio umwandelt und anschließend eine automatisierte Qualitätsprüfung durchführt: Satzlänge, Aussprache von Abkürzungen, fehlende Markdown-Artefakte und Signale für den Sprecherwechsel.
Wissenscheck: Einschränkung auf Sprache
Welche Art von Agentenantwort ist in einem Kontext ohne Bildschirm (Smart Speaker ohne Bildschirm) AM BESTEN geeignet?
Rückblick: Multimodale Sprach- und Textagenten
Sprachagenten arbeiten in zwei Modi: nur Sprache (ohne Bildschirm) und multimodal (Sprache plus Bildschirm). Antworten in Kontexten ohne Bildschirm müssen visuelle Verweise vermeiden und vollständig als gesprochene Audioausgabe mit verbalen Orientierungshilfen funktionieren. In multimodalen Antworten werden die Inhalte aufgeteilt: Die Sprache übernimmt dialogische Zusammenfassungen und den emotionalen Ton, der Bildschirm detaillierte Daten und längere Texte. Fordern Sie LLMs auf, strukturierte Ausgaben zurückzugeben (JSON mit Feldern für gesprochene und visuelle Inhalte), damit diese einfach weitergeleitet werden können. Gestalten Sie den Sprecherwechsel mit klaren Antwortenden, einer souveränen Behandlung von Unterbrechungen und der ausdrücklichen Unterstützung von Wiederholungen. Berücksichtigen Sie immer die Barrierefreiheit — für Nutzer, die darauf besonders angewiesen sind, ist Sprache häufig die primäre Schnittstelle.
Häufig gestellte Fragen
Ist die Lektion „Multimodale Sprach- und Textagenten“ kostenlos?
Ja — der vollständige Text von „Multimodale Sprach- und Textagenten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Multimodale Sprach- und Textagenten“?
Gesprochene Antworten mit Bildschirmtext in Sprachagentensystemen koordinieren. Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Prompt Engineering zu starten?
Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Multimodale Sprach- und Textagenten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?
Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- TTS-Prompt-Muster für natürliche Sprache
- SSML- und Prosodie-Steuerung
- Persona-Design für Voice AI
- Multimodale Sprach- und Textagenten