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
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.
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:
- Tidak ada deteksi regresi—update model bisa rusak tanpa disadari.
- Cakupan tidak lengkap—manual testing kerap melewatkan edge case dan input berbahaya.
- 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
Set API key Anda sebagai environment variable:
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
Buat Evaluasi Pertama
Inisialisasi contoh project:
promptfoo init --example getting-started
cd getting-started
Akan dibuat file promptfooconfig.yaml berisi contoh prompt, provider, dan test case.
Jalankan evaluasi:
promptfoo eval
Lihat hasil di UI web:
promptfoo view
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
- 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
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"
LLM penilai membaca output dan menilai berdasar rubric Anda.
2. Red Teaming & Pengujian Security
Promptfoo punya modul red team untuk scan keamanan otomatis.
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
Scan keamanan:
promptfoo redteam run
Lihat report:
promptfoo redteam report [directory]
redteam run akan:
- Generate attack probe sesuai aplikasi Anda.
- 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)
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 }}
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
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 |
| 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
}
}
Contoh JavaScript:
// customProvider.js
export default class CustomProvider {
async callApi(prompt) {
return {
output: await myApi.generate(prompt),
tokenUsage: { total: 50, prompt: 20, completion: 30 }
};
}
}
Registrasi di config:
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
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>
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
Contoh Evaluasi Custom
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
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 }}
Quality Gate
Set threshold di config:
commandLineOptions:
threshold: 0.8 # Wajib pass rate 80%
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') }}
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:
- Jalankan di container/VM dengan privilege minimal.
- Pakai API key khusus dengan minim privilege.
- Jangan masukkan secrets di prompt/config.
- Batasi network untuk kode pihak ketiga.
- Jangan expose web server ke publik.
Optimasi Kinerja Evaluasi
Tips Optimasi
- Gunakan cache—default sudah aktif.
-
Atur concurrency—pakai
--max-concurrencyagar tidak kena rate limit. -
Filter test—pakai
--filtersaat develop. - 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'
};
}
Pakai di config:
assert:
- type: file://assertions/customCheck.js
Model Context Protocol (MCP) Server
Promptfoo include server MCP untuk integrasi dengan AI assistant (Claude Code, dsb):
promptfoo mcp
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 denganpromptfoo 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
atau
npx promptfoo@latest
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
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)