สรุปย่อ
Promptfoo เป็นเฟรมเวิร์กโอเพนซอร์สสำหรับการประเมินและ Red-teaming LLM (Large Language Model) ที่ช่วยให้นักพัฒนาสามารถทดสอบแอปพลิเคชัน AI ได้อย่างเป็นระบบ รองรับผู้ให้บริการโมเดลกว่า 90 ราย มีปลั๊กอินโจมตีด้านความปลอดภัยกว่า 67 รายการ และทำงานแบบ 100% บนเครื่องเพื่อความเป็นส่วนตัว ด้วยยอดดาวน์โหลด npm 1.6 ล้านครั้ง และการใช้งานจริงในบริษัทที่ให้บริการผู้ใช้กว่า 10 ล้านคน ทำให้ Promptfoo กลายเป็นมาตรฐานสำหรับการทดสอบ LLM เริ่มต้นใช้งานได้ด้วย npm install -g promptfoo และ promptfoo init --example getting-started
บทนำ
คุณใช้เวลาหลายสัปดาห์ในการสร้างแชทบอทสนับสนุนลูกค้าที่ขับเคลื่อนด้วย AI ของคุณ มันตอบคำถามได้อย่างสมบูรณ์แบบในระหว่างการพัฒนา จากนั้นผู้ใช้ก็เริ่มหาวิธีที่จะทำให้มันรั่วไหลข้อมูลที่ละเอียดอ่อน หลีกเลี่ยงข้อจำกัดด้านความปลอดภัย และให้คำตอบที่ไม่สอดคล้องกัน
สถานการณ์นี้เกิดขึ้นทุกวัน ทีมงานส่งมอบแอปพลิเคชัน LLM โดยอาศัยความรู้สึกและการทดสอบด้วยตนเอง เพียงเพื่อจะค้นพบช่องโหว่และปัญหาด้านคุณภาพในการผลิต ต้นทุนในการแก้ไขปัญหาเหล่านี้หลังจากการเปิดตัวนั้นสูงกว่าการค้นพบในระหว่างการพัฒนาถึง 100 เท่า
Promptfoo แก้ปัญหานี้ด้วยการนำการทดสอบแบบอัตโนมัติและเป็นระบบมาใช้กับแอปพลิเคชัน LLM ช่วยให้คุณสามารถประเมินพรอมต์ในหลายโมเดล เรียกใช้การประเมิน Red-team ด้านความปลอดภัย และตรวจจับข้อผิดพลาดก่อนที่จะไปถึงผู้ใช้
ฉันได้วิเคราะห์โค้ดเบสของ promptfoo (เวอร์ชัน 0.121.2) และทดสอบคุณสมบัติหลักเพื่อนำเสนอคู่มือฉบับสมบูรณ์นี้ให้คุณ คุณจะได้เรียนรู้วิธีตั้งค่าการประเมิน เรียกใช้การสแกนความปลอดภัย ผสานรวมกับ CI/CD และหลีกเลี่ยงข้อผิดพลาดทั่วไป
ในตอนท้าย คุณจะมีชุดการทดสอบที่ใช้งานได้สำหรับแอปพลิเคชัน LLM ของคุณ และรู้วิธีที่จะส่งมอบผลิตภัณฑ์ด้วยความมั่นใจ
Promptfoo คืออะไร และทำไมคุณถึงต้องการมัน
Promptfoo เป็นเครื่องมือบรรทัดคำสั่ง (command-line tool) และไลบรารี Node.js สำหรับการประเมินและ red-teaming แอปพลิเคชัน LLM ลองนึกภาพว่าเป็นเฟรมเวิร์กการทดสอบที่สร้างขึ้นโดยเฉพาะสำหรับลักษณะเฉพาะของการพัฒนา AI

เครื่องมือทดสอบแบบดั้งเดิมล้มเหลวเมื่อใช้กับ LLM เนื่องจากผลลัพธ์ไม่เป็นแบบกำหนด (non-deterministic) คุณไม่สามารถยืนยันการจับคู่สตริงที่แน่นอนได้เมื่อพรอมต์เดียวกันสร้างการตอบสนองที่แตกต่างกันในแต่ละครั้ง Promptfoo แก้ปัญหานี้ด้วย:
- การยืนยันเชิงความหมาย (Semantic assertions) ที่ตรวจสอบความหมายแทนข้อความที่แน่นอน
- การประเมินโดย LLM (LLM-graded evals) ที่โมเดลหนึ่งประเมินผลลัพธ์ของอีกโมเดลหนึ่ง
- การเปรียบเทียบหลายโมเดล (Multi-model comparison) เพื่อทดสอบพรอมต์เดียวกันใน GPT-4, Claude และอื่น ๆ
- ปลั๊กอินความปลอดภัย (Security plugins) ที่ตรวจสอบช่องโหว่โดยอัตโนมัติ
เครื่องมือนี้ทำงานบนเครื่องของคุณ ข้อมูลพรอมต์และข้อมูลการทดสอบของคุณจะไม่ออกจากสภาพแวดล้อมของคุณเว้นแต่คุณจะเลือกใช้คุณสมบัติคลาวด์ การออกแบบที่เน้นความเป็นส่วนตัวนี้ทำให้เหมาะสำหรับการทดสอบข้อมูลที่ละเอียดอ่อน
ปัญหาที่ Promptfoo แก้ไข
ทีมส่วนใหญ่ทดสอบแอปพลิเคชัน LLM ด้วยตนเอง พวกเขาส่งพรอมต์ไม่กี่ชุด อ่านผลลัพธ์ และตัดสินใจว่าทุกอย่างดูดีหรือไม่ วิธีการนี้มีข้อบกพร่องร้ายแรงสามประการ:
- ไม่มีการตรวจจับข้อผิดพลาด (No regression detection) - คุณไม่สามารถบอกได้ว่าการอัปเดตโมเดลทำให้ฟังก์ชันการทำงานที่มีอยู่เสียหายหรือไม่
- ช่องว่างในการครอบคลุม (Coverage gaps) - การทดสอบด้วยตนเองพลาดกรณีขอบ (edge cases) และอินพุตที่เป็นอันตราย (adversarial inputs)
- ไม่มีตัวชี้วัด (No metrics) - คุณไม่สามารถติดตามการปรับปรุงหรือเปรียบเทียบโมเดลได้อย่างเป็นกลาง
Promptfoo แทนที่สิ่งนี้ด้วยการประเมินอัตโนมัติที่ทำงานกับการเปลี่ยนแปลงทุกครั้ง คุณกำหนดกรณีทดสอบเพียงครั้งเดียวและดำเนินการกับโมเดลใดก็ได้ ผลลัพธ์รวมถึงอัตราการผ่าน/ไม่ผ่าน การเปรียบเทียบต้นทุน และตัวชี้วัดเวลาแฝง
ใครใช้ Promptfoo
โครงการนี้มียอดดาวน์โหลด npm 1.6 ล้านครั้ง และขับเคลื่อนแอปพลิเคชัน LLM ที่ให้บริการผู้ใช้ปลายทางกว่า 10 ล้านคน บริษัทต่างๆ ใช้มันสำหรับ:
- แชทบอทสนับสนุนลูกค้าที่ต้องการการตอบสนองที่สอดคล้องกันและแม่นยำ
- ไปป์ไลน์การสร้างเนื้อหาที่ต้องรักษาโทนเสียงของแบรนด์
- แอปพลิเคชันด้านการดูแลสุขภาพและการเงินที่มีข้อกำหนดการปฏิบัติตามกฎระเบียบที่เข้มงวด
- ระบบที่คำนึงถึงความปลอดภัยซึ่งไม่สามารถรั่วไหลข้อมูลหรือยอมรับอินพุตที่เป็นอันตรายได้
ในเดือนมีนาคม 2026 Promptfoo ได้เข้าร่วม OpenAI โครงการยังคงเป็นโอเพนซอร์สและได้รับอนุญาตภายใต้ MIT License พร้อมกับการพัฒนาต่อเนื่องภายใต้การเป็นเจ้าของใหม่
เริ่มต้นใช้งาน: ติดตั้งและรันการประเมินครั้งแรกของคุณ
คุณสามารถติดตั้ง promptfoo ทั่วโลก (globally) หรือรันโดยไม่ต้องติดตั้งโดยใช้ npx
การติดตั้ง
# การติดตั้งแบบทั่วโลก (แนะนำ)
npm install -g promptfoo
# หรือรันโดยไม่ต้องติดตั้ง
npx promptfoo@latest
# ผู้ใช้ macOS สามารถใช้ Homebrew ได้ด้วย
brew install promptfoo
# ผู้ใช้ Python สามารถใช้ pip ได้ด้วย
pip install promptfoo
ตั้งค่าคีย์ API ของคุณเป็นตัวแปรสภาพแวดล้อม:
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
สร้างการประเมินครั้งแรกของคุณ
เริ่มต้นโปรเจกต์ตัวอย่าง:
promptfoo init --example getting-started
cd getting-started
สิ่งนี้จะสร้างไฟล์ promptfooconfig.yaml พร้อมตัวอย่างพรอมต์ ผู้ให้บริการ และกรณีทดสอบ
รันการประเมิน:
promptfoo eval
ดูผลลัพธ์ใน UI บนเว็บ:
promptfoo view
UI จะเปิดขึ้นที่ localhost:3000 และแสดงการเปรียบเทียบแบบเคียงข้างกันของผลลัพธ์จากแต่ละโมเดล พร้อมสถานะผ่าน/ไม่ผ่านสำหรับการยืนยันแต่ละรายการ
ทำความเข้าใจไฟล์การกำหนดค่า
ไฟล์ promptfooconfig.yaml กำหนดชุดการประเมินของคุณ:
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: ไฟล์หรือข้อความแบบอินไลน์ที่จะทดสอบ
- providers: โมเดลที่จะประเมิน (รองรับผู้ให้บริการกว่า 90 ราย)
- tests: กรณีทดสอบพร้อมตัวแปรและการยืนยัน
คุณสามารถขยายสิ่งนี้ไปสู่กรณีทดสอบหลายร้อยรายการได้ หลายทีมเก็บการกำหนดค่าการประเมินไว้ในการควบคุมเวอร์ชันและรันใน CI สำหรับทุกคำขอพูล
คุณสมบัติหลัก: Promptfoo ทำอะไรได้บ้าง
1. การประเมินแบบอัตโนมัติ
การประเมินแบบอัตโนมัติเป็นรากฐานของ promptfoo คุณกำหนดกรณีทดสอบด้วยผลลัพธ์ที่คาดหวัง และเครื่องมือจะรันกับโมเดลที่คุณเลือก
ประเภทของการยืนยัน
Promptfoo มีประเภทการยืนยันในตัวกว่า 30+ รายการ:
| การยืนยัน | วัตถุประสงค์ |
|---|---|
contains |
ผลลัพธ์มีสตริงย่อย |
equals |
การจับคู่สตริงที่แน่นอน |
regex |
จับคู่กับรูปแบบ regex |
json-schema |
ตรวจสอบโครงสร้าง JSON |
javascript |
ฟังก์ชัน JS แบบกำหนดเองส่งคืนผ่าน/ไม่ผ่าน |
python |
ฟังก์ชัน Python แบบกำหนดเอง |
llm-rubric |
ใช้ LLM เพื่อให้คะแนนผลลัพธ์ |
similar |
คะแนนความคล้ายคลึงทางความหมาย |
latency |
เวลาตอบสนองต่ำกว่าเกณฑ์ |
cost |
ต้นทุนต่อคำขอต่ำกว่าเกณฑ์ |
ตัวอย่างที่มีการยืนยันหลายรายการ:
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
การทดสอบนี้ตรวจสอบว่าคำตอบกล่าวถึงปารีส มีความยาวไม่เกิน 100 ตัวอักษร ตอบกลับภายใน 2 วินาที และมีค่าใช้จ่ายน้อยกว่า $0.001
การประเมินโดย LLM (LLM-Graded Evals)
การยืนยัน llm-rubric ใช้ LLM หนึ่งตัวในการให้คะแนนผลลัพธ์ของอีก LLM หนึ่ง ซึ่งมีประสิทธิภาพสำหรับเกณฑ์ที่ขึ้นอยู่กับดุลยพินิจ เช่น โทนเสียงหรือความเป็นประโยชน์:
assert:
- type: llm-rubric
value: "Response should be helpful, harmless, and honest"
LLM ที่เป็นผู้ให้คะแนนจะอ่านผลลัพธ์และให้คะแนนตามเกณฑ์ของคุณ คุณสามารถใช้โมเดลที่ถูกกว่าสำหรับการให้คะแนนเพื่อลดค่าใช้จ่าย
2. Red Teaming และการทดสอบความปลอดภัย
Promptfoo มีการทดสอบความปลอดภัยที่ครอบคลุมผ่านโมดูล red team โดยจะสร้างอินพุตที่เป็นอันตรายโดยอัตโนมัติเพื่อตรวจสอบช่องโหว่

เวกเตอร์การโจมตีที่รองรับ
ระบบ red team มีปลั๊กอินกว่า 67 รายการที่จัดหมวดหมู่ไว้:
| หมวดหมู่ | สิ่งที่ทดสอบ |
|---|---|
| Prompt Injection | การโจมตีแบบ direct, indirect และ context injection |
| Jailbreaks | การโจมตีแบบ DAN, การเปลี่ยน persona, การหลีกเลี่ยง role-play |
| Data Exfiltration | SSRF, การดึงระบบพรอมต์, การรั่วไหลของพรอมต์ |
| Harmful Content | คำพูดแสดงความเกลียดชัง, กิจกรรมอันตราย, คำขอทำร้ายตนเอง |
| Compliance | การรั่วไหลของ PII, การละเมิด HIPAA, การเปิดเผยข้อมูลทางการเงิน |
| Audio/Visual | การโจมตีแบบ Audio injection และการโจมตีด้วยภาพ |
การรันการสแกน Red Team
เริ่มต้นการกำหนดค่า red team:
promptfoo redteam init
รันการสแกนความปลอดภัย:
promptfoo redteam run
ดูรายงาน:
promptfoo redteam report [directory]
คำสั่ง redteam run จะดำเนินการสองขั้นตอน:
- สร้างการทดสอบการโจมตีแบบไดนามิกที่ปรับแต่งให้เข้ากับแอปพลิเคชันของคุณ
- ประเมินการทดสอบกับเป้าหมายของคุณและให้คะแนนช่องโหว่
ผลลัพธ์รวมถึงระดับความรุนแรง (วิกฤติ, สูง, ปานกลาง, ต่ำ), กรณีทดสอบที่สามารถถูกโจมตีได้ และคำแนะนำในการแก้ไข
ตัวอย่างผลลัพธ์ Red Team
Vulnerability Summary:
- Critical: 2 (PII leakage, prompt extraction)
- High: 5 (jailbreaks, injection attacks)
- Medium: 12 (bias, inconsistent responses)
- Low: 23 (minor policy violations)
แก้ไขปัญหาสำคัญก่อนการปรับใช้งาน รันการสแกนอีกครั้งหลังจากการเปลี่ยนแปลงเพื่อตรวจสอบการแก้ไข
3. การสแกนโค้ดสำหรับ Pull Requests
Promptfoo ผสานรวมกับ GitHub Actions เพื่อสแกน pull requests สำหรับปัญหาด้านความปลอดภัยที่เกี่ยวข้องกับ 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: promptfoo/promptfoo/code-scan-action@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
สิ่งนี้ช่วยจับ:
- คีย์ API ที่ hardcoded ในไฟล์คอนฟิก
- รูปแบบพรอมต์ที่ไม่ปลอดภัย
- การตรวจสอบอินพุตที่ขาดหายไป
- เวกเตอร์การโจมตี prompt injection ที่เป็นไปได้
4. การเปรียบเทียบโมเดล
เปรียบเทียบผลลัพธ์จากหลายโมเดลแบบเคียงข้างกันเพื่อเลือกโมเดลที่ดีที่สุดสำหรับกรณีการใช้งานของคุณ
# รันการประเมินด้วยผู้ให้บริการหลายราย
promptfoo eval
# ดูการเปรียบเทียบใน UI บนเว็บ
promptfoo view
UI บนเว็บแสดง:
- อัตราการผ่าน/ไม่ผ่านต่อโมเดล
- ต้นทุนต่อ 1000 คำขอ
- เวลาแฝงเฉลี่ย
- ความแตกต่างของผลลัพธ์เชิงคุณภาพ
วิธีการที่ขับเคลื่อนด้วยข้อมูลนี้ช่วยป้องกันอคติต่อโมเดลที่คุ้นเคย คุณอาจพบว่าโมเดลที่ถูกกว่ามีประสิทธิภาพดีกว่า GPT-4 ในการประเมินเฉพาะของคุณ
ผู้ให้บริการที่รองรับ: การผสานรวม LLM กว่า 90 รายการ
Promptfoo รองรับผู้ให้บริการ LLM กว่า 90 รายการทันที คุณสามารถทดสอบพรอมต์เดียวกันใน OpenAI, Anthropic, Google, Amazon และโมเดลในเครื่องโดยไม่ต้องเปลี่ยนโค้ดของคุณ
ผู้ให้บริการหลัก
| ผู้ให้บริการ | โมเดล |
|---|---|
| OpenAI | GPT-4, GPT-4o, GPT-4o-mini, o1, o3 |
| Anthropic | Claude 3.5/3.7/4.5/4.6, Thinking models |
| Gemini 1.5/2.0, Vertex AI | |
| Microsoft | Azure OpenAI, Phi |
| Amazon | Bedrock (Claude, Llama, Titan) |
| Meta | Llama 3, 3.1, 3.2 (ผ่านผู้ให้บริการหลายราย) |
| Ollama | โมเดลในเครื่อง (Llama, Mistral, Phi) |
ผู้ให้บริการแบบกำหนดเอง
คุณสามารถเขียนผู้ให้บริการแบบกำหนดเองใน Python หรือ JavaScript ได้หากโมเดลของคุณไม่ได้รับการสนับสนุน
ตัวอย่าง 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 }
};
}
}
ลงทะเบียนผู้ให้บริการแบบกำหนดเองในการกำหนดค่าของคุณ:
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
อินเทอร์เฟซบรรทัดคำสั่ง: คำสั่งที่จำเป็น
CLI ของ Promptfoo มีฟังก์ชันทั้งหมดที่คุณต้องการสำหรับการทำงานประจำวัน
คำสั่งหลัก
# รันการประเมิน
promptfoo eval -c promptfooconfig.yaml
# เปิด UI บนเว็บ
promptfoo view
# แชร์ผลลัพธ์ออนไลน์
promptfoo share
# การทดสอบ Red team
promptfoo redteam init
promptfoo redteam run
# การกำหนดค่า
promptfoo init
promptfoo validate [config]
# การจัดการผลลัพธ์
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>
# ยูทิลิตี้
promptfoo cache clear
promptfoo retry <id>
แฟล็กที่มีประโยชน์
--no-cache # ปิดการใช้งานแคชสำหรับผลลัพธ์ใหม่
--max-concurrency <n> # จำกัดการเรียก API แบบขนาน
--output <file> # เขียนผลลัพธ์ไปยังไฟล์ JSON
--verbose # เปิดใช้งานการบันทึกการดีบัก
--env-file <path> # โหลดตัวแปรสภาพแวดล้อมจากไฟล์
--filter <pattern> # รันกรณีทดสอบเฉพาะ
ตัวอย่าง: รันการประเมินด้วยการตั้งค่าที่กำหนดเอง
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
สิ่งนี้จะรันการประเมินใหม่ (ไม่มีแคช) จำกัดการทำงานพร้อมกันไว้ที่ 3 การเรียกแบบขนาน บันทึกผลลัพธ์เป็น JSON และโหลดคีย์ API จาก .env
การผสานรวม CI/CD: ทำให้การทดสอบ LLM เป็นอัตโนมัติ
ผสานรวม promptfoo เข้ากับไปป์ไลน์ CI/CD ของคุณเพื่อตรวจจับข้อผิดพลาดก่อนการปรับใช้งาน
ตัวอย่าง 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 }}
Quality Gates
กำหนดเกณฑ์ผ่าน/ไม่ผ่านในการกำหนดค่าของคุณ:
commandLineOptions:
threshold: 0.8 # กำหนดอัตราการผ่าน 80%
สิ่งนี้จะทำให้ CI ล้มเหลวหากการประเมินไม่เป็นไปตามเกณฑ์ ป้องกันข้อผิดพลาดจากการรวมเข้าด้วยกัน
การแคชใน CI
เปิดใช้งานการแคชเพื่อเร่งความเร็วในการรัน CI:
- uses: actions/cache@v4
with:
path: ~/.cache/promptfoo
key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
ผลลัพธ์ที่แคชไว้จะข้ามการเรียก API สำหรับการทดสอบที่ไม่มีการเปลี่ยนแปลง ลดเวลาและค่าใช้จ่ายของ CI
Web UI: แสดงผลและแบ่งปันผลลัพธ์
Web UI ในตัว (promptfoo view) มีอินเทอร์เฟซแบบโต้ตอบสำหรับการตรวจสอบการประเมิน
คุณสมบัติ
- ตารางประเมิน (Eval matrix) - เปรียบเทียบผลลัพธ์แบบเคียงข้างกัน
- การกรอง (Filtering) - ค้นหากรณีทดสอบเฉพาะตามสถานะหรือผู้ให้บริการ
- มุมมองความแตกต่าง (Diff view) - ดูว่ามีการเปลี่ยนแปลงอะไรบ้างระหว่างการรัน
- การแบ่งปัน (Sharing) - สร้างลิงก์ที่สามารถแชร์ได้สำหรับการตรวจสอบของทีม
- การอัปเดตแบบเรียลไทม์ (Real-time updates) - ดูการประเมินทำงานแบบสดๆ
การเข้าถึงและความปลอดภัย
UI ทำงานบน localhost:3000 เป็นค่าเริ่มต้น รวมถึงการป้องกัน CSRF โดยใช้เฮดเดอร์ Sec-Fetch-Site และ Origin เพื่อบล็อกคำขอข้ามไซต์จากต้นทางที่ไม่น่าเชื่อถือ
อย่าเปิดเผยเว็บเซิร์ฟเวอร์ในเครื่องไปยังเครือข่ายที่ไม่น่าเชื่อถือ สำหรับการเข้าถึงของทีม ให้ใช้คำสั่ง promptfoo share เพื่ออัปโหลดผลลัพธ์ไปยังคลาวด์ หรือโฮสต์ด้วยตนเองพร้อมการรับรองความถูกต้อง
ฐานข้อมูลและการแคช
ตำแหน่งแคช
- macOS/Linux:
~/.cache/promptfoo - Windows:
%LOCALAPPDATA%\promptfoo
แคชจะจัดเก็บผลลัพธ์การประเมินเพื่อเร่งความเร็วในการรันซ้ำ ใช้ --no-cache ระหว่างการพัฒนาเพื่อให้แน่ใจว่าได้ผลลัพธ์ที่สดใหม่
ตำแหน่งฐานข้อมูล
- ทุกแพลตฟอร์ม:
~/.promptfoo/promptfoo.db(SQLite)
ฐานข้อมูลจะจัดเก็บการรันการประเมินในอดีตสำหรับการเปรียบเทียบและการวิเคราะห์แนวโน้ม อย่าลบไฟล์นี้เว้นแต่คุณต้องการสูญเสียข้อมูลในอดีต
แบบจำลองความปลอดภัย: สิ่งที่คุณเชื่อถือได้
Promptfoo ทำงานบนโมเดล 'เชื่อถือตามการกำหนดค่า' (trust-by-configuration) การทำความเข้าใจสิ่งนี้จะช่วยป้องกันความประหลาดใจด้านความปลอดภัย
อินพุตที่เชื่อถือได้ (ถือว่าเป็นโค้ด)
อินพุตเหล่านี้จะถูกดำเนินการเป็นโค้ดและควรมาจากแหล่งที่เชื่อถือได้เท่านั้น:
- ไฟล์การกำหนดค่า (
promptfooconfig.yaml) - การยืนยัน JavaScript/Python/Ruby แบบกำหนดเอง
- การกำหนดค่าผู้ให้บริการ
- ฟังก์ชัน Transform
อินพุตที่ไม่น่าเชื่อถือ (ข้อมูลเท่านั้น)
อินพุตเหล่านี้ถือเป็นข้อมูลและไม่ควรกระตุ้นการดำเนินการโค้ด:
- ข้อความพรอมต์
- ตัวแปรกรณีทดสอบ
- ผลลัพธ์ของโมเดล
- เนื้อหาระยะไกลที่ดึงมาระหว่างการประเมิน
คำแนะนำในการเพิ่มความปลอดภัย
สำหรับสภาพแวดล้อมที่มีความปลอดภัยสูง:
- รันภายในคอนเทนเนอร์หรือ VM ที่มีสิทธิ์น้อยที่สุด
- ใช้คีย์ API เฉพาะที่มีสิทธิ์น้อยที่สุด
- หลีกเลี่ยงการวางความลับในพรอมต์หรือไฟล์การกำหนดค่า
- จำกัดการส่งข้อมูลออกนอกเครือข่ายสำหรับโค้ดของบุคคลที่สาม
- อย่าเปิดเผยเว็บเซิร์ฟเวอร์ในเครื่องไปยังเครือข่ายที่ไม่น่าเชื่อถือ
ประสิทธิภาพ: เพิ่มประสิทธิภาพการประเมินของคุณ
เคล็ดลับในการเพิ่มประสิทธิภาพ
- ใช้การแคช - พฤติกรรมเริ่มต้นช่วยเร่งความเร็วในการรันซ้ำ
- ปรับการทำงานพร้อมกัน -
--max-concurrencyปรับสมดุลระหว่างความเร็วกับข้อจำกัดอัตรา (rate limits) - กรองการทดสอบ - ใช้
--filterเพื่อรันกรณีทดสอบเฉพาะระหว่างการพัฒนา - ตัวอย่างชุดข้อมูล - ใช้
--repeatกับชุดย่อยสำหรับการวนซ้ำก่อนการรันเต็มรูปแบบ
การปรับขนาดสำหรับการประเมินขนาดใหญ่
สำหรับการประเมินขนาดใหญ่ที่มีกรณีทดสอบหลายพันรายการ:
- ใช้ตัวกำหนดเวลา (
src/scheduler/) สำหรับการรันแบบกระจาย - ใช้ประโยชน์จากการสร้างระยะไกล (remote generation) สำหรับการถ่ายโอนการประมวลผล
- ส่งออกผลลัพธ์ไปยัง Google Sheets เพื่อให้ทีมมองเห็นได้
ความยืดหยุ่น: สร้างคุณสมบัติแบบกำหนดเอง
การยืนยันแบบกำหนดเอง
เขียนการยืนยันแบบกำหนดเองสำหรับการตรวจสอบเฉพาะโดเมน:
// 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'
};
}
ใช้ในการกำหนดค่าของคุณ:
assert:
- type: file://assertions/customCheck.js
MCP Server
Promptfoo มีเซิร์ฟเวอร์ Model Context Protocol (MCP) สำหรับการผสานรวมกับผู้ช่วย AI เช่น Claude Code:
promptfoo mcp
สิ่งนี้ช่วยให้ตัวแทน AI สามารถ:
- รันการประเมินโดยตรงจากการแชท
- เข้าถึงความสามารถของ red team
- สอบถามผลลัพธ์ที่จัดเก็บไว้
- สร้างกรณีทดสอบใหม่
กรณีการใช้งานจริง
แชทบอทสนับสนุนลูกค้า
บริษัท SaaS ใช้ promptfoo เพื่อทดสอบแชทบอทสนับสนุนก่อนการปรับใช้งานแต่ละครั้ง:
- 500 กรณีทดสอบที่ครอบคลุมคำถามทั่วไป
- การประเมินใน GPT-4 และ Claude เพื่อเปรียบเทียบคุณภาพ
- การสแกน Red team สำหรับการรั่วไหลของ PII และ jailbreaks
- การผสานรวม CI บล็อกการปรับใช้งานที่มีการประเมินที่ล้มเหลว
ผลลัพธ์: ลดปัญหาที่ลูกค้ารายงานลง 90% หลังจากนำการประเมินอัตโนมัติมาใช้
ไปป์ไลน์การสร้างเนื้อหา
ทีมการตลาดตรวจสอบเนื้อหาที่สร้างโดย AI สำหรับโทนเสียงของแบรนด์:
- การประเมินโดย LLM ตรวจสอบโทนเสียงและสไตล์
- เกณฑ์เวลาแฝงช่วยให้มั่นใจได้ถึงการสร้างที่รวดเร็ว
- การตรวจสอบต้นทุนช่วยควบคุมค่าใช้จ่าย
- การเปรียบเทียบโมเดลค้นหาผู้ให้บริการที่คุ้มค่าที่สุด
ผลลัพธ์: โทนเสียงของแบรนด์ที่สอดคล้องกันในเนื้อหาทั้งหมดด้วยต้นทุน API ที่ต่ำลง 40%
แอปพลิเคชันด้านการดูแลสุขภาพ
สตาร์ทอัพด้าน Healthtech มั่นใจในการปฏิบัติตามกฎระเบียบที่เข้มงวดด้วยการทดสอบอย่างเข้มงวด:
- การสแกน Red team สำหรับการละเมิด HIPAA
- การยืนยันแบบกำหนดเองตรวจสอบความถูกต้องทางการแพทย์
- การประเมินทั้งหมดทำงานในเครื่องเพื่อความเป็นส่วนตัวของข้อมูล
- บันทึกการตรวจสอบสำหรับการปฏิบัติตามข้อกำหนดทางกฎหมาย
ผลลัพธ์: ผ่านการตรวจสอบ SOC 2 ด้วยการประเมิน promptfoo เป็นหลักฐาน
สรุป
Promptfoo นำการทดสอบที่เป็นระบบมาสู่แอปพลิเคชัน LLM แทนที่กระบวนการแบบแมนนวลที่ผิดพลาดได้ง่ายด้วยการประเมินอัตโนมัติที่ตรวจจับข้อผิดพลาด ปัญหาด้านความปลอดภัย และปัญหาด้านคุณภาพก่อนการปรับใช้งาน
ประเด็นสำคัญ:
- ติดตั้งด้วย
npm install -g promptfooและเริ่มต้นด้วยpromptfoo init - ใช้การยืนยันเพื่อตรวจสอบผลลัพธ์นอกเหนือจากการจับคู่สตริงที่แน่นอน
- รันการสแกน red team เพื่อค้นหาช่องโหว่ด้านความปลอดภัย
- ผสานรวมกับ CI/CD เพื่อบล็อกข้อผิดพลาด
- เปรียบเทียบโมเดลอย่างเป็นกลางด้วยการประเมินแบบเคียงข้างกัน
- ผู้ให้บริการและการยืนยันแบบกำหนดเองช่วยขยายฟังก์ชันการทำงาน
อนาคตของการพัฒนา AI นั้นขับเคลื่อนด้วยข้อมูล ด้วย promptfoo คุณมีเครื่องมือในการสร้าง ทดสอบ และรักษาความปลอดภัยแอปพลิเคชัน LLM ในระดับใหญ่
หากคุณทำงานกับ API ด้วย ลองใช้ Apidog ควบคู่ไปกับ promptfoo Apidog จัดการการออกแบบ API, การทดสอบ และเอกสารประกอบ ในขณะที่ promptfoo มุ่งเน้นไปที่การประเมิน LLM เมื่อใช้ร่วมกันจะครอบคลุมการทดสอบแอปพลิเคชันที่ทันสมัยทั้งหมด
คำถามที่พบบ่อย
Promptfoo ใช้สำหรับอะไร?
Promptfoo ใช้สำหรับการทดสอบและประเมินแอปพลิเคชัน LLM มันรันการทดสอบอัตโนมัติกับพรอมต์ เปรียบเทียบผลลัพธ์ในโมเดลต่างๆ และดำเนินการประเมิน red-team ด้านความปลอดภัยเพื่อค้นหาช่องโหว่
Promptfoo ฟรีหรือไม่?
ใช่ Promptfoo เป็นโอเพนซอร์สและได้รับอนุญาตภายใต้ MIT License คุณสามารถใช้ได้ฟรีสำหรับโครงการส่วนตัวและเชิงพาณิชย์ คุณสมบัติคลาวด์และการสนับสนุนระดับองค์กรอาจต้องมีแผนชำระเงิน
ฉันจะติดตั้ง promptfoo ได้อย่างไร?
รัน npm install -g promptfoo เพื่อติดตั้งแบบทั่วโลก คุณยังสามารถใช้ npx promptfoo@latest โดยไม่ต้องติดตั้ง หรือติดตั้งผ่าน brew install promptfoo บน macOS หรือ pip install promptfoo สำหรับ Python
Promptfoo รองรับโมเดลใดบ้าง?
Promptfoo รองรับผู้ให้บริการ LLM กว่า 90 ราย รวมถึง OpenAI (GPT-4, GPT-4o, o1), Anthropic (Claude 3.5/4/4.5), Google (Gemini), Microsoft (Azure OpenAI), Amazon Bedrock และโมเดลในเครื่องผ่าน Ollama
ฉันจะรันการสแกน red team ได้อย่างไร?
รัน promptfoo redteam init เพื่อสร้างการกำหนดค่า จากนั้น promptfoo redteam run เพื่อดำเนินการสแกนความปลอดภัย ดูผลลัพธ์ด้วย promptfoo redteam report
ฉันสามารถใช้ promptfoo ใน CI/CD ได้หรือไม่?
ได้ ติดตั้ง promptfoo ในไปป์ไลน์ CI ของคุณและรัน promptfoo eval พร้อมไฟล์การกำหนดค่าของคุณ ตั้งค่า quality gates ด้วยตัวเลือก threshold เพื่อทำให้ CI ล้มเหลวหากการประเมินไม่เป็นไปตามอัตราการผ่าน
Promptfoo ส่งข้อมูลของฉันไปยังเซิร์ฟเวอร์ภายนอกหรือไม่?
ไม่ Promptfoo ทำงาน 100% ในเครื่องเป็นค่าเริ่มต้น ข้อมูลพรอมต์และข้อมูลการทดสอบของคุณจะไม่ออกจากเครื่องของคุณเว้นแต่คุณจะเลือกใช้คุณสมบัติคลาวด์โดยชัดแจ้ง ไฟล์แคชและฐานข้อมูลจะถูกจัดเก็บไว้ในเครื่อง
ฉันจะเปรียบเทียบโมเดลด้วย promptfoo ได้อย่างไร?
ระบุผู้ให้บริการหลายรายในไฟล์การกำหนดค่าของคุณ จากนั้นรัน promptfoo eval ดูการเปรียบเทียบใน Web UI ด้วย promptfoo view ซึ่งจะแสดงอัตราการผ่าน/ไม่ผ่าน ต้นทุน และเวลาแฝงสำหรับแต่ละโมเดล
