bespokelabsai/curator
Synthetic data curation for post-training and structured data extraction
Bespoke Curator – 빠른 시작 개요
정의 – LLM을 사용하여 대규모 합성 데이터 파이프라인을 구축할 수 있는 Python 라이브러리입니다. 프롬프트 구성, 병렬/배치 추론, 캐싱, 재시도를 처리하고 결과를 Hugging Face Dataset 객체나 파인튜닝 워크플로우로 직접 전달할 수 있습니다.
🎯 핵심 목적
- 훈련, 평가 또는 추출 작업을 위해 대량의 텍스트(또는 멀티모달) 데이터를 생성하거나 변환합니다.
- 구조화된 출력 인터페이스(Pydantic 모델 기반)를 제공하여 LLM의 응답을 깨끗한 JSON 유사 레코드로 자동 파싱합니다.
- OpenAI, Anthropic, Gemini, DeepSeek, Ollama, vLLM 및 LiteLLM 호환 공급자를 포함한 모든 공급자를 지원하는 대량 추론을 제공하며, 토큰 비용을 절감하는 배치 API도 포함합니다.
- Tinker SDK와 통합하여 큐레이션된 데이터셋의 원클릭 LoRA 파인튜닝을 지원합니다.
🛠️ 주요 구성 요소 (README에 설명된 대로)
| 구성 요소 | 역할 | 주요 기능 |
|---|---|---|
curator.LLM |
프롬프트 및 파싱 단계를 정의하기 위해 서브클래싱하는 기본 클래스. | • 구조화된 출력을 위한 Pydantic response_format을 허용합니다.• 비동기 호출, 재시도, 캐싱 및 선택적 배치 모드를 처리합니다. • Hugging Face Dataset 또는 일반 목록을 반환합니다. |
| 공급자 | 다양한 API용 백엔드 어댑터. | OpenAI, Anthropic, Gemini, DeepSeek, Ollama, vLLM, litellm, kluster.ai. 각각 사용자 정의 backend_params(속도 제한, 기본 URL, API 키)로 구성할 수 있습니다. |
| 배치 모드 | 공급자가 지원하는 경우 많은 프롬프트를 단일 요청으로 보냅니다. | 토큰 비용을 약 50% 절감합니다. LLM 인스턴스에서 batch=True로 활성화합니다. |
| CodeExecutor | LLM이 생성한 Python 코드를 실행할 수 있는 선택적 런타임. | 로컬 멀티프로세싱, Ray, Docker 또는 e2b SaaS 백엔드를 지원합니다. |
| TinkerTrainer | LoRA 파인튜닝을 위한 Tinker SDK의 얇은 래퍼. | 간단한 구성 객체, 체크포인트 재개, 파인튜닝된 모델에 쿼리하는 sample 메서드. |
| 뷰어 | 생성 진행 상황을 모니터링하고 실시간 통계를 표시하는 UI(CLI GIF 표시). |
🚀 일반적인 워크플로우 (README 예제에서)
- Pydantic으로 구조화된 출력 모델 정의.
curator.LLM서브클래싱 및 구현:prompt(self, input)– LLM에 보낼 텍스트를 반환합니다.parse(self, input, response)– 구조화된 응답을 행으로 변환합니다.
- 모델 이름 및 선택적
batch=True로 클래스 인스턴스화. - 목록 또는 Hugging Face
Dataset에서 인스턴스 호출 – Curator가 병렬 처리, 캐싱, 재시도를 처리합니다. - (선택 사항) 블록 체이닝 – 한
LLM의 출력을 다른LLM에 공급할 수 있습니다(예: 주제 생성 → 시 생성). - (선택 사항)
TinkerTrainer로 결과 데이터셋 파인튜닝.
📦 설치
pip install bespokelabs-curator # 핵심 라이브러리
pip install bespokelabs-sandbox # 선택적 샌드박스 유틸리티
# 파인튜닝용
pip install tinker
모든 패키지는 최상위 임포트 네임스페이스 bespokelabs를 공유합니다:
from bespokelabs import curator, sandbox
📚 예제 스니펫 (README에서 직접)
감정 분석 (대량 추론)
class Sentiment(BaseModel):
sentiment: Literal["positive", "negative", "neutral"]
class SentimentAnalyzer(curator.LLM):
def prompt(self, product):
return f"Determine the sentiment of the product from the review: {product['review']}"
def parse(self, product, response: Sentiment):
return [{"name": product["name"], "sentiment": response.sentiment}]
analyzer = SentimentAnalyzer(model_name="gpt-4o-mini", batch=False)
reviews = analyzer(dataset) # dataset은 리스트 또는 HF Dataset
시 생성 (두 LLM 블록 체이닝)
class Topics(BaseModel):
topics_list: List[str]
class TopicGenerator(curator.LLM):
response_format = Topics
def prompt(self, subject):
return f"Return 3 topics related to {subject}"
def parse(self, _, resp: Topics):
return [{"topic": t} for t in resp.topics_list]
class Poet(curator.LLM):
response_format = Poem
def prompt(self, inp):
return f"Write two poems about {inp['topic']}"
def parse(self, _, resp: Poem):
return [{"title": resp.title, "poem": resp.poem}]
topics = TopicGenerator(model_name="gpt-4o-mini")("Mathematics")
poems = Poet(model_name="gpt-4o-mini")(topics)
Tinker로 파인튜닝
from bespokelabs.curator import TinkerTrainer, TinkerTrainerConfig
config = TinkerTrainerConfig(
base_model="Qwen/Qwen3-8B",
epochs=3, batch_size=4,
lora_config={"rank": 16, "alpha": 32, "dropout": 0.05},
checkpoint_every_epoch=True,
)
trainer = TinkerTrainer(config)
result = trainer.train(training_data)
print(trainer.sample("Explain recursion in Python"))
🌐 생태계 및 커뮤니티
- 문서 및 튜토리얼 –
docs.bespokelabs.ai(시작하기, 사용 방법 가이드, API 참조). - 호스팅 API –
console.bespokelabs.ai(관리형 추론용). - Discord 및 Twitter – 지원 및 공지사항을 위한 활발한 커뮤니티 채널.
- 최근 하이라이트 (2025-2026):
- OpenThoughts-Agents 및 여러 고품질 추론 데이터셋(Stratos-17k, OpenThoughts-114k 등) 구축에 사용되었습니다.
- Fireworks AI, Gemini, Claude 3.7 Sonnet 및 배치 API와 통합되었습니다.
- Ray, Docker, e2b를 지원하는 코드 실행 엔진을 추가했습니다.
✅ Bespoke Curator를 사용해야 하는 경우
- 파인튜닝이나 평가를 위한 대규모의 구조화된 합성 데이터가 필요한 경우.
- 비용 효율적인 대량 추론(배치 모드, 캐싱, 재시도)이 필요한 경우.
- 이미 접근 가능한 모든 LLM 공급자와 함께 작동하는 단일 Pythonic 인터페이스를 선호하는 경우.
- Tinker SDK를 통해 큐레이션된 데이터를 LoRA로 파인튜닝할 계획이 있는 경우.
❓ 제한 사항 / 주의 사항
- 외부 LLM API에 의존합니다. 할당량과 지연 시간은 선택한 공급자에 따라 다릅니다.
- 구조화된 출력 파싱은 올바른 Pydantic 스키마가 필요합니다. 불일치 시 검증 오류가 발생합니다.
- 배치 모드는 일부 공급자(작성 시점 기준 OpenAI, Anthropic, Gemini, kluster.ai, Mistral)에서만 사용할 수 있습니다.
TL;DR
Bespoke Curator는 구조화된 출력, 캐싱, 배치 추론, Tinker를 통한 원활한 LoRA 파인튜닝을 기본 지원하는 고처리량 LLM 기반 데이터 파이프라인 구축을 위한 프로덕션 준비 Python 도구 키트입니다. 포스트 트레이닝 작업을 위해 대규모 데이터셋을 생성하거나 큐레이션해야 하는 연구자와 엔지니어를 대상으로 합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트