Appearance
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 响应格式化、数据提取、配置生成、多选题回答
- 生态集成: 与 LangChain、LlamaIndex 等框架可以结合使用
相关实体
- Large Language Model (LLM): 结构化输出的目标模型
- vLLM: 支持的推理引擎之一
- Structured Output / JSON Mode: 常用的结构约束方式