DEV Community

Cover image for Kiểm Tra Ứng Dụng LLM: Hướng Dẫn Toàn Diện về Promptfoo (2026)
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Kiểm Tra Ứng Dụng LLM: Hướng Dẫn Toàn Diện về Promptfoo (2026)

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
Enter fullscreen mode Exit fullscreen mode

Dùng thử Apidog ngay hôm nay

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.

hình ảnh

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:

  1. 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
  2. Thiếu bao phủ – Dễ bỏ sót trường hợp biên, input đối địch
  3. 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
Enter fullscreen mode Exit fullscreen mode

Đặ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
Enter fullscreen mode Exit fullscreen mode

Tạo Đánh giá Đầu tiên

Khởi tạo dự án mẫu:

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

Lệnh này tạo file promptfooconfig.yaml với prompt mẫu, provider, test case.

Chạy đánh giá:

promptfoo eval
Enter fullscreen mode Exit fullscreen mode

Xem kết quả giao diện web:

promptfoo view
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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.

hình ảnh

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
Enter fullscreen mode Exit fullscreen mode

Xem báo cáo:

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

redteam run gồm:

  1. Sinh động các đầu dò tấn công
  2. Đá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ỏ)
Enter fullscreen mode Exit fullscreen mode

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 }}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Google 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
            }
        }
Enter fullscreen mode Exit fullscreen mode

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

Đăng ký provider custom trong config:

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

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>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 }}
Enter fullscreen mode Exit fullscreen mode

Cổng chất lượng

Đặt ngưỡng pass/fail trong config:

commandLineOptions:
  threshold: 0.8  # Yêu cầu pass 80%
Enter fullscreen mode Exit fullscreen mode

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') }}
Enter fullscreen mode Exit fullscreen mode

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

  1. Chạy trong container/VM quyền tối thiểu
  2. Dùng API key riêng biệt, quyền thấp
  3. Không để secret trong prompt/config
  4. Hạn chế truy cập mạng bên thứ ba
  5. Không expose web server nội bộ

Hiệu suất: Tối ưu hóa đánh giá

Mẹo tối ưu

  1. Dùng cache – tăng tốc các lần chạy lặp lại
  2. Điều chỉnh đồng thời--max-concurrency cân bằng tốc độ & giới hạn rate
  3. Lọc test--filter chỉ chạy case cần trong dev
  4. Lấy mẫu--repeat chạ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'
  };
}
Enter fullscreen mode Exit fullscreen mode

Dùng trong config:

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

Máy chủ MCP

Promptfoo có server MCP để tích hợp với trợ lý AI (Claude Code, ...):

promptfoo mcp
Enter fullscreen mode Exit fullscreen mode

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ới promptfoo 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)