Outlines 结构化生成
Outlines:结构化 JSON/正则/Pydantic LLM 输出生成
Outlines 结构化文本生成
使用场景
需要以下场景时使用 Outlines:
- 保证生成 JSON/XML/代码的有效性,而非生成后解析
- 使用 Pydantic 模型获得类型安全的输出
- 支持本地模型(Transformers、llama.cpp、vLLM)
- 最大化推理速度,零开销的结构化生成
- 基于 JSON Schema 自动生成有效输出
- 在语法级别控制 token 采样
GitHub Stars: 8,000+ | 来自: dottxt.ai(前身 .txt)
安装
# 基础安装
pip install outlines
# 带特定后端
pip install outlines transformers # Hugging Face 模型
pip install outlines llama-cpp-python # llama.cpp
pip install outlines vllm # vLLM 高吞吐
快速入门
基础示例:分类
import outlines
from typing import Literal
# 加载模型
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
# 带类型约束生成
prompt = "评论 '这个产品太棒了!' 的情感: "
generator = outlines.generate.choice(model, ["positive", "negative", "neutral"])
sentiment = generator(prompt)
print(sentiment) # "positive"(保证是其中之一)
使用 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")
# 基于 Pydantic 模型生成
generator = outlines.generate.json(model, User)
result = generator("创建一个名为 Alice 的用户,30 岁,邮箱 alice@example.com。")
print(result)
# {"name": "Alice", "age": 30, "email": "alice@example.com"}
使用 JSON Schema
schema = {
"type": "object",
"properties": {
"title": {"type": "string"},
"rating": {"type": "number", "minimum": 1, "maximum": 5},
"review": {"type": "string"}
},
"required": ["title", "rating"]
}
generator = outlines.generate.json(model, schema)
result = generator("Write a book review for 'The Great Gatsby'.")
print(result)
使用正则表达式
import outlines
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
# 严格匹配正则格式
phone_gen = outlines.generate.regex(model, r'\+?1?\d{9,15}')
phone = phone_gen("Get me a phone number.")
print(phone) # "+1234567890"
核心概念
生成器类型
| 生成器 | 用途 | 示例 |
json | JSON 对象 | Pydantic、JSON Schema |
regex | 正则匹配 | 电话号码、日期 |
choice | 选项 | 分类、评分 |
format | 格式化 | Python dict、列表 |
| 问题 | 解决方案 |
| 生成进入死循环 | 确保 Schema/Regex 完整,无歧义分支 |
| 输出不完全的 JSON | 设置 max_tokens 确保完整生成 |
| 不支持的模型 | 检查 outlines 版本,使用 transformers 后端 |
| Pydantic 验证失败 | 添加 field_validator 或使用 nullable 字段 |
安装指南
复制下方命令,在终端运行即可安装:
# 安装到当前项目
npx skills add outlines
# 全局安装 — 所有项目可用
npx skills add outlines -g
需已安装 CodexHub CN 桌面端
使用指南
安装完成后,在对话框中直接使用此技能。