使用LangChain做大模型开发的一些问题:来自HackerNews的激烈讨论~
作者: DataLearner 来源: [DataLearner](https://mp.weixin.qq.com/s/GKF28C1yzWZDtCXjJQ52hg)
LangChain是当前大模型应用开发领域里面最火热的框架。由于其提供了丰富的数据访问接口、各种大模型的交互接口以及很多构造大模型应用所需要的方法与实践工具,受到了很多人的关注。然而,今天Hacker News上的一位开发者直接提出LangChain是一个无用的框架,引起了很多人的共鸣。很多人都表示,在实际开发中,LangChain有很多问题,可能并不适合用来做大模型应用开发。
-
LangChain简介
-
LangChain的一些问题
-
无法解决大模型基础技术问题,主要是prompt重用问题
-
LangChain糟糕的抽象与隐藏的垃圾prompt造成开发的困难
-
LangChain框架很难debug
-
LangChain鼓励工具锁定
-
-
总结
LangChain简介
LangChain 是一个试图在技术基础上解决语言模型问题的工具。它试图建立可重用的抽象方法和工具来提高大模型应用的开发效率。为此,LangChain开发出几个重要的模块:
📃 LLMs和Prompt管理
这包括提示管理、提示优化、适用于所有LLMs的通用接口以及与LLMs一起使用的常用工具。
🔗 链式调用
链式调用超越了单个LLM调用,涉及到一系列调用(无论是对LLM还是其他工具)。LangChain为链式调用提供了标准接口、与其他工具的多种集成以及常见应用的端到端链式调用。
📚 数据增强生成
数据增强生成涉及到特定类型的链式调用,首先与外部数据源交互以获取生成步骤中使用的数据。例如,对长篇文本进行摘要和针对特定数据源进行问答。
🤖 智能代理
智能代理涉及LLM在决定采取哪些行动、执行该行动、观察结果以及重复该过程直到完成的过程。LangChain为智能代理提供了标准接口、多个可供选择的代理和端到端代理的示例。
🧠 Memory
记忆是指在链式调用/代理的不同调用之间保持状态。LangChain为记忆提供了标准接口、多个记忆实现的集合以及使用记忆的链式调用/代理的示例。
🧐 评估
生成模型通常很难用传统指标进行评估。一种新的评估方法是使用语言模型本身进行评估。LangChain提供了一些提示/链式调用来协助进行评估。
LangChain的一些问题
尽管LangChain在大模型开发领域提供了这么多的功能,使用的人也很多,在一些方面得到了认可。但在 Hacker News 上的一篇帖子中,许多用户对其提出了批评和质疑。甚至直接说Langchain Is Pointless,非常直白的批评。这里总结一下这个框架在实际应用中的一些问题。
无法解决大模型基础技术问题,主要是prompt重用问题
首先很多大模型应用的问题都是大模型基础技术的缺陷,并不是LangChain能够解决的。其中核心的问题是大模型的开发主要工作是prompt工程。而这一点的重用性很低。
在过去的几个月里,我的团队一直在使用高度复杂的LLM链来构建各种功能,这些功能进行各种推理。最终的输出非常像人类,以至于有些人私下里兴奋地认为我们已经建立了一个人工通用智能(AGI)。
但是,这些功能都需要非常定制的手写prompt 。链中的每一步都需要手写prompt。输入数据必须以非常特定的方式格式化,以生成该功能/链步骤的良好输出。设置DAG编排来运行这些链的部分只占工作的5%,95%的工作实际上只是在提示调整和数据序列化格式上。这些东西都是不可重用 的。
也就是说不是LangChain不行,而是因为LLM应用的大多数开发工作都是在做prompt工程,这些工作无法重用。所以,这一点上LangChain几乎无能为力。
LangChain糟糕的抽象与隐藏的垃圾prompt造成开发的困难
一些用户批评LangChain的抽象过于复杂 ,且没有对prompt进行足够的开放,他们认为在没有LangChain的情况下,你可以很容易地完成相同的任务。
例如,LangChain将他们的提示隐藏起来 ,你只能通过阅读源代码并操纵嵌套类的私有变量,来将类似于RetrievalQA的单个提示进行更改,不仅如此,他们使用的默认提示实际上是糟糕的,这种设计造成了开发难度的提高。
简单说,就是LangChain的抽象工作不够好,所以很多步骤需要自己构建。而且LangChain内置的很多prompt都很差,不如自己构造,但是它们又隐藏了这些默认prompt。
LangChain框架很难debug
尽管LangChain很多方法提供打印详细信息的参数,但是实际上它们并没有很多有价值的信息 。例如,如果你想看到实际的prompt或者LLM查询等,都是十分困难的。原因和刚才一样,LangChain大多数时候都是隐藏了自己内部的prompt。
所以如果你使用LangChain开发效果不好,你想去调试代码看看哪些prompt有问题,那就很难。
LangChain鼓励工具锁定
“工具锁定”是一个在软件工程和信息技术中常见的概念,指的是用户或组织在选择了一种特定的技术或产品后,发现很难(或成本过高)从这种技术或产品中脱离出来,转而使用其他的技术或产品。
LangChain鼓励用户在其平台上进行开发和操作,但是如果用户需要进行一些LangChain文档中没有涵盖的工作流程,即使有自定义代理,也很难进行修改。这就意味着,一旦用户开始使用LangChain,他们可能会发现自己被限制在LangChain的特定工具和功能中,而无法轻易地切换到其他可能更适合他们需求的工具或平台。
LangChain的缺点讨论总结
除了上述讨论外,还有些问题如文档不清晰等问题也有很多人提。但是,从这些讨论中我们可以看到LangChain作为LLM应用开发框架最大的问题包含2个。一个是大多数工作都是构造prompt,但是这部分很难用LangChain提升效率,因为它的重用性低。另一个问题是LangChain虽然集成了很多工具支撑LLM的应用开发,但是这些工具困难都用到了一些prompt。但是,LangChain自己的prompt做的很差,又没有足够的开放性让大家更改和调试,导致很多时候其实约束了自己的工作。
从讨论中,也看到很多人说,不如直接用prompt与LLM交互,至少在GPT系列中,构造好的prompt比使用LangChain构造复杂的自动化调用可能效果更好。
这个讨论对于大家做LLM开发的选型还是挺重要的,前车之鉴,大家使用也不要赶流行哦~
讨论地址:https://news.ycombinator.com/item?id=36645575
我们建立了一个AI技术交流讨论群,请大家加入2/3群交流,大家可以在群里讨论AI相关的技术问题和进展~由于群满200无法自动加入,需要邀请,大家可以加我的微信,然后邀请进群~(微信号:datalearner_ai,微信群仅限AI相关技术交流)
微信账号二维码