Alur Kerja Agen Audio + Teks
Alur pipeline transkripsi → penalaran → respons audio dari awal hingga akhir.
Alur Kerja Agen Audio + Teks adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Ikhtisar Alur Agen Audio-Teks
Alur agen audio-teks mengubah dunia lisan dan tulisan satu sama lain. Alur bakunya adalah: audio masuk → transkripsi Whisper → agen teks → audio TTS keluar. Hal ini memungkinkan asisten suara, analisis panggilan, peringkasan rapat, dan antarmuka tanpa menggunakan tangan.
Format Audio yang Didukung
OpenAI Whisper menerima: mp3, mp4, mpeg, mpga, m4a, wav, webm. Ukuran maksimum berkas adalah 25 MB. Untuk berkas yang lebih besar, Anda harus membagi atau mengompresi audio sebelum mengirimkannya.
Selalu rekam/konversi audio ke mono 16 kHz untuk mendapatkan kualitas transkripsi terbaik dan ukuran berkas terkecil.
import os
SUPPORTED_FORMATS = {'.mp3', '.mp4', '.mpeg', '.mpga', '.m4a', '.wav', '.webm'}
MAX_FILE_SIZE_BYTES = 25 * 1024 * 1024 # 25 MB
def validate_audio_file(path: str) -> dict:
ext = os.path.splitext(path)[1].lower()
size = os.path.getsize(path) if os.path.exists(path) else 0
return {
'path': path,
'format_ok': ext in SUPPORTED_FORMATS,
'size_ok': size <= MAX_FILE_SIZE_BYTES,
'size_mb': round(size / 1024 / 1024, 2),
'extension': ext
}
# Usage:
info = validate_audio_file('meeting.wav')
print(info)Mentranskripsikan Audio dengan Whisper
Titik akhir audio.transcriptions.create milik OpenAI membungkus Whisper. Teruskan objek berkas, nama model, dan secara opsional petunjuk bahasa (lebih cepat dan mencegah kesalahan deteksi) serta instruksi (mempersiapkan kosakata untuk istilah khusus domain).
from openai import OpenAI
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
def transcribe_audio(
audio_path: str,
language: str = 'en',
prompt: str = ''
) -> str:
with open(audio_path, 'rb') as audio_file:
transcript = client.audio.transcriptions.create(
model='whisper-1',
file=audio_file,
language=language,
prompt=prompt, # e.g. 'Python, NestJS, TypeScript, API'
response_format='text'
)
return transcript
text = transcribe_audio('user_query.mp3', language='en',
prompt='Kubernetes, microservices, Docker')
print('Transcription:', text)Transkripsi dengan Stempel Waktu
Untuk analisis rapat atau pemisahan pembicara, minta format verbose_json. Format ini mengembalikan stempel waktu tingkat kata atau segmen, sehingga Anda dapat menemukan momen tertentu dalam audio untuk referensi atau pemotongan.
def transcribe_with_timestamps(audio_path: str) -> dict:
from openai import OpenAI
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
with open(audio_path, 'rb') as f:
result = client.audio.transcriptions.create(
model='whisper-1',
file=f,
response_format='verbose_json',
timestamp_granularities=['segment']
)
# result.segments: list of {start, end, text}
segments = [
{'start': s.start, 'end': s.end, 'text': s.text}
for s in result.segments
]
return {'full_text': result.text, 'segments': segments}
# Example output structure:
# {'full_text': 'Hello team...', 'segments': [{'start': 0.0, 'end': 2.3, 'text': 'Hello team'}]}Pemrosesan oleh Agen Teks
Setelah ditranskripsikan, teks diteruskan ke agen LLM sebagai pesan teks biasa. Sertakan instruksi sistem yang menetapkan konteks: teks ini berasal dari ucapan lisan, jadi mungkin mengandung kata pengisi dan kalimat yang tidak lengkap.
import anthropic
VOICE_AGENT_SYSTEM = (
'You are a helpful voice assistant. The user\'s message was transcribed from speech '
'and may contain filler words ("um", "uh"), false starts, or incomplete sentences. '
'Interpret the intent charitably and respond concisely in 1-3 sentences. '
'Your response will be converted to speech, so avoid markdown, lists, or code blocks.'
)
def voice_agent_respond(transcription: str) -> str:
client = anthropic.Anthropic(api_key='YOUR_ANTHROPIC_API_KEY')
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=256,
system=VOICE_AGENT_SYSTEM,
messages=[{'role': 'user', 'content': transcription}]
)
return response.content[0].textTeks-ke-Suara dengan OpenAI TTS
Konversikan respons teks agen kembali menjadi suara menggunakan API TTS OpenAI. Pilih suara (alloy, echo, fable, onyx, nova, shimmer) dan model (tts-1 untuk kecepatan, tts-1-hd untuk kualitas). Simpan hasilnya sebagai berkas mp3 atau alirkan secara langsung.
from openai import OpenAI
from pathlib import Path
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
def text_to_speech(
text: str,
output_path: str = 'response.mp3',
voice: str = 'nova',
model: str = 'tts-1'
) -> str:
response = client.audio.speech.create(
model=model,
voice=voice,
input=text,
response_format='mp3'
)
Path(output_path).write_bytes(response.content)
print(f'TTS audio saved to {output_path}')
return output_path
# Full pipeline:
tts_file = text_to_speech(
'The weather in London is currently 15 degrees and partly cloudy.',
voice='nova'
)Pengaliran Keluaran Audio
Untuk respons suara waktu nyata, alirkan audio TTS dalam beberapa potongan alih-alih menunggu seluruh berkas selesai. Pembantu stream_to_file milik OpenAI atau iterasi potongan secara manual memungkinkan Anda mulai memutar audio sementara bagian lainnya masih dibuat.
from openai import OpenAI
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
def stream_tts_to_file(text: str, output_path: str):
# OpenAI SDK streams the audio response
with client.audio.speech.with_streaming_response.create(
model='tts-1',
voice='nova',
input=text,
response_format='mp3'
) as response:
response.stream_to_file(output_path)
print(f'Streamed to {output_path}')
def stream_tts_chunks(text: str):
"""Yield raw audio bytes for piping to an audio player."""
with client.audio.speech.with_streaming_response.create(
model='tts-1',
voice='nova',
input=text
) as response:
for chunk in response.iter_bytes(chunk_size=4096):
yield chunk # pipe to audio player or WebSocketMembagi Berkas Audio Panjang
Berkas audio yang lebih besar dari 25 MB harus dibagi sebelum dikirim ke Whisper. Gunakan pustaka pydub untuk membaginya berdasarkan interval waktu dan memproses setiap potongan secara terpisah, lalu gabungkan transkripsinya.
from pydub import AudioSegment
import os
def split_audio(
path: str,
chunk_minutes: int = 10
) -> list:
audio = AudioSegment.from_file(path)
chunk_ms = chunk_minutes * 60 * 1000
chunks = []
os.makedirs('audio_chunks', exist_ok=True)
for i, start in enumerate(range(0, len(audio), chunk_ms)):
chunk = audio[start:start + chunk_ms]
chunk_path = f'audio_chunks/chunk_{i:03d}.mp3'
chunk.export(chunk_path, format='mp3')
chunks.append(chunk_path)
return chunks
def transcribe_long_audio(path: str) -> str:
chunks = split_audio(path, chunk_minutes=10)
transcripts = []
for chunk_path in chunks:
text = transcribe_audio(chunk_path)
transcripts.append(text)
# Clean up chunks
for chunk_path in chunks:
os.remove(chunk_path)
return ' '.join(transcripts)Alur Pemrosesan Audio Waktu Nyata
Alur pemrosesan waktu nyata menangkap masukan mikrofon dalam beberapa potongan, mengirim setiap potongan ke Whisper saat tiba, dan mengalirkan kembali keluaran TTS — sehingga tercipta putaran percakapan suara yang hampir berlangsung secara waktu nyata. Tantangan utamanya adalah mengelola latensi pada setiap tahap.
import asyncio
import time
async def realtime_voice_loop(mic_stream, speaker_stream, client):
"""
mic_stream: async generator yielding audio bytes
speaker_stream: async callable accepting audio bytes
"""
buffer = b''
BUFFER_THRESHOLD = 50 * 1024 # ~3 seconds at 16kHz mono mp3
async for audio_chunk in mic_stream:
buffer += audio_chunk
if len(buffer) >= BUFFER_THRESHOLD:
t0 = time.time()
# Save buffer to temp file
with open('/tmp/voice_chunk.mp3', 'wb') as f:
f.write(buffer)
buffer = b''
# Transcribe
text = transcribe_audio('/tmp/voice_chunk.mp3')
print(f'Transcribed ({time.time()-t0:.1f}s): {text}')
# Agent response
reply = voice_agent_respond(text)
# TTS and stream to speaker
for audio_bytes in stream_tts_chunks(reply):
await speaker_stream(audio_bytes)Deteksi Bahasa dan Perutean Otomatis
Whisper secara otomatis mendeteksi bahasa yang digunakan. Gunakan bahasa yang terdeteksi untuk merutekan percakapan ke karakter agen yang sesuai atau menetapkan bahasa TTS untuk respons.
def transcribe_and_detect_language(audio_path: str) -> dict:
from openai import OpenAI
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
with open(audio_path, 'rb') as f:
result = client.audio.transcriptions.create(
model='whisper-1',
file=f,
response_format='verbose_json'
)
return {
'text': result.text,
'language': result.language, # e.g. 'english', 'spanish'
'duration': result.duration
}
LANGUAGE_VOICE_MAP = {
'english': 'nova',
'spanish': 'alloy',
'french': 'echo',
'german': 'fable'
}
def respond_in_detected_language(audio_path: str) -> str:
info = transcribe_and_detect_language(audio_path)
voice = LANGUAGE_VOICE_MAP.get(info['language'], 'nova')
reply = voice_agent_respond(info['text'])
return text_to_speech(reply, voice=voice)Menangani Derau Latar dan Audio Berkualitas Rendah
Audio berkualitas rendah menurunkan akurasi transkripsi. Langkah praktis untuk mengatasinya: lakukan praproses dengan pengurangan derau (pustaka noisereduce), tambahkan kosakata domain ke prompt Whisper, validasi tingkat keyakinan transkrip, dan minta klarifikasi jika tingkat keyakinannya rendah.
def transcribe_with_quality_check(
audio_path: str,
min_confidence_words: int = 3
) -> dict:
from openai import OpenAI
import string
client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
with open(audio_path, 'rb') as f:
result = client.audio.transcriptions.create(
model='whisper-1',
file=f,
response_format='verbose_json',
timestamp_granularities=['word']
)
# Word count as a basic quality proxy
words = result.text.translate(
str.maketrans('', '', string.punctuation)
).split()
quality_ok = len(words) >= min_confidence_words
return {
'text': result.text,
'word_count': len(words),
'quality_ok': quality_ok,
'fallback_message': None if quality_ok else 'I could not hear you clearly. Please repeat.'
}Uji Pemahaman
Apa fungsi parameter prompt Whisper?
Ringkasan: Alur Kerja Agen Audio-Teks
Sangat baik! Poin-poin penting:
- Whisper: mendukung mp3/wav/m4a dan sebagainya, maksimum 25 MB; bagi berkas besar dengan pydub
- Stempel waktu: gunakan
verbose_jsondengantimestamp_granularitiesuntuk waktu setiap segmen - TTS: OpenAI TTS dengan berbagai pilihan suara; alirkan potongan untuk latensi rendah
- Deteksi bahasa: Whisper mendeteksi bahasa secara otomatis; rutekan ke suara/agen yang sesuai berdasarkan bahasa yang terdeteksi
- Alur pemrosesan waktu nyata: menyangga potongan audio → mentranskripsikan → agen → mengalirkan TTS
Berikutnya: pemahaman video dalam agen — ekstraksi bingkai dan penalaran temporal.
Belajar AI Agents dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Alur Kerja Agen Audio + Teks” gratis?
Ya — teks lengkap “Alur Kerja Agen Audio + Teks” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Alur Kerja Agen Audio + Teks”?
Alur pipeline transkripsi → penalaran → respons audio dari awal hingga akhir. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Alur Kerja Agen Audio + Teks” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Agen Gambar + Teks dengan Claude Vision dan GPT-4V
- Alur Kerja Agen Audio + Teks
- Pemahaman Video dalam Agen
- Pola Penalaran Lintas Modalitas