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 处理函数提供状态空间模型的库集成;
- 通过 logits processor 与 llama.cpp 集成;
- 通过 logits processor 与 exllamav2 集成;
进一步推进结构化生成
我们才刚刚开始!
- 改进现有结构化生成算法的性能;
- 改进结构化生成算法的正确性;
- 在 grammars 仓库或 Outlines 的子模块中添加现成的语法。
持续开发 Outlines 函数
函数太棒了,快来使用它们吧!
- 实现一个 CLI 工具
outlines serve
,允许在本地服务 Outlines 函数; - 向 functions 仓库添加更多函数。
服务化结构化生成
我们希望让服务结构化生成和 Outlines 函数变得更容易。
- 实现 outlines serve CLI 工具
outlines serve
- 服务执行结构化生成的本地 API;
- 服务 Outlines 函数。
改进生成层
- 使用
transformers
的私有 API 在Transformers
类内部准备生成输入; - 支持 Beam Search 和 SMC 等方法的模型生成和文本填充的连续操作;
- 通过添加新的缓存方法来区分:例如 Attention Sink、Trie 树缓存等;
- 通过实现 SMC 来区分;
- 实现 Beam Search;
- 添加 Token 修复。
与 OpenAI 更无缝的集成
- 为 OpenAI 和开源模型提供相同的用户接口,使其易于互换;
- 集成函数调用 API。
最后的话
本路线图受到社区表达的兴趣影响。如果它未能反映您的需求,请随时前来与我们分享您的经验。