- ubuntu 20.04
- node v20.11.1
- 공식문서에 따르면
- Node.js 18 or newer
- Supported operating systems: macOS, Linux, Windows
Promptfoo는 프롬프트 엔지니어링을 위한 오픈소스 도구로, 대규모 언어 모델(LLM)과의 상호작용을 테스트하고 평가하기 위해 개발되었습니다. 이 도구는 다양한 프롬프트를 실험하고, 결과를 분석하며, 최적의 프롬프트를 찾는 과정을 효율적으로 진행할 수 있게 도와줍니다.
주요 기능 및 특징
- 프롬프트 비교: Promptfoo는 다양한 프롬프트를 서로 비교하여 가장 적합한 프롬프트를 찾는 기능을 제공합니다. 여러 프롬프트를 한 번에 테스트하고 결과를 분석할 수 있습니다.
- 자동화된 테스트: 프롬프트에 대한 자동화된 테스트를 지원하여, 다양한 입력에 대해 프롬프트가 어떻게 반응하는지 테스트할 수 있습니다. 이를 통해 프롬프트의 일관성이나 특정 입력에 대한 최적화를 확인할 수 있습니다.
- 다양한 LLM 지원: OpenAI의 GPT 모델뿐만 아니라, Hugging Face와 같은 다양한 언어 모델도 지원합니다. 이를 통해 특정 작업에 가장 적합한 모델을 선택하고, 각 모델의 성능을 비교할 수 있습니다.
- 결과 분석 및 시각화: Promptfoo는 테스트 결과를 시각적으로 표현해 주며, 이를 통해 프롬프트 성능을 쉽게 분석할 수 있습니다. 성능 평가를 위한 다양한 메트릭스를 제공하여 프롬프트의 효과성을 정량적으로 평가할 수 있습니다.
- 프롬프트 튜닝: 다양한 테스트 결과를 기반으로 프롬프트를 점진적으로 개선할 수 있습니다. 이를 통해 최적의 성능을 발휘할 수 있는 프롬프트를 만들 수 있습니다.
- 오픈소스: Promptfoo는 오픈소스 프로젝트로, GitHub에서 소스 코드를 자유롭게 다운로드하고 수정할 수 있습니다. 이를 통해 사용자 요구에 맞게 도구를 커스터마이징하거나, 커뮤니티에 기여할 수 있습니다.
설치 및 사용법
Promptfoo는 GitHub에서 제공되는 소스 코드를 통해 설치할 수 있습니다. Node.js 환경에서 동작하며, 간단한 명령어를 통해 다양한 프롬프트 테스트를 실행할 수 있습니다.
$ npm install -g promptfoo
$ promptfoo init
# 또는
$ npx promptfoo@latest init
이 명령을 실행하면 프롬프트를 평가하고 결과를 보여줍니다. 추가적인 설정이나 프롬프트 파일을 통해 더욱 복잡한 테스트 시나리오를 구성할 수도 있습니다.
- 평가(promptfooconfig.yaml 필요)
$ promptfoo eval
# 또는
$ npx promptfoo@latest eval
평가 결과를 output 옵션을 주어 파일로 저장할 수 있다.
"""
json, html, csv 등 가능
"""
$ promptfoo eval -o output.json
# 또는
$ npx promptfoo@latest eval -o output.json
또한 평가 후 웹으로 결과를 볼 수 있다.
$ promptfoo view
# 또는
$ npx promptfoo@latest view
활용 사례
Promptfoo는 다음과 같은 상황에서 유용하게 활용될 수 있습니다:
- 챗봇 개발: 챗봇의 응답을 최적화하기 위해 다양한 프롬프트를 테스트하고 개선할 수 있습니다.
- 컨텐츠 생성: 자동화된 글쓰기나 창의적인 컨텐츠를 생성하는 프롬프트를 실험할 때, 가장 효과적인 방법을 찾을 수 있습니다.
- 언어 모델 평가: 여러 LLM을 비교하여 특정 작업에 가장 적합한 모델과 프롬프트를 선택할 수 있습니다.
Promptfoo는 프롬프트 엔지니어링 과정에서 시간을 절약하고 효율성을 높여줄 수 있는 강력한 도구입니다. 프롬프트의 성능을 체계적으로 테스트하고 개선하고자 하는 모든 개발자와 연구자에게 유용할 것입니다.
promptfoo 는 promptfooconfig.yaml을 필요로 한다.
import yaml
# 예제를 활용
prompt = ["Write a tweet about {{topic}}", "Write a concise, funny tweet about {{topic}}"]
model = ["openai:gpt-3.5-turbo", "openai:gpt-4o"] # 사용자 지정
topic = "new york city" # 변수: 필요시 사용
value = "ensure that the output is funny" # 평가 지표
def create_yaml(prompt: list[str], model: list[str], topic: str, value: str):
data = {
"description": "promptfoo 사용법을 위한 예시",
"prompts": prompt,
"providers": model,
"tests": [
{
"vars": {
"topic": topic
},
"assert": [
{
"type": "llm-rubric",
"value": value
}
]
}
]
}
# 데이터를 YAML 파일로 저장
with open("promptfooconfig.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False, allow_unicode=True, indent=2)
create_yaml(prompt, model, topic, value)
+) wsl에서는 작동하지 않아서 한참을 고생했다. 그냥 wsl에서는 하지 않는걸로...
Intro | promptfoo
promptfoo is a CLI and library for evaluating and red-teaming LLM apps.
www.promptfoo.dev
GitHub - promptfoo/promptfoo: Test your prompts, agents, and RAGs. Red teaming, pentesting, and vulnerability scanning for LLMs.
Test your prompts, agents, and RAGs. Red teaming, pentesting, and vulnerability scanning for LLMs. Compare performance of GPT, Claude, Gemini, Llama, and more. Simple declarative configs with comma...
github.com
'AI > LLM' 카테고리의 다른 글
LLM 가격 추적 및 토큰 계산, Tokencost로 간편하게 (2) | 2024.08.23 |
---|---|
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 논문 요약 (1) | 2024.08.22 |
Efficient Memory Management for Large LanguageModel Serving with PagedAttention(vllm) 논문 요약 (2) | 2024.08.21 |
GPT-4o, 4o-mini 간략 설명 (0) | 2024.08.20 |
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(COT 요약) (2) | 2024.08.14 |