SuperAPI AI 工具集

outlines

智能体与模型

查看项目

更新于 10-15 13:10

技能介绍

用途

Outlines 用于在文本生成过程中强制保证输出结构合法。当你需要模型稳定产出符合 JSON、XML、代码或正则表达式格式的内容,或希望用 Pydantic 模型获得类型安全的输出时,可以使用该库。它特别适合本地模型部署场景,能在不牺牲推理速度的前提下消除无效输出。

主要能力

  • 约束式 token 采样:通过有限状态机(FSM)在 logit 层面过滤无效 token。流程为:将 schema(JSON/Pydantic/正则)转换为上下文无关文法(CFG),再转为 FSM,生成时逐步过滤非法 token,并在仅剩一个合法 token 时快速前进。
  • 结构化生成器:提供 choice(多选一)、json(匹配 Pydantic 模型或 JSON Schema)、regex(匹配正则)、integer、float 等专用生成器。
  • Pydantic 集成:原生支持 Pydantic 模型,自动完成 schema 转换,支持嵌套模型、Enum、Literal、字段约束(如 gt、min_length、pattern)和可选字段。
  • 多后端支持:支持 Hugging Face Transformers、llama.cpp(GGUF)、vLLM(高吞吐、多 GPU、量化),以及有限的 OpenAI API 支持。

使用方式

安装:

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 结构化输出:

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")

正则约束:

generator = outlines.generate.regex(model, r"[0-9]{3}-[0-9]{3}-[0-9]{4}")
phone = generator("Generate phone number:")

后端配置示例:

# llama.cpp
model = outlines.models.llamacpp("./models/llama-3.1-8b-instruct.Q4_K_M.gguf", n_gpu_layers=35)

# vLLM 多 GPU
model = outlines.models.vllm("meta-llama/Llama-3.1-70B-Instruct", tensor_parallel_size=4)

适用场景

  • 数据抽取:从非结构化文本中提取公司信息、用户资料等结构化字段。
  • 分类任务:二分类、多分类,或带置信度的分类输出。
  • 结构化表单:生成包含多个字段和列表的用户档案。
  • 多实体识别:抽取文档中的人物、组织、地点等实体列表。
  • 代码生成:生成包含函数名、参数、文档字符串和函数体的结构化代码描述。
  • 批量处理:对多条文本循环执行结构化抽取。

限制

  • OpenAI API 支持有限,部分功能在 API 模型上不可用。
  • 不提供自动重试机制(与 Instructor 不同)。
  • 不提供 token healing 或复杂工作流(与 Guidance 不同)。
  • 不采用声明式查询语法(与 LMQL 不同)。
  • 官方资料未提供具体收费、价格或平台信息。

性能特征

  • 速度:零开销,结构化生成与无约束生成速度相当;快速前进优化跳过确定性 token;比生成后校验方案快 1.2–2 倍。
  • 内存:FSM 按 schema 编译一次并缓存,运行时开销极小。
  • 准确率:输出 100% 合法,无需重试循环。

资源

  • 文档:https://outlines-dev.github.io/outlines
  • GitHub:https://github.com/outlines-dev/outlines
  • Discord:https://discord.gg/R9DSu34mGd
  • 博客:https://blog.dottxt.co