语言 & 框架
Adopt
-
75. dbt
我们仍然认为 dbt是在 ELT 数据管道中实施数据转换的强大且合理的选择。我们喜欢它能够引入工程上的严谨性,并支持模块化、可测试性和 SQL 转换的可重用性等实践。dbt 集成了很多云数据仓库、数据湖仓和数据库,包括Snowflake、BigQuery、Redshift、Databricks 和 Postgres,并且拥有健康的社区包生态系统。最近在 dbt core 1.8+ 和全新的 dbt Cloud 无版本体验中引入的原生单元测试支持,进一步巩固了其在我们工具箱中的地位。我们的团队很欣赏这个新的单元测试功能,它使他们能够轻松定义静态测试数据,设置输出预期,并测试管道的增量和完全刷新模式。在许多情况下,这使得团队能够淘汰自制脚本,同时保持相同的质量水平。
-
76. Testcontainers
在我们的经验中,Testcontainers 是创建可靠测试环境的一个有效默认选项。它是一个移植到多种语言的库,可以将常见的测试依赖项进行 Docker 化——包括各种类型的数据库、队列技术、云服务以及像网页浏览器这样的 UI 测试依赖项,并能够在需要时运行自定义 Dockerfile。最近发布了一个 桌面版本,允许对测试会话进行可视化管理,并能够处理更复杂的场景,这对我们的团队非常有用。
Trial
-
77. CAP
-
78. CARLA
CARLA 是一个开源的自动驾驶模拟器,它可用于在生产部署之前测试自动驾驶系统。它在创建和重用车辆、地形、人类、动物等 3D 模型上具有很强的灵活性,这使得它可以用来模拟各种场景,比如模拟行人走上马路或遇到迎面而来的特定速度的车辆。那些待测试的自动驾驶系统必须能够识别这些动态参与者并采取适当的行动,例如刹车。我们的团队使用 CARLA 进行自动驾驶系统的持续开发和测试。
-
79. Databricks Asset Bundles
Databricks Asset Bundles (DABs),于 2024 年 4 月 实现基本可用,正逐渐成为打包和部署 Databricks 资产的首选工具,帮助我们的数据团队应用软件工程实践。DABs 支持将工作流和任务的配置以及要在这些任务中执行的代码打包成一个 bundle,并通过 CI/CD 管道部署到多个环境中。它提供了常见资产类型的模板,并支持自定义模板,这使得能够为数据工程和机器学习项目创建定制服务模版。我们的团队越来越多地将其作为工程工作流中的关键部分。尽管 DABs 包含了针对 notebooks 的模板,并支持将 notebooks 部署到生产环境中,我们并不推荐 生产化 notebooks ,而是鼓励有意地编写符合生产标准的代码,以支持此类工作负载的可维护性、可靠性和可扩展性需求。
-
80. Instructor
当我们作为终端用户使用大语言模型(LLM)聊天机器人时,它们通常会返回给我们一个非结构化的自然语言答案。在构建超越聊天机器人的生成 AI 应用时,请求 LLM 以 JSON、YAML 或其他格式返回结构化答案并在应用中解析和使用该响应可能非常有用。然而,由于 LLM 是非确定性的,它们可能并不总是按照我们要求的方式执行。Instructor 是一个可以帮助我们请求 从 LLMs 获取结构化输出 的库。您可以定义预期的输出结构,并在 LLM 未返回您要求的结构时配置重试。由于与 LLM 进行交互时,最佳的终端用户体验往往是将结果流式传输给他们,而不是等待完整响应,Instructor 还可以处理从流中解析部分结构的任务。
-
81. Kedro
Kedro 作为 MLOps 工具有了显著的改善,并始终保持对模块化和工程实践的关注,这一点是我们从一开始就非常喜欢的。突出其模块化的一步是推出了独立的 kedro-datasets 包,该包将代码与数据解耦。Kedro 在其命令行接口、起始项目模板和遥测功能方面进行了增强。 此外,最近发布的 VS Code 扩展对开发者体验也是一个很好的提升。
-
82. LiteLLM
LiteLLM 是一个用于无缝集成各种大语言模型(LLM)提供商 API 的库,通过OpenAI API 格式交互。它支持多种 提供方和模型 ,并为文本生成、嵌入和图像生成提供统一的接口。LiteLLM 简化了集成过程,通过匹配每个提供商的特定端点要求来翻译输入。它还提供了实现生产应用中所需的操作功能的框架,如缓存、日志记录、速率限制和负载均衡,从而确保不同 LLM 的一致操作。我们的团队使用 LiteLLM 来轻松切换各种模型,这在模型快速演变的今天尤为必要。然而,值得注意的是,不同模型在相同提示下的响应会有所不同,这表明仅一致的调用方式可能不足以优化生成性能。此外,每个模型对附加功能的实现方式也各不相同,单一接口可能无法满足所有需求。例如,我们的一个团队在通过 LiteLLM 代理 AWS Bedrock 模型时,难以充分利用其函数调用功能。
-
83. LlamaIndex
LLamaIndex 包含能够设计特定领域、上下文增强的 LLM 应用程序的引擎,并支持数据摄取、向量索引和文档上的自然语言问答等任务。我们的团队使用 LlamaIndex 构建了一个 检索增强生成 (RAG) 流水线,自动化文档摄取,索引文档嵌入,并根据用户输入查询这些嵌入。使用 LlamaHub,您可以扩展或自定义 LlamaIndex 模块以满足您的需求,例如构建使用您首选的 LLM、嵌入和向量存储提供者的 LLM 应用程序。
-
84. LLM Guardrails
LLM Guardrails 是一套用于防止大语言模型(LLMs)生成有害、使人误解或不相关内容的指南、政策或过滤器。Guardrails 也可用于保护 LLM 应用免受恶意用户通过操纵输入等技术对其滥用。它们通过为模型设定边界来作为安全网,确保内容的处理和生成在可控范围内。在这一领域中,诸如 NeMo Guardrails 、Guardrails AI 和 Aporia Guardrails 等框架已经逐渐崭露头角,并被我们的团队认为非常有用。我们建议每个 LLM 应用都应设置相应的安全护栏,并且不断改进其规则和政策。这对于构建负责任和值得信赖的 LLM 聊天应用至关重要。
-
85. Medusa
-
86. Pkl
Pkl 是一种开源的配置语言及工具,最初由苹果公司内部使用而创建。它的主要特点是其类型和验证系统,能够在部署之前捕捉配置错误。Pkl 帮助我们的团队减少了代码重复(例如环境覆盖的情况),并且能够在配置更改应用到生产环境之前进行验证。它可以生成 JSON、PLIST、YAML 和 .properties 文件,并且具有包括代码生成在内的广泛集成开发环境(IDE)和语言支持,
-
87. ROS 2
-
88. seL4
-
89. SetFit
当前大多数基于 AI 的工具都是生成式的——它们生成文本和图像,使用生成式预训练模型(GPTs)来完成这些任务。而对于需要处理现有文本的用例——例如文本分类或意图识别——sentence transformers 是首选工具。在这个领域,SetFit是一个用于微调 sentence transformers 的框架。我们喜欢 SetFit 的原因是它使用对比学习来区分不同的意图类别,通常只需非常少量的样本(甚至少于 25 个)就能实现清晰的分类。sentence transformers 在生成式 AI 系统中也可以发挥作用。我们成功地在一个使用大语言模型(LLM)的客户聊天机器人系统中使用 SetFit 进行意图检测。尽管我们知晓 OpenAI 的内容审核 API,我们仍选择基于 SetFit 的分类器进行额外的微调,以实现更严格的过滤。
-
90. vLLM
vLLM 是一个高吞吐量、内存高效的 LLM 推理引擎,既可以在云环境中运行,也可以在本地部署。它无缝支持多种 模型架构 和流行的开源模型。我们的团队在 NVIDIA DGX 和 Intel HPC 等 GPU 平台上部署了容器化的 vLLM 工作节点,托管模型如 Llama 3.1(8B and 70B) 、Mistral 7B 和 Llama-SQL ,用于开发者编码辅助、知识搜索和自然语言数据库交互。vLLM 兼容 OpenAI SDK 标准,促进了一致的模型服务。Azure 的 AI 模型目录 使用自定义推理容器来提升模型服务性能,vLLM 由于其高吞吐量和高效的内存管理,成为默认的推理引擎。vLLM 框架正在成为大规模模型部署的默认选择。
Assess
-
91. Apache XTable™
在可用的开放表格格式中,能够支持数据湖仓一体(lakehouses)架构——例如 Apache Iceberg、Delta和 Hudi——尚未出现明显的赢家。相反,我们看到了一些工具正在促进这些格式之间的互操作性。例如, Delta UniForm 通过允许 Hudi 和 Iceberg 客户端读取 Delta 表,实现了单向互操作性。另一个新进入这个领域的是Apache XTable™,这是一个 Apache 孵化器项目,旨在实现 Hudi、Delta 和 Iceberg 之间的全向互操作性。与 UniForm 类似,XTable 在不创建底层数据副本的情况下,能够在这些格式之间转换元数据。XTable 对于那些在多个表格格式之间进行实验的团队可能会很有用。然而,考虑到这些格式之间功能的差异,长期依赖全向互操作性可能会导致团队只能使用功能的“最小公倍数”。
-
92. dbldatagen
为数据工程准备测试数据是一个重大挑战。从生产环境转移数据到测试环境存在风险,因此团队通常依赖于编造数据或合成数据。在本期雷达中,我们探讨了诸如 通过大模型生成合成数据等新方法。但大多数情况下,成本较低的程序生成已经足够用。dbldatagen (Databricks Labs Data Generator) 就是这样一个工具;它是一个用于在 Databricks 环境中生成合成数据的 Python 库,适用于测试、基准测试、演示等多种用途。dbldatagen 可以在短时间内生成规模达数十亿行的合成数据,支持多表、变更数据捕获和合并/连接操作等各种场景。它能够很好地处理 Spark SQL 的基本类型,生成范围和离散值,并应用指定的分布。在 Databricks 生态系统中创建合成数据时,dbldatagen 是一个值得评估的选项。
-
93. DeepEval
DeepEval 是一个基于 Python 的开源评估框架,用于评估大语言模型(LLM)的性能。你可以使用它评估使用流行框架(如LlamaIndex 或LangChain构建的检索增强生成(RAG)和其他类型的应用程序,也可以用于基准测试和对比不同模型,以满足你的需求。DeepEval 提供了一个全面的指标和功能套件,用于评估 LLM 的表现,包括幻觉检测、答案相关性和超参数优化。它支持与 pytest 的集成,结合其断言功能,你可以轻松地将测试套件集成到持续集成(CI)管道中。如果你正在使用 LLM,建议尝试 DeepEval 来改进测试流程,确保你的应用程序的可靠性。
-
94. DSPy
-
95. Flutter for Web
Flutter 以其对 iOS 和 Android 应用程序的跨平台支持而闻名。现在,它已经扩展到更多的平台。我们之前评估过 Flutter for Web — 它允许我们从同一代码库构建适用于 iOS、Android 和浏览器的应用程序。并不是每个网页应用都适合使用 Flutter,但我们认为 Flutter 特别适合诸如 progressive web apps、single-page apps 和将现有 Flutter 移动应用转换为网页的情况。Flutter 已经支持 WebAssembly (WASM) 作为其实验性频道中的编译目标,这意味着它正在积极开发中。最近的版本已使其潜在漏洞和性能风险较为稳定。编译到 WASM 目标的 Flutter 网页应用的性能远超其 JavaScript 编译目标。不同平台上的近原生性能也是许多开发者最初选择 Flutter 的原因之一。
-
96. kotaemon
-
97. Lenis
Lenis 是一个为现代浏览器设计的轻量且强大的平滑滚动库。 它能够实现流畅的滚动体验,例如 WebGL 滚动同步和视差效果,这使其非常适合那些需要构建流畅、无缝滚动交互页面的团队。我们的开发人员发现 Lenis 的使用非常简单,它提供了一种精简高效的方式来创建平滑滚动效果。然而,该库在无障碍性方面可能存在一些问题,特别是在处理垂直和水平滚动交互时,可能会让残障用户感到困惑。虽然它在视觉上很吸引人,但在实现时仍然需要仔细考虑无障碍性。
-
98. LLMLingua
LLMLingua 通过使用小型语言模型压缩提示,去除非必要的 token,从而提高大语言模型(LLM)的效率,并在性能损失最小的情况下实现这一目标。 这种方法使大语言模型(LLM)能够在有效处理较长提示的同时,保持推理和上下文学习能力,解决了成本效率、推理延迟和上下文处理等挑战。LLMLingua 与各种大语言模型兼容,无需额外训练,并支持如 LLamaIndex 等框架,它非常适合优化大语言模型的推理性能。
-
99. Microsoft Autogen
Microsoft Autogen是一个开源框架,旨在简化 AI 代理的创建和编排,支持多个代理协作解决复杂任务。它支持自动化和人机协作的工作流程,并兼容多种大语言模型(LLMs)和代理交互工具。我们的一个团队曾在为客户构建的 AI 驱动平台中使用 Autogen,每个代理代表一种特定技能,如代码生成、代码审查或文档摘要。该框架使团队能够通过定义正确的模型和工作流程,轻松且一致地创建新代理。他们还利用LlamaIndex 编排工作流程,使代理能够有效管理产品搜索和代码建议等任务。尽管 Autogen 在生产环境中展示了潜力,尤其在代理的扩展性和复杂性管理上仍有待评估,以确保其在扩展代理系统时的长期可行性。
-
100. Pingora
Pingora 是一个 Rust 搭建框架,旨在构建快速可靠可编程的网络服务。它最开始由 Cloudflare 开发用以解决 Nginx 的不足,Pingora 已展现出巨大的潜力,像River 这样的新型代理正是以 Pingora 为基础构建的。虽然我们大多数人无需面对 Cloudflare 级别的规模,但我们确实会遇到需要灵活的应用层路由的网络服务的场景。Pingora 的架构可以让我们在这些场景下充分利用 Rust 的强大能力,同时不牺牲安全性或性能。
-
101. Ragas
Ragas 是一个框架,旨在评估 检索增强生成 (RAG) 流水线的性能,解决了评估这些系统中检索和生成组件的挑战。它提供了结构化的指标,如可靠性、答案相关性和上下文利用率,这些指标有助于评估基于 RAG 系统的有效性。我们的开发者发现,它在运行定期评估以微调参数(如 top-k 检索和嵌入模型)时非常有用。一些团队将 Ragas 集成到每天运行的流水线中,以便在提示模板或模型发生变化时进行评估。虽然它的指标提供了可靠的见解,但我们担心该框架可能无法捕捉复杂 RAG 流水线的所有细微差别和复杂交互,因此建议考虑额外的评估框架。尽管如此,Ragas 在生产环境中简化 RAG 评估的能力使其脱颖而出,为数据驱动的改进提供了宝贵的支持。
-
102. Score
许多实施自己内部开发平台的组织倾向于创建自己的 平台编排 系统,以在开发人员与其平台托管团队之间强制执行组织标准。然而,针对安全、一致和合规地托管容器工作负载的铺路平台的基本功能在不同组织之间是相似的。如果我们有一种共享语言来指定这些要求,那该多好呢?Score在这一领域显示出了成为标准的潜力。它是一种以 YAML 形式编写的声明性语言,描述了容器化工作负载的部署方式,以及其运行所需的特定服务和参数。Score 最初由 Humanitec 开发,作为其 平台编排者 产品的配置语言,但现在作为一个开源项目由 云原生计算基金会 (CNCF) 进行管理。在 CNCF 的支持下,Score 有潜力在 Humanitec 产品之外得到更广泛的使用。它已经发布了两个参考实现:Kubernetes 和 Docker Compose。Score 的可扩展性希望能够促使社区对其他平台的贡献。Score 确实与 Kubevela 的开放应用模型 (OAM) 规范相似,但它更专注于容器工作负载的部署,而不是整个应用程序。与SST也有一些重叠,但 SSI 更关注直接部署到云基础设施,而不是内部工程平台。我们对 Score 的发展保持关注。
-
103. shadcn
-
104. Slint
Slint 是一个声明式的 GUI 框架,用于为 Rust、C++ 或 JavaScript 应用程序构建原生用户界面。尽管它是一个多平台的 UI 框架,拥有实时预览、响应式 UI 设计、VS Code 集成 和原生用户体验等重要特性,但我们特别想强调它在嵌入式系统中的实用性。开发嵌入式应用程序的团队经常会面临有限的 UI 开发选项,并且每个选项都有其权衡之处。Slint 在开发者体验和性能之间提供了完美的平衡,它使用类似 HTML 的易用标记语言,并可以直接编译为机器代码。在运行时,它还具有低资源占用的优势,这对于嵌入式系统至关重要。简而言之,我们喜欢 Slint,因为它将 web 和移动开发中经过验证的实践引入到了嵌入式生态系统中。
-
105. SST
SST是一个框架,用于将应用程序部署到云环境中,并同时配置应用程序运行所需的所有服务。SST 不仅是一个基础设施即代码 工具,它还是一个提供 TypeScript API 的框架,可以定义应用程序环境,在 Git 推送时触发应用程序部署服务,还配备了一个 GUI 控制台,用于管理生成的应用程序并调用 SST 管理功能。虽然 SST 最初是基于 AWS Cloud Formation 和 CDK,但其最新版本已经在Terraform 和 Pulumi 之上实现,因此理论上它是云平台无关的。SST 原生支持部署几种标准的 Web 应用程序框架,包括Next.js 和 Remix,但也支持无界面 API 应用程序。SST 似乎处于一个独特的类别中。虽然它与 平台编排工具如 Kubevela 有一些相似之处,但它还为开发者提供了便利功能,如实时模式,将 AWS Lambda 调用代理回开发者本地运行的函数。目前,SST 仍然有些新颖,但随着它的演进,这个项目及其工具类别值得持续关注。
Hold
Unable to find something you expected to see?
Each edition of the Radar features blips reflecting what we came across during the previous six months. We might have covered what you are looking for on a previous Radar already. We sometimes cull things just because there are too many to talk about. A blip might also be missing because the Radar reflects our experience, it is not based on a comprehensive market analysis.
