”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 用于构建生成式人工智能应用程序的开源框架

用于构建生成式人工智能应用程序的开源框架

发布于2024-11-09
浏览:902

Open Source Frameworks for Building Generative AI Applications

有许多令人惊叹的工具可以帮助构建生成式人工智能应用程序。但开始使用新工具需要时间学习和练习。

因此,我创建了一个存储库,其中包含用于构建生成人工智能应用程序的流行开源框架的示例。

这些示例还展示了如何将这些框架与 Amazon Bedrock 结合使用。

您可以在这里找到存储库:

https://github.com/danilop/oss-for-generative-ai

在本文的其余部分,我将描述我选择的框架、存储库中示例代码的内容以及如何在实践中使用它们。

包含的框架

  • LangChain:用于开发由语言模型驱动的应用程序的框架,具有以下示例:

    • 基础模型调用
    • 链接提示
    • 构建 API
    • 创建客户端
    • 实现聊天机器人
    • 使用基岩代理
  • LangGraph:LangChain 的扩展,用于使用大型语言模型 (LLM) 构建有状态的多参与者应用程序

  • Haystack:用于构建搜索系统和语言模型应用程序的端到端框架

  • LlamaIndex:基于 LLM 的应用程序的数据框架,示例包括:

    • RAG(检索增强生成)
    • 建立代理
  • DSPy:使用大型语言模型解决人工智能任务的框架

  • RAGAS:评估检索增强生成(RAG)管道的框架

  • LiteLLM:标准化来自不同提供商的 LLM 的使用的库

框架概述

浪链

用于开发由语言模型支持的应用程序的框架。

主要特点:

  • 适用于法学硕士应用程序的模块化组件
  • 复杂 LLM 工作流程的链和代理
  • 情境交互的记忆系统
  • 与各种数据源和API集成

主要用例:

  • 构建对话式人工智能系统
  • 创建特定领域的问答系统
  • 开发人工智能驱动的自动化工具

郎图

LangChain 的扩展,用于构建有状态的多参与者。法学硕士申请

主要特点:

  • 基于图的工作流程管理
  • 复杂代理交互的状态管理
  • 设计和实现多代理系统的工具
  • 循环工作流程和反馈循环

主要用例:

  • 创建协作人工智能代理系统
  • 实施复杂、有状态的人工智能工作流程
  • 开发人工智能驱动的模拟和游戏

草垛

用于构建生产就绪的 LLM 应用程序的开源框架。

主要特点:

  • 具有灵活管道的可组合人工智能系统
  • 多模态AI支持(文本、图像、音频)
  • 生产就绪,具有可序列化的管道和监控

主要用例:

  • 构建 RAG 管道和搜索系统
  • 开发对话式人工智能和聊天机器人
  • 内容生成和摘要
  • 创建具有复杂工作流程的代理管道

骆驼指数

用于构建 LLM 支持的应用程序的数据框架。

主要特点:

  • 高级数据摄取和索引
  • 查询处理和响应合成
  • 支持各种数据连接器
  • 可定制的检索和排名算法

主要用例:

  • 创建知识库和问答系统
  • 在大型数据集上实现语义搜索
  • 构建情境感知人工智能助手

DSPy

通过声明性和可优化的语言模型程序解决人工智能任务的框架。

主要特点:

  • LLM交互的声明式编程模型
  • LLM提示和参数自动优化
  • LLM 输入/输出的基于签名的类型系统
  • 用于自动提示改进的提词器(现在是优化器)

主要用例:

  • 开发强大且优化的 NLP 管道
  • 创建自我改进的人工智能系统
  • 利用法学硕士实施复杂的推理任务

拉加斯

检索增强生成(RAG)系统的评估框架。

主要特点:

  • RAG 管道的自动评估
  • 多种评估指标(忠实度、上下文相关性、答案相关性)
  • 支持不同类型的问题和数据集
  • 与流行的 RAG 框架集成

主要用例:

  • RAG 系统性能基准测试
  • 确定 RAG 管道需要改进的领域
  • 比较不同的 RAG 实现

莱特法学硕士

多个 LLM 提供商的统一界面。

主要特点:

  • 100 个 LLM 模型的标准化 API
  • 自动回退和负载平衡
  • 缓存和重试机制
  • 使用情况跟踪和预算管理

主要用例:

  • 简化多法学硕士申请开发
  • 实施模型冗余和后备策略
  • 管理不同提供商之间的 LLM 使用情况

结论

如果您使用过这些工具,请告诉我。我错过了你想与他人分享的东西吗?请随意回馈存储库!

版本声明 本文转载于:https://dev.to/aws/open-source-frameworks-for-building-generative-ai-applications-532b?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-04
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-04-04
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-04-04
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-04
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-04-04
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-04-04
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-04
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-04
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-04-04
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-04
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-04
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-04-04
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-04-04
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-04
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-04-04

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3