2024 年路线图
Outlines 还没满一岁,但已经取得了长足的进展!在我们刚刚达到 4000 星之际,在制定下一年的路线图之前,我们想停下来感谢所有支持我们、使用并为该库做出贡献的人!
思考
在深入探讨详细路线图之前,请允许我分享一些想法,并解释该库的总体方向。这些想法来自于我与用户的多次互动,无论是在Twitter上还是在我们的Discord 服务器上。
Outlines 目前凭借其高效的 JSON 和正则表达式约束生成功能脱颖而出。最近还添加了一个用于语法结构化生成的用户界面(之前隐藏在仓库中)。但我们还能在此基础上做更多事情。在 2024 年,我们将继续朝着更准确、更快速的约束生成方向努力。
Outlines 还支持多种模型提供商:transformers
、mamba
、llama.cpp
和 exllama2
。这些集成需要大量的维护工作,我们需要对此进行简化。例如,transformers
现在支持量化模型,我们很快将弃用对 autoawq
和 autogptq
的支持。得益于该库的重构,现在除了 mamba
之外,所有其他库都可以使用 logits processor 来实现我们的约束生成方法。我们将寻找提供状态空间模型并允许在推理期间传递 logits processor 的库。我们将使用 logits processor 与 llama.cpp
和 exllama2
进行接口交互。
我们希望将工作扩展到整个采样层,并添加新的采样方法,以使结构化生成更加准确。这意味着我们将保留现有的 transformers
集成,并围绕该库扩展我们的文本生成逻辑。
目前,使工作流可重用且易于共享是困难的。这就是为什么我们非常看好Outlines 函数。我们将继续改进其接口并添加示例。
最后,我们想添加一个 CLI 工具,名为 outlines serve
。这将允许您提供一个执行通用约束生成的 API,或者提供 Outlines 函数的服务。
详细路线图
以下是未来 12 个月的详细路线图。Outlines 是一项社区共同努力的成果,我们邀请您选择其中一个主题并为该库做出贡献。我将逐步在仓库中添加相关的问题。
更多示例和教程
老实说,Outlines 缺乏清晰透彻的示例。我们想改变这一点!
- Outlines 是如何工作的?你能用它做什么?
- 使用 Outlines 可以做哪些其他库难以或不可能做到的事情?
- 如何执行标准的 LLM 工作流,例如思维链(Chain of Thoughts)、思维树(Tree of Thoughts)等?
- Outlines 如何与更广泛的生态系统集成,例如 LangChain 和 LlamaIndex 等其他库?
简化集成
我们希望保留当前的集成,但降低维护成本,以便我们能专注于我们带来的价值。
- 弃用所有过时的集成:例如,
transformers
最近已集成了autoawq
和autogptq
。(PR) - 研究是否可以集成到提供通过 logit processing 函数实现状态空间模型的库;
- 通过 logits processor 与 llama.cpp 集成;
- 通过 logits processor 与 exllamav2 集成;
进一步推动结构化生成
我们才刚刚开始!
- 改进现有结构化生成算法的性能;
- 提高结构化生成算法的正确性;
- 在 grammars 仓库或 Outlines 的一个子模块中添加开箱即用的语法。
继续开发 Outlines 函数
函数非常棒,用起来吧!
- 实现一个名为
outlines serve
的 CLI 工具,用于在本地提供 Outlines 函数的服务; - 向 functions 仓库添加更多函数。
提供结构化生成服务
我们希望让提供结构化生成和 Outlines 函数的服务变得更容易。
- 实现名为
outlines serve
的 Outlines 服务 CLI 工具 - 提供执行结构化生成的本地 API 服务;
- 提供 Outlines 函数的服务。
改进生成层
- 使用
transformers
的私有 API 在Transformers
类中准备生成所需的输入; - 支持 Beam Search 和 SMC 等方法中的模型生成序列和文本填充;
- 通过添加新的缓存方法来体现差异化:注意力汇聚 (attention sink)、Trie 树缓存等;
- 通过实现 SMC 来体现差异化;
- 实现 Beam Search;
- 添加 token 修复。
与 OpenAI 更无缝的集成
- 为 OpenAI 和开源模型提供相同的用户界面,以便它们可以轻松互换;
- 集成函数调用 API。
结语
此路线图受到了社区所表达的兴趣的影响。如果它未能反映您的需求,请来与我们分享您的经验。