Promptify: Pydantic 구조화 출력을 지원하는 태스크 기반 NLP 엔진
요약
Promptify는 Pydantic 구조화 출력을 지원하는 태스크 기반 NLP 엔진입니다. 이를 통해 LLM을 활용하여 개체명 인식(NER), 분류, 질문 답변 등 다양한 자연어 처리 작업을 수행할 수 있습니다. LiteLLM 같은 범용 백엔드를 지원하며 내장 평가 기능도 제공합니다.
핵심 포인트
- Pydantic 구조화 출력을 지원하는 NLP 엔진입니다.
- NER, Classification, QA 등 태스크별 모듈을 제공합니다.
- LiteLLM 기반의 범용 LLM 백엔드를 사용합니다.
- 내장 평가 기능을 통해 모델 성능 검증이 용이합니다.
설치 (Installation)
pip 사용 시 (With pip)
Python 3.9 이상 필요.
pip install promptify
또는
pip install git+https://github.com/promptslab/Promptify.git
평가 지표 지원을 위해서는:
pip install promptify[eval]
빠른 사용법 (Quick Tour)
3줄 NER
from promptify import NER
er = NER(model="gpt-4o-mini", domain="medical")
...
출력 (Output):
NERResult(entities=[
Entity(text="93-year-old", label="AGE"),
Entity(text="chronic right hip pain", label="CONDITION"),
...
분류 (Classification)
from promptify import Classify
clf = Classify(model="gpt-4o-mini", labels=["positive", "negative", "neutral"])
...
질문 답변 (Question Answering)
from promptify import QA
qa = QA(model="gpt-4o-mini")
...
Pydantic 스키마를 사용한 사용자 정의 태스크
from promptify import Task
from pydantic import BaseModel
...
어떤 제공업체든 가능 - 모델 문자열만 변경
net_openai = NER(model="gpt-4o-mini")
net_claude = NER(model="claude-sonnet-4-20250514")
net_local = NER(model="ollama/llama3")
배치 처리 (Batch Processing)
results = ner.batch(["text1", "text2", "text3"], max_concurrent=10)
비동기 지원 (Async Support)
result = await ner.acall("Patient has diabetes")
내장 평가 기능 (Built-in Evaluation)
from promptify.eval import evaluate
scores = evaluate(task=ner, dataset=labeled_data, metrics=["precision", "recall", "f1"])
...
주요 기능 (Features)
- 어떤 NLP 태스크든 2~3줄의 코드로 구현 가능 - 학습 데이터 불필요
- Pydantic 구조화 출력: 원시 문자열이 아닌 타입 안전(type-safe)한 결과 제공
- LiteLLM을 통한 모든 LLM 제공업체 지원: OpenAI, Anthropic, Google, Ollama, Azure 및 100개 이상의 서비스 지원
- 내장 태스크: 개체명 인식 (NER), 분류 (Classification, 이진/다중 클래스/다중 레이블), 질의응답 (QA), 요약 (Summarization), 관계 추출 (Relation Extraction), SQL 생성 등
- 사용자 정의 태스크: 원하는 구조화 출력을 위해 자체 Pydantic 스키마를 가져올 수 있음
- 퓨샷 예제 (Few-shot examples): 정확도를 높이기 위해 쉽게 예제를 추가할 수 있음
- 도메인 특화 (Domain specialization): 컨텍스트 인식 프롬프트를 위해
domain="medical"또는 다른 도메인을 전달할 수 있음 - 배치 처리: 내부적으로 비동기 동시성(async concurrency)을 활용하여 여러 텍스트를 처리
- 비동기 지원:
acall()을 사용한 네이티브await지원 - 평가 프레임워크: 정밀도 (precision), 재현율 (recall), F1, 정확도 (accuracy), 정확히 일치하는 값 (exact match), ROUGE 지표 등 제공
- 안전 파서 (Safe parser): 네이티브 구조화 출력이 없는 제공업체를 위한 폴백 JSON 완성 기능 (
eval()불필요) - 비용 추적:
get_cost_summary()를 통해 내장 토큰 사용량 및 비용 모니터링
지원되는 NLP 태스크
| 태스크 | 클래스 | 출력 스키마 |
|---|---|---|
| 개체명 인식 (Named Entity Recognition) | NER | NERResult (list of Entity) |
| ... |
커뮤니티
<div align="center"> 만약 Prompt-Engineering, LLMs, 그리고 NLP에 관심이 있다면, <a href="https://discord.gg/m88xfYMbK6">PromptsLab</a> 가입을 고려해 주세요.</div> <div align="center"> <img alt="Discord에서 참여하세요" src="https://img.shields.io/discord/1069129502472556587?color=5865F2&logo=discord&logoColor=white"> </div>
@misc{Promptify2022,
title = {Promptify: LLM의 구조화된 출력}
...
💁 기여하기
새로운 기능, 인프라 개선, 그리고 더욱 포괄적인 문서화를 포함하여 저희 오픈 소스 프로젝트에 대한 모든 기여를 환영합니다. 기여 가이드라인을 참고해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기