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

向量数据库大模型数据库

picture.image

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

picture.image

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原生项目

picture.image

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——在开发过程中完成特定任务。然而,本文不会详细探讨这些库。

基本特性概述

| 特性 | LangChain | Semantic Kernel | AutoGen | | 发布日期 | 2022年10月 | 2023年3月 | 2023年10月 | | 语言支持 | Python, Java, JavaScript/TypeScript | C#, Java, Python | Python, 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] |

示例课程

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

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

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

组件概述——操作编排

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

组件概述——提示模板

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

组件概述——文档加载器

| 框架 | 文档加载器 | | LangChain | 负责从各种来源加载文档。LangChain 提供了超过 100 种不同的文档加载器,并与该领域的其他主要提供商(如 AirByte 和 Unstructured)进行集成。LangChain 提供集成以加载所有类型的文档(如 HTML、PDF、代码、JSON、Word、CSV、Markdown、PowerPoint),从各种位置(如私有 S3 存储桶、公共网站、数据库、YouTube、arXiv)获取文档。 | | Semantic Kernel | 提供各种文档加载器,包括 PDF、txt、Word、MSGraph 等。 | | AutoGen | RetrieveChat 可以处理各种类型的文档。默认情况下,它可以处理纯文本和 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。 | | AutoGen | AutoGen 实现了灵活的文本分割器。用户也可以使用 Langchain 中的所有文本分割器。 |

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

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

组件概述——向量存储

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

组件概述——检索器

| 框架 | 检索器 | | LangChain | 检索器是一个接口,它根据非结构化查询返回文档。LangChain 支持多种不同的检索算法,如简单语义搜索、父文档检索器、自查询检索器、多向量检索器、基于向量存储的检索器、多查询检索器等。 | | Semantic Kernel | 检索器支持多种算法,如语义搜索、MongoDB Atlas 向量搜索等。 | | AutoGen | AutoGen 的 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团队的研究成果,开发出一种抽象模型,能够容纳各种体验,包括代理以团队形式协作的场景。

更多信息

本文由笔者翻译整理自:https://medium.com/data-science-at-microsoft/harnessing-the-power-of-large-language-models-a-comparative-overview-of-langchain-semantic-c21f5c19f93e和https://www.restack.io/docs/langchain-knowledge-langchain-vs-semantic-kernel-vs-llama-index-cat-ai,如对您有帮助,请帮忙点赞、转发、关注,谢谢。

References

[1] LangGraph: https://blog.langchain.dev/langgraph-multi-agent-workflows/
[2] GitHub: https://github.com/langchain-ai/langchain
[3] GitHub: https://github.com/microsoft/semantic-kernel
[4] GitHub: https://github.com/microsoft/autogen
[5] LangChain文档: https://docs.langchain.com/docs/
[6] Python文档: https://python.langchain.com/
[7] JS文档: https://js.langchain.com/
[8] 文档: https://learn.microsoft.com/en-us/semantic-kernel/
[9] 文档: https://microsoft.github.io/autogen/
[10] 用例: https://docs.langchain.com/docs/category/use-cases
[11] 示例: https://github.com/microsoft/semantic-kernel/tree/main/samples
[12] 示例: https://microsoft.github.io/autogen/docs/Examples
[13] AutoGen Studio: https://github.com/microsoft/autogen/tree/main/samples/apps/autogen-studio
[14] LangChain Plus: https://www.langchain.plus/
[15] 详细信息: https://learn.microsoft.com/en-us/azure/ai-studio/how-to/prompt-flow
[16] AutoGenBench: https://microsoft.github.io/autogen/blog/2024/01/25/AutoGenBench
[17] 社区文档: https://python.langchain.com/docs/community
[18] Discord: https://discord.gg/6adMQxSpJS
[19] Twitter/X: https://twitter.com/LangChainAI
[20] Discord: https://aka.ms/sk/discord
[21] Discord: http://aka.ms/autogen-dc
[22] Twitter/X: https://twitter.com/pyautogen
[23] 课程链接: https://www.deeplearning.ai/short-courses/langchain-for-llm-application-development/
[24] 课程链接: https://www.deeplearning.ai/short-courses/langchain-chat-with-your-data/
[25] 课程链接: https://www.deeplearning.ai/short-courses/functions-tools-agents-langchain/
[26] 课程链接: https://www.deeplearning.ai/short-courses/microsoft-semantic-kernel/
[27] 课程链接: https://www.linkedin.com/learning/introducing-semantic-kernel-building-ai-based-apps
[28] 课程链接: https://www.linkedin.com/learning/events/63748172?u=3322
[29] 课程链接: https://www.classcentral.com/classroom/youtube-autogen-build-powerful-ai-agents-with-chatgpt-gpt-4-python-tutorial-for-cryptocurrency-analysis-260455
[30] IMemoryDB: https://github.com/microsoft/kernel-memory/blob/main/service/Abstractions/MemoryStorage/IMemoryDb.cs
[31] 参考文献: https://python.langchain.com/v0.2/docs/integrations/tools/
[32] 参考文献: https://learn.microsoft.com/en-us/semantic-kernel/concepts/plugins/?pivots=programming-language-csharp
[33] 示例: https://microsoft.github.io/autogen/docs/Examples/
[34] 参考文献: https://www.comet.com/site/blog/introduction-to-prompt-templates-in-langchain/
[35] 参考文献: https://learn.microsoft.com/en-us/semantic-kernel/overview/

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论