Enable javascript in your browser for better experience. Need to know to enable it? Go here.
第31期 | 十月2024

语言 & 框架

  • 语言 & 框架

    采纳 试验 评估 暂缓 采纳 试验 评估 暂缓
  • 新的
  • 移进/移出
  • 没有变化

语言 & 框架

采纳 ?

  • 75. dbt

    我们仍然认为 dbt是在 ELT 数据管道中实施数据转换的强大且合理的选择。我们喜欢它能够引入工程上的严谨性,并支持模块化、可测试性和 SQL 转换的可重用性等实践。dbt 集成了很多云数据仓库、数据湖仓和数据库,包括SnowflakeBigQuery、Redshift、Databricks 和 Postgres,并且拥有健康的社区包生态系统。最近在 dbt core 1.8+ 和全新的 dbt Cloud 无版本体验中引入的原生单元测试支持,进一步巩固了其在我们工具箱中的地位。我们的团队很欣赏这个新的单元测试功能,它使他们能够轻松定义静态测试数据,设置输出预期,并测试管道的增量和完全刷新模式。在许多情况下,这使得团队能够淘汰自制脚本,同时保持相同的质量水平。

  • 76. Testcontainers

    在我们的经验中,Testcontainers 是创建可靠测试环境的一个有效默认选项。它是一个移植到多种语言的库,可以将常见的测试依赖项进行 Docker 化——包括各种类型的数据库、队列技术、云服务以及像网页浏览器这样的 UI 测试依赖项,并能够在需要时运行自定义 Dockerfile。最近发布了一个 桌面版本,允许对测试会话进行可视化管理,并能够处理更复杂的场景,这对我们的团队非常有用。

试验 ?

  • 77. CAP

    CAP 是一个实现了 Outbox 模式 的 .NET 库。 在使用 RabbitMQ 或 Kafka 等分布式消息系统时,我们经常面临确保数据库更新和事件发布按原子性执行的挑战。CAP 通过在引发事件的同一个数据库事务中记录事件发布的意图,解决了这一问题。我们发现 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 GuardrailsGuardrails AIAporia Guardrails 等框架已经逐渐崭露头角,并被我们的团队认为非常有用。我们建议每个 LLM 应用都应设置相应的安全护栏,并且不断改进其规则和政策。这对于构建负责任和值得信赖的 LLM 聊天应用至关重要。

  • 85. Medusa

    根据我们的经验,大多数用于构建购物网站的电子商务解决方案通常会陷入 80/20 陷阱,即我们可以轻松构建出 80% 的需求,但对于剩下的 20% 却无能为力。Medusa 提供了一个良好的平衡。它是一个高度可定制的开源商业平台,允许开发人员创建独特且量身定制的购物体验,可以自我托管或运行在 Medusa 的平台上。Medusa 基于 Next.js 和 PostgreSQL 构建,通过提供从基本购物车和订单管理到高级功能(如礼品卡模块和不同地区的税收计算)的全面模块,加快了开发过程。我们发现 Medusa 是一个有价值的框架,并在几个项目中应用了它。

  • 86. Pkl

    Pkl 是一种开源的配置语言及工具,最初由苹果公司内部使用而创建。它的主要特点是其类型和验证系统,能够在部署之前捕捉配置错误。Pkl 帮助我们的团队减少了代码重复(例如环境覆盖的情况),并且能够在配置更改应用到生产环境之前进行验证。它可以生成 JSON、PLIST、YAML 和 .properties 文件,并且具有包括代码生成在内的广泛集成开发环境(IDE)和语言支持,

  • 87. ROS 2

    ROS 2是一个为开发机器人系统设计的开源框架。它提供了一套用于模块化实现应用程序的库和工具,涵盖了诸如进程间通信、多线程执行和服务质量等功能。ROS 2 在其前任的基础上进行了改进,提供了更好的实时性能、更高的模块化、对多种平台的支持以及合理的默认设置。ROS 2 在汽车行业正在获得越来越多的关注;它基于节点的架构和基于主题的通信模型,特别适合那些具有复杂且不断发展的车载应用(如自动驾驶功能)的制造商。

  • 88. seL4

    在软件定义汽车 (SDV) 或其他安全关键场景中,操作系统的实时稳定性至关重要。由于该领域的高准入门槛,少数公司垄断了这一领域,因此像 seL4这样的开源解决方案显得尤为珍贵。seL4 是一个高保障、高性能的操作系统微内核。它使用 形式化验证 方法来“数学上”确保操作系统的行为符合规范。其微内核架构还将核心职责最小化,以确保系统的稳定性。我们已经看到像蔚来汽车 (NIO) 这样的电动汽车公司参与 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 7BLlama-SQL ,用于开发者编码辅助、知识搜索和自然语言数据库交互。vLLM 兼容 OpenAI SDK 标准,促进了一致的模型服务。Azure 的 AI 模型目录 使用自定义推理容器来提升模型服务性能,vLLM 由于其高吞吐量和高效的内存管理,成为默认的推理引擎。vLLM 框架正在成为大规模模型部署的默认选择。

评估 ?

  • 91. Apache XTable™

    在可用的开放表格格式中,能够支持数据湖仓一体(lakehouses)架构——例如 Apache IcebergDeltaHudi——尚未出现明显的赢家。相反,我们看到了一些工具正在促进这些格式之间的互操作性。例如, 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)的性能。你可以使用它评估使用流行框架(如LlamaIndexLangChain构建的检索增强生成(RAG)和其他类型的应用程序,也可以用于基准测试和对比不同模型,以满足你的需求。DeepEval 提供了一个全面的指标和功能套件,用于评估 LLM 的表现,包括幻觉检测、答案相关性和超参数优化。它支持与 pytest 的集成,结合其断言功能,你可以轻松地将测试套件集成到持续集成(CI)管道中。如果你正在使用 LLM,建议尝试 DeepEval 来改进测试流程,确保你的应用程序的可靠性。

  • 94. DSPy

    如今,大多数基于语言模型的应用程序依赖于为特定任务手工调整的提示词模板。DSPy是一个用于开发此类应用程序的框架,采用了一种不同的方式,摒弃了直接的提示词工程。相反,它引入了围绕程序流程的更高级抽象(通过可以彼此叠加的 modules),以及优化的指标和用于训练/测试的数据。然后,它基于定义的指标优化提示和/或底层语言模型的权重。生成的代码库类似于使用PyTorch进行神经网络训练。我们认为这种方法很有新意,值得尝试。

  • 95. Flutter for Web

    Flutter 以其对 iOS 和 Android 应用程序的跨平台支持而闻名。现在,它已经扩展到更多的平台。我们之前评估过 Flutter for Web — 它允许我们从同一代码库构建适用于 iOS、Android 和浏览器的应用程序。并不是每个网页应用都适合使用 Flutter,但我们认为 Flutter 特别适合诸如 progressive web appssingle-page apps 和将现有 Flutter 移动应用转换为网页的情况。Flutter 已经支持 WebAssembly (WASM) 作为其实验性频道中的编译目标,这意味着它正在积极开发中。最近的版本已使其潜在漏洞和性能风险较为稳定。编译到 WASM 目标的 Flutter 网页应用的性能远超其 JavaScript 编译目标。不同平台上的近原生性能也是许多开发者最初选择 Flutter 的原因之一。

  • 96. kotaemon

    kotaemon 是一个基于检索增强生成(RAG)的开源工具和框架,用于构建针对知识库文档的问答应用程序。它可以理解多种文档格式,包括 PDF 和 DOC,并提供基于Gradio 的 Web 用户界面,用户可以通过聊天界面组织和互动知识库。kotaemon 具有内置的 RAG 流水线,并集成了向量存储,且可以通过 SDK 进行扩展。它的回答中还引用了来源文档,提供网页内联预览和相关性评分。对于想要构建基于 RAG 的文档问答应用程序的用户来说,这个可定制的框架是一个非常好的起点。

  • 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

    shadcn 通过提供可重用的、可直接复制粘贴的组件,挑战了传统组件库的概念。这种方法让团队拥有完整的控制权和所有权,更加容易进行定制和扩展,而这是更受欢迎的传统库如 MUIChakra UI往往不足的地方。shadcn 使用 Radix UITailwind CSS 构建,能够无缝集成到任何基于 React 的应用程序中,非常适合优先考虑控制和可扩展性的项目。它还提供一个 CLI,帮助将组件复制并粘贴到项目中。其优点还包括减少隐藏依赖关系,避免紧耦合的实现,因此对于寻求更加自主且可适应的前端开发方法的团队来说,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,但其最新版本已经在TerraformPulumi 之上实现,因此理论上它是云平台无关的。SST 原生支持部署几种标准的 Web 应用程序框架,包括Next.jsRemix,但也支持无界面 API 应用程序。SST 似乎处于一个独特的类别中。虽然它与 平台编排工具如 Kubevela 有一些相似之处,但它还为开发者提供了便利功能,如实时模式,将 AWS Lambda 调用代理回开发者本地运行的函数。目前,SST 仍然有些新颖,但随着它的演进,这个项目及其工具类别值得持续关注。

暂缓 ?

无法找到需要的信息?

 

每期技术雷达中的条目都在试图反映我们在过去六个月中的技术洞见,或许你所搜索的内容已经在前几期中出现过。由于我们有太多想要谈论的内容,有时候不得不剔除一些长期没有发生变化的条目。技术雷达来自于我们的主观经验,而非全面的市场分析,所以你可能会找不到自己最在意的技术条目。

下载 PDF

 

English | Español | Português | 中文

订阅技术雷达简报

 

立即订阅

查看存档并阅读往期内容