Mengintegrasikan LLM (Groq/LLaMA) ke Chatbot WhatsApp untuk Auto-Reply yang Lebih Pintar

Mengintegrasikan LLM (Groq/LLaMA) ke Chatbot WhatsApp untuk Auto-Reply yang Lebih Pintar

Kategori: Programming | Perkiraan waktu baca: 9 menit


Di artikel Cara Bikin WhatsApp Bot Sederhana dengan Node.js dan whatsapp-web.js, saya sudah bahas cara bikin bot dasar yang jawab pesan pakai keyword matching — kalau ada kata "wifi", balas template A, kalau ada kata "password", balas template B. Cara ini cukup untuk kasus sederhana, tapi cepat kewalahan begitu pertanyaan yang masuk makin bervariasi.

Nah, di artikel ini saya lanjutkan ke tahap berikutnya: menyambungkan bot itu ke LLM (Large Language Model) supaya bisa "mikir" jawaban sendiri, bukan cuma mencocokkan kata kunci. Ini persis proses yang saya lalui waktu mengembangkan NEXI dari versi awal yang kaku jadi lebih fleksibel.

Kenapa Groq + LLaMA?

Ada banyak pilihan LLM provider (OpenAI, Anthropic, Google, dll), tapi saya pilih Groq yang menjalankan model LLaMA untuk NEXI karena beberapa alasan:

  • Kecepatan — Groq terkenal dengan inference speed yang sangat cepat, penting untuk chatbot yang perlu respon real-time
  • Free tier yang lumayan — cocok untuk tahap awal sebelum trafik jadi besar
  • Model open-weight — LLaMA punya beberapa varian ukuran, jadi bisa disesuaikan dengan kebutuhan (model kecil untuk respon cepat, model besar untuk kasus yang butuh reasoning lebih dalam)

Langkah 1: Setup API Key Groq

Daftar di console.groq.com, generate API key, simpan di file .env:

GROQ_API_KEY=gsk_xxxxxxxxxxxxxxxxxxxxxxxx

Install SDK-nya:

npm install groq-sdk dotenv

Langkah 2: Modifikasi Bot dari Keyword Matching ke LLM

Ingat kode dasar dari artikel sebelumnya yang pakai if (teks.includes('wifi'))? Sekarang kita ganti pendekatannya:

require('dotenv').config();
const Groq = require('groq-sdk');
const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });

async function tanyaAI(pertanyaan) {
  const respon = await groq.chat.completions.create({
    messages: [
      {
        role: 'system',
        content: 'Kamu adalah asisten IT helpdesk yang ramah, singkat, dan to the point. Jawab dalam Bahasa Indonesia santai.'
      },
      { role: 'user', content: pertanyaan }
    ],
    model: 'llama-3.1-8b-instant',
    temperature: 0.5,
    max_tokens: 200,
  });

  return respon.choices[0].message.content;
}

client.on('message', async (message) => {
  const jawaban = await tanyaAI(message.body);
  await message.reply(jawaban);
});

Perbedaan besarnya: bot sekarang bisa jawab pertanyaan yang nggak pernah kamu antisipasi sebelumnya, bukan cuma yang cocok sama daftar keyword.

Langkah 3: Kasih Bot "Pengetahuan" Spesifik (Context Injection)

Masalahnya, LLM generik nggak tahu apa-apa soal kebijakan internal perusahaan kamu. Solusinya, sisipkan informasi relevan ke system prompt:

const systemPrompt = `
Kamu adalah asisten IT helpdesk untuk PT Contoh Sejahtera.
Informasi penting:
- Reset password dilakukan lewat portal.contoh.com/reset
- Jam operasional IT support: 08:00-17:00 hari kerja
- Untuk masalah hardware, buat tiket di sistem HelpDesk internal
- Jika pertanyaan di luar topik IT, arahkan user untuk menghubungi HRD

Jawab singkat, ramah, dan dalam Bahasa Indonesia.
`;

Teknik ini disebut prompt engineering sederhana — dengan menyisipkan konteks spesifik, LLM jadi jauh lebih relevan tanpa perlu training model dari nol.

Langkah 4: Simpan Histori Percakapan (Supaya Konteksnya Nyambung)

Kalau setiap pesan diproses terpisah, bot akan "lupa" apa yang dibicarakan sebelumnya. Untuk chatbot yang lebih natural, simpan histori percakapan per nomor:

const riwayatChat = {};

client.on('message', async (message) => {
  const nomor = message.from;

  if (!riwayatChat[nomor]) {
    riwayatChat[nomor] = [{ role: 'system', content: systemPrompt }];
  }

  riwayatChat[nomor].push({ role: 'user', content: message.body });

  const respon = await groq.chat.completions.create({
    messages: riwayatChat[nomor],
    model: 'llama-3.1-8b-instant',
  });

  const jawaban = respon.choices[0].message.content;
  riwayatChat[nomor].push({ role: 'assistant', content: jawaban });

  // Batasi histori supaya nggak terlalu panjang (hemat token)
  if (riwayatChat[nomor].length > 10) {
    riwayatChat[nomor] = [riwayatChat[nomor][0], ...riwayatChat[nomor].slice(-8)];
  }

  await message.reply(jawaban);
});

Catatan: untuk production, sebaiknya riwayat ini disimpan ke database (SQLite atau lainnya) bukan cuma variable di memory, supaya nggak hilang kalau bot restart. Kalau kamu butuh referensi soal database ringan untuk proyek automasi seperti ini, saya juga pernah bahas SQLite di konteks berbeda waktu bikin Sistem Absensi QR Code pakai Google Apps Script — meski platform-nya beda, prinsip menyimpan data terstruktur itu tetap relevan.

Langkah 5: Rate Limiting dan Kontrol Biaya

Ini bagian yang sering dilupakan sampai tagihan/limit kepakai habis. Beberapa hal yang saya terapkan di NEXI:

const rateLimiter = {};

function bolehKirim(nomor) {
  const sekarang = Date.now();
  if (!rateLimiter[nomor] || sekarang - rateLimiter[nomor] > 3000) {
    rateLimiter[nomor] = sekarang;
    return true;
  }
  return false;
}

client.on('message', async (message) => {
  if (!bolehKirim(message.from)) {
    return; // Abaikan kalau kirim pesan terlalu cepat berturut-turut
  }
  // ... lanjut proses seperti biasa
});

Ini mencegah satu nomor spam bot dengan banyak pesan sekaligus yang bisa menghabiskan kuota API dengan cepat.

Kapan LLM Tetap Perlu "Dibantu" Logic Biasa?

Satu pelajaran penting dari mengembangkan NEXI: LLM nggak selalu jawaban terbaik untuk semua kasus. Untuk hal-hal yang butuh akurasi mutlak (misal nomor tiket, status approval, data yang berubah-ubah), lebih aman tetap pakai logic terstruktur atau query ke database, dan biarkan LLM cuma menangani bagian percakapan natural/pertanyaan umum. Kombinasi keduanya (hybrid) biasanya hasilnya lebih reliable dibanding full LLM atau full keyword matching.

Penutup

Menambahkan LLM ke chatbot WhatsApp itu upgrade besar dari segi fleksibilitas, tapi juga menambah kompleksitas baru — soal biaya, rate limiting, dan kapan harus tetap pakai logic biasa. Kalau kamu belum baca dasar-dasar bikin bot WhatsApp-nya, mulai dulu dari artikel sebelumnya sebelum lanjut ke tahap integrasi AI ini.

Kalau kamu butuh bantuan membangun chatbot WhatsApp dengan AI untuk bisnis kamu — customer service otomatis, FAQ bot, atau asisten internal tim — saya buka jasa untuk itu. Cek portofolio saya di april-portfolio-pearl.vercel.app atau hubungi lewat halaman Contact.


Ada pertanyaan soal implementasi atau butuh saran arsitektur untuk kasus spesifik kamu? Tulis di komentar.

Tidak ada komentar:

Posting Komentar