当前位置: 首页 > article >正文

【Langchain优缺点】打算使用Langchain框架的同学务必仔细阅读

        众所周知,人工智能和 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服务的依赖以及可能遇到的性能、安全和学习曲线问题。


http://www.kler.cn/a/326044.html

相关文章:

  • 后仿真中的GLS测试用例的选取规则
  • 自动化运维(k8s):一键获取指定命名空间镜像包脚本
  • Vue2+ElementUI:用计算属性实现搜索框功能
  • 机器学习-37-对ML的思考之机器学习发展的三个阶段和驱动AI发展三驾马车的由来
  • 21.3D surface
  • 基于视觉智能的时间序列基础模型
  • 在线订餐革命:Spring Boot 点餐系统
  • kafka 消费者线程安全问题详细探讨
  • 记HttpURLConnection下载图片
  • 综合绩效考核系统源码,三级医院绩效管理系统源码,基于springboot、mybaits+avue技术开发,支持项目二开。
  • Stable Diffusion绘画 | SDXL模型的优缺点及模型推荐
  • golang学习笔记13-函数(二):init函数,匿名函数,闭包,defer
  • 第L2周:机器学习|线性回归模型 LinearRegression:2. 多元线性回归模型
  • Vulhub zico 2靶机详解
  • GS-SLAM论文阅读笔记--MM3DGS SLAM
  • A Learning-Based Approach to Static Program Slicing —— 论文笔记
  • 【Git原理与使用】分支管理
  • C++可见性
  • 关于武汉芯景科技有限公司的IIC电平转换芯片XJ9509开发指南(兼容PCa9509)
  • Matlab实现麻雀优化算法优化回声状态网络模型 (SSA-ESN)(附源码)
  • linux环境oracle11.2.0.4打补丁(p31537677_112040_Linux-x86-64.zip)
  • [M贪心] lc2207. 字符串中最多数目的子序列(模拟+贪心+一次遍历+代码细节+思维)
  • 无人机避障—— 激光雷达定高北醒TF03-UART(二)
  • 【基础算法总结】分治--快排+归并
  • YOLOv8改进,YOLOv8改进损失函数采用Powerful-IoU(2024年最新IOU),助力涨点
  • 【YOLOv10改进[SPPF]】使用 SPPFCSPC替换SPPF模块 + 含全部代码和详细修改方式