Skip to content

Outlines

Outlines 是一个用于 Large Language Model (LLM) 结构化输出的开源 Python 框架,由 Normal Computing 团队开发。它通过结合正则表达式、上下文无关文法 (CFG) 和提示词模板,让开发者能够精确控制 LLM 的输出格式,确保生成有效的 JSON、Python 代码、正则匹配等结构化数据。

概览

传统的 LLM 输出通常是自由文本,难以直接用于程序化处理。Outlines 解决了这个问题,通过在模型的生成过程中应用约束,确保输出始终符合预定的结构。这种方法比事后解析或重试更可靠、更高效。

核心功能

结构化输出模式

模式说明示例
JSON Schema根据 JSON Schema 生成有效 JSON{ "name": "string", "age": "integer" }
Pydantic 模型使用 Pydantic 类定义输出结构class User(BaseModel): name: str; age: int
正则表达式根据 regex 生成匹配文本[A-Z]{2}-\d{4}
CFG上下文无关文法约束自定义语法规则
Choices从预定选项中选择["option_a", "option_b", "option_c"]

主要 API

python
import outlines

# 使用 Pydantic 模型约束输出
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int
    email: str

model = outlines.models.transformers("microsoft/DialoGPT-medium")
generator = outlines.generate.json(model, User)
result = generator("生成一个用户信息")
# result 始终是有效的 User 对象

支持的模型后端

  • Transformers (Hugging Face): 支持大多数开源模型
  • vLLM: 高性能推理引擎
  • llama.cpp: 本地 CPU/GPU 推理
  • OpenAI API: 兼容闭源模型
  • Mamba: 状态空间模型

技术亮点

  • 生成时约束: 在采样过程中实时应用约束,而非事后验证
  • 高效实现: 基于有限状态机 (FSM) 和栈机制的高效算法
  • 灵活性: 支持多种约束类型和模型后端
  • 类型安全: 与 Python 类型系统深度集成

定价

Outlines 是开源软件,免费使用 (Apache 2.0 许可)。

生态定位

  • 与竞品对比: 比 Guidance、LMQL 等框架更灵活,支持更多模型后端
  • 应用场景: API 响应格式化、数据提取、配置生成、多选题回答
  • 生态集成: 与 LangChainLlamaIndex 等框架可以结合使用

相关实体

AI Knowledge Base — 持续积累