Outlines-core 0.1.0 发布说明 / 新功能
Hugging Face 和 dottxt 宣布发布 outlines-core 0.1.0,这是 outlines 库中用于结构化生成的核心算法的 Rust 移植版。此重写提升了索引编译速度,增强了软件可靠性,并使核心逻辑能够集成到非 Python 环境中。
结构化生成基础
结构化生成确保大型语言模型(LLM)必定遵循特定格式——例如 JSON、Pydantic 模型、正则表达式或上下文无关文法——通过禁止生成“错误”标记来实现。
系统不再从词表中所有可能的标记进行采样,而是将可选项限制为仅满足所需结构的标记。例如,如果模型被约束只能输出布尔值(“true”或“false”),系统会将第一个字符的选择限制为 't' 或 'f',随后根据该初始选择强制后续字符完成单词。
除了简单的 JSON 序列化,结构化生成还支持多种高级 LLM 工作流:
- Synthetic Data Generation: 创建用于训练的结构化数据集。
- Information Extraction: 从文档和图像中提取特定数据。
- Agentic Workflows: 实现函数调用并构建 AI 代理。
- Reasoning: 促进思考链(Chain of Thought)过程。
- Evaluation Stability: 降低模型评估对特定提示和少量示例数量的敏感性。
Rust 重写的技术优势
将核心算法从 Python 移植到 Rust 带来了四大技术优势:
索引编译速度提升 2 倍
outlines-core 在索引编译速度上平均提升了 2 倍。之前,outlines 使用 Numba 加速,这会在首次运行时产生 JIT 编译延迟。使用 Rust 后,这些函数在编译时即完成(AOT),消除了首次运行的延迟,加快了开发者的实验阶段。
增强的安全性和可靠性
Rust 的所有权模型和强静态类型消除了常见的错误,如并发代码中的数据竞争和空指针解引用。这种安全性对结构化生成至关重要,因为它涉及复杂的数据操作和高性能推理引擎,内存管理不当可能导致运行时错误或未定义行为。
关注点分离
通过将核心算法解耦为轻量级库(outlines-core),其他库现在可以集成结构化生成,而无需继承完整 outlines 库(如 transformers)的沉重依赖。这种架构使得直接集成到 transformers 和 llama-cpp-python 等库成为可能。
跨语言可移植性
由于核心逻辑已转为 Rust,能够为除 Python 之外的其他语言创建绑定。这对推理尤为有利,因为推理常在使用多种语言的专用服务器或设备上进行。
关键的可移植性影响包括:
- Text Generation Inference (TGI): 更顺畅地集成到 TGI,因为 TGI 的服务器逻辑使用 Rust 编写,减少了调用 Python 代码的需求。
- Rust Ecosystem: 更易于在
mistral.rs或使用candle实现的模型等库中采用。 - Future Bindings: 未来可能支持 JS/TS(用于
transformers-js)和 Swift(用于原生 Apple 设备使用)。
当前状态与路线图
outlines-core 0.1.0 已公开并集成到 outlines 库中。当前的开发重点是完善 Python 绑定并扩展对 JSON Schema 规范的支持。