Promptfoo
Promptfoo는 대형 언어 모델(Large Language Model, LLM) 애플리케이션의 평가(evaluation), 레드팀(red teaming), 취약점 스캐닝을 자동화하기 위한 오픈소스 CLI 및 라이브러리이다.
Promptfoo는 프롬프트, 모델, 검색 증강 생성(RAG), 에이전트 기반 LLM 애플리케이션을 테스트하기 위한 개발자 중심 도구이다. YAML 기반 설정 파일로 프롬프트, 입력값, 모델 제공자, 검증 조건을 정의하고, 여러 모델이나 프롬프트 조합의 출력을 비교·평가할 수 있다.[1]
공식 문서는 Promptfoo의 목표를 시행착오식 프롬프트 튜닝이 아니라 테스트 주도 LLM 개발(test-driven LLM development)로 설명한다. 일반적인 소프트웨어 테스트처럼 테스트 케이스와 평가 기준을 먼저 정의한 뒤, LLM 출력이 요구사항을 만족하는지 반복적으로 검증하는 방식이다.[2]
| 기능 | 설명 |
|---|---|
| LLM 평가 | 프롬프트, 모델, 입력값 조합을 실행하고 출력 품질을 자동 또는 수동 기준으로 비교한다. |
| 레드팀 | 프롬프트 인젝션, 탈옥(jailbreak), 데이터 유출, 정책 위반, 도구 오남용 등 LLM 애플리케이션 취약점을 시뮬레이션한다.[3] |
| 취약점 스캐닝 | AI 애플리케이션의 보안·컴플라이언스 위험을 발견하기 위해 자동화된 공격 시나리오와 검증 절차를 수행한다. |
| CI/CD 통합 | GitHub Actions, GitLab, Jenkins 등 개발 워크플로에 평가와 보안 테스트를 통합할 수 있다.[4] |
| 결과 시각화 | 명령줄 실행 결과와 웹 뷰어를 통해 모델별·프롬프트별 출력을 행렬 형태로 비교할 수 있다. |
| 로컬 실행 | 평가가 사용자의 환경에서 실행되며, 설정에 따라 직접 LLM 제공자 API나 로컬 모델과 통신한다. |
Promptfoo는 Node.js 기반 도구로 주로 npm 또는 npx를 통해 실행한다. 공식 GitHub 저장소 기준으로 npm/npx 사용 시 Node.js 20.20.0 이상 또는 22.22.0 이상을 요구하며, Homebrew와 Python 패키지 설치 방식도 제공된다.[5]
기본적인 실행 흐름은 다음과 같다.
npx promptfoo@latest init --example getting-started
cd getting-started
npx promptfoo@latest eval
npx promptfoo@latest view
OpenAI, Anthropic, Google, Azure, AWS Bedrock, Ollama 등 외부 모델 제공자를 사용할 때는 각 제공자별 API 키나 인증 설정이 필요하다. 예를 들어 OpenAI 모델을 사용할 경우 일반적으로 환경 변수에 API 키를 설정한다.
export OPENAI_API_KEY=sk-...
Promptfoo의 기본 설정 파일은 일반적으로 promptfooconfig.yaml이다. 이 파일에는 테스트할 프롬프트, 모델 제공자, 입력 변수, 검증 조건(assertions)을 선언한다.[6]
간단한 설정 예시는 다음과 같다.
prompts:
- '다음 문장을 {{language}}로 번역하라: {{input}}'
providers:
- openai:chat:gpt-5.4-mini
- anthropic:messages:claude-opus-4-6
tests:
- vars:
language: French
input: Hello world
assert:
- type: contains
value: Bonjour
위 예시는 하나의 프롬프트 템플릿에 변수 language와 input을 넣고, 여러 모델 제공자의 출력이 특정 문자열을 포함하는지 확인하는 구조이다. 실제 프로젝트에서는 정확성, 형식 준수, 금칙어 포함 여부, JSON 스키마 준수, 사용자 정의 평가 함수 등을 함께 사용할 수 있다.
Promptfoo의 레드팀 기능은 LLM 시스템이 배포되기 전에 취약한 입력이나 공격 시나리오에 어떻게 반응하는지 확인하기 위한 기능이다. 공식 문서는 레드팀을 “배포 전에 시뮬레이션된 적대적 입력을 사용해 AI 시스템의 취약점을 찾는 방법”으로 설명한다.[7]
주요 점검 대상은 다음과 같다.
- 프롬프트 인젝션
- 간접 프롬프트 인젝션
- 탈옥(jailbreak)
- 개인정보 및 민감정보 유출
- RAG 기반 애플리케이션의 문서 오염 또는 악성 컨텍스트 주입
- 에이전트의 과도한 권한 행사
- 도구 호출(tool use) 오남용
- 비즈니스 규칙 위반
- 유해·차별·부적절 콘텐츠 생성
특히 에이전트형 AI 시스템에서는 모델이 외부 도구, 파일, 웹, 데이터베이스, 업무 시스템과 연결될 수 있기 때문에 단순한 모델 응답 품질뿐 아니라 권한, 데이터 흐름, 감사 가능성, 정책 준수 여부를 함께 검증해야 한다.
Promptfoo는 특정 모델 하나를 평가하는 도구라기보다 LLM 애플리케이션 전체를 평가하는 프레임워크에 가깝다. 공식 문서와 저장소는 다음과 같은 대상을 지원 범위로 설명한다.[8]
- 프롬프트 템플릿
- 대화형 챗봇
- RAG 애플리케이션
- LLM 에이전트
- 커스텀 API 기반 LLM 애플리케이션
- OpenAI, Anthropic, Azure, Google, Hugging Face, Ollama 등 다양한 모델 제공자
- Python, JavaScript 등으로 작성한 사용자 정의 제공자
Promptfoo는 로컬 개발 환경에서 수동으로 실행할 수도 있지만, 실제 운영 환경에서는 CI/CD 파이프라인에 포함해 회귀 테스트처럼 사용하는 경우가 많다. GitHub Action 문서는 pull request 단계에서 LLM 보안 취약점을 자동으로 스캔하고, 프롬프트 인젝션, 개인정보 노출, 과도한 에이전시(excessive agency) 등 LLM 특화 위험을 검토 의견으로 남길 수 있다고 설명한다.[9]
이러한 방식은 모델이나 프롬프트를 변경할 때마다 보안·품질 기준을 반복 적용할 수 있게 해준다. 특히 LLM 애플리케이션은 같은 코드라도 모델 버전, 시스템 프롬프트, 검색 문서, 도구 연결 상태에 따라 동작이 달라질 수 있으므로 지속적인 평가 체계가 중요하다.
Promptfoo의 핵심 저장소는 GitHub에서 공개되어 있으며, MIT 라이선스의 오픈소스 프로젝트로 배포된다. 저장소 설명은 Promptfoo를 “LLM 앱을 평가하고 레드팀하기 위한 CLI와 라이브러리”로 정의한다.[10]
2026년 3월 9일 OpenAI는 Promptfoo를 인수한다고 발표했다. OpenAI는 Promptfoo의 기술을 기업용 AI 코워커 구축·운영 플랫폼인 OpenAI Frontier에 통합할 계획이며, 동시에 Promptfoo의 오픈소스 프로젝트 개발을 계속하겠다고 밝혔다.[11]
2026년 6월 확인 기준 GitHub 릴리스 페이지에는 2026년 5월 8일 공개된 0.121.11 버전이 표시되어 있다.[12]
Promptfoo는 다음과 같은 상황에서 활용된다.
- 여러 LLM 제공자의 응답 품질 비교
- 프롬프트 변경에 따른 회귀 테스트
- RAG 검색 결과를 포함한 응답 정확성 평가
- 챗봇의 금칙 응답, 형식 위반, 환각 가능성 점검
- AI 에이전트의 도구 호출 안전성 평가
- 배포 전 보안 레드팀과 취약점 스캐닝
- pull request 단계의 AI 보안 검토 자동화
- 규제·감사 대응을 위한 평가 기록 보존
Promptfoo는 LLM 애플리케이션 평가와 보안 점검을 자동화하는 데 유용하지만, 모든 위험을 완전히 제거하는 도구는 아니다. 테스트 케이스와 공격 시나리오가 충분하지 않으면 실제 운영 환경에서 발생할 수 있는 실패를 포착하지 못할 수 있다. 또한 LLM 출력은 확률적 특성을 가지므로 동일한 테스트라도 모델 설정, 시드, 온도, 외부 검색 결과, 제공자 정책 변화에 따라 달라질 수 있다.
따라서 Promptfoo는 단독 보안 장치라기보다 다음 요소와 함께 사용해야 한다.
- 명확한 시스템 프롬프트와 정책 설계
- 입력·출력 필터링
- 권한 최소화
- 도구 호출 감사 로그
- 민감 데이터 접근 통제
- 운영 중 모니터링
- 사람 검토 절차
- ↑ Promptfoo Docs, “Intro”, https://www.promptfoo.dev/docs/intro/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Getting started”, https://www.promptfoo.dev/docs/getting-started/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “LLM red teaming”, https://www.promptfoo.dev/docs/red-team/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “GitHub Action”, https://www.promptfoo.dev/docs/code-scanning/github-action/, 확인일: 2026-06-24
- ↑ GitHub, “promptfoo/promptfoo: Promptfoo: LLM evals & red teaming”, https://github.com/promptfoo/promptfoo, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Getting started”, https://www.promptfoo.dev/docs/getting-started/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “LLM red teaming”, https://www.promptfoo.dev/docs/red-team/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Intro”, https://www.promptfoo.dev/docs/intro/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “GitHub Action”, https://www.promptfoo.dev/docs/code-scanning/github-action/, 확인일: 2026-06-24
- ↑ GitHub, “promptfoo/promptfoo: Promptfoo: LLM evals & red teaming”, https://github.com/promptfoo/promptfoo, 확인일: 2026-06-24
- ↑ OpenAI, “OpenAI to acquire Promptfoo”, https://openai.com/index/openai-to-acquire-promptfoo/, 확인일: 2026-06-24
- ↑ GitHub, “Releases · promptfoo/promptfoo”, https://github.com/promptfoo/promptfoo/releases, 확인일: 2026-06-24
