TL;DR
Promptfoo là một framework mã nguồn mở giúp đánh giá và kiểm thử an ninh (red-teaming) cho ứng dụng LLM, hỗ trợ hơn 90 nhà cung cấp mô hình, tích hợp hơn 67 plugin tấn công bảo mật và chạy hoàn toàn cục bộ để bảo vệ quyền riêng tư. Đã có 1,6 triệu lượt tải npm, đang được dùng sản xuất tại các công ty lớn. Bắt đầu với:
npm install -g promptfoo
promptfoo init --example getting-started
Giới thiệu
Bạn đã đầu tư nhiều tuần xây dựng chatbot AI hỗ trợ khách hàng. Trong giai đoạn dev, mọi thứ hoàn hảo. Nhưng khi triển khai, người dùng bắt đầu khai thác, khiến chatbot rò rỉ dữ liệu nhạy cảm, vượt qua các biện pháp an toàn hoặc trả về phản hồi không nhất quán.
Kịch bản này xảy ra thường xuyên. Đa phần các nhóm kiểm thử LLM bằng cảm tính và thủ công, để rồi khi sản xuất mới phát hiện lỗ hổng, chất lượng kém. Chi phí vá lỗi hậu triển khai cao gấp nhiều lần so với phát hiện sớm.
Promptfoo giúp bạn kiểm thử tự động, có hệ thống cho ứng dụng LLM: đánh giá prompt trên nhiều mô hình, kiểm thử an ninh (red-team), phát hiện hồi quy trước khi lên production.
Bài viết này tóm tắt cách triển khai promptfoo dựa trên bản 0.121.2, kiểm thử các tính năng cốt lõi, hướng dẫn thực tế cách thiết lập đánh giá, quét bảo mật, tích hợp CI/CD và tránh lỗi thường gặp. Sau khi đọc, bạn có thể tự động kiểm thử ứng dụng LLM của mình một cách tự tin.
💡 Nếu bạn kiểm thử API hoặc xác thực hành vi API song song với kiểm thử LLM, Apidog cung cấp nền tảng thống nhất cho thiết kế, kiểm thử và tài liệu API. Có thể dùng promptfoo cho LLM và Apidog cho lớp API.
Promptfoo là gì và tại sao bạn cần nó
Promptfoo là CLI và thư viện Node.js để đánh giá, kiểm thử an ninh (red-teaming) cho các ứng dụng LLM – một framework kiểm thử dành riêng cho AI.
Kiểm thử truyền thống thất bại với LLM vì đầu ra không xác định. Promptfoo khắc phục bằng cách:
- Khẳng định ngữ nghĩa: kiểm tra ý nghĩa, không phải khớp chuỗi
- Đánh giá do LLM chấm điểm: một mô hình chấm điểm đầu ra của mô hình khác
- So sánh đa mô hình: kiểm thử cùng một prompt trên nhiều mô hình (GPT-4, Claude, ...)
- Plugin bảo mật: tự động dò lỗ hổng
Tất cả chạy cục bộ trên máy bạn, ưu tiên quyền riêng tư, thích hợp kiểm thử dữ liệu nhạy cảm.
Vấn đề Promptfoo giải quyết
Kiểm thử LLM thủ công có 3 nhược điểm lớn:
- Không phát hiện hồi quy – Không biết update mới có phá vỡ chức năng cũ không
- Thiếu bao phủ – Dễ bỏ sót trường hợp biên, input đối địch
- Không có số liệu – Không đo lường tiến bộ, không so sánh khách quan
Promptfoo thay bằng đánh giá tự động mỗi lần thay đổi. Định nghĩa test case một lần, chạy trên mọi mô hình. Kết quả gồm tỷ lệ pass/fail, so sánh chi phí, độ trễ.
Ai sử dụng Promptfoo
Đã đạt 1.6 triệu lượt tải npm, phục vụ >10 triệu người dùng cuối. Các ứng dụng điển hình:
- Chatbot CSKH cần phản hồi chuẩn xác, nhất quán
- Pipeline tạo nội dung phải giữ giọng thương hiệu
- Ứng dụng y tế/fintech yêu cầu tuân thủ nghiêm ngặt
- Hệ thống nhạy cảm về bảo mật, chống rò rỉ dữ liệu và đầu vào độc hại
Promptfoo đã gia nhập OpenAI tháng 3/2026, vẫn mã nguồn mở, MIT license.
Bắt đầu: Cài đặt và Chạy Đánh giá Đầu tiên
Bạn có thể cài promptfoo toàn hệ thống hoặc chạy tức thì bằng npx.
Cài đặt
# Cài đặt toàn cục (khuyên dùng)
npm install -g promptfoo
# Hoặc chạy nhanh không cần cài đặt
npx promptfoo@latest
# macOS: Homebrew
brew install promptfoo
# Python: pip
pip install promptfoo
Đặt khóa API làm biến môi trường:
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
Tạo Đánh giá Đầu tiên
Khởi tạo dự án mẫu:
promptfoo init --example getting-started
cd getting-started
Lệnh này tạo file promptfooconfig.yaml với prompt mẫu, provider, test case.
Chạy đánh giá:
promptfoo eval
Xem kết quả giao diện web:
promptfoo view
Giao diện tại localhost:3000, hiển thị so sánh song song đầu ra các mô hình, trạng thái pass/fail cho mỗi khẳng định.
Hiểu file cấu hình
File promptfooconfig.yaml định nghĩa suite đánh giá:
description: "My First Eval Suite"
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/text prompt để kiểm thử
- providers: Các mô hình để đánh giá (>90 nhà cung cấp)
- tests: Test case với biến và khẳng định
Có thể mở rộng lên hàng trăm test case, lưu dưới version control, chạy CI mỗi pull request.
Tính năng cốt lõi của Promptfoo
1. Đánh giá Tự động
Bạn định nghĩa test case với kết quả mong đợi, promptfoo tự động chạy trên mô hình đã chọn.
Các loại Khẳng định
Có hơn 30 khẳng định tích hợp:
| Khẳng định | Mục đích |
|---|---|
contains |
Đầu ra chứa chuỗi con |
equals |
So khớp tuyệt đối |
regex |
Khớp mẫu regex |
json-schema |
Kiểm tra cấu trúc JSON |
javascript |
Hàm JS tùy chỉnh trả về pass/fail |
python |
Hàm Python tùy chỉnh |
llm-rubric |
Dùng LLM để chấm điểm |
similar |
Điểm tương đồng ngữ nghĩa |
latency |
Thời gian phản hồi |
cost |
Chi phí dưới ngưỡng |
Ví dụ nhiều khẳng định:
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
Kiểm thử này yêu cầu trả lời có Paris, dưới 100 ký tự, phản hồi <2s, chi phí <0.001 USD.
Đánh giá do LLM chấm điểm
Khẳng định llm-rubric dùng LLM thứ hai để chấm điểm đầu ra – phù hợp các tiêu chí chủ quan:
assert:
- type: llm-rubric
value: "Response should be helpful, harmless, and honest"
Bạn có thể chọn mô hình chấm điểm giá rẻ để tiết kiệm.
2. Kiểm thử an ninh (Red Teaming)
Promptfoo tích hợp kiểm thử bảo mật mạnh mẽ qua mô-đun red team: tự động sinh đầu vào đối địch dò lỗ hổng.
Các vector tấn công hỗ trợ
Hệ thống red team có hơn 67 plugin theo danh mục:
| Danh mục | Nội dung kiểm thử |
|---|---|
| Prompt Injection | Injection trực tiếp, gián tiếp, theo ngữ cảnh |
| Jailbreaks | DAN, chuyển persona, vượt vai trò |
| Data Exfiltration | SSRF, trích xuất prompt, rò rỉ dữ liệu |
| Harmful Content | Ngôn từ độc hại, hoạt động nguy hiểm, tự hại |
| Compliance | Rò rỉ PII, vi phạm HIPAA, dữ liệu tài chính |
| Audio/Visual | Tấn công qua âm thanh/hình ảnh |
Chạy quét Red Team
Khởi tạo và chạy quét:
promptfoo redteam init
promptfoo redteam run
Xem báo cáo:
promptfoo redteam report [directory]
redteam run gồm:
- Sinh động các đầu dò tấn công
- Đánh giá chống lại mục tiêu, chấm điểm lỗ hổng
Kết quả: xếp loại nghiêm trọng, các case khai thác được, khuyến nghị khắc phục.
Ví dụ output:
Tóm tắt lỗ hổng:
- Nghiêm trọng: 2 (rò rỉ PII, trích xuất prompt)
- Cao: 5 (jailbreaks, injection)
- Trung bình: 12 (thiên vị, không nhất quán)
- Thấp: 23 (vi phạm nhỏ)
Khắc phục lỗ nghiêm trọng trước khi deploy, chạy lại để xác nhận fix.
3. Quét mã cho Pull Request
Tích hợp GitHub Actions quét PR tìm vấn đề bảo mật LLM:
# .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 }}
Phát hiện:
- Hardcode API keys
- Prompt không an toàn
- Thiếu xác thực đầu vào
- Vector prompt injection tiềm năng
4. So sánh mô hình
So sánh đầu ra nhiều mô hình để chọn mô hình tối ưu cho use case của bạn.
# Đánh giá nhiều provider
promptfoo eval
# Xem giao diện web
promptfoo view
Giao diện hiển thị:
- Tỷ lệ pass/fail của từng mô hình
- Chi phí/1000 request
- Độ trễ trung bình
- So sánh output định tính
Phân tích dữ liệu giúp tránh thiên vị mô hình quen thuộc, có thể phát hiện mô hình giá rẻ lại tốt hơn trong use case cụ thể.
Các nhà cung cấp được hỗ trợ: Hơn 90 LLM tích hợp
Promptfoo hỗ trợ >90 nhà cung cấp LLM: kiểm thử 1 prompt trên OpenAI, Anthropic, Google, Amazon, mô hình cục bộ... mà không đổi code.
Nhà cung cấp lớn
| Nhà cung cấp | Mô hình |
|---|---|
| OpenAI | GPT-4, GPT-4o, GPT-4o-mini, o1, o3 |
| Anthropic | Claude 3.5/3.7/4.5/4.6, Thinking |
| Gemini 1.5/2.0, Vertex AI | |
| Microsoft | Azure OpenAI, Phi |
| Amazon | Bedrock (Claude, Llama, Titan) |
| Meta | Llama 3, 3.1, 3.2 (qua nhiều provider) |
| Ollama | LLM cục bộ (Llama, Mistral, Phi) |
Nhà cung cấp tùy chỉnh
Viết provider custom bằng Python/JS nếu chưa hỗ trợ sẵn.
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
}
}
JavaScript:
// customProvider.js
export default class CustomProvider {
async callApi(prompt) {
return {
output: await myApi.generate(prompt),
tokenUsage: { total: 50, prompt: 20, completion: 30 }
};
}
}
Đăng ký provider custom trong config:
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
CLI: Các lệnh thiết yếu
CLI promptfoo hỗ trợ đầy đủ workflow cho dev.
Lệnh cốt lõi
# Chạy đánh giá
promptfoo eval -c promptfooconfig.yaml
# Mở giao diện web
promptfoo view
# Chia sẻ kết quả
promptfoo share
# Red team
promptfoo redteam init
promptfoo redteam run
# Cấu hình
promptfoo init
promptfoo validate [config]
# Quản lý kết quả
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>
# Tiện ích
promptfoo cache clear
promptfoo retry <id>
Các cờ hữu ích
--no-cache # Không dùng cache, luôn lấy kết quả mới
--max-concurrency <n> # Giới hạn số request song song
--output <file> # Ghi ra file JSON
--verbose # Bật debug log
--env-file <path> # Load biến môi trường từ file
--filter <pattern> # Chạy test case chỉ định
Ví dụ: Chạy đánh giá với tuỳ chỉnh
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
Chạy test mới hoàn toàn (không cache), giới hạn 3 request song song, lưu kết quả ra JSON, load API key từ .env.
Tích hợp CI/CD – Tự động hóa kiểm thử LLM
Tích hợp promptfoo vào CI/CD pipeline để phát hiện hồi quy trước khi sản xuất.
Ví dụ GitHub Actions
name: LLM Tests
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 }}
Cổng chất lượng
Đặt ngưỡng pass/fail trong config:
commandLineOptions:
threshold: 0.8 # Yêu cầu pass 80%
CI sẽ fail nếu tỷ lệ pass không đạt ngưỡng.
Bộ nhớ đệm trong CI
Tăng tốc CI bằng cache:
- uses: actions/cache@v4
with:
path: ~/.cache/promptfoo
key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
Kết quả cache giúp bỏ qua API call với test case không đổi, tiết kiệm thời gian và chi phí.
Giao diện web: Trực quan hóa & Chia sẻ kết quả
UI promptfoo (promptfoo view) cung cấp giao diện tương tác để review kết quả.
Tính năng
- Ma trận đánh giá: So sánh output từng mô hình cạnh nhau
- Lọc: Tìm test case theo trạng thái/provider
- Diff: Xem sự thay đổi giữa các lần chạy
- Chia sẻ: Tạo link review nhóm
- Realtime: Theo dõi test chạy trực tiếp
Truy cập & bảo mật
Chạy tại localhost:3000, bảo vệ CSRF bằng header Sec-Fetch-Site, Origin. Không expose web server ra mạng công cộng. Muốn chia sẻ, dùng promptfoo share hoặc tự host với xác thực.
Cơ sở dữ liệu & bộ nhớ đệm
Vị trí bộ nhớ đệm
-
macOS/Linux:
~/.cache/promptfoo -
Windows:
%LOCALAPPDATA%\promptfoo
Cache lưu kết quả đánh giá, tăng tốc lần chạy lặp lại. Dùng --no-cache để luôn lấy kết quả mới.
Vị trí CSDL
-
Tất cả nền tảng:
~/.promptfoo/promptfoo.db(SQLite)
CSDL lưu lịch sử các lần đánh giá để so sánh, phân tích trend. Không xóa file này nếu cần giữ lịch sử.
Mô hình bảo mật: Bạn có thể tin cậy gì?
Promptfoo vận hành theo mô hình tin cậy có cấu hình. Hiểu rõ giúp bảo mật tốt hơn.
Đầu vào đáng tin cậy (chạy như code)
- File cấu hình (
promptfooconfig.yaml) - Khẳng định JS/Python/Ruby tùy chỉnh
- Config nhà cung cấp
- Hàm biến đổi
Chỉ nên đến từ nguồn tin cậy.
Đầu vào không đáng tin cậy (chỉ là data)
- Prompt text
- Biến test case
- Output mô hình
- Nội dung remote fetch
Không bao giờ thực thi code từ các đầu vào này.
Khuyến nghị bảo mật
- Chạy trong container/VM quyền tối thiểu
- Dùng API key riêng biệt, quyền thấp
- Không để secret trong prompt/config
- Hạn chế truy cập mạng bên thứ ba
- Không expose web server nội bộ
Hiệu suất: Tối ưu hóa đánh giá
Mẹo tối ưu
- Dùng cache – tăng tốc các lần chạy lặp lại
-
Điều chỉnh đồng thời –
--max-concurrencycân bằng tốc độ & giới hạn rate -
Lọc test –
--filterchỉ chạy case cần trong dev -
Lấy mẫu –
--repeatchạy subset trước khi full test
Mở rộng cho đánh giá lớn
Với hàng nghìn test case:
- Dùng scheduler (
src/scheduler/) cho phân tán - Sử dụng remote generation giảm tải máy cục bộ
- Export kết quả ra Google Sheets để review nhóm
Khả năng mở rộng: Xây dựng tính năng tùy chỉnh
Khẳng định tùy chỉnh
Viết khẳng định đặc thù lĩnh vực:
// 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'
};
}
Dùng trong config:
assert:
- type: file://assertions/customCheck.js
Máy chủ MCP
Promptfoo có server MCP để tích hợp với trợ lý AI (Claude Code, ...):
promptfoo mcp
Cho phép tác nhân AI:
- Chạy đánh giá trực tiếp từ chat
- Sử dụng red team
- Truy vấn kết quả lưu trữ
- Sinh test case mới
Use case thực tế
Chatbot hỗ trợ khách hàng
Công ty SaaS dùng promptfoo kiểm thử chatbot trước mỗi deploy:
- 500 test case bao trùm câu hỏi phổ biến
- So sánh GPT-4 và Claude
- Quét red team tìm rò rỉ PII, jailbreak
- CI chặn deploy nếu test fail
Kết quả: Giảm 90% issue khách báo sau khi tự động hóa kiểm thử.
Pipeline tạo nội dung
Nhóm marketing xác thực nội dung AI:
- LLM chấm điểm kiểm tra giọng điệu
- Ngưỡng latency đảm bảo tốc độ tạo content
- Theo dõi chi phí API
- So sánh mô hình để tối ưu chi phí
Kết quả: Giữ chất lượng thương hiệu, giảm 40% chi phí API.
Ứng dụng y tế
Startup medtech đảm bảo tuân thủ nghiêm ngặt:
- Quét red team phát hiện vi phạm HIPAA
- Khẳng định tùy chỉnh xác thực độ chính xác y tế
- Đánh giá 100% cục bộ bảo vệ dữ liệu
- Audit log đáp ứng yêu cầu quy định
Kết quả: Đạt kiểm toán SOC 2 nhờ đánh giá promptfoo.
Kết luận
Promptfoo đem lại kiểm thử hệ thống cho ứng dụng LLM, thay thế quy trình thủ công dễ sai sót bằng test tự động phát hiện hồi quy, bảo mật, chất lượng trước khi deploy.
Tóm tắt hành động:
- Cài đặt bằng
npm install -g promptfoo, khởi tạo vớipromptfoo init - Sử dụng khẳng định linh hoạt ngoài so khớp chuỗi
- Chạy quét red team kiểm tra bảo mật
- Tích hợp CI/CD để ngăn lỗi hồi quy
- So sánh mô hình khách quan
- Tùy biến nhà cung cấp và khẳng định mở rộng chức năng
Phát triển AI hiện đại phải dựa trên dữ liệu và kiểm thử có hệ thống. Promptfoo cung cấp các công cụ để xây dựng, kiểm thử, bảo vệ ứng dụng LLM ở quy mô lớn.
Nếu bạn cần kiểm thử cả API, hãy cân nhắc kết hợp Apidog với promptfoo. Apidog xử lý thiết kế, kiểm thử, tài liệu API; promptfoo tập trung vào đánh giá LLM. Kết hợp hai công cụ sẽ bao phủ toàn bộ stack kiểm thử hiện đại.
Câu hỏi thường gặp
Promptfoo được dùng để làm gì?
Promptfoo kiểm thử, đánh giá ứng dụng LLM: tự động chạy test với prompt, so sánh output giữa mô hình, kiểm thử an ninh (red-team) phát hiện lỗ hổng.
Promptfoo có miễn phí không?
Có, mã nguồn mở, MIT license. Miễn phí cả cá nhân & thương mại. Một số tính năng cloud/enterprise sẽ trả phí.
Cài đặt promptfoo như thế nào?
Chạy npm install -g promptfoo để cài toàn cục, hoặc npx promptfoo@latest, hoặc qua brew install promptfoo (macOS), pip install promptfoo (Python).
Promptfoo hỗ trợ những mô hình nào?
Hơn 90 nhà cung cấp: OpenAI (GPT-4, GPT-4o, o1), Anthropic (Claude 3.5/4/4.5), Google (Gemini), Microsoft (Azure OpenAI), Amazon Bedrock, mô hình cục bộ qua Ollama.
Làm thế nào để chạy quét red team?
Chạy promptfoo redteam init tạo cấu hình, sau đó promptfoo redteam run để quét bảo mật. Xem kết quả bằng promptfoo redteam report.
Có thể dùng promptfoo trong CI/CD không?
Có. Cài promptfoo trong pipeline CI, chạy promptfoo eval với file cấu hình. Đặt threshold để CI fail nếu tỷ lệ pass không đạt.
Promptfoo có gửi dữ liệu của tôi ra ngoài không?
Không. Promptfoo mặc định chạy cục bộ 100%. Prompt, test data không rời khỏi máy trừ khi bạn chủ động dùng tính năng cloud. Cache/database đều lưu local.
Làm thế nào để so sánh các mô hình với promptfoo?
Điền nhiều provider vào file cấu hình, chạy promptfoo eval. Xem giao diện web với promptfoo view để so sánh tỷ lệ pass/fail, chi phí, độ trễ từng mô hình.


Top comments (0)