LangChain、Semantic Kernel、LlamaIndex、AutoGen 及其他AI应用开发框架的比较

本文将重点比较用于开发由大型语言模型(LLMs)驱动的应用程序的框架,涵盖了OpenAI的Assistant API、LangChain、llamaIndex、Semantic Kernel、AutoGen等框架。在LLMs快速发展的领域,选择合适的框架对于将这些模型无缝集成到应用程序中至关重要。但幸运的是,构建LLM支持的系统并不需要从头开始。

LangChain、Semantic Kernel 和 AutoGen与OpenAI的Assistant API

OpenAI的Assistant API 已成为一个强大的工具,简化了在应用程序中开发AI助手的过程。尽管它提供了极大的便利,一些经验丰富的开发者仍对其潜在的缺点表示担忧,特别是关于成本和实际服务中的可观察性问题。虽然Assistant API大大减少了开发工作量,但其定价模式的长期可行性仍存在不确定性。

相比之下,LangChain、Semantic Kernel 和 AutoGen 等替代框架为开发者提供了不同程度的控制和灵活性。这些框架提供了一系列选择,满足不同的偏好和项目需求。另一个突出的选择是“自建”解决方案,该解决方案不依赖于任何SDK,也不依赖OpenAI通过其Assistant API来处理复杂性。这些选择不仅在灵活性方面存在差异,还在所需的开发工作量上有所不同。通过为开发者提供一系列的替代方案,本文旨在帮助开发者根据项目的独特需求和目标做出明智的决策。

LangChain与Semantic Kernel和LlamaIndex的特点:

LangChain:以其灵活性和广泛的集成能力著称,LangChain非常适合需要复杂工作流程和工具集成的应用程序。那些很火的基于LangChain的优秀AI原生项目

Semantic Kernel:该框架在需要结构化数据提取的场景中表现出色。其设计重点在于提升数据检索和处理的准确性。

LlamaIndex:LlamaIndex在检索增强任务中的性能优化,使其非常适合优先考虑数据处理速度和效率的应用程序。总体功能有些类似于LangChain。[LlamaIndex——与LangChain类似但更专注于数据处理的LLM框架]

LangChain 和 Semantic Kernel 以及AutoGen

一般来说,LangChain 和 Semantic Kernel 都有将LLMs集成到应用程序中的共同目标,但在其方法和功能上有所不同。LangChain需要显式配置内存和上下文窗口,而Assistant API自动处理这些方面。虽然OpenAI的Assistant API减少了开发工作量,但LangChain 和 Semantic Kernel等框架则吸引了那些希望深入理解和控制其AI应用的开发者。这些框架通过SDK连接AI模型与现有代码,帮助开发者将AI响应集成到实际操作中,使其成为构建自动化AI代理、自动化复杂业务流程的理想解决方案。通过插件、工具和连接器实现的可扩展性使开发者能够无缝编排各种现有代码,提供了将AI服务与不同提供商集成的灵活性。

另一方面,AutoGen作为一个多代理框架,与LangChain的单代理模式不同。它允许开发者构建多个代理协作的应用,为开发复杂代理交互的项目提供了多样化的选择。理解这些差异对于开发者在根据项目需求和协作能力进行框架选择时至关重要。

2024年1月底,LangChain的创建者推出了LangGraph[1],这是另一种多代理工作流,旨在定制代理运行时。这一发布在与AutoGen的思维模式上有显著区别。主要区别在于框架构建代理的方式。LangGraph通过明确定义不同的代理及其转移概率,并将其描述为一个图,而AutoGen则将这一过程更多地视为一次“对话”。此外,LangGraph已无缝集成到LangChain生态系统中,允许用户利用所有LangChain的集成功能,并使用LangSmith的可观察性特性。

为了启动我们的比较分析,我们深入探讨了几个框架的基本特性,如表1所示。(请拖动滚动条查看网页上由于宽度限制而未完全显示的内容)。在这次分析中,我们特别比较了三个最广为人知的框架。值得注意的是,开发者可能还会使用一些其他有趣但更专业的库——如Guidance、Guardrails、Llama Index 和 TypeChat——在开发过程中完成特定任务。然而,本文不会详细探讨这些库。

基本特性概述

特性LangChainSemantic KernelAutoGen
发布日期2022年10月2023年3月2023年10月
语言支持Python, Java, JavaScript/TypeScriptC#, Java, PythonPython, C++
源代码GitHub[2]GitHub[3]GitHub[4]
文档/知识库通用文档: LangChain文档[5], Python: Python文档[6], JS: JS文档[7]文档[8]文档[9]
支持的模型OpenAI (包括Assistant), Azure OpenAI, Mistral AI, Gemini, Hugging Face (包括Llama-2, Phi-2, Falcon等)OpenAI (包括Assistant), Azure OpenAI, Mistral AI, Gemini, Hugging Face (包括Llama-2, Phi-2, Falcon等)OpenAI (包括Assistant), Azure OpenAI, Hugging Face (包括Llama-2, Phi-2, Falcon等)
开源许可证MIT许可证MIT许可证归因4.0国际许可证,MIT许可证
受欢迎程度★★★ (截至2024年2月20日,有11.8K GitHub分叉)★★ (截至2024年2月20日,有2.5k GitHub分叉)★★★ (截至2024年2月20日,有3.0k GitHub分叉)
贡献者Harrison Chase 及其他2200+贡献者(截至2024年1月28日)Microsoft 及其他200+贡献者(截至2024年1月28日)Microsoft 及其他200+贡献者(截至2024年1月28日)
用例/示例用例[10]示例[11]示例[12], AutoGen Studio[13]
评估LangChain Plus[14]Azure AI Studio中的Prompt Flow: 详细信息[15]AutoGenBench[16]
社区社区文档[17], Discord[18], Twitter/X[19]Discord[20], 社区办公时间及Kernel开发同步: 日历详情Discord[21], Twitter/X[22]

示例课程

在线可以找到许多关于入门的宝贵课程。以下是一些示例:

主题课程名称讲师课程链接备注
LangChainLangChain for LLM Application DevelopmentHarrison Chase, Andrew Ng课程链接[23]一小时课程(详细介绍,附带可运行的示例代码)
LangChainLangChain: Chat with Your DataHarrison Chase, Andrew Ng课程链接[24]一小时课程(详细介绍,附带可运行的示例代码)
LangChainFunctions, Tools, and Agents with LangChainHarrison Chase课程链接[25]一小时课程(详细介绍,附带可运行的示例代码)
Semantic KernelHow Business Thinkers Can Start Building AI Plugins With Semantic KernelJohn Maeda, Andrew Ng课程链接[26]一小时课程(详细介绍,附带可运行的示例代码)
Semantic KernelIntroducing Semantic Kernel: Building AI-Based AppsJohn Maeda, Sam Schillace课程链接[27]20分钟课程(高级介绍,资源指南)
AutoGenHow to build LLM-based AI agents using Microsoft’s AutoGenLucas Soares课程链接[28]初学者3小时课程
AutoGenAutoGen - Build Powerful AI Agents with ChatGPT/GPT-4Venelin Valkov课程链接[29]30分钟课程,附带示例代码

接下来,让我们深入探讨并比较各个框架的组件,以下是对这些组件进行的更详细的比较:

组件概述——操作编排

框架操作编排
LangChain单代理:使用模型I/O、数据连接、链和记忆。代理可以访问一系列工具,利用这些工具推理请求并根据观察结果执行操作。(注意,LangGraph是一个与LangChain结合使用的多代理工作流。LangGraph提倡一种方法,明确定义每个代理及其转换概率,并将其表示为图。)
Semantic Kernel一个语义内核代理由三个核心构建块组成:插件、规划器和其人格特征。规划器:开发者可以请求Semantic Kernel自动创建链来满足用户的新需求。规划器通过混合和匹配已经加载到内核中的插件来创建额外的步骤。微软计划很快在Python SDK中引入handlebars和函数调用的逐步规划器,以提高速度和可靠性。人格特征:可以为代理赋予个性并影响其与用户的互动方式,通常称为“元提示”或“指令”,人格特征是用来影响代理响应刺激的提示。
AutoGenAutoGen允许开发者创建由多个代理组成的应用程序,这些代理可以相互交互,有助于创建需要多个代理复杂协作的应用程序。代理的模块化设计和基于对话的编程简化了开发,方便开发者重复使用。它还允许人类参与(输入和反馈),并且可以让OpenAI Assistant参与多代理聊天。

组件概述——记忆管理

框架记忆管理
LangChain通过向量存储实现短期和长期记忆。包括多种记忆类型,如对话缓冲记忆、对话窗口缓冲记忆、对话令牌缓冲记忆、对话总结记忆、向量数据记忆、实体记忆等。
Semantic Kernel通过向量存储实现短期和长期记忆。可以通过三种方式访问存储的记忆:传统的键值对、本地存储、语义记忆搜索(与Azure Cognitive Search集成,使开发者能够轻松地将记忆添加到提示和插件中,遵循现有的语义记忆架构)。用户还可以通过IMemoryDB[30]接口将语义内核与内核记忆连接。
AutoGen通过向量存储实现短期和长期记忆(例如,TeachableAgent)。MemGPT与AutoGen的集成使得可以为任何AutoGen代理配备MemGPT功能。MemGPT允许LLM管理自己的记忆,克服有限的上下文窗口问题。

组件概述——可复用组件(工具、插件等)

框架可复用组件(工具、插件等)示例
LangChain工具:LLM可以利用的功能和服务,以扩展其能力,例如搜索工具、数学工具、SQL工具等。Alpha Vantage、Apify、ArXiv、AWS Lambda、Shell、Bearly Code Interpreter、Bing Search、Brave Search、llm-math、Wikipedia等。参考文献[31]
Semantic Kernel插件(语义函数 + 原生函数):这些插件可以由LLM提示(语义函数)或C#或Python代码(原生函数)组成。插件允许您添加新的AI功能,并将现有的应用和服务集成到Semantic Kernel中。TimePlugin、MathPlugin、FileIOPlugin、HttpPlugin、TextMemoryPlugin、WaitPlugin等。参考文献[32]
AutoGenAutoGen支持与人类智能和工具集成,使其成为一个适用于多种应用场景的多功能框架。MathChat、Web Search、SQL、Whisper等。请注意,用户可以在AutoGen中使用LangChain提供的指导和工具。示例[33]

组件概述——提示模板

框架提示模板
LangChainLangChain 提供了 PromptTemplate 功能,便于为语言模型创建参数化的提示。通过 PromptTemplate,用户可以生成包含占位符(如 {adjective} 或 {content})的模板字符串,然后通过输入值格式化生成最终的提示字符串。参考文献[34]。
Semantic KernelSemantic Kernel 的提示模板语言是一种简单的方式,用于使用纯文本定义和组合AI功能。可以使用它创建自然语言提示、生成响应、提取信息、调用其他提示或执行任何其他可以用文本表达的任务。该语言支持三项基本功能:1)包含变量,2)调用外部函数,3)将参数传递给函数。参考文献[35]。
AutoGenAutoGen 提供 PromptTemplate,帮助创建语言模型的参数化提示。

组件概述——文档加载器

框架文档加载器
LangChain负责从各种来源加载文档。LangChain 提供了超过 100 种不同的文档加载器,并与该领域的其他主要提供商(如 AirByte 和 Unstructured)进行集成。LangChain 提供集成以加载所有类型的文档(如 HTML、PDF、代码、JSON、Word、CSV、Markdown、PowerPoint),从各种位置(如私有 S3 存储桶、公共网站、数据库、YouTube、arXiv)获取文档。
Semantic Kernel提供各种文档加载器,包括 PDF、txt、Word、MSGraph 等。
AutoGenRetrieveChat 可以处理各种类型的文档。默认情况下,它可以处理纯文本和 PDF 文件,包括格式如 ‘txt’、‘json’、‘csv’、‘tsv’、‘md’、‘html’、‘htm’、‘rtf’、‘rst’、‘jsonl’、‘log’、‘xml’、‘yaml’、‘yml’ 和 ‘pdf’。参考文献。

组件概述——文档转换与分割

框架文档转换与分割
LangChain负责将文本分割为较小的块。基于标记、上下文感知的分割。示例文档分割器如 CharacterTextSplitter、TokenTextSplitter、RecursiveCharacterTextSplitter、HTMLHeaderTextSplitter 或上下文感知分割如 MarkdownHeaderTextSplitter 等。
Semantic Kernel对纯文本,首先按换行符分割,然后按句号等。对 Markdown,首先按标点符号分割,依次类推。还支持基于标记计数的 TextChunker。
AutoGenAutoGen 实现了灵活的文本分割器。用户也可以使用 Langchain 中的所有文本分割器。

组件概述——构建调用序列

框架构建调用序列
LangChainLangChain 中的链允许你轻松地在链的中途切换 LLM。提供多种链来实现不同任务,如顺序链、路由链、检索 QA 链、LLM 链等。
Semantic Kernel内核运行由开发者定义的管道或链。在链运行时,内核提供一个通用上下文,以便在功能之间共享数据。
AutoGen调用序列取决于不同代理的自主性和自适应对话中的拓扑结构。它将计算和控制流混合在多代理对话中。计算:特定角色和对话为中心的操作。控制流:由代理间的对话动态定义。

组件概述——向量存储

框架向量存储
LangChainLangChain 提供与 50 多个不同的向量存储的集成,从开源本地存储到云托管的专有存储,允许你根据需要选择最适合的存储。LangChain 提供了一个标准接口,允许你轻松切换向量存储。示例向量存储包括 Chroma。
Semantic KernelSemantic Kernel 提供多个向量数据库连接器,可以用于存储和检索信息,如 Chroma、DuckDB、SQLite、Pinecone、Azure Cosmos DB、Azure PostgreSQL 服务器等。参考文献。
AutoGen使用 chromadb 作为默认向量数据库,你也可以通过简单地重写 RetrieveUserProxyAgent 的 retrieve_docs 函数,替换为任何其他向量数据库。

组件概述——检索器

框架检索器
LangChain检索器是一个接口,它根据非结构化查询返回文档。LangChain 支持多种不同的检索算法,如简单语义搜索、父文档检索器、自查询检索器、多向量检索器、基于向量存储的检索器、多查询检索器等。
Semantic Kernel检索器支持多种算法,如语义搜索、MongoDB Atlas 向量搜索等。
AutoGenAutoGen 的 RAG 代理,如 RetrieveUserProxyAgent 和 RetrieveAssistantAgent,允许进行检索增强生成,并提供基本使用方法。

组件概述——模型输入/输出 (Model I/O)

框架模型输入/输出 (Model I/O)
LangChain模型输入/输出被标准化,允许用户在未来轻松切换不同的 LLM(如 OpenAI、Llama),并支持文本完成 API 和聊天接口 API。LangChain 提供了工具来根据需求格式化和解析输出。例如,当连接 LLM 输出时,你可能需要特定的格式,比如 Python 的 datetime 对象、JSON 对象,甚至你自己的自定义类实例。
Semantic Kernel允许用户根据自定义逻辑轻松切换 LLM。
AutoGen使用户能够基于自定义逻辑无缝切换大型语言模型 (LLM)。

组件概述——数据连接

框架数据连接
LangChain允许用户轻松切换向量存储(如 ChromaDB、Pinecone)。还集成了许多不同的数据源,以从各种来源(如 CSV、PDF、AWS、Google Cloud、Wikipedia、Google Search 等)创建标准化的文档对象。
Semantic Kernel可以使用现成的插件(如 Microsoft Graph Connector kit)获取额外的数据或执行自主操作,或创建自定义连接器为自己的服务提供数据。
AutoGen能够从 Google Search、网页抓取、向量存储等来源收集数据。

结论

随着大型语言模型 (LLM) 领域的不断发展,选择合适的框架对于开发人员构建复杂的AI应用程序来说变得至关重要。无论是像Assistant API这样的简化便利工具,还是像LangChain、LangGraph、Semantic Kernel和AutoGen这些框架提供的细粒度控制,每种选择都有其优点和考虑因素。最终,选择使用哪个SDK取决于开发者的具体需求、偏好和目标,以及他们所承担项目的性质。与其采取“一刀切”的方式,最优解决方案通常可能涉及不同SDK的明智组合,例如将AutoGen与Semantic Kernel和OpenAI Assistant API结合使用。

微软已经有了一个实验性实现,使用OpenAI Assistants API(请参考John Maeda的SK基础示例);然而,团队的目标是完全抽象代理接口,以适应使用任何模型构建的代理。为此,微软的Semantic Kernel团队成员正利用AutoGen团队的研究成果,开发出一种抽象模型,能够容纳各种体验,包括代理以团队形式协作的场景。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值