用途
Outlines 用于在生成阶段就保证大语言模型输出符合指定结构,避免生成后再校验和重试。适用场景包括:需要保证 JSON/XML/代码结构有效、使用 Pydantic 模型获得类型安全输出、支持本地模型(Transformers、llama.cpp、vLLM)、以零开销实现结构化生成、依据 JSON Schema 自动生成、在语法层面控制 token 采样。
主要能力
- 约束式 token 采样:将 schema(JSON/Pydantic/正则)转换为上下文无关文法(CFG),再转为有限状态机(FSM),在生成每一步过滤无效 token,并在仅剩一个有效 token 时快速前进。其宣称的优势为零开销、速度提升、保证有效性。
- 结构化生成器:提供 choice(多选)、json(JSON/Pydantic)、regex(正则匹配)、integer、float 等专用生成器。
- Pydantic 集成:原生支持 Pydantic 模型,自动进行 schema 转换,支持嵌套模型、Enum、Literal 以及 Field 约束(如 min_length、ge、pattern 等)。
- 多后端支持:支持 Transformers(Hugging Face)、llama.cpp(GGUF)、vLLM(高吞吐、多 GPU)以及有限的 OpenAI 支持。
使用方式
安装:
pip install outlines
pip install outlines transformers # Hugging Face 模型
pip install outlines llama-cpp-python # llama.cpp
pip install outlines vllm # vLLM 高吞吐
基本分类示例:
import outlines
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = outlines.generate.choice(model, ["positive", "negative", "neutral"])
sentiment = generator("Sentiment of 'This product is amazing!': ")
Pydantic JSON 示例:
from pydantic import BaseModel
import outlines
class User(BaseModel):
name: str
age: int
email: str
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = outlines.generate.json(model, User)
user = generator("Extract user: John Doe, 30 years old, john@example.com")
正则、整数、浮点生成器分别使用 outlines.generate.regex、outlines.generate.integer、outlines.generate.float。后端通过 outlines.models.transformers、outlines.models.llamacpp、outlines.models.vllm、outlines.models.openai 加载。
适用场景
- 使用本地模型(Transformers、llama.cpp、vLLM)并需要结构化输出。
- 追求最大推理速度、零开销结构化生成。
- 需要 Pydantic 模型支持与类型安全。
- 需要控制 token 采样过程。
限制与注意事项
- 与替代方案相比,Outlines 不提供自动重试(Automatic Retrying)。
- 对 API 模型(如 OpenAI)的支持有限,部分功能受限。
- 资料中未提供具体收费、价格信息。
- 版本相关细节可能过时,应以所安装版本的官方文档为准。
资源
- 文档:https://outlines-dev.github.io/outlines
- GitHub:https://github.com/outlines-dev/outlines
- Discord:https://discord.gg/R9DSu34mGd
- 博客:https://blog.dottxt.co