NS
NEWSAINT
ai-eng• 8 MIN READ•27 Oktober 2026

Heartbeat Thinking (arXiv:2610.26233): Speculative Reasoning & Asynchronous Tool Execution Saat Mendengarkan pada Realtime Voice Agents — Reduksi Latensi 36.4% dan Peluncuran Tool Pre-Speech End

Analisis arsitektur Heartbeat Thinking (arXiv:2610.26233, Zhenyu Zhang et al.): Mengapa voice agents konvensional terjebak dalam latensi respons canggung setelah pengguna selesai berbicara, dan bagaimana decoupling komputasi spekulatif periodik (Thinker) dari generasi respons final (Responder) mampu menginisiasi pemanggilan tool 4.37 detik sebelum ucapan berakhir serta memangkas latensi akhir hingga 36.4%.

N
Ervareza Naurian Novantila
Lead Architect & Founder NEWSAINT
Fact-Checked & Verified
Ilustrasi Arsitektur Teknis 16:9 Heartbeat Thinking (arXiv:2610.26233): Speculative Reasoning & Asynchronous Tool Execution Saat Mendengarkan pada Realtime Voice Agents — Reduksi Latensi 36.4% dan Peluncuran Tool Pre-Speech End

Dalam percakapan lisan manusia, keheningan selama lebih dari satu detik setelah lawan bicara selesai bersuara terasa kaku dan tidak wajar. Sayangnya, mayoritas sistem realtime voice agents generasi saat ini—mulai dari arsitektur cascaded Speech-to-Speech (S2S), pipeline LiveKit, hingga Pipecat—selalu menunggu hingga seluruh kalimat selesai diucapkan sebelum mulai berpikir dan memanggil tool eksternal. Akibatnya, latensi respons sering kali membengkak hingga 6–9 detik, mematahkan ilusi interaksi natural.

Executive Architectural Summary

Makalah riset terobosan dari Zhenyu Zhang et al. (arXiv:2610.26233), "Heartbeat Thinking: Speculative Reasoning and Tool Execution While Listening in Realtime Voice Agents", merombak total paradigma orkestrasi agen suara. Alih-alih membatalkan spekulasi saat transkrip streaming diperbarui atau menunggu jeda Voice Activity Detection (VAD), Heartbeat Thinking memisahkan peran model menjadi dua: periodic Thinker yang mengeksekusi penalaran dan tool asinkron di latar belakang saat pengguna masih berbicara, serta endpoint-triggered Responder yang langsung memanfaatkan artefak siap pakai. Pada benchmark FDBench v3, arsitektur ini memajukan pemanggilan tool hingga 4.37 detik sebelum ucapan berakhir dan memangkas rata-rata latensi respons akhir sebesar 36.4%.

1. Mengapa Voice Agents Lambat: Jebakan Cascaded Sequential & Chunk-Bounded

Untuk memahami mengapa interaksi suara dengan model AI sering kali lamban, mari telusuri siklus hidup pemrosesan suara standar dalam infrastruktur modern:

  1. Fase Mendengarkan (Listening Phase): Pengguna mengucapkan permintaan kompleks berdurasi 5 hingga 10 detik. Audio di-stream ke Automatic Speech Recognition (ASR).
  2. Deteksi Silence / VAD Gap: Voice Activity Detector mendeteksi keheningan (biasanya berdurasi 300ms–800ms) untuk memastikan pengguna telah selesai berbicara.
  3. Generasi LLM & Tool Calling: LLM menerima teks utuh, memikirkan rencana aksi, dan memanggil API eksternal (misal: query database cuaca, ketersediaan tiket penerbangan, atau kalender).
  4. Eksekusi Tool I/O: Jaringan mengeksekusi HTTP request (memakan waktu 400ms–1500ms).
  5. Sintesis Suara (TTS): LLM menerima output tool, menyusun respons akhir, dan mengirim stream teks ke mesin Text-to-Speech (TTS).

Ironisnya, pada banyak kasus, entitas dan niat utama (actionable intent) sudah terucap sejak detik kedua atau ketiga! Misalnya pada ucapan: "Coba carikan tiket pesawat dari Jakarta ke Tokyo tanggal 15 November besok, tapi tolong yang kelas ekonomi saja ya." Kota asal, kota tujuan, dan tanggal keberangkatan sudah tersedia sejak paruh awal kalimat. Menunggu hingga kata terakhir diucapkan untuk mulai menyapa API penerbangan adalah pemborosan waktu interaksi yang masif.

Kegagalan Window Thinking (SHANKS)

Pendekatan spekulatif naif menggunakan interrupt-on-update atau chunk-bounded execution. Setiap kali ASR menghasilkan token kata baru, invokasi penalaran yang sedang berjalan langsung dibatalkan (aborted) dan diulang dari awal. Akibatnya, pemanggilan tool yang membutuhkan argumen lengkap kerap terpotong di tengah jalan sebelum sempat dieksekusi.

Solusi Paradigma Heartbeat Thinking

Pembaruan transkrip ASR ditangani melalui denyut invokasi Thinker baru secara berkala tanpa membatalkan invokasi atau dispatch tool yang sedang berlangsung. Pekerjaan spekulatif yang sedang berjalan dibiarkan tuntas dan hasilnya dicatat ke dalam Shared State Record, sehingga invokasi berikutnya dapat memanfaatkan hasil tersebut untuk menyelesaikan argumen dependen.

2. Arsitektur Dual-Role: Periodic Asynchronous Thinker & Endpoint-Triggered Responder

Inovasi inti dari arsitektur Heartbeat Thinking terletak pada pembagian peran fungsional model yang tegas namun terkoordinasi secara harmonis melalui state bersama:

1. Periodic Asynchronous Thinker

Setiap interval waktu tetap $Delta$ (dalam eksperimen empiris digunakan $Delta = 500 ext{ ms}$), sistem memicu invokasi Thinker baru. Thinker membaca transkrip parsial terbaru dari ASR streaming, riwayat dialog masa lalu ($H$), skema tool yang tersedia ($mathcal{T}$), serta daftar eksekusi tool yang telah rampung dari shared state.

Untuk mengontrol utilisasi GPU dan konsumsi token, paralelisme dibatasi maksimum $K$ invokasi serentak (default $K = 2$). Jika seluruh $K$ slot masih aktif mengeksekusi inferensi, tick denyut heartbeat saat itu dilewati tanpa memutus proses yang sedang berjalan.

2. Shared State & Non-Interruptive Tool Dispatch

Ketika sebuah invokasi Thinker memutuskan untuk memanggil tool eksternal, permintaan tool tersebut diverifikasi terhadap cache deduplikasi (mencegah pemanggilan ganda dengan argumen identik) dan dimasukkan ke antrean eksekusi asinkron terpisah.

Model dan tool I/O dapat tumpang tindih (*overlap*). Jika pengguna kemudian menambahkan detail batasan di tengah kalimat, invokasi Thinker pada denyut berikutnya dapat langsung membaca output tool pertama yang telah selesai untuk merangkai pemanggilan tool kedua (dependent calling) bahkan sebelum pengguna selesai berbicara.

3. Endpoint-Triggered Responder & Clean Handoff

Pada saat detektor akhir ucapan (VAD) mendeteksi bahwa pengguna telah berhenti berbicara ($t = T$), fase spekulatif dihentikan seketika. Seluruh invokasi Thinker atau tool spekulatif yang masih berjalan (in-flight pending jobs) langsung dibatalkan (cancelled). Model Responder kemudian dipicu dengan transkrip lengkap dan koleksi artefak spekulasi yang telah selesai (*completed preparation*). Responder menyusun jawaban akhir suara tanpa perlu mengulangi pemanggilan tool yang sudah valid.

3. Tolok Ukur Empiris: FDBench v3, SpeechFCEval, dan AudioCRAG

Para peneliti menguji performa Heartbeat Thinking melawan berbagai arsitektur baseline industri terkemuka menggunakan perangkat kluster GPU NVIDIA H200. Evaluasi mencakup pipeline streaming multimodal end-to-end, cascaded agents (LiveKit, Pipecat), dan teknik Window Thinking (SHANKS):

Framework / Architecture SpeechFCEval (STC %) FDBench v3 (STC %) AudioCRAG (STC %) FDBench Quality (%)
Speech-to-Speech (End-to-End) 0.00% 0.00% 0.00% 84.0%
Pipecat Pipeline Cascaded 0.00% 0.00% 0.00% 78.0%
LiveKit Realtime Pipeline 0.00% 0.00% 0.00% 77.6%
Window Thinking (SHANKS Baseline) 33.13% 34.67% 20.05% 72.0%
Heartbeat Thinking (arXiv:2610.26233) 43.69% (+10.56 pp) 50.67% (+16.00 pp) 62.42% (+42.37 pp) 77.0% (+5.0 pp)

Metrik Speculative Tool Coverage (STC) mengukur persentase pemanggilan tool referensi yang berhasil diselesaikan secara spekulatif selama pengguna berbicara dan hasilnya langsung dapat digunakan oleh Responder tanpa pengulangan eksekusi. Heartbeat Thinking mencatat lonjakan STC dramatis di seluruh benchmark: peningkatan +10.56 poin pada SpeechFCEval, +16.00 poin pada FDBench, dan +42.37 poin pada AudioCRAG dibandingkan Window Thinking.

4. Analisis Latensi: Memanggil Tool Sebelum Ucapan Berakhir

Dampak paling revolusioner dari Heartbeat Thinking terlihat pada kurva latensi respons akhir dan waktu inisiasi eksekusi tool:

Correct Tool Call Latency: -4.37 Detik

Diukur relatif terhadap akhir ucapan pengguna ($T$). Angka negatif menandakan aksi terjadi sebelum pengguna selesai berbicara:

  • • Cascaded Baselines: +2.45s s.d. +3.52s (setelah bicara)
  • • Window Thinking: -2.74s sebelum akhir bicara
  • • Heartbeat Thinking: -4.37s (1.63 detik lebih awal!)

Final Response Latency: 4.39 Detik

Waktu onset ucapan balasan agen setelah tool selesai dieksekusi:

  • • Pipecat Cascaded: 8.08s
  • • Window Thinking: 6.90s
  • • Heartbeat Thinking: 4.39s (-36.4% latensi)
  • • 45.7% lebih gesit dibandingkan Pipecat

5. Jebakan Arsitektur (Pitfalls) & Mitigasi di Lingkungan Produksi

Meskipun memberikan pemangkasan latensi yang masif, implementasi spekulasi pada sistem suara menghadirkan tantangan teknis unik yang harus diantisipasi oleh para insinyur backend:

  • 1. Dilema Retained Preparation vs Task Accuracy (4.0% Outdated Results): Pada FDBench v3, tercatat 4.0% kasus di mana agen memberikan jawaban yang keliru meskipun argumen pemanggilan tool awal benar. Hal ini terjadi ketika pengguna merevisi niatnya di ujung kalimat (intent revision), namun Responder secara naif menggunakan hasil tool lama tanpa melakukan rekonsiliasi. Mitigasi: Responder harus dilengkapi dengan cross-validation prompt yang memverifikasi kecocokan argumen tool di shared state terhadap transkrip final sebelum menyusun jawaban.
  • 2. Bahaya Side-Effect pada Tool Mutatif: Eksekusi spekulatif hanya boleh diterapkan pada operasi idempoten atau read-only (misal: pencarian data, kueri API cuaca, pengecekan inventaris). Memanggil tool dengan mutasi state eksternal (seperti transfer uang, mengirim email, atau menghapus record) secara spekulatif saat pengguna masih berbicara dapat memicu bencana jika pengguna ternyata membatalkan ucapannya.
  • 3. Token Flooding & GPU VRAM Contention: Menjalankan invokasi Thinker berulang kali setiap 500ms dapat melipatgandakan konsumsi token inference. Mengabaikan batas $K$ dapat menyebabkan starvation pada cluster inferensi. Mitigasi: Gunakan model berbobot ringan (seperti Qwen3-8B atau DeepSeek-V4-Flash) untuk peran Thinker, dan cadangkan model berkapasitas penalaran penuh untuk Responder.

6. Kode Implementasi: Arsitektur Runtime Heartbeat Thinking TypeScript

Berikut adalah implementasi clean code berstandar produksi yang mengabstraksi periodic Thinker scheduling, deduplikasi state bersama, dan transisi VAD handoff:

typescript / heartbeat-thinking-engine.ts PRODUCTION RUNTIME
// Production Implementation: Heartbeat Thinking Runtime Engine
// Implements Decoupled Periodic Thinker Invocations, Shared Execution State, and VAD Handoff

export interface ToolCallSpec {
  callId: string;
  toolName: string;
  arguments: Record;
  status: 'pending' | 'running' | 'completed' | 'cancelled';
  result?: unknown;
  dispatchedAt: number;
  completedAt?: number;
}

export interface ReasoningRecord {
  recordId: string;
  invocationIndex: number;
  partialTranscript: string;
  provisionalThought: string;
  timestamp: number;
}

export interface SharedExecutionState {
  completedReasoning: ReasoningRecord[];
  toolRegistry: Map;
  activeThinkerCount: number;
}

export class HeartbeatThinkingEngine {
  private state: SharedExecutionState = {
    completedReasoning: [],
    toolRegistry: new Map(),
    activeThinkerCount: 0,
  };

  private currentAbortController: AbortController | null = null;
  private heartbeatTimer: NodeJS.Timeout | null = null;
  private invocationCounter = 0;

  constructor(
    private readonly deltaIntervalMs = 500, // \Delta: Periode denyut Thinker
    private readonly maxConcurrencyK = 2,     // K: Batas paralelisme invokasi Thinker
    private readonly toolExecutor: (toolName: string, args: Record, signal: AbortSignal) => Promise
  ) {}

  public startListeningSession(): void {
    this.currentAbortController = new AbortController();
    this.state = {
      completedReasoning: [],
      toolRegistry: new Map(),
      activeThinkerCount: 0,
    };
    this.invocationCounter = 0;
  }

  // Dipanggil setiap kali interval \Delta terpicu selama streaming ASR berjalan
  public async onHeartbeatTick(currentPartialTranscript: string): Promise {
    if (!this.currentAbortController || this.currentAbortController.signal.aborted) return;

    // Concurrency throttle: jika K slot penuh, lewati tick tanpa memutus worker aktif
    if (this.state.activeThinkerCount >= this.maxConcurrencyK) {
      return;
    }

    const invocationId = ++this.invocationCounter;
    this.state.activeThinkerCount++;

    try {
      // Thinker membaca partial transcript terkini dan snapshot shared execution state
      const completedToolsSnapshot = Array.from(this.state.toolRegistry.values())
        .filter(t => t.status === 'completed')
        .map(t => ({ tool: t.toolName, args: t.arguments, result: t.result }));

      // Simulasi analisis spekulatif Thinker
      const speculativePlan = await this.evaluateThinkerStep(
        invocationId,
        currentPartialTranscript,
        completedToolsSnapshot,
        this.currentAbortController.signal
      );

      if (speculativePlan.reasoning) {
        this.state.completedReasoning.push({
          recordId: `rr-${invocationId}`,
          invocationIndex: invocationId,
          partialTranscript: currentPartialTranscript,
          provisionalThought: speculativePlan.reasoning,
          timestamp: Date.now(),
        });
      }

      // Dispatch tools secara asinkron tanpa memblokir thread spekulasi berikutnya
      for (const call of speculativePlan.requestedTools) {
        const deduplicationKey = `${call.toolName}:${JSON.stringify(call.arguments)}`;
        if (this.state.toolRegistry.has(deduplicationKey)) {
          continue; // Hindari pemanggilan ganda identik
        }

        const toolSpec: ToolCallSpec = {
          callId: `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,
          toolName: call.toolName,
          arguments: call.arguments,
          status: 'running',
          dispatchedAt: Date.now(),
        };

        this.state.toolRegistry.set(deduplicationKey, toolSpec);

        // Eksekusi background asinkron
        this.toolExecutor(call.toolName, call.arguments, this.currentAbortController.signal)
          .then((res) => {
            toolSpec.status = 'completed';
            toolSpec.result = res;
            toolSpec.completedAt = Date.now();
          })
          .catch((err) => {
            if (toolSpec.status !== 'cancelled') {
              toolSpec.status = 'completed';
              toolSpec.result = { error: String(err) };
            }
          });
      }
    } finally {
      this.state.activeThinkerCount = Math.max(0, this.state.activeThinkerCount - 1);
    }
  }

  // Transisi Endpoint: Dipicu oleh Voice Activity Detector (VAD) saat ucapan selesai
  public handleVADEndpointHandoff(finalTranscript: string): {
    finalTranscript: string;
    completedPreparation: {
      reasoning: ReasoningRecord[];
      usableToolResults: Array<{ toolName: string; args: Record; result: unknown }>;
    };
  } {
    // 1. Batalkan semua task spekulasi yang masih menggantung
    if (this.currentAbortController) {
      this.currentAbortController.abort();
    }

    // 2. Kumpulkan artefak yang telah selesai sebelum t_endpoint
    const usableToolResults: Array<{ toolName: string; args: Record; result: unknown }> = [];
    for (const [key, spec] of this.state.toolRegistry.entries()) {
      if (spec.status === 'completed' && spec.result !== undefined) {
        usableToolResults.push({
          toolName: spec.toolName,
          args: spec.arguments,
          result: spec.result,
        });
      } else {
        spec.status = 'cancelled';
      }
    }

    // 3. Serahkan langsung ke Responder context
    return {
      finalTranscript,
      completedPreparation: {
        reasoning: [...this.state.completedReasoning],
        usableToolResults,
      },
    };
  }

  private async evaluateThinkerStep(
    id: number,
    transcript: string,
    completedTools: unknown[],
    signal: AbortSignal
  ): Promise<{ reasoning?: string; requestedTools: Array<{ toolName: string; arguments: Record }> }> {
    // Stub implementasi LLM Thinker invocation
    return { requestedTools: [] };
  }
}

7. Kesimpulan & Panduan Adopsi untuk Sistem Voice AI

Heartbeat Thinking membuktikan bahwa waktu mendengarkan (listening time) bukanlah jeda pasif yang sia-sia, melainkan jendela emas untuk melakukan persiapan komputasi spekulatif. Dengan membiarkan proses berpikir dan eksekusi tool tumpang tindih secara periodik di balik layar tanpa terputus oleh streaming ASR, sistem voice agent dapat mencapai interaktivitas setingkat manusia dengan latensi respons di bawah ambang batas kesadaran pengguna.

Checklist Implementasi Rekayasa Voice Agent 2026:

  • Tetapkan interval heartbeat Δ di rentang 400ms–600ms dengan concurrency cap $K le 2$.
  • Pisahkan tool ke dalam kategori Speculative Safe (Idempoten/Read-only) vs Commit Gated (Mutasi/I/O Kritis).
  • Pasang verifikasi rekonsiliasi intent pada prompt Responder untuk mencegah penggunaan artefak yang telah terinvalidasi oleh revisi ucapan pengguna.

Butuh Arsitektur Web & AI Berkualitas Tinggi?

Tim engineering NEWSAINT siap membantu merancang website berkecepatan tinggi, sistem AI autonomous, dan solusi SaaS terukur untuk bisnis Anda.

Artikel Terkait Lainnya

Ilustrasi Arsitektur Teknis 16:9 DecisionRAG (arXiv:2610.35868): Retriever-Free Retrieval via Decision Models — Eliminasi Capability Asymmetry, Hierarchical Tree Navigation, dan Rekor +17.4% Hit@1 Tanpa Indeks Vektor

DecisionRAG (arXiv:2610.35868): Retriever-Free Retrieval via Decision Models — Eliminasi Capability Asymmetry, Hierarchical Tree Navigation, dan Rekor +17.4% Hit@1 Tanpa Indeks Vektor

Analisis arsitektur DecisionRAG (arXiv:2610.35868, Chao Wan, Paul Jünger, Beixi Du, Bodong Liu, Navaneetha Krishnan, Kilian Q. Weinberger — Cornell University & ASAPP): Mengapa retrieval konvensional (BM25, dense embeddings) menciptakan capability asymmetry terhadap LLM generator modern, dan bagaimana DecisionRAG menavigasi struktur korpus bertingkat menggunakan model keputusan (decision models) dalam konteks bersama (shared context) tanpa token generasi, menghasilkan lompatan +13.8 R@1 di MultiDoc2Dial, +17.4 Hit@1 di Natural Questions, dan latensi secepat 0.68 detik.

Ilustrasi Arsitektur Teknis 16:9 DynaFlow (arXiv:2610.34467): Free-Form Multi-Agent Orchestration — Sintesis Alur Kerja Eksekutabel, Eliminasi Defek Aliran Informasi, dan Lonjakan Akurasi 88.08% Tanpa Mengubah Bobot Sub-Agent

DynaFlow (arXiv:2610.34467): Free-Form Multi-Agent Orchestration — Sintesis Alur Kerja Eksekutabel, Eliminasi Defek Aliran Informasi, dan Lonjakan Akurasi 88.08% Tanpa Mengubah Bobot Sub-Agent

Analisis arsitektur DynaFlow (arXiv:2610.34467, Ruhao Liu et al., NUS): Mengapa topologi multi-agent statis memicu overhead komunikasi berlebihan, dan bagaimana integrasi sintesis alur kerja bebas ke dalam ruang aksi Main Agent — dikombinasikan dengan Two-Stage SFT dan kurasi 3 defek orkestrasi — menghasilkan akurasi 88.08% serta memecahkan 100% soal AIME dengan sub-agent berbobot beku.

Ilustrasi Arsitektur Teknis 16:9 Code Graphs & Embeddings pada Small Coding Agents (arXiv:2610.33958): Eksperimen 79k Episode SWE-bench, Gradien Hop Depth, dan Batasan Representasi Leksikal Satu-Langkah

Code Graphs & Embeddings pada Small Coding Agents (arXiv:2610.33958): Eksperimen 79k Episode SWE-bench, Gradien Hop Depth, dan Batasan Representasi Leksikal Satu-Langkah

Analisis empiris 79k episode SWE-bench Verified (arXiv:2610.33958, Saurav Bellam): Apakah tool knowledge graph dan embedding search benar-benar melengkapi pemahaman struktural coding agent kecil? Menyingkap degradasi hop gradient (odds ratio 0.50–0.67 per hop), anomali tool uptake pada model 32B, dan bukti linear probing bahwa representasi kode internal agen open-weight masih dominan bersifat leksikal satu-langkah.