2024年路线图
Outlines 还不到一岁,但已经取得了长足的进步!在我们刚达到 4000 颗星之际,在制定未来一年的路线图之前,我们想暂停一下,感谢大家对我们的支持、使用以及对库的贡献!
想法
在深入研究详细路线图之前,让我分享一些想法并解释一下库的总体方向。这些想法来自于我与用户在Twitter或我们的Discord 服务器上的多次交流。
Outlines 目前通过其高效的 JSON 和 Regex 约束生成功能区别于其他库。最近还添加了语法结构化生成的用户界面(之前一直隐藏在仓库中)。但我们在这方面还有很多可以做的事情。在 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 #527) - 看看我们是否可以通过 logit 处理函数集成到提供状态空间模型的库中;
- 通过 logits processor 与 llama.cpp 集成;
- 通过 logits processor 与 exllamav2 集成;
进一步推动结构化生成
我们才刚刚开始!
- 提高现有结构化生成算法的性能;
- 提高结构化生成算法的正确性;
- 在grammars 仓库或 Outlines 的子模块中添加现成的语法。
继续开发 Outlines 函数
函数很棒,快使用它们吧!
- 实现一个 CLI
outlines serve
,允许在本地提供 Outlines 函数的服务; - 向functions 仓库添加更多函数。
提供结构化生成服务
我们希望让提供结构化生成和 Outlines 函数的服务变得更容易。
- 实现 outlines serve CLI 工具
- 提供执行结构化生成的本地 API 服务;
- 提供 Outlines 函数的服务。
改进生成层
- 使用
transformers
的私有 API 在Transformers
类中准备生成输入; - 支持 Beam Search 和 SMC 等方法的模型生成和文本填充的连续过程;
- 通过添加新的缓存方法来区分:注意力汇聚 (attention sink)、Trie 树缓存等;
- 通过实现 SMC 来区分;
- 实现 Beam Search;
- 添加 token healing。
与 OpenAI 更无缝的集成
- 为 OpenAI 和开源模型提供相同的用户界面,以便它们易于互换;
- 集成函数调用 API。
最后的话
本路线图受到社区表达的兴趣的影响。如果它未能反映您的需求,请前来与我们分享您的经验。