在不断发展的技术领域中,大型语言模型(LLMs)的崛起无疑是一场革命。像ChatGPT和Google BARD这样的工具处于前沿,展示了数字互动和应用开发的可能性。
像ChatGPT这样的模型的成功激发了公司的兴趣,他们渴望利用这些先进的语言模型的能力。
然而,LLMs的真正力量不仅仅在于它们独立的能力。当它们与其他计算资源和知识库相结合时,它们的潜力得到了放大,从而创造出智能且具有语言技能的应用,同时还能通过数据和处理能力获得丰富的信息。
而这种整合正是LangChain试图评估的。LangChain是一种创新的框架,旨在发挥LLMs的全部能力,使其能够与其他系统和资源实现无缝共生。它是一种工具,赋予数据专业人员构建应用程序的能力,这些应用程序既智能又具有情境意识,利用当今可用的大量信息和计算资源。
它不仅仅是一种工具,它还是重新塑造技术领域的变革力量。
这引出了以下问题:
LangChain将如何重新定义LLMs的边界?
请跟我一起,让我们一起探索它。
什么是LangChain?
LangChain是围绕LLMs构建的开源框架。它为开发人员提供了一套工具、组件和接口,简化了基于LLM的应用程序的架构。
然而,它不仅仅是另一个工具。
与LLMs一起工作有时感觉就像是把一个方形凸轮放进一个圆孔中。
我敢打赌,你们大多数人已经经历过以下一些常见问题:
- 如何标准化提示结构。
- 如何确保LLM的输出可以被其他模块或库使用。
- 如何轻松切换到另一个LLM模型。
- 当需要时如何保留一些记忆。
- 如何处理数据。
所有这些问题带给我们以下问题:
如何开发一个整体复杂的应用程序,并确保LLM模型的行为符合预期。
提示中充斥着重复的结构和文本,回应像孩子的游戏室一样杂乱无章,而这些模型的记忆呢?让我们说它不是非常丰富。
那么…我们如何与它们一起工作呢?
试图用人工智能和LLMs开发复杂的应用程序可能会让人头疼。
而这正是LangChain作为问题解决者的角色。
从本质上讲,LangChain由几个巧妙的组件组成,允许您轻松地将LLM集成到任何开发中。
LangChain通过赋予强大的大型语言模型存储器和上下文的能力来激发人们的热情。这个添加使得“推理”过程得以模拟,可以更精确地处理更复杂的任务。
对于开发人员来说,LangChain的吸引力在于其创新的用户界面设计方法。用户不再依赖传统的拖放或编码方法,而是可以直接表达他们的需求,界面会按照请求构建。
它是一个旨在为软件开发人员和数据工程师提供高能量的框架,可以将LLMs无缝集成到他们的应用程序和数据工作流中。
这带给我们以下问题…
LangChain如何尝试解决所有这些问题?
现在我们了解了当前LLMs存在的6个主要问题,我们可以看到LangChain是如何试图评估它们的。
1. 提示现在过于复杂
让我们试着回忆一下,在过去几个月中,提示的概念是如何快速演变的。
一开始只是简单地描述一个易于完成的任务的字符串:
嘿 ChatGPT,请你给我解释一下如何在Python中绘制散点图好吗?
然而,随着时间的推移,人们意识到这太简单了。我们没有为LLM提供足够的上下文来理解他们的主要任务。
今天,我们需要告诉任何LLM的内容远远不止于简单地描述主要任务的完成。我们必须描述AI的高级行为,写作风格,并包括确保答案准确的指示。还有任何其他细节,以给予我们的模型更多背景信息。
因此,今天,我们不会使用最初的提示,而是会提交更类似于以下内容:
嘿 ChatGPT,想象一下你是一名数据科学家。你擅长使用Python分析和可视化数据。你能告诉我如何使用Python中的Seaborn库生成散点图吗?
对吗?
然而,就像大多数人已经意识到的那样,我可以要求执行不同的任务,但仍保持LLM的相同高级行为。这意味着提示的大部分内容可以保持不变。
这就是为什么我们可以在此部分只写一次,然后将其添加到需要的任何提示中。
LangChain通过提供提示模板来解决这个重复文本问题。
这些模板可以混合您任务所需的具体细节(如准确地描述散点图)和通常的文本(比如描述模型的高级行为)。
因此,我们的最终提示模板将是:
嘿 ChatGPT,想象一下你是一个数据科学家。你擅长使用Python分析和可视化数据。你能告诉我如何生成一个 使用 Python库吗?
有两个主要的输入变量:
- 图表类型
- Python库
2. 响应本质上是无结构的
我们人类很容易解释文本。这就是为什么当与ChatGPT等使用人工智能聊天机器人进行聊天时,我们可以轻松处理纯文本。
然而,当使用这些相同的人工智能算法用于应用程序时,这些答案应以CSV或JSON文件的格式提供。
同样,我们可以尝试制作复杂的提示来请求特定的结构化输出。但我们无法百分之百确定该输出将以对我们有用的结构生成。
这就是LangChain的输出解析器的用处。
该类允许我们解析任何LLM的响应并生成一个易于使用的结构化变量。不必再要求ChatGPT以JSON形式回答您,现在LangChain允许您解析输出并生成自己的JSON。
3. LLMs无记忆 – 但有些应用可能需要。
现在想象一下,您正在与一家公司的问答机器人交流。您发送了一个详细描述您需要的内容,机器人正确地回答了您,但第二次迭代之后,所有对话都消失了!
这几乎就是通过API调用任何LLM时发生的情况。当使用GPT或任何其他用户界面机器人时,AI模型在我们进入下一轮之后会忘记对话的任何部分。
它们没有(或很少)记忆。
这可能导致混淆或错误的答案。
正如大多数人已经猜到的那样,LangChain再次准备帮助我们。
LangChain提供了一个称为memory的类。它使我们能够让模型保持上下文感知,无论是保留整个聊天记录还是只保留摘要,以确保它不会做出任何错误的回答。
4. 为什么要选择一个单一的LLM,当你可以拥有所有的LLM呢?
我们都知道OpenAI的GPT模型仍然是LLM的领域。但是…还有很多其他选择,例如Meta的Llama、Claude或Hugging Face Hub的开源模型。
如果你只为一个公司的语言模型设计你的程序,你就会局限于他们的工具和规则。
直接使用一个模型的原生API会完全让你依赖于它们。
想象一下,如果你使用GPT构建了你的应用的人工智能功能,但后来发现你需要整合一个更好的特性,而这个特性更适合使用Meta的Llama。
你将被迫从头开始…这一点一点都不好。
LangChain提供了一种叫做LLM类的东西。把它看作是一个特殊的工具,可以轻松地从一个语言模型切换到另一个,甚至在你的应用中同时使用多个模型。
这就是为什么直接使用LangChain开发可以考虑多个模型。
5. 向LLM传递数据是棘手的
像GPT-4这样的语言模型是通过大量的文本进行训练的。这就是为什么它们在处理文本方面很擅长。然而,当涉及到处理数据时,它们通常会遇到困难。
为什么?你可能会问。
有两个主要的问题可以区分:
- 在处理数据时,我们首先需要知道如何存储这些数据,以及如何有效地选择要显示给模型的数据。LangChain通过使用称为索引的东西来解决这个问题。这些索引可以从不同的地方(如数据库或电子表格)带入数据,并将其设置好以逐个片段发送给人工智能部分。
- 另一方面,我们需要决定如何将数据放入您给模型的提示中。最简单的方式是直接将所有数据放入提示中,但也有更智能的方式。
在这种情况下,LangChain有一些特殊的工具,使用不同的方法将数据传递给人工智能。可以使用直接的Prompt stuffing方式,将整个数据集放入提示中,也可以使用更高级的选项,如Map-reduce、Refine或Map-rerank。LangChain简化了我们向任何LLM发送数据的方式。
6. 标准化开发接口
将LLM整合到更大的系统或工作流程中始终是棘手的。例如,您可能需要从数据库中获取一些信息,将其提供给人工智能,然后在系统的其他部分使用人工智能的答案。
LangChain针对这些类型的设置具有特殊功能。
- 链就像是将不同步骤简单直接地联系在一起的字符串。
- 代理人更加智能,可以根据人工智能的回答来决定下一步做什么。
LangChain通过提供标准化的接口简化了这一过程,使得整合和链接对LLM和其他实用工具的调用变得更容易,提升了整体开发体验。
结论
总的来说,LangChain提供了一套工具和特性,通过解决提示构建、响应结构和模型整合的复杂性,使得使用LLM开发应用程序更容易。
LangChain不仅仅是一个框架,它是数据工程和LLM领域的改变者。
它是在人工智能的复杂、常常混乱的世界与数据应用所需的结构化、系统化方法之间的桥梁。
当我们结束这次探索时,有一件事是清楚的:
LangChain不仅正在塑造LLMs的未来,也正在塑造技术本身的未来。
[Josep Ferrer](https://www.linkedin.com/in/josep-ferrer-sanchez)是来自巴塞罗那的分析工程师。他毕业于物理工程专业,目前在应用于人类移动性的数据科学领域工作。他是兼职的数据科学和技术内容创作者。您可以通过LinkedIn、Twitter或VoAGI联系他。