Type something to search...

Agen Dokuprint

Ringkasan

Waktu kuliah saya punya usaha cetak kecil dan semua harganya saya tentukan pakai feeling. Bertahun-tahun kemudian saya bikin mesin yang bisa menentukan harga itu (kisahnya ada di sini). Tapi mesin penghitung harga bukan asisten toko. Tidak ada orang masuk ke jasa cetak dengan hanya angka di kepala. Mereka tanya apakah jilid spiral cocok untuk skripsi 120 halaman, berapa harga laminating, apakah file mereka siap cetak.

Jadi saya membangun asisten chat di atas mesin harga itu. Satu chat yang menghitung harga PDF yang Anda unggah sekaligus menjawab pertanyaan soal toko. Semuanya berpegang pada satu aturan: setiap harga di jawaban harus berasal dari pemanggilan tool di percakapan yang sama. LLM mengarang angka dengan pede, jadi asisten saya tidak boleh mengarang apa pun. Ia hanya merangkai kalimat di sekitar angka yang sudah dihitung oleh kode.

Cara kerjanya, dengan kata sederhana

Setiap pesan Anda lewat pipeline pendek. Pertama, pemeriksaan: ini pertanyaan yang wajar buat jasa cetak, atau jebakan? Lalu asisten menggali kebutuhan Anda, membuka katalog, menjalankan mesin harga kalau Anda mengunggah file, dan menyusun balasan. Terakhir, penjaga memindai draft: ada harga yang tidak berasal dari tool? Draft yang mencurigakan ditulis ulang sekali. Gagal dua kali, template jawaban tetap yang dikirim.

Dua tool, dua jenis harga. Mesin memberi penawaran pasti untuk PDF Anda. Katalog memberi kisaran pasar, selalu dilabeli estimasi. Saat jawaban menyebut laminating Rp 4.500, angka itu mengalir dari baris katalog, lewat kode, sampai ke kalimat jawaban. Setiap langkah alurnya bisa ditelusuri.

Baru kenal AI agent? Satu hal yang perlu diingat: model adalah bagian yang paling tidak boleh dipercaya di sistem ini. Yang bikin sistem ini aman justru kode biasa di sekeliling model: pemeriksa yang memindai harga, katalog yang bilang terus terang kalau tidak ada barang yang cocok, dan aturan bahwa diam lebih baik daripada mengarang. Kebanyakan demo AI memamerkan jawabannya. Yang ini memamerkan cara kerjanya.

Versi lebih panjang kisah ini, termasuk kegagalannya, ada di blog.

Arsitektur

graph TB
    User[User chat + upload PDF] --> API[server FastAPI]
    API --> IG[input guard]
    IG --> BC[budget check]
    BC --> CS[classify scope]
    CS --> RT[route]
    RT --> KB[retrieve kb dari Qdrant]
    RT --> PT[call pricing tool]
    KB --> AS[assemble draft]
    PT --> AS
    AS --> OG[output guard]
    OG --> OK{harga dari tool}
    OK -- ya --> User
    OK -- tidak, 1x tulis ulang --> AS
    IG -- di luar topik --> RF[refusal]
    RF --> OG
    KB -. hybrid dense + TF-IDF .-> QD[(Qdrant catalog)]
    PT -. penawaran pasti .-> PE[Pricing engine]
    AS -. trace .-> LF[LangFuse]

Demo

Dua video pendek, direkam langsung dari demo yang live: bertanya soal toko, lalu menghitung harga PDF yang diunggah.

Bertanya soal toko

Menghitung harga PDF

Terukur

  • 362 automated tests (cakupan 92,78%), CI jalan di setiap perubahan
  • Eval 47 skenario: routing 100%, refusal 100%, nol harga karangan
  • Retrieval menemukan baris katalog yang tepat dalam 94,7% kasus (hit@5 dari 132 query, hybrid dense + TF-IDF)
  • Satu turn percakapan penuh menghabiskan sekitar 1.500 token

Penutup

Katalognya fiktif. Saya menulisnya sebagai data dummy, dan setiap jawaban yang memakai data itu dilabeli estimasi. Secara teknis rangkaiannya sudah teruji, tapi pipeline tetap bukan toko beneran. Sampai daftar harga asli menggantikan data fiksi saya, project ini adalah demo cara menjaga AI tetap jujur.