Agen AIStudi kasus

Notula: Pipeline Notulen Rapat Dua Tahap yang Terukur

Lingkup yang dikirim

Transkrip sebagai system of record membuat ringkasan bilingual EN/ID bisa dijalankan ulang tanpa menyentuh audio lagi, dengan metering biaya per tahap di API

Ilustrasi konseptual. Bukan foto atau tangkapan layar sistem klien.
Klien
Proyek open source
Kategori
Agen AI
Lokasi
Indonesia
Selesai
16 Agustus 2026

Masalahnya

Kebanyakan aplikasi notulen rapat mengklaim kualitas, bukan mengukurnya. Dan secara arsitektur mereka mencampur dua hal yang biayanya jauh berbeda: mengubah audio menjadi transkrip adalah panggilan yang mahal dan lambat, sedangkan mengubah transkrip menjadi ringkasan adalah teks-masuk-teks-keluar yang murah. Tanpa memisahkan keduanya, setiap perbaikan prompt ringkasan berarti membayar ulang transkripsi.

Yang kami bangun

Notula — bahasa Indonesia untuk “notulen” — adalah pipeline dua tahap: audio masuk, dinormalisasi ffmpeg, ditranskripsikan sekaligus didiariskan oleh Gemini dalam satu panggilan berskema, lalu diringkas oleh DeepSeek dari teks transkrip menjadi TL;DR, keputusan, action item berpemilik, dan pertanyaan terbuka — dalam bahasa Inggris atau Indonesia.

Transkrip adalah system of record. Menyimpannya membuat ringkasan bisa dijalankan ulang: ganti bahasa ringkasan atau perbaiki prompt, dan hanya tahap dua yang berjalan ulang — state machine mengizinkan COMPLETED → SUMMARIZING → COMPLETED, dan re-run yang gagal mempertahankan ringkasan terakhir yang baik. Setiap tahap melaporkan waktu, token, dan biaya yang dihitung dari metadata usage provider sendiri, dan metering itu tampil di API maupun UI.

Keputusan rekayasa

Dua provider, dua alasan. Gemini adalah salah satu dari sedikit API yang mentranskripsikan dan mendiariskan audio dalam satu panggilan; DeepSeek v4-flash adalah model teks termurah yang cukup mampu, jadi ia mengerjakan separuh pipeline yang re-runnable.

Schema repair, bukan schema hope. Mode json_object menegakkan JSON, bukan skema Anda. Parser memvalidasi field per field dengan pesan error yang menyebut path persisnya, dan loop repair mengembalikan error itu plus output gagal ke model — maksimal dua kali, lalu gagal dengan jelas.

Audio panjang dipotong di jeda. Rekaman di atas 20 menit dibelah pada batas senyap dengan overlap 15 detik, ditranskripsikan per potong, lalu digabung — duplikat di overlap dibuang, dan label pembicara generik direkonsiliasi lintas potong.

Hasil yang diukur

Pada rekaman rapat publik 60 detik lewat pipeline live: total $0,0050 — $0,0046 untuk transkripsi, $0,0003 untuk ringkasan, dan ringkasan ulang ke bahasa Indonesia menambah $0,0003 tanpa menyentuh audio lagi. Observasi jujurnya disimpan, tidak dirapikan: latensi tahap transkripsi bervariasi 20x antar dua run identik (tertelusuri ke koneksi IPv6 yang macet — sejak itu semua klien provider membawa timeout eksplisit), dan nama diri tidak stabil lintas run, persis mode kegagalan yang dijawab fitur roster peserta.

Evaluasi live (2026-08-16, 5 kasus golden bilingual, judge deepseek-v4-flash): 5/5 lolos, schema validity 1.00, faithfulness 1.00. Kasus “tanpa keputusan” yang sengaja disertakan benar-benar menghasilkan daftar kosong — tidak ada keputusan yang dikarang. Semua angka offline dari mock provider diberi label mock; ia membuktikan mesinnya, bukan modelnya.

Menjalankannya

git clone https://github.com/ridwanspace/notula && cd notula, lalu make install && make demo — sampel audio bawaan diproses, event pipeline di-stream, dan tabel biaya per tahap dicetak, semuanya offline tanpa API key. make run membuka UI web di http://localhost:8000.

Dari studi ini ke proyek Anda

Ada proses serupa di tim Anda?

Ceritakan alur kerja dan kendalanya. Kita mulai dengan lingkup yang bisa dijelaskan dan diperiksa.

Studi kasus berikutnya

Prompt Injection Bench — Mengukur Pertahanan