SuperAPI AI 工具集

outlines

智能体与模型

查看项目

更新于 10-21 16:18

技能介绍

用途

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