DEV Community

Cover image for Cara Menguji Aplikasi LLM: Panduan Lengkap Promptfoo (2026)
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menguji Aplikasi LLM: Panduan Lengkap Promptfoo (2026)

TL;DR

Promptfoo adalah framework evaluasi dan red-teaming LLM open-source yang membantu developer melakukan pengujian aplikasi AI secara sistematis. Mendukung 90+ provider model, tersedia 67+ plugin serangan keamanan, dan berjalan 100% lokal untuk privasi. Sudah diunduh 1,6 juta kali di npm dan digunakan di produksi oleh perusahaan dengan 10 juta+ user—menjadi standar pengujian LLM. Mulai dengan:

npm install -g promptfoo
promptfoo init --example getting-started
Enter fullscreen mode Exit fullscreen mode

Coba Apidog hari ini

Pendahuluan

Mungkin Anda sudah menghabiskan berminggu-minggu membangun chatbot customer support berbasis AI. Selama development, semua jawaban terlihat sempurna. Begitu di-launch, user mulai menemukan celah—membocorkan data sensitif, bypass limitasi keamanan, atau mendapatkan output yang tidak konsisten.

Hal ini sering terjadi. Tim sering meluncurkan aplikasi LLM hanya dengan uji manual dan feeling, baru sadar ada issue besar di production. Biaya perbaikan setelah deploy bisa 100x lipat dibanding jika ditemukan saat development.

Promptfoo hadir untuk membawa pengujian otomatis yang sistematis ke aplikasi LLM. Anda bisa evaluasi prompt di banyak model sekaligus, menjalankan penilaian red team, dan deteksi regresi sebelum user terkena dampaknya.

Saya sudah mengulas source code promptfoo (v0.121.2) dan menguji fitur utamanya. Artikel ini akan membimbing Anda: cara setup evaluasi, menjalankan security scan, integrasi dengan CI/CD, dan menghindari error umum.

Setelah mengikuti panduan ini, Anda akan punya test suite untuk aplikasi LLM sendiri dan siap deploy dengan percaya diri.

💡 Jika Anda juga menguji API atau perlu validasi perilaku API selain LLM, Apidog menyediakan platform terintegrasi untuk desain, pengujian, dan dokumentasi API. Gunakan bersama: promptfoo untuk evaluasi LLM, Apidog untuk validasi layer API.

Apa Itu Promptfoo & Mengapa Anda Butuh

Promptfoo adalah CLI tool dan library Node.js untuk evaluasi dan red-teaming aplikasi LLM. Anggap saja seperti framework pengujian khusus AI generatif.

Promptfoo

Alat pengujian konvensional gagal di LLM karena output-nya non-deterministik. Tidak bisa pakai string match eksak—prompt yang sama bisa menghasilkan jawaban berbeda. Promptfoo mengatasi dengan:

  • Assert semantik: cek makna, bukan string literal.
  • Evaluasi dinilai LLM: model lain menilai output model target.
  • Multi-model comparison: uji prompt di GPT-4, Claude, dsb.
  • Plugin security: otomatis scan kerentanan.

Promptfoo berjalan lokal. Data dan prompt pengujian Anda tidak dikirim keluar, kecuali jika Anda mengaktifkan fitur cloud. Cocok untuk data sensitif.

Problem yang Diselesaikan Promptfoo

Mayoritas tim masih uji aplikasi LLM manual. Kirim beberapa prompt, cek hasil, nilai sendiri. Tiga masalah besar:

  1. Tidak ada deteksi regresi—update model bisa rusak tanpa disadari.
  2. Cakupan tidak lengkap—manual testing kerap melewatkan edge case dan input berbahaya.
  3. Tidak ada metrik—tidak bisa tracking improvement atau bandingkan model secara objektif.

Promptfoo menggantikan itu dengan evaluasi otomatis setiap ada perubahan. Anda tentukan test case sekali, bisa dijalankan di model apapun. Hasil meliputi success rate, perbandingan cost, dan latency.

Siapa yang Pakai Promptfoo

Sudah 1,6 juta unduhan npm dan dipakai di aplikasi LLM dengan 10 juta+ user. Use case:

  • Chatbot customer support yang butuh konsistensi dan akurasi.
  • Content pipeline yang harus menjaga tone brand.
  • Aplikasi health/fintech yang wajib compliant.
  • Sistem security-sensitive yang tidak boleh bocor data atau kena serangan.

Per Maret 2026, Promptfoo diakuisisi OpenAI — tetap open-source (MIT) dan aktif dikembangkan.

Memulai: Install & Jalankan Evaluasi Pertama

Promptfoo bisa install global, atau via npx tanpa install.

Instalasi

# Install global (direkomendasikan)
npm install -g promptfoo

# Atau langsung pakai npx
npx promptfoo@latest

# Pengguna macOS: Homebrew
brew install promptfoo

# Python user
pip install promptfoo
Enter fullscreen mode Exit fullscreen mode

Set API key Anda sebagai environment variable:

export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
Enter fullscreen mode Exit fullscreen mode

Buat Evaluasi Pertama

Inisialisasi contoh project:

promptfoo init --example getting-started
cd getting-started
Enter fullscreen mode Exit fullscreen mode

Akan dibuat file promptfooconfig.yaml berisi contoh prompt, provider, dan test case.

Jalankan evaluasi:

promptfoo eval
Enter fullscreen mode Exit fullscreen mode

Lihat hasil di UI web:

promptfoo view
Enter fullscreen mode Exit fullscreen mode

Browser terbuka di localhost:3000—tampilkan side-by-side output tiap model, status pass/fail per assertion.

Struktur File Konfigurasi

Contoh promptfooconfig.yaml:

description: "Rangkaian Evaluasi Pertama Saya"

prompts:
  - prompts/greeting.txt
  - prompts/farewell.txt

providers:
  - openai:gpt-4o
  - anthropic:claude-sonnet-4-5

tests:
  - vars:
      input: "Hello"
    assert:
      - type: contains
        value: "Hi"
      - type: latency
        threshold: 3000
Enter fullscreen mode Exit fullscreen mode
  • prompts: file/teks yang diuji.
  • providers: model-model target (90+ didukung).
  • tests: test case dengan variable & assertion.

Skalakan hingga ratusan test case. Simpan config di version control dan jalankan otomatis di CI.

Fitur Inti Promptfoo

1. Evaluasi Otomatis

Definisikan test case + expected result, jalankan ke model pilihan.

Jenis Assertion

Promptfoo menyediakan 30+ assertion:

Penegasan Tujuan
contains Output mengandung substring
equals Persis sama string
regex Match regex pattern
json-schema Validasi struktur JSON
javascript Custom JS function return pass/fail
python Custom Python function
llm-rubric Penilaian output via LLM lain
similar Skor kemiripan semantik
latency Response time < threshold
cost Biaya per permintaan < threshold

Contoh assertion multi-check:

tests:
  - vars:
      question: "What is the capital of France?"
    assert:
      - type: contains
        value: "Paris"
      - type: javascript
        value: output.length < 100
      - type: latency
        threshold: 2000
      - type: cost
        threshold: 0.001
Enter fullscreen mode Exit fullscreen mode

Cocokkan ada "Paris", jawaban <100 karakter, latency <2 detik, biaya <$0.001.

Evaluasi Dengan LLM

Assertion llm-rubric untuk kriteria subjektif:

assert:
  - type: llm-rubric
    value: "Jawaban harus membantu, aman, dan jujur"
Enter fullscreen mode Exit fullscreen mode

LLM penilai membaca output dan menilai berdasar rubric Anda.

2. Red Teaming & Pengujian Security

Promptfoo punya modul red team untuk scan keamanan otomatis.

Red Team Output

Vektor Serangan Didukung

Tersedia 67+ plugin untuk berbagai kategori:

Kategori Diuji
Injeksi Prompt Injeksi direct/indirect/context
Jailbreak DAN, role-play bypass, persona swap
Eksfiltrasi Data SSRF, prompt leak, system prompt extract
Konten Berbahaya Hate speech, self-harm, dangerous act
Kepatuhan PII leak, HIPAA, data keuangan
Audio/Visual Serangan berbasis audio/gambar

Jalankan Scan Red Team

Inisialisasi:

promptfoo redteam init
Enter fullscreen mode Exit fullscreen mode

Scan keamanan:

promptfoo redteam run
Enter fullscreen mode Exit fullscreen mode

Lihat report:

promptfoo redteam report [directory]
Enter fullscreen mode Exit fullscreen mode

redteam run akan:

  1. Generate attack probe sesuai aplikasi Anda.
  2. Evaluasi probe ke target & scoring kerentanan.

Output termasuk severity, test case exploitable, dan saran fix.

Contoh Output

Vulnerability Summary:
- Kritis: 2 (PII leak, prompt extraction)
- Tinggi: 5 (jailbreak, prompt injection)
- Sedang: 12 (bias, output inkonsisten)
- Rendah: 23 (minor policy violation)
Enter fullscreen mode Exit fullscreen mode

Perbaiki masalah kritis sebelum deployment. Jalankan ulang setelah perbaikan.

3. Code Scan untuk Pull Request

Integrasi dengan GitHub Actions untuk scan PR terkait LLM security.

# .github/workflows/promptfoo-scan.yml
name: Promptfoo Code Scan
on: [pull_request]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm install -g promptfoo
      - run: promptfoo eval -c promptfooconfig.yaml
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Enter fullscreen mode Exit fullscreen mode

Menangkap:

  • API key hardcoded
  • Pola prompt tidak aman
  • Input validation yang kurang
  • Potensi prompt injection

4. Perbandingan Model

Bandingkan output banyak model untuk pilih yang terbaik.

# Evaluasi multi-provider
promptfoo eval

# Lihat di web UI
promptfoo view
Enter fullscreen mode Exit fullscreen mode

Web UI tampilkan:

  • Pass/fail rate per model
  • Biaya/1000 request
  • Latency rata-rata
  • Perbedaan output

Bisa jadi model lebih murah mengalahkan GPT-4 di use case Anda.

Provider Didukung: 90+ Integrasi LLM

Promptfoo langsung support 90+ provider LLM. Uji prompt yang sama di OpenAI, Anthropic, Google, Amazon, lokal, tanpa ubah kode.

Provider Utama

Provider Model
OpenAI GPT-4, GPT-4o, GPT-4o-mini, o1, o3
Anthropic Claude 3.5/3.7/4.5/4.6, Model pemikiran
Google Gemini 1.5/2.0, Vertex AI
Microsoft Azure OpenAI, Phi
Amazon Bedrock (Claude, Llama, Titan)
Meta Llama 3, 3.1, 3.2 (via beberapa provider)
Ollama Model lokal (Llama, Mistral, Phi)

Provider Kustom

Bisa tulis provider sendiri (Python/JS) jika model belum didukung.

Contoh Python:

# custom_provider.py
from typing import Any

class CustomProvider:
    async def call_api(self, prompt: str, options: dict, context: dict) -> dict:
        response = await my_async_api.generate(prompt)
        return {
            "output": response.text,
            "tokenUsage": {
                "total": response.usage.total_tokens,
                "prompt": response.usage.prompt_tokens,
                "completion": response.usage.completion_tokens
            }
        }
Enter fullscreen mode Exit fullscreen mode

Contoh JavaScript:

// customProvider.js
export default class CustomProvider {
  async callApi(prompt) {
    return {
      output: await myApi.generate(prompt),
      tokenUsage: { total: 50, prompt: 20, completion: 30 }
    };
  }
}
Enter fullscreen mode Exit fullscreen mode

Registrasi di config:

providers:
  - id: file://custom_provider.py
    config:
      api_key: ${MY_API_KEY}
Enter fullscreen mode Exit fullscreen mode

CLI Promptfoo: Perintah Utama

Promptfoo CLI menyediakan semua fungsi untuk workflow harian.

Perintah Inti

# Jalankan evaluasi
promptfoo eval -c promptfooconfig.yaml

# Web UI
promptfoo view

# Share hasil online
promptfoo share

# Red team test
promptfoo redteam init
promptfoo redteam run

# Konfigurasi
promptfoo init
promptfoo validate [config]

# Manajemen hasil
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>

# Utilitas
promptfoo cache clear
promptfoo retry <id>
Enter fullscreen mode Exit fullscreen mode

Bendera Berguna

--no-cache              # Disable cache
--max-concurrency <n>   # Batasi paralel API call
--output <file>         # Simpan hasil ke JSON
--verbose               # Debug log
--env-file <path>       # Load env dari file
--filter <pattern>      # Jalankan test case spesifik
Enter fullscreen mode Exit fullscreen mode

Contoh Evaluasi Custom

promptfoo eval \
  -c promptfooconfig.yaml \
  --no-cache \
  --max-concurrency 3 \
  --output results.json \
  --env-file .env
Enter fullscreen mode Exit fullscreen mode

Jalankan evaluasi fresh, concurrency max 3, hasil ke JSON, API key dari .env.

Integrasi CI/CD: Otomatisasi Pengujian LLM

Integrasikan promptfoo di pipeline CI/CD untuk deteksi regresi sebelum deploy.

Contoh GitHub Actions

# .github/workflows/promptfoo-scan.yml
name: Promptfoo Code Scan
on: [push, pull_request]
jobs:
  eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm install -g promptfoo
      - run: promptfoo eval -c promptfooconfig.yaml
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Enter fullscreen mode Exit fullscreen mode

Quality Gate

Set threshold di config:

commandLineOptions:
  threshold: 0.8  # Wajib pass rate 80%
Enter fullscreen mode Exit fullscreen mode

Jika gagal, CI akan error dan mencegah merge.

Caching di CI

Aktifkan cache untuk percepat CI:

- uses: actions/cache@v4
  with:
    path: ~/.cache/promptfoo
    key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
Enter fullscreen mode Exit fullscreen mode

Cache lewati API call jika test belum berubah.

Web UI: Visualisasi & Kolaborasi

Web UI (promptfoo view) = interface interaktif untuk review evaluasi.

Fitur

  • Matriks evaluasi: side-by-side output model
  • Filter: temukan test case spesifik
  • Diff view: bandingkan eksekusi
  • Share: bagikan link untuk review tim
  • Live update: lihat evaluasi real-time

Akses & Keamanan

UI default di localhost:3000. Sudah ada proteksi CSRF via header. Jangan expose server ke jaringan tidak tepercaya. Untuk kolaborasi tim, pakai promptfoo share atau self-host dengan auth.

Database & Caching

Lokasi Cache

  • macOS/Linux: ~/.cache/promptfoo
  • Windows: %LOCALAPPDATA%\promptfoo

Cache hasil evaluasi untuk percepat pengujian. Pakai --no-cache jika ingin hasil fresh.

Lokasi Database

  • Semua platform: ~/.promptfoo/promptfoo.db (SQLite)

Database menyimpan histori eksekusi evaluasi.

Model Security Promptfoo

Promptfoo pakai model trust-by-configuration.

Input Tepercaya (Dieksekusi)

  • File konfigurasi (promptfooconfig.yaml)
  • Assertion JS/Python/Ruby custom
  • Config provider
  • Fungsi transformasi

Input Tidak Tepercaya (Hanya Data)

  • Teks prompt
  • Variabel test case
  • Output model
  • Konten remote

Rekomendasi Hardening

Untuk security tinggi:

  1. Jalankan di container/VM dengan privilege minimal.
  2. Pakai API key khusus dengan minim privilege.
  3. Jangan masukkan secrets di prompt/config.
  4. Batasi network untuk kode pihak ketiga.
  5. Jangan expose web server ke publik.

Optimasi Kinerja Evaluasi

Tips Optimasi

  1. Gunakan cache—default sudah aktif.
  2. Atur concurrency—pakai --max-concurrency agar tidak kena rate limit.
  3. Filter test—pakai --filter saat develop.
  4. Sample dataset—gunakan subset sebelum full run.

Skala Evaluasi Besar

Untuk ribuan test case:

  • Gunakan scheduler (src/scheduler/) untuk distribusi
  • Manfaatkan remote generation
  • Ekspor hasil ke Google Sheets untuk monitoring tim

Ekstensibilitas: Fitur Kustom

Assertion Kustom

Tulis assertion custom untuk domain-spesifik:

// assertions/customCheck.js
export default function customCheck(output, context) {
  const pass = output.includes('expected');
  return {
    pass,
    score: pass ? 1 : 0,
    reason: pass ? 'Output matched' : 'Missing expected content'
  };
}
Enter fullscreen mode Exit fullscreen mode

Pakai di config:

assert:
  - type: file://assertions/customCheck.js
Enter fullscreen mode Exit fullscreen mode

Model Context Protocol (MCP) Server

Promptfoo include server MCP untuk integrasi dengan AI assistant (Claude Code, dsb):

promptfoo mcp
Enter fullscreen mode Exit fullscreen mode

Fungsinya:

  • Jalankan evaluasi dari chat
  • Akses modul red team
  • Query hasil tersimpan
  • Generate test case baru

Studi Kasus Dunia Nyata

Chatbot Customer Support

Perusahaan SaaS uji chatbot support sebelum deploy:

  • 500 test case FAQ
  • Evaluasi di GPT-4 & Claude
  • Red team scan untuk PII leak & jailbreak
  • CI block deployment jika gagal evaluasi

Hasil: Masalah customer turun 90% setelah otomatis evaluasi.

Content Generation Pipeline

Tim marketing validasi konten AI untuk konsistensi brand:

  • Evaluasi LLM untuk tone/style
  • Threshold latency untuk speed
  • Monitoring biaya
  • Model comparison untuk value terbaik

Hasil: Brand voice konsisten, biaya API turun 40%.

Aplikasi Kesehatan

Startup healthtech pastikan compliance:

  • Red team scan untuk HIPAA
  • Assertion custom cek akurasi medis
  • Semua evaluasi lokal (privasi)
  • Audit trail untuk regulasi

Hasil: Lolos audit SOC 2 dengan bukti promptfoo.

Kesimpulan

Promptfoo membawa pengujian sistematis ke aplikasi LLM. Tidak lagi manual, rawan error, atau regression tidak terdeteksi—semua otomatis dan measurable.

Hal penting:

  • Install dengan npm install -g promptfoo, mulai dengan promptfoo init
  • Gunakan assertion untuk validasi output lebih dari sekadar string match
  • Jalankan red team scan untuk deteksi security issue
  • Integrasi CI/CD untuk block regression
  • Bandingkan model secara objektif
  • Provider & assertion custom untuk use case spesifik

Masa depan AI development adalah data-driven. Dengan promptfoo, Anda punya alat untuk build, test, dan secure aplikasi LLM pada skala produksi.

Jika Anda juga mengelola API, gunakan Apidog bersama promptfoo. Apidog meng-handle desain, pengujian, dan dokumentasi API; promptfoo fokus evaluasi LLM. Kombinasi keduanya mencakup seluruh stack testing aplikasi modern.

FAQ

Untuk apa promptfoo digunakan?

Promptfoo untuk uji dan evaluasi aplikasi LLM: menjalankan tes otomatis, membandingkan output antar model, serta melakukan penilaian red team untuk deteksi celah keamanan.

Apakah promptfoo gratis?

Ya, promptfoo open-source (MIT). Gratis untuk personal dan komersial. Fitur cloud & enterprise support mungkin berbayar.

Bagaimana cara install promptfoo?

npm install -g promptfoo
Enter fullscreen mode Exit fullscreen mode

atau

npx promptfoo@latest
Enter fullscreen mode Exit fullscreen mode

macOS: brew install promptfoo, Python: pip install promptfoo.

Model apa saja yang didukung promptfoo?

90+ provider LLM: OpenAI (GPT-4, GPT-4o, o1), Anthropic (Claude 3.5/4/4.5), Google (Gemini), Microsoft (Azure OpenAI), Amazon Bedrock, Ollama (model lokal), dsb.

Bagaimana menjalankan red team scan?

promptfoo redteam init
promptfoo redteam run
promptfoo redteam report
Enter fullscreen mode Exit fullscreen mode

Bisa pakai promptfoo di CI/CD?

Bisa. Install promptfoo di pipeline CI, jalankan promptfoo eval dengan config Anda. Set threshold untuk block PR jika pass rate kurang.

Apakah promptfoo kirim data saya ke server eksternal?

Tidak. Promptfoo default 100% lokal. Prompt/data testing tidak keluar mesin Anda kecuali Anda aktifkan fitur cloud.

Bagaimana cara membandingkan model dengan promptfoo?

List beberapa provider di config, jalankan promptfoo eval. Bandingkan di web UI (promptfoo view)—lihat pass/fail, cost, latency per model.

Top comments (0)