bespokelabsai/curator

Synthetic data curation for post-training and structured data extraction

Bespoke Curator – 快速入门概述

是什么 – 一个 Python 库,允许您使用 LLM 构建大规模合成数据管道。它处理提示词构建、并行/批量推理、缓存、重试,并允许您将结果直接导入 Hugging Face Dataset 对象或微调工作流。


🎯 核心目的

  • 为训练、评估或提取任务生成或转换大量文本(或多模态)数据。
  • 提供结构化输出接口(基于 Pydantic 模型),使 LLM 的响应自动解析为干净的 JSON 类似记录。
  • 提供批量推理,支持 OpenAI、Anthropic、Gemini、DeepSeek、Ollama、vLLM 以及任何 LiteLLM 兼容的提供商,包括其批量 API,以降低 token 成本。
  • 与 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% 的 token 成本;通过在 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 的输出可以馈送到另一个,例如,生成主题 → 生成诗歌。
  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

诗歌生成(链接两个 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 是一个生产就绪的 Python 工具包,用于构建高吞吐量的 LLM 驱动数据管道,内置支持结构化输出、缓存、批量推理,并通过 Tinker 实现无缝 LoRA 微调。它面向需要为后训练任务生成或策展大规模数据集的研究人员和工程师。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目