众所周知,人工智能和 LLM 是瞬息万变的领域,每周都会有新的概念和想法出现。而 LangChain 这样围绕多种新兴技术创建的抽象概念,其框架设计很难经得起时间考验。

直到看到了下面这个Blog的解释中的这句话:

It uses abstractions on top of abstractions and actually makes your codeneedlessly complicated

Langchain是抽象之上再抽象

在实际应用中随着需求越来越复杂,使用Langchain会遇到下面的场景:

 那么问题来了,抽象到底好不好呢?答案是肯定的,用好抽象肯定是好,如果抽象的比较过,对于对于调用使用者来说可能就比较抽象难以理解。

       请看下面的具体示例分析:

LangChain 为什么如此抽象

起初,当我们的简单需求与 LangChain 的使用假设相吻合时,LangChain 还能帮上忙。但它的高级抽象很快就让我们的代码变得更加难以理解,维护过程也令人沮丧。当团队用在理解和调试 LangChain 的时间和用在构建功能上的时间一样时,这可不是一个好兆头。

LangChain 的抽象方法所存在的问题,可以通过「将一个英语单词翻译成意大利语」这一微不足道的示例来说明。

下面是一个仅使用 OpenAI 软件包的 Python 示例:

这是一段简单易懂的代码,只包含一个类和一个函数调用。其余部分都是标准的 Python 代码。

将其与 LangChain 的版本进行对比:

代码大致相同,但相似之处仅此而已。

我们现在有三个类和四个函数调用。但令人担忧的是,LangChain 引入了三个新的抽象概念:

Prompt 模板: 为 LLM 提供 Prompt;

输出解析器: 处理来自 LLM 的输出;

链: LangChain 的「LCEL 语法」覆盖 Python 的 | 操作符。

LangChain 所做的只是增加了代码的复杂性,却没有带来任何明显的好处。

这种代码对于早期原型来说可能没什么问题。但对于生产使用,每个组件都必须得到合理的理解,这样在实际使用条件下才不至于意外崩溃。你必须遵守给定的数据结构,并围绕这些抽象设计应用程序。

让我们看看 Python 中的另一个抽象比较,这次是从 API 中获取 JSON。

使用内置的 http 包:

使用 requests 包:

高下显而易见。这就是好的抽象的感觉。

     当然,这些都是微不足道的例子。但我想说的是,好的抽象可以简化代码,减少理解代码所需的认知负荷。

     LangChain 试图通过隐藏细节,用更少的代码完成更多的工作,让你的生活变得更轻松。但是,如果这是以牺牲简单性和灵活性为代价的,那么抽象就失去了价值。

     LangChain 还习惯于在其他抽象之上使用抽象,因此你往往不得不从嵌套抽象的角度来思考如何正确使用 API。这不可避免地会导致理解庞大的堆栈跟踪和调试你没有编写的内部框架代码,而不是实现新功能。

Langchain对复杂AI agent研发团队的影响

随着AI agent应用程序的处理的事务越来越复杂,一个应用程序可能需要大量使用 AI Agent 来执行不同类型的任务,如发现测试用例、生成 Playwright 测试和自动修复等一系列复杂的组合操作。

    (借用别人的一张图,说明组合agent的复杂性)

当我们想从单一 Sequential Agent 的架构转向更复杂的架构时,LangChain 成为了限制因素。例如,生成 Sub-Agent 并让它们与原始 Agent 互动。或者多个专业 Agent 相互交互。

    在另一个例子中,我们需要根据业务逻辑和 LLM 的输出,动态改变 Agent 可以访问的工具的可用性。但是 LangChain 并没有提供从外部观察 Agent 状态的方法,这导致我们不得不缩小实现范围,以适应 LangChain Agent 的有限功能。

上面讲了一堆Langchain的缺点,其实Langchain还是有很多优点,我们使用框架的目的就是用其长,避其短,所以在决定使用哪个框架之前,还是充分了解下框架

下面再补充下Langchain的优点:

 Langsmith:

开箱即用的可视化日志

Prompt playground,可以立即从日志中修复 Prompt,并查看它在相同输入下的表现

可直接从日志轻松构建测试数据集,并可选择一键运行 Prompt 中的简单测试集(或在代码中进行端到端测试)

测试分数历史

Prompt 版本控制

而且它对整个链的流式传输提供了很好的支持,手动实现这一点需要一些时间。

何况,只依靠 API 也是不行的,每家大模型厂商的 API 都不同,并不能「无缝切换」。

  • LangSmith: A developer platform that lets you debug, test, evaluate, and monitor LLM applications.

网上总结的Langchain的优缺点,供同学们参考,最终还是要使用的同学有自己的思考和判断:

Langchain是一个用于构建基于大型语言模型(LLM)的应用程序的Python库。以下是关于Langchain框架的优点和缺点的概述:

优点:

  1. 易于使用:Langchain提供了一个简洁的API,使得开发者能够快速上手。

  2. 功能丰富:Langchain提供了一系列工具,如对话管理、文件管理、Prompt Engineering等,方便进行LLM相关开发。

  3. 社区活跃:Langchain得到了快速发展,有活跃的社区支持和不断更新。

  4. 扩展性:Langchain支持多种LLM,如OpenAI的GPT-3、GPT-4,以及其他LLM服务。

缺点:

  1. 依赖于LLM服务:Langchain依赖于特定的LLM服务,如OpenAI,这可能会受到服务提供商的限制。

  2. 性能问题:大型语言模型计算资源密集,需要高性能计算环境。

  3. 安全问题:使用LLM时,需要考虑数据安全和隐私问题。

  4. 学习曲线:Langchain的学习曲线可能较陡峭,需要一定时间来掌握。

Langchain是一个功能强大且易于使用的库,它提供了一种快速构建基于LLM的应用程序的方法。然而,开发者在使用时需要注意LLM服务的依赖以及可能遇到的性能、安全和学习曲线问题。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐