
项目简介
Outlines 是由 .txt(dottxt)团队开源的 LLM 结构化输出(Structured Outputs)库——它在生成阶段就保证大模型输出严格符合你指定的类型或结构(枚举、整数、Pydantic 模型、JSON Schema、正则、上下文无关文法),从根源上消灭”解析失败、JSON 残缺”问题。项目在 GitHub 上已收获 15,200+ Stars,被 NVIDIA、Cohere、HuggingFace、vLLM 等信任并采用,vLLM 的 Structured Output 后端正是基于它的 outlines-core。
一句话:别再用正则和 try/except 去”修补”模型输出了——Outlines 让模型从一开始就只能生成合法结构:
model(prompt, output_type)。
安装要求和过程
环境要求
- Python 3.9+(建议 3.10 以上)
- 按需选择后端:本地推理需
transformers/llama.cpp(配相应硬件),或走 vLLM / Ollama 服务端,或直接用 OpenAI / Gemini API(无本地算力要求) - 操作系统不限,CPU 也能跑(配合 API 或 Ollama)
快速安装

# 基础安装
pip install outlines
# 按后端安装可选依赖(示例)
pip install outlines[transformers] # 本地 transformers 模型
pip install outlines[vllm] # vLLM 服务
pip install outlines[openai] # OpenAI API30 秒上手
import outlines
from typing import Literal
from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL = "microsoft/Phi-3-mini-4k-instruct"
model = outlines.from_transformers(
AutoModelForCausalLM.from_pretrained(MODEL, device_map="auto"),
AutoTokenizer.from_pretrained(MODEL),
)
# 情感分类:输出只可能是这三个值之一
sentiment = model(
"Analyze: 'This product completely changed my life!'",
Literal["Positive", "Negative", "Neutral"],
)
print(sentiment) # "Positive"
# 提取数值:保证返回合法 int
temperature = model("What's the boiling point of water in Celsius?", int)
print(temperature) # 100核心功能

- 类型即约束,贴合 Python 类型系统:
Literal做多选一、int/float做数值、Pydantic 模型/JSON Schema 做复杂对象、正则约束字符串格式、CFG 文法约束复杂语法——一行model(prompt, type)全部搞定。 - 生成期保证合法,而非事后修补:基于约束解码(constrained decoding),在每个 token 采样时就屏蔽非法选项,输出 100% 可被
model_validate_json解析,不存在破损 JSON。 - 一套代码横跨所有模型:统一接口支持 transformers、llama.cpp(本地),vLLM、Ollama(服务端),OpenAI、Gemini(API),换模型/换供应商不改业务代码。
- 函数签名即 Schema 的 Function Calling:把 Python 函数直接当输出类型传入,Outlines 自动从签名推断结构,返回可直接
**kwargs调用的参数字典。 - Jinja 提示词模板与可复用应用:
outlines.Template把复杂 Prompt 从代码中分离,支持 few-shot 模板文件复用,方便工程化管理。
典型使用场景
1. 客服工单自动分诊
把自由格式的用户来信一步解析为结构化工单(优先级枚举 / 类别 / 是否需主管介入 / 行动项列表),直接驱动自动路由与升级告警——priority 字段只可能是 low/medium/high/urgent 四个合法值,下游逻辑零防御代码。
2. 电商商品自动归类与信息抽取
批量把商品描述转成 主类目/子类目/属性列表/品牌 结构化数据,喂给库存和搜索系统;同理可做文档分类(财报/合同/技术文档)、事件信息抽取,甚至用 Union 类型优雅处理”信息不足则返回 I don’t know”的兜底。
3. 生产级 Agent / RAG 管道的可靠胶水层
Agent 的工具调用参数、RAG 的引用格式、多步工作流的中间态,全部用 Pydantic 模型锁死结构。vLLM 等推理引擎已内置其核心库,本地部署大模型时开启结构化输出几乎零成本。
推荐理由

- 解决的是 LLM 工程化第一痛点:任何把 LLM 输出接入程序的人都被破损 JSON 折磨过。Outlines 的思路是”让非法输出根本不可能被生成”,比重试+修复的方案优雅一个量级。
- 学习成本极低:会写 Python 类型注解就会用,10 分钟能跑通第一个例子;README 附 6 个可直接抄的生产级示例。
- 学术与工业双背书:源自论文《Efficient Guided Generation for Large Language Models》,NVIDIA、HuggingFace、vLLM、Cohere 都在用,不是玩具项目。
- Apache-2.0 宽松许可:商用无忧;核心 outlines-core 用 Rust 重写,约束编译速度快,生产可用。
- 实测感受:约束解码对本地小模型提升尤其明显——Phi-3 这类 3B 级模型配合 Outlines 做分类/抽取,可靠性直逼裸用大一个数量级的模型,非常适合降本场景。
下载地址
- GitHub 仓库:https://github.com/dottxt-ai/outlines
- 官方文档:https://dottxt-ai.github.io/outlines/
- PyPI:https://pypi.org/project/outlines/(
pip install outlines) - 官方博客:https://blog.dottxt.co/
项目信息(截至 2026-07-23):15,256 Stars · 809 Forks · Python · Apache-2.0 许可 · 由 .txt(dottxt-ai)团队维护
