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の例より)

  1. Pydanticで構造化出力モデルを定義します。
  2. curator.LLMをサブクラス化し、以下を実装します:
    • prompt(self, input) – LLMに送信するテキストを返します。
    • parse(self, input, response) – 構造化応答を行に変換します。
  3. モデル名とオプションのbatch=Trueでクラスをインスタンス化します。
  4. リストまたはHugging Face Datasetでインスタンスを呼び出します – Curatorが並列処理、キャッシュ、再試行を処理します。
  5. (オプション)ブロックをチェーン – あるLLMの出力を別のLLMにフィードできます(例:トピック生成→詩の生成)。
  6. (オプション)結果のデータセットを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

詩の生成(2つの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ツールキットです。ポストトレーニングタスクのために大規模なデータセットを生成またはキュレートする必要がある研究者やエンジニアを対象としています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト