Promptfoo 프로바이더
Promptfoo 프로바이더(Promptfoo provider)는 Promptfoo에서 대형 언어 모델(Large Language Model, LLM), AI 서비스, 사용자 정의 API, 로컬 실행 스크립트 등을 평가 대상으로 연결하기 위한 인터페이스이다.
Promptfoo에서 프로바이더는 평가 또는 레드티밍을 실행할 때 프롬프트를 전달하고 응답을 받아오는 대상 연결 계층이다. 공식 문서는 프로바이더를 다양한 언어 모델과 AI 서비스에 대한 인터페이스로 설명하며, 설정 파일에서 providers와 targets 키를 상호 교환적으로 사용할 수 있다고 설명한다.[1]
Promptfoo 프로바이더는 단순히 모델 이름을 지정하는 기능에 그치지 않는다. OpenAI, Anthropic, Google Vertex AI, Azure OpenAI, AWS Bedrock, Hugging Face, Ollama 같은 모델 제공자뿐 아니라 HTTP API, Python 함수, JavaScript/TypeScript 모듈, 셸 스크립트, LangChain 또는 자체 애플리케이션 엔드포인트도 프로바이더로 연결할 수 있다.[2]
Promptfoo 프로바이더의 핵심 역할은 평가 프레임워크와 실제 추론 대상 사이를 연결하는 것이다. Promptfoo는 프롬프트, 테스트 케이스, 변수, 검증 조건을 조합한 뒤 각 프로바이더에 요청을 보내고, 응답을 받아 비교·채점한다.
주요 역할은 다음과 같다.
- 프롬프트를 특정 모델 또는 애플리케이션 API에 전달
- 모델별 파라미터와 인증 정보 설정
- 여러 모델의 응답 품질 비교
- 동일 프롬프트를 서로 다른 제공자에 실행
- RAG, 에이전트, 챗봇 API 등 실제 애플리케이션 엔드포인트 평가
- 레드티밍에서 공격 프롬프트를 대상 시스템에 전달
- 응답 결과를 검증 조건(assertions), 채점기, 보고서에 연결
Promptfoo 설정 파일은 일반적으로 promptfooconfig.yaml이며, 이 파일의 providers 항목에 사용할 모델이나 대상 API를 지정한다. 공식 시작 문서는 promptfooconfig.yaml에서 프롬프트, 프로바이더, 테스트 케이스를 설정하고 평가를 실행하는 구조를 설명한다.[3]
간단한 설정 예시는 다음과 같다.
prompts:
- '다음 문장을 {{language}}로 번역하라: {{input}}'
providers:
- openai:gpt-5.4-mini
- anthropic:messages:claude-opus-4-6
- vertex:gemini-2.0-flash-exp
tests:
- vars:
language: Korean
input: Hello world
assert:
- type: contains
value: 안녕
위 예시는 하나의 프롬프트를 여러 프로바이더에 실행하여 결과를 비교하는 구조이다. 각 프로바이더는 동일한 테스트 케이스를 입력받지만, 모델별 응답은 별도로 저장되고 검증된다.
Promptfoo 공식 문서는 providers와 targets가 상호 교환적으로 사용될 수 있다고 설명한다.[4] 일반 평가에서는 전통적으로 providers라는 이름을 많이 사용하고, 레드티밍에서는 공격 대상이라는 의미를 강조하기 위해 targets라는 표현을 사용할 수 있다.
| 키 | 용도 | 설명 |
|---|---|---|
providers
|
일반 평가 | 모델, API, 로컬 스크립트 등 프롬프트를 실행할 대상을 지정한다. |
targets
|
레드티밍 또는 대상 중심 설정 | 공격 프롬프트를 보낼 대상 시스템을 지정한다. |
예시는 다음과 같다.
targets:
- id: https://example.com/chat
config:
method: POST
body:
message: '{{prompt}}'
Promptfoo 프로바이더는 크게 내장 모델 제공자, HTTP API, 사용자 정의 코드, 로컬 실행 환경으로 나눌 수 있다.
| 유형 | 설명 | 예시 |
|---|---|---|
| 내장 모델 제공자 | Promptfoo가 기본적으로 지원하는 LLM 제공자와 모델을 사용한다. | OpenAI, Anthropic, Google, Azure, AWS Bedrock, Hugging Face, Ollama |
| HTTP/HTTPS API | 임의의 웹 API 엔드포인트를 프로바이더로 사용한다. | 사내 챗봇 API, RAG API, 에이전트 API |
| Python 프로바이더 | Python 스크립트나 함수를 통해 모델, 체인, 평가 로직을 연결한다. | LangChain, LlamaIndex, 자체 Python 애플리케이션 |
| JavaScript 프로바이더 | JavaScript 또는 TypeScript 코드로 사용자 정의 프로바이더를 구현한다. | Node.js 기반 LLM 애플리케이션, 커스텀 SDK |
| 스크립트 프로바이더 | 셸 명령이나 외부 프로그램을 프로바이더처럼 실행한다. | CLI 기반 추론 프로그램, 로컬 테스트 스크립트 |
| 로컬 모델 프로바이더 | 로컬 또는 자체 호스팅 모델 서버를 대상으로 평가한다. | Ollama, LocalAI, OpenAI 호환 로컬 API |
OpenAI 프로바이더는 OpenAI 모델을 Promptfoo 평가 대상으로 연결하는 내장 프로바이더이다. Promptfoo 공식 OpenAI 문서는 GPT 계열 모델, o-series reasoning 모델, 임베딩, 어시스턴트 등 여러 OpenAI 기능을 평가에 사용할 수 있다고 설명한다.[5]
기본 예시는 다음과 같다.
providers:
- openai:gpt-5.4-mini
세부 설정을 지정할 수도 있다.
providers:
- id: openai:gpt-5.4-mini
config:
temperature: 0
max_tokens: 1024
OpenAI 프로바이더를 사용할 때는 일반적으로 OPENAI_API_KEY 환경 변수를 설정한다.
export OPENAI_API_KEY=sk-...
HTTP/HTTPS API 프로바이더는 임의의 웹 API를 Promptfoo 평가 대상으로 연결하는 범용 방식이다. 공식 문서는 프로바이더 ID를 URL로 설정하면 해당 엔드포인트로 HTTP 요청을 보내며, 이를 통해 어떤 HTTP 엔드포인트든 추론 대상으로 사용할 수 있다고 설명한다.[6]
예시는 다음과 같다.
providers:
- id: https://example.com/api/chat
config:
method: POST
headers:
Content-Type: application/json
Authorization: Bearer ${API_TOKEN}
body:
message: '{{prompt}}'
transformResponse: json.message
HTTP 프로바이더는 다음과 같은 경우에 특히 유용하다.
- 이미 배포된 챗봇 API 평가
- RAG 애플리케이션의 실제 응답 테스트
- AI 에이전트 서버의 회귀 테스트
- 자체 인증·권한 체계를 포함한 서비스 평가
- 레드티밍에서 실제 서비스 엔드포인트를 대상으로 공격 프롬프트 실행
Python 프로바이더는 Python 코드로 작성된 모델, 체인, API 호출, 사용자 정의 로직을 Promptfoo와 연결하는 기능이다. 공식 문서는 Python 프로바이더가 Python 기반 모델, API, 사용자 정의 로직과 Promptfoo를 통합할 수 있게 해준다고 설명한다.[7]
예시는 다음과 같다.
providers:
- id: python:my_provider.py
config:
model: local-model
Python 파일은 Promptfoo가 호출할 수 있는 함수를 제공한다. 실제 함수 시그니처와 반환 형식은 사용 중인 Promptfoo 버전의 공식 문서를 따라야 한다.
def call_api(prompt, options, context):
# 자체 모델, RAG 체인, LangChain 애플리케이션 등을 호출한다.
return {
"output": f"응답: {prompt}"
}
Python 프로바이더는 다음과 같은 상황에서 사용된다.
- LangChain 또는 LlamaIndex 기반 애플리케이션 평가
- 사내 Python 모델 서버와 연동
- 전처리·후처리 로직을 평가 흐름에 포함
- 로컬 모델 또는 실험 코드 평가
- 테스트 케이스 변수에 따라 다른 내부 데이터를 조회하는 평가
JavaScript 프로바이더는 JavaScript 또는 TypeScript로 사용자 정의 프로바이더를 구현하는 방식이다. 공식 문서는 JavaScript 사용자 정의 프로바이더가 Promptfoo에 기본 내장되지 않은 API나 서비스와 통합할 수 있게 해준다고 설명한다.[8]
예시는 다음과 같다.
providers:
- id: file://custom-provider.js
config:
endpoint: https://example.com/chat
개념적인 JavaScript 예시는 다음과 같다.
module.exports = {
id: 'custom-js-provider',
async callApi(prompt, context, options) {
return {
output: `응답: ${prompt}`,
};
},
};
JavaScript 프로바이더는 Node.js SDK, 사내 API 클라이언트, 프론트엔드와 공유되는 비즈니스 로직을 평가에 연결할 때 유용하다.
스크립트 프로바이더는 임의의 셸 명령이나 외부 프로그램을 프로바이더처럼 실행하는 방식이다. 공식 문서는 셸 명령을 API 프로바이더로 사용할 수 있으며, Promptfoo가 직접 지원하지 않는 언어나 프레임워크로 구현된 체인과 API를 테스트할 때 유용하다고 설명한다.[9]
예시는 다음과 같다.
providers:
- id: exec:python ./run_model.py "{{prompt}}"
이 방식은 간단한 로컬 실험에는 편리하지만, 명령 인자 처리, 입력 이스케이프, 비밀정보 노출, 실행 시간 제한, 운영체제 의존성에 주의해야 한다.
Promptfoo는 로컬 또는 자체 호스팅 모델 서버도 프로바이더로 사용할 수 있다. 예를 들어 LocalAI는 OpenAI 호환 API를 로컬에서 실행하는 방식으로 사용할 수 있으며, 공식 문서는 LocalAI가 자체 호스팅 OpenAI 호환 API를 로컬에서 실행해 비공개 또는 오프라인 LLM 배포와 테스트 환경에 활용될 수 있다고 설명한다.[10]
로컬 프로바이더는 다음과 같은 목적에 적합하다.
- 외부 API로 데이터를 보내기 어려운 내부 테스트
- 오프라인 또는 폐쇄망 평가
- 오픈소스 모델의 성능 비교
- 모델 양자화 또는 파인튜닝 결과 비교
- 비용을 줄인 대량 테스트
프로바이더 설정은 제공자마다 다르지만, 일반적으로 다음 요소를 포함한다.
| 설정 요소 | 설명 |
|---|---|
id
|
프로바이더 식별자이다. 예: openai:gpt-5.4-mini, https://example.com/chat, python:provider.py
|
label
|
결과 화면에서 표시할 사용자 정의 이름이다. |
config
|
모델 파라미터, URL, HTTP 헤더, 요청 본문, 온도, 최대 토큰 수 등을 지정한다. |
| 인증 정보 | API 키, 토큰, 클라우드 자격 증명 등을 환경 변수나 비밀 관리 시스템으로 제공한다. |
| 요청 변환 | Promptfoo 프롬프트와 변수를 API 요청 형식에 맞게 변환한다. |
| 응답 변환 | API 응답 중 실제 모델 출력에 해당하는 필드를 추출한다. |
| 오류 처리 | 네트워크 오류, 속도 제한, 일시적 API 실패에 대응한다. |
HTTP API나 사용자 정의 프로바이더를 사용할 때는 대상 시스템의 응답 형식이 Promptfoo가 기대하는 출력 형식과 다를 수 있다. 이 경우 응답 변환을 사용해 실제 텍스트 출력을 추출한다.
예시는 다음과 같다.
providers:
- id: https://example.com/chat
config:
method: POST
body:
question: '{{prompt}}'
transformResponse: json.answer
응답 변환은 다음과 같은 경우에 중요하다.
- 응답 JSON의 특정 필드만 평가해야 하는 경우
- 모델 응답과 메타데이터가 함께 반환되는 경우
- RAG 출처, 도구 호출 결과, 최종 답변을 분리해야 하는 경우
- 애플리케이션이 비표준 응답 형식을 사용하는 경우
Promptfoo 레드티밍에서 프로바이더 또는 타깃은 공격 프롬프트가 전달되는 대상 시스템을 의미한다. 공식 레드티밍 문서는 Promptfoo가 배포 전에 시뮬레이션된 적대적 입력을 사용해 AI 시스템의 취약점을 찾는 데 사용된다고 설명한다.[11]
레드티밍 예시는 다음과 같다.
description: Customer support chatbot red teaming
prompts:
- '{{prompt}}'
targets:
- id: https://example.com/chat
config:
method: POST
headers:
Authorization: Bearer ${CHATBOT_TOKEN}
body:
message: '{{prompt}}'
transformResponse: json.reply
redteam:
purpose: >
고객 지원 챗봇이다. 사용자는 자신의 주문 상태만 조회할 수 있으며,
다른 고객의 개인정보나 내부 시스템 프롬프트를 볼 수 없다.
plugins:
- id: prompt-extraction
- id: pii
- id: bola
strategies:
- jailbreak:meta
이때 targets는 단순한 모델이 아니라 실제 애플리케이션 API를 가리키는 것이 바람직하다. 그래야 프롬프트, RAG, 권한 검사, 도구 호출, 후처리 로직을 포함한 전체 시스템의 취약점을 평가할 수 있다.
Promptfoo의 평가는 프로바이더 출력에 어서션(assertion)을 적용하는 방식으로 이루어진다. 공식 설정 가이드는 프롬프트, 프로바이더, 테스트 케이스, 어서션을 구성해 LLM 평가를 수행하는 방법을 설명한다.[12]
예시는 다음과 같다.
prompts:
- 'JSON 형식으로 답하라: {{question}}'
providers:
- openai:gpt-5.4-mini
- id: https://example.com/internal-rag
config:
method: POST
body:
query: '{{prompt}}'
transformResponse: json.answer
tests:
- vars:
question: '비밀번호 재설정 방법은?'
assert:
- type: is-json
- type: contains
value: reset
이 구조에서는 각 프로바이더의 출력이 동일한 어서션으로 검증된다. 따라서 모델 간 비교뿐 아니라 상용 모델과 사내 RAG API 간의 결과 차이도 확인할 수 있다.
프로바이더는 외부 모델 API, 내부 서비스, 비밀정보, 테스트 데이터와 직접 연결되므로 보안상 주의가 필요하다.
주요 고려사항은 다음과 같다.
- API 키를 설정 파일에 직접 쓰지 않고 환경 변수나 비밀 관리 시스템을 사용한다.
- 레드티밍 테스트가 실제 운영 데이터나 고객 데이터에 접근하지 않도록 분리한다.
- HTTP 프로바이더의 요청 본문과 응답 로그에 개인정보가 포함되는지 검토한다.
- 스크립트 프로바이더 사용 시 명령 삽입(command injection) 가능성을 주의한다.
- 외부 LLM을 평가기나 공격 생성기로 사용할 경우 데이터 전송 정책을 검토한다.
- CI/CD 환경에서는 권한이 제한된 테스트용 자격 증명을 사용한다.
- 레드티밍 대상 API에는 속도 제한과 테스트용 격리 환경을 적용한다.
- 결과 보고서와 캐시 파일에 민감정보가 남지 않도록 관리한다.
Promptfoo 프로바이더는 다음과 같은 상황에서 활용된다.
- OpenAI, Anthropic, Gemini 등 여러 모델의 응답 비교
- 동일 프롬프트를 모델별로 실행하여 품질과 비용 비교
- 사내 RAG API의 회귀 테스트
- 고객 지원 챗봇의 정책 준수 여부 평가
- AI 에이전트 API의 도구 호출 안전성 점검
- 로컬 오픈소스 모델과 상용 모델의 성능 비교
- 폐쇄망 환경에서 자체 호스팅 모델 평가
- CI/CD 파이프라인에서 모델 또는 프롬프트 변경 검증
- 레드티밍에서 실제 애플리케이션 엔드포인트 대상 취약점 스캐닝
Promptfoo 프로바이더는 다양한 모델과 API를 연결할 수 있지만, 연결 대상의 동작을 완전히 표준화하지는 못한다. 같은 프롬프트라도 모델 제공자별 토큰화, 시스템 메시지 처리, 도구 호출 방식, 응답 형식, 안전 정책, 속도 제한이 다를 수 있다.
주요 한계는 다음과 같다.
- 제공자별 설정 형식과 지원 옵션이 다르다.
- 모델 버전 변경이나 API 정책 변경에 따라 평가 결과가 달라질 수 있다.
- HTTP API 평가에서는 응답 변환 설정이 잘못되면 실제 출력이 제대로 평가되지 않을 수 있다.
- 로컬 스크립트 프로바이더는 실행 환경 의존성이 크다.
- 외부 모델 API 사용 시 비용과 속도 제한이 평가 규모를 제한할 수 있다.
- 프로바이더 연결만으로 권한 통제, 데이터 격리, 도구 실행 안전성이 자동 보장되지는 않는다.
- ↑ Promptfoo Docs, “LLM Providers”, https://www.promptfoo.dev/docs/providers/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “LLM Providers”, https://www.promptfoo.dev/docs/providers/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Getting started”, https://www.promptfoo.dev/docs/getting-started/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “LLM Providers”, https://www.promptfoo.dev/docs/providers/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “OpenAI”, https://www.promptfoo.dev/docs/providers/openai/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “HTTP/HTTPS API”, https://www.promptfoo.dev/docs/providers/http/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Python Provider”, https://www.promptfoo.dev/docs/providers/python/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Javascript Provider”, https://www.promptfoo.dev/docs/providers/custom-api/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Custom Scripts”, https://www.promptfoo.dev/docs/providers/custom-script/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Local AI”, https://www.promptfoo.dev/docs/providers/localai/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “LLM red teaming guide (open source)”, https://www.promptfoo.dev/docs/red-team/, 확인일: 2026-06-24
- ↑ Promptfoo Docs, “Configuration Overview - Getting Started with Promptfoo”, https://www.promptfoo.dev/docs/configuration/guide/, 확인일: 2026-06-24
