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

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

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

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]删除
最新教程 更多>
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用时间数据时...
    编程 发布于2025-07-12
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的python功能eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-07-12
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-07-12
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-12
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-07-12
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-07-12
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 的 ...
    编程 发布于2025-07-12
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-07-12
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-12
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c 的函数时,接受成员函数指针的函数时,必须同时提供对象的指针,并提供指针和指针到函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此)和成员函数指针。这可以通过修改Menubutton :: SetButton()(如下所示:[&& && && &&华)...
    编程 发布于2025-07-12
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-07-12
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-07-12
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-07-12
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-07-12
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-12

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

Copyright© 2022 湘ICP备2022001581号-3