본문 바로가기
C.W.K.
Stream
Lesson 01 of 07 · published

promptfoo: CLI 중심 평가 실행 도구

~22 min · frameworks, promptfoo, cli

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

명령줄에서 가장 빠르게 평가를 실행하는 법

promptfoo(오픈 소스, 2026년 중반 기준 v0.118+)는 LLM 애플리케이션 평가용 CLI이자 TypeScript 라이브러리야. 60개 이상의 모델 제공업체, 40종 이상의 결정론적 검증 유형, 14종의 모델 채점형 검증 유형, 선언형 YAML 설정을 지원해. 별도의 Python 평가 인프라 없이 빠르게 반복 개선하고 싶을 때 특히 잘 맞아.

기본으로 제공하는 기능

  • 여러 프롬프트와 여러 제공업체의 조합을 한 번에 실행해 나란히 비교해.
  • 검증 방식으로 contains, equals, is-json, contains-json, regex, similar(임베딩 코사인 유사도), llm-rubric, javascript, python 등을 지원해.
  • 프롬프트 주입, 탈옥 공격, OWASP LLM 상위 10개 항목 등 50여 개 취약점 범주를 다루는 내장 레드팀 평가 모듈을 제공해.
  • HTML 결과 뷰어(promptfoo view)와 CSV 내보내기를 지원해.
  • 캐시, 재시도, 동시 실행을 관리해.

특히 잘 맞는 경우

promptfoo의 가장 큰 강점은 선언형 설정이야. YAML 파일 하나로 프롬프트 4개 × 모델 3개 × 평가 사례 50개 × 검증 조건 6개로 구성된 행렬을 선언할 수 있어. 같은 행렬을 코드로 작성하면 며칠이 걸릴 수 있지만 YAML로는 몇 분이면 돼. 프롬프트를 반복해서 개선하거나 모델 제공업체를 빠르게 비교할 때 탁월해.

잘 맞지 않는 경우

사용자 정의 검색기, 여러 에이전트의 반복 실행, 미세 조정 실험처럼 평가가 복잡한 Python 파이프라인 안에 들어가야 한다면 YAML 방식이 어색할 수 있어. 이럴 때는 DeepEval이나 직접 만든 평가 실행 도구가 더 잘 맞아.

원칙: promptfoo는 명령줄에서 프롬프트와 제공업체 조합을 평가하는 데 가장 강한 도구야. 첫 평가 도구로 적합하고, 마지막까지 계속 쓰는 도구가 되기도 해.

Code

설치와 초기화·bash
# Install globally or use npx
npm install -g promptfoo
# or
npx promptfoo@latest init

# Scaffold a project
promptfoo init

# Run the suite
promptfoo eval

# Open the HTML viewer
promptfoo view
promptfooconfig.yaml — 전체 프롬프트 × 제공업체 행렬·yaml
description: 'Translation eval — three prompts, two providers'

prompts:
  - "Translate '{{text}}' to {{language}}."
  - "You are a translator. Convert '{{text}}' into {{language}}."
  - file://prompts/system.txt

providers:
  - openai:gpt-4o-mini
  - anthropic:messages:claude-sonnet-4-5

tests:
  - vars:
      text: 'Hello world'
      language: 'French'
    assert:
      - type: contains
        value: 'Bonjour'
      - type: llm-rubric
        value: 'Translation is natural and fluent'
  - vars:
      text: 'Good morning'
      language: 'German'
    assert:
      - type: similar
        value: 'Guten Morgen'
        threshold: 0.6
      - type: javascript
        value: 'output.length < 200'
사용자 정의 Python 검증·yaml
tests:
  - vars: {input: 'extract emails from this text'}
    assert:
      - type: python
        value: |
          import re
          emails = re.findall(r'[\w.+-]+@[\w-]+\.[\w.-]+', output)
          return len(emails) > 0

External links

Exercise

기능 하나를 골라 promptfoo 프로젝트를 초기화해. 프롬프트 2개 × 제공업체 2곳 × 평가 사례 10개 × 검증 조건 3개를 정의한 뒤 평가 모음을 실행하고 결과 뷰어를 열어 봐. YAML 방식이 과제에 잘 맞는다면 전체 과정을 30분 안에 끝낼 수 있어야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.