Transcribe là móng của cả agent. Nếu transcript sai, mọi bước sau — tóm tắt, action item — đều sai theo. Bài này bạn học cách chọn công cụ, chuẩn hóa audio, và lấy được transcript có timestamp + nhãn người nói.
Ba lựa chọn công cụ transcribe
- API cloud (OpenAI Whisper API, AssemblyAI, Deepgram): dễ nhất, chất lượng cao, có sẵn speaker diarization. Trả tiền theo phút.
- Whisper self-hosted (chạy máy bạn/server): miễn phí, riêng tư, nhưng cần GPU để nhanh và tự lo diarization.
- Dịch vụ họp tích hợp (Zoom AI Companion, Google Meet): tiện nhưng khó lấy dữ liệu thô để xử lý tiếp.
Chuẩn hóa audio trước khi gửi
Audio bẩn = transcript bẩn. Trước khi transcribe:
# Chuyển về mono, 16kHz, wav — định dạng "chuẩn" cho hầu hết engine
ffmpeg -i hop_sprint.m4a -ac 1 -ar 16000 hop_sprint.wav
Giảm nhiễu nền và chuẩn hóa âm lượng giúp độ chính xác tăng rõ rệt, đặc biệt với micro laptop.
Gọi API transcribe (ví dụ với diarization)
import requests
# Ví dụ minh họa với AssemblyAI (có diarization sẵn)
headers = {"authorization": API_KEY}
resp = requests.post(
"https://api.assemblyai.com/v2/transcript",
headers=headers,
json={
"audio_url": uploaded_url,
"speaker_labels": True, # bật nhãn người nói
"language_code": "vi" # tiếng Việt
}
)
transcript_id = resp.json()["id"]
# Sau đó poll cho tới khi status == "completed"
Kết quả trả về gồm các đoạn có speaker, start, end, text. Đây là dữ liệu vàng cho bước sau.
Streaming vs batch: chọn đúng theo nhu cầu
Có hai kiểu transcribe. Batch (xử lý sau khi họp xong) phù hợp với Agent Họp vì bạn cần độ chính xác cao nhất và có thể chờ vài phút. Streaming (phiên âm ngay khi đang nói) chỉ cần khi bạn muốn hiển thị phụ đề trực tiếp — độ chính xác thường thấp hơn và khó diarize. Với ghi chú họp, hãy dùng batch: ổn định, rẻ hơn, chất lượng tốt hơn.
Timestamp và nhãn người nói: vì sao quan trọng
- Timestamp: để truy vết "quyết định này ở phút 32", và cắt clip nếu cần.
- Speaker label: agent cần biết AI nói "anh Minh nhận task" chứ không phải "ai đó nhận task". Không có nhãn người nói, việc gán action item về sau sẽ đoán mò.
Speaker A → Khang (chủ trì, nói đầu tiên)
Speaker B → Lan
Speaker C → Minh
Cách làm thực tế: yêu cầu mỗi người nói tên mình ở đầu họp, hoặc để agent hỏi lại người upload để xác nhận ánh xạ.
Các bước triển khai
- Chọn 1 công cụ, lấy API key.
- Viết hàm chuẩn hóa audio bằng ffmpeg.
- Upload audio, gọi transcribe với
speaker_labels=true. - Poll trạng thái tới khi hoàn tất.
- Lưu transcript có cấu trúc (JSON: speaker, start, end, text) vào storage.
- Thêm bước ánh xạ Speaker → tên thật.
Checklist chất lượng transcript
- [ ] Tên riêng, thuật ngữ công ty có đúng không? (thường sai — cần từ điển tùy chỉnh)
- [ ] Số liệu, ngày tháng có chính xác không?
- [ ] Nhãn người nói có ổn định suốt buổi không?
- [ ] Có đoạn nào bị nhảy/mất do nhiễu không?
Sai lầm thường gặp
- Gửi thẳng file gốc chất lượng thấp: bỏ bước ffmpeg khiến kết quả kém 20-30%.
- Bỏ qua từ điển tùy chỉnh: tên sản phẩm "Vietnamcos", "OKR", "sprint" hay bị phiên âm sai. Nhiều API cho phép khai báo "custom vocabulary".
- Tin tuyệt đối vào diarization: khi hai người nói chồng lên nhau, nhãn dễ lẫn. Đừng dùng nhãn làm nguồn duy nhất để giao việc.
- Không lưu transcript có cấu trúc: chỉ lưu text thô, mất timestamp, sau này không truy vết được.