设计理念#
从一开始,AdalFlow就遵循三个基本原则。
原则1:简单优于复杂#
我们在设计AdalFlow时设定了这三条严格的规则:
每一层抽象都需要进行调整,总体上我们不允许超过3层抽象。
我们最小化代码行数,而不是最大化代码行数。
深入和广泛地探索以简化。我们达到的清晰度并不是因为事情容易。
原则2:质量优于数量#
核心构建块的质量胜过集成的数量。
我们的目标是为开发者提供设计良好的核心构建模块,这些模块易于理解,调试透明,并且足够灵活以便定制。 这适用于提示、模型客户端、检索器、优化器和训练器。
原则3:优化构建#
我们帮助用户构建任务管道,但我们更希望帮助进行优化。
我们设计我们的构建模块时,心中有着优化的理念。 这意味着我们不仅仅为开发者提供透明度和控制权;我们还提供出色的日志记录、可观察性、可配置性、优化器和训练器,以减轻优化任务管道的现有挫败感。
我们对LLM工作流程的理解#
上述原则是从我们对LLM工作流程的经验和持续学习中提炼出来的。
开发者是最终的英雄
LLMs 就像水一样,它们可以被塑造成任何形式,从 GenAI 应用程序如聊天机器人、翻译、摘要生成、代码生成、自主代理到经典的 NLP 任务如文本分类和命名实体识别。 它们通过检索器、记忆和工具(函数调用)与模型内部知识之外的世界进行交互。 每个用例在其数据、业务逻辑和独特的用户体验方面都是独一无二的。
构建LLM应用程序是软件工程和建模(上下文学习)的结合。 像PyTorch这样的库主要提供基本的构建模块,并在计算优化方面承担繁重的工作。 如果所有PyTorch用户中有10%需要自定义层或优化器,那么对于LLM应用程序来说,自定义的机会只会更高。 任何旨在提供开箱即用解决方案的库都注定会失败,因为解决每个独特挑战的责任在于开发者。
手动提示工程 vs 自动提示优化
开发者依赖提示通过上下文学习(ICL)将LLMs塑造成他们的用例。 然而,LLM提示非常敏感:表现最佳和表现较差的提示之间的准确率差距可能高达40%。 这也是一个脆弱的过程,一旦模型发生变化就会崩溃。 因此,开发者最终花费10%的时间构建任务管道本身,但另外90%的时间用于优化和迭代提示。 从演示到生产之间缩小准确率差距的过程充满了挫折。 毫无疑问,LLM应用的未来在于自动提示优化,而不是手动提示工程。 然而,研究人员仍在努力理解提示工程,自动化的过程更是处于起步阶段。
了解繁重的工作在哪里
LLM库的核心任务不是为开发者提供开箱即用的提示,也不是集成不同的API提供商或数据库,而是在于:
核心基础类和抽象,帮助开发者处理“枯燥”的事情,如序列化、反序列化、标准化接口、数据处理。
帮助LLMs与世界互动的构建模块。
评估 和 优化 任务管道。
同时,开发者可以完全控制提示和任务流程。