Outlines通过CFG约束输出格式,LM Format Enforcer则走了另一条路——基于token前缀树的约束。两种方案各有优劣。

工作原理

LM Format Enforcer把合法输出构建成一个前缀树(Trie)。每生成一个token,就沿着前缀树向下走一层,只允许选择前缀树中存在的子节点。实现更轻量,不需要完整的CFG解析器。

和Outlines对比

Outlines支持更复杂的约束(完整JSON Schema、正则表达式),但开销更大。LM Format Enforcer只支持JSON Schema和简单的前缀约束,但速度更快。

实际测试中,简单JSON输出场景LM Format Enforcer比Outlines快10%-20%。

集成方式

已经集成到vLLM和Text Generation Inference中。在vLLM中通过extra_body传入guided_json参数即可。

选型建议

如果约束比较简单(固定格式的JSON输出),用LM Format Enforcer更快。如果约束复杂(嵌套schema、条件字段),用Outlines更灵活。不管选哪个,都比纯prompt约束可靠得多。

2026年的趋势是推理框架内置约束解码能力。未来"约束输出"会成为标配,而不需要额外库。