Saya Membuat Node n8n untuk Mengambil Keputusan, Bukan Menulis Teks

Alasan saya membuat n8n-nodes-jev-classification untuk Jev dari TypeSafe AI, cara kerja routing berbasis confidence, dan pelajaran saat merilisnya ke npm.

Oleh Khairul Muhtadin
  • n8n
  • Jev
  • TypeSafe AI
  • community node
  • klasifikasi teks
  • workflow automation

Sebagian besar workflow klasifikasi di n8n memakai chat model, Structured Output Parser, lalu node tambahan untuk menangani hasilnya. Saya juga pernah membangun workflow dengan pola itu. Polanya bekerja, tetapi model tetap diminta menulis teks untuk pekerjaan yang sebenarnya hanya membutuhkan keputusan.

Tiket dukungan tidak membutuhkan esai. Tiket itu membutuhkan tujuan antrean. Ulasan produk mungkin membutuhkan skor sentimen. Pesan masuk mungkin hanya membutuhkan jawaban ya atau tidak untuk pertanyaan, “Apakah orang ini meminta refund?”

Itulah alasan saya membuat n8n-nodes-jev-classification, community node n8n open source untuk Jev dari TypeSafe AI. Versi 0.2.0 sekarang tersedia di npm.

Workflow n8n dengan Jev Classification yang mengarahkan satu pesan ke output Happy, Sad, Shy, Angry, atau Needs Review
Jev Classification membuat satu output untuk setiap kategori dan dapat memisahkan item yang belum cukup meyakinkan ke jalur Needs Review.

Jev dibuat untuk keputusan dengan pilihan terbatas

TypeSafe menyebut Jev sebagai System One model. Kita mengirimkan sebuah state, misalnya tiket, ulasan, atau record JSON, bersama pertanyaan dengan tipe yang jelas. Jev mengembalikan jawaban bertipe dan probabilitas, bukan paragraf yang masih harus diurai.

Jev menyediakan tiga bentuk pertanyaan yang berguna:

  • Choice memilih satu opsi dan mengembalikan probabilitas untuk seluruh opsi.
  • Score menilai teks berdasarkan level berurutan dan mengembalikan skor berbobot.
  • Noul menjawab pertanyaan ya atau tidak dalam bentuk probabilitas.

TypeSafe mencantumkan harga Jev 1.13 sebesar $0,042 per satu juta input token, tanpa biaya output token, dengan latency tipikal 70 sampai 500 milidetik. Angka ini berasal dari penyedia, bukan benchmark mandiri saya. Batas layanan dan harga juga dapat berubah. Uji model dengan data milikmu sendiri sebelum memindahkan keputusan produksi ke dalam workflow.[1]

Batasan pilihan justru menjadi bagian yang menarik. Jika saya memberi empat kategori, Jev tidak dapat mengarang kategori kelima. Dalam workflow, sifat seperti ini sering lebih berguna daripada meminta model serbaguna bertingkah seperti classifier.

Cara node ini masuk ke dalam workflow n8n

Saya ingin node ini terasa familier bagi orang yang pernah memakai Text Classifier bawaan n8n. Operasi Classify membaca setiap input item, meminta Jev memilih dari kategori yang tersedia, lalu mengirim item tersebut ke output yang sesuai.

Perbedaannya ada pada data yang ikut dikembalikan. Setiap item mendapatkan field jev yang berisi kategori terpilih, distribusi probabilitas, confidence, penanda apakah item perlu diperiksa, dan versi model yang menjawab.

Diagram item n8n masuk ke Jev Classification, menerima jawaban bertipe, lalu diarahkan ke kategori atau Needs Review
Diagram dari repositori GitHub memperlihatkan alurnya: item n8n, pertanyaan bertipe untuk Jev, respons probabilitas, lalu routing deterministik di dalam node.

Paket ini memiliki empat operasi:

Operasi Fungsinya Perilaku output
Classify Memilih satu kategori Satu cabang per kategori dan opsi Needs Review
Score Menilai teks dengan level berurutan Satu output berisi skor, level, probabilitas, dan confidence
Check Menilai pertanyaan ya atau tidak Cabang Yes dan No
Ask Questions Mengirim campuran pertanyaan Choice, Score, dan Noul Satu output berisi kumpulan jawaban mentah

Field input tetap disertakan secara default. Binary data dan referensi paired item juga diteruskan, sehingga hasil masih dapat dilacak kembali ke item yang masuk.

Konfigurasinya tetap terlihat

Node reguler menerima teks, JSON, atau seluruh item n8n sebagai state. Instructions dievaluasi untuk setiap item. Pada mode kategori tetap, definisi kategori dibaca sekali per eksekusi karena kategori tersebut menentukan output node.

Pengaturan Jev Classification di n8n dengan expression pesan, instruksi deteksi emosi, dan beberapa kategori
Konfigurasi Classify di n8n. Expression input, instruksi, dan daftar kategori dapat diperiksa langsung tanpa membuka kode.

Setelah eksekusi, output tetap membawa pesan asli dan menambahkan hasil keputusan. Dalam contoh ini, Jev memilih kategori Sad dengan confidence 1 dan memberi probabilitas 1 pada kategori tersebut.

Output n8n yang menunjukkan sebuah pesan masuk ke cabang Sad dengan confidence 1 dan probabilitas untuk seluruh kategori emosi
Cabang terpilih hanya sebagian dari hasil. Distribusi probabilitas lengkap tetap tersedia untuk log, analitik, atau keputusan lanjutan.

Jalur Needs Review lebih penting daripada label pemenang

Automasi menjadi berisiko ketika model harus selalu berpura-pura mengetahui jawaban. Untuk pertanyaan Choice dan Score, Jev mengembalikan distribusi probabilitas lengkap. TypeSafe kemudian menghitung nilai confidence dari bentuk distribusi tersebut.[2]

Node ini mengubah sinyal itu menjadi kontrol workflow:

  • confidence di atas atau sama dengan threshold masuk ke kategori terpilih
  • confidence di bawah threshold dapat dikirim ke Needs Review
  • jika dibutuhkan, item yang meragukan tetap dapat masuk ke kategori terbaik sambil membawa needsReview: true

Threshold default adalah 0,5, tetapi saya tidak akan memakai satu nilai untuk seluruh tindakan. Memberi tag yang salah pada email mudah diperbaiki. Mengeluarkan refund yang salah tidak semudah itu. Panduan TypeSafe juga menyampaikan hal serupa: batas confidence perlu mengikuti dampak ketika keputusan salah.[2]

Pola yang saya pilih sederhana. Otomatiskan kasus yang jelas, simpan probabilitasnya, lalu sediakan jalur manusia untuk kasus yang ambigu.

Kategori tetap dan kategori dinamis

Versi 0.2.0 menambahkan pilihan Categories Source pada operasi Classify.

Mode Fixed mempertahankan perilaku awal: kategori ditentukan saat workflow dibuat, lalu setiap kategori mendapatkan output sendiri.

Mode Dynamic dipakai ketika kategori baru diketahui saat workflow berjalan. Daftar kategori dapat berasal dari expression, node sebelumnya, database, atau AI Agent. Format yang diterima adalah string dipisahkan koma, JSON array, atau JSON object yang memetakan nama kategori ke deskripsinya.

Karena n8n perlu mengetahui daftar output sebelum eksekusi dimulai, mode Dynamic memakai satu output bernama Result. Kategori terpilih tersedia pada jev.category. Jika membutuhkan cabang lanjutan, gunakan Switch node.

Mode Dynamic tidak menampilkan output Needs Review, tetapi sinyal ketidakpastian tetap tersedia melalui jev.needsReview.

Bisa dipakai sebagai tool oleh AI Agent

Paket ini menyediakan node reguler dan varian tool. Pada instance self-hosted yang mengizinkan community package sebagai tool, pencarian Jev akan menampilkan keduanya.

Hasil pencarian node n8n yang menampilkan Jev Classification dan Jev Classification Tool
Node reguler menangani routing langsung di dalam workflow. Varian Tool memungkinkan AI Agent memanggil operasi yang sama.
Workflow n8n AI Agent yang terhubung ke OpenRouter Chat Model dan Jev Classification Tool
Jev Classification Tool dapat ditempatkan di samping agent sebagai alat pengambil keputusan yang sempit, sementara chat model tetap menangani balasan.

Pembagian tanggung jawab ini masuk akal bagi saya. Chat model dapat menulis respons yang membantu. Jev menangani pertanyaan terbatas seperti emosi, intent, kecocokan kebijakan, atau keberadaan kondisi tertentu.

Hasil Jev Classification Tool di n8n yang menampilkan kategori sad, confidence 1, dan peta probabilitas untuk AI Agent
Tool mengembalikan data keputusan terstruktur kepada agent. Identifier eksekusi pada screenshot sumber telah disamarkan sebelum dipublikasikan.

Memasang community node

Pada n8n self-hosted, buka Settings, pilih Community Nodes, lalu instal:

n8n-nodes-jev-classification

Setelah itu, buat credential Jev (TypeSafe) API memakai API key dari konsol TypeSafe. Pengujian credential memanggil endpoint daftar model milik TypeSafe. API key dikirim sebagai bearer token hanya ke https://api.typesafe.ai.

Pengaturan Community Nodes n8n yang menampilkan n8n-nodes-jev-classification versi 0.1.1 telah terpasang
Screenshot instalasi awal versi 0.1.1 pada n8n self-hosted. Versi paket terbaru saat artikel ini diterbitkan adalah 0.2.0.

Untuk pemasangan manual:

cd ~/.n8n/nodes
npm install [email protected]

Restart n8n setelah instalasi manual. Varian tool juga membutuhkan:

N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true

Node ini saat ini hanya tersedia untuk n8n self-hosted.

Cara membaca klaim batching dengan benar

Node memiliki dua pengaturan throughput:

  • Parallel Requests menentukan ukuran worker pool.
  • Items Per Request menggabungkan beberapa item pendek ke dalam satu request, maksimal 50 item.

TypeSafe menerbitkan eksperimen batching yang berguna. Tiga belas pertanyaan independen terhadap dokumen yang sama dengan panjang 53.777 karakter membutuhkan biaya 12,2 kali lebih rendah dan berjalan 10 kali lebih cepat ketika dikirim dalam satu request dibandingkan 13 request terpisah. Jawaban pada strategi yang dibandingkan tetap sama.[3]

Eksperimen tersebut membuktikan manfaat memakai satu state bersama untuk banyak pertanyaan. Eksperimen itu bukan benchmark langsung untuk fitur multi-item pada node ini.

Ketika node menggabungkan beberapa item, teks setiap item tetap dikirim. Tagihan token kurang lebih tetap serupa. Keuntungan utamanya berasal dari jumlah round trip dan overhead request yang lebih sedikit. Teks panjang atau state yang penuh informasi tidak relevan sebaiknya memakai batch yang lebih kecil karena state yang berisik dapat menurunkan akurasi.[4]

Repositori menyediakan workflow contoh untuk routing tiket, penilaian ulasan dan deteksi cacat, kategori dinamis, serta pertanyaan campuran dalam batch. Contoh tersebut lebih berguna sebagai titik awal daripada menebak seluruh konfigurasi dari nol.

Bug yang sangat spesifik terhadap n8n

Rilis pertama dapat dijalankan, tetapi node regulernya tidak muncul di panel node normal. Hanya varian untuk AI Agent yang mudah ditemukan.

Penyebabnya adalah metadata codex. Node yang diberi kategori AI tanpa subkategori Chains dan Root Nodes akan disaring dari daftar reguler n8n. Versi 0.1.1 menyalin bentuk kategori milik Text Classifier bawaan dan menambahkan alias pencarian seperti jev, classify, router, dan sentiment.

Paket ini sekarang memiliki nol runtime dependency, lisensi MIT, test, workflow contoh, dan alur GitHub Actions untuk menerbitkan paket ke npm dengan provenance. Source code dan paket npm tersedia untuk diperiksa sebelum dipasang.

Kapan saya tidak akan memakai Jev

Jev bukan pengganti umum untuk chat model. TypeSafe mendokumentasikan keterbatasannya secara terbuka.[4]

Saya akan tetap mengerjakan hal berikut dengan kode:

  • aritmetika dan penghitungan
  • pengurutan tanggal dan perhitungan durasi
  • aturan deterministik yang tidak membutuhkan model

Saya akan tetap memakai LLM generatif untuk:

  • ringkasan
  • draft email
  • penjelasan
  • ekstraksi bebas ketika daftar kemungkinan jawaban belum diketahui

Jev juga membaca instruksi secara literal, kehilangan akurasi ketika state memuat banyak detail tidak relevan, dan tidak menganggap input sebagai konten berbahaya secara default. Batas antar kategori perlu diuji dengan contoh nyata, input adversarial, dan monitoring. Kategori other sering lebih aman daripada memaksa setiap input masuk ke antrean bisnis yang salah.

Coba sendiri

Paket tersedia di npm. Repositori GitHub memuat source code, petunjuk instalasi, diagram, test, dan workflow contoh yang dapat diimpor ke n8n.

Lihat juga rilis 0.2.0 untuk fitur kategori dinamis.

Ini adalah community node yang saya pelihara sendiri. Proyek ini tidak terafiliasi, didukung, atau disahkan oleh TypeSafe AI maupun n8n.

Sumber

[1] Models, dokumentasi TypeSafe AI

[2] Confidence, dokumentasi TypeSafe AI

[3] Parallel questions, cookbook TypeSafe AI

[4] Jev 1.13 jaggedness, dokumentasi TypeSafe AI

Pertanyaan yang sering diajukan

Apakah node Jev Classification dapat dipakai di n8n Cloud?

Saat ini node tersedia untuk instalasi self-hosted. Community node ini belum tersedia di n8n Cloud.

Apakah Jev menggantikan chat LLM?

Tidak. Jev cocok untuk keputusan dengan pilihan terbatas. Gunakan chat LLM ketika workflow perlu menulis ringkasan, balasan, atau teks bebas.

Bagaimana menangani hasil dengan confidence rendah?

Pada kategori tetap, item dapat dikirim ke output Needs Review. Pada kategori dinamis, periksa jev.needsReview dengan Switch atau IF node.