大型语言模型(LLM),如OpenAI的GPT-3,Google的BERT和Meta的LLaMA,正在通过其能够生成各种文本–从营销文案和数据科学脚本到诗歌–革新各个领域。
尽管ChatGPT的直观界面已经成功进入大多数人的设备,但在各种软件集成中,仍存在着广袤的未开发潜力。
主要问题是什么呢?
大多数应用程序需要更流畅和原生的与LLM的通信。
这正是LangChain发挥作用的地方!
如果您对生成式人工智能和LLM感兴趣,本教程专为您量身定制。
那么…让我们开始吧!
什么是LLMs?
假设您一直住在洞穴里,最近没有收到任何消息,我将简要解释大型语言模型或LLM。
LLM是一个复杂的人工智能系统,旨在模仿人类般的文本理解和生成。通过训练大型数据集,这些模型识别复杂模式,掌握语言的微妙之处,并产生连贯的输出。
如果您想知道如何与这些以人工智能为动力的模型互动,有两种主要方法:
- 最常见和直接的方法是与模型对话。它涉及制作提示,并将其发送给以人工智能为动力的模型,然后获得一个基于文本的输出作为回应。
- 另一种方法是将文本转换为数值数组。该过程涉及为人工智能编写提示,并获得一个数值数组作为回应。这通常被称为”嵌入”。它在向量数据库和语义搜索方面经历了最近的增长。
正是这两个主要问题,LangChain试图解决。如果您对与LLM的互动的主要问题感兴趣,可以在这里查看本文。
LangChain及其基础知识
LangChain是围绕LLM构建的开源框架。它提供了一系列工具、组件和接口,简化了以LLM为驱动的应用程序的架构。
通过LangChain,与语言模型的互动,连接多样化的组件以及整合API和数据库等资源变得轻而易举。这个直观的框架大大简化了LLM应用程序开发的过程。
Long Chain的核心思想是,我们可以将不同的组件或模块(也称为链)连接在一起,以创建更复杂的LLM驱动的解决方案。
以下是LangChain的一些突出特点:
- 可定制的提示模板,以标准化我们的互动。
- 针对复杂用例量身定制的链链接组件。
- 与领先的语言模型(包括OpenAI的GPT和HuggingFace Hub上的模型)实现的无缝集成。
- 模块化组件,采用灵活组合的方式,以评估任何特定的问题或任务。
LangChain以其可适应性和模块化设计而脱颖而出。
LangChain的主要思想是将自然语言处理序列拆分为单独的部分,使开发人员能够根据其需求定制工作流程。
这样的多功能性使得LangChain成为在不同情况和行业构建人工智能解决方案的首选。
其中一些最重要的组件是…
1. LLMs
LLMs是利用大量训练数据来理解和生成类似人类文本的基本组件。它们是LangChain内许多操作的核心,提供必要的语言处理功能,以分析、解释和响应文本输入。
用途:为聊天机器人提供动力,生成可用于各种应用程序的类似人类的文本,帮助信息检索和进行其他语言处理。
2. 提示模板
提示是与LLM互动的基础,在处理特定任务时,它们的结构往往相似。预设的提示模板可以跨链使用,从而使“提示”标准化,并添加特定的值。这可以增强任何LLM的适应性和定制性。
用途:标准化与LLM互动的过程。
3. 输出解析器
输出解析器是组件,它们将链中前一阶段的原始输出转换为结构化格式。这些结构化数据可以更有效地用于后续阶段,或作为响应交付给最终用户。
用途:例如,在聊天机器人中,输出解析器可以处理语言模型的原始文本响应,提取关键信息,并将其格式化为结构化的回复。
4. 组件和链
在LangChain中,每个组件都充当语言处理序列中负责特定任务的模块。这些组件可以连接在一起形成自定义工作流程的链。
用途:生成特定聊天机器人中的情感检测和响应生成器链。
5. 内存
LangChain中的内存指的是工作流程中提供存储和检索机制的组件。该组件允许临时或持久性存储数据,可以在与LLM的交互过程中被其他组件访问和操作。
用途:在需要在处理的不同阶段之间保留数据的情况下很有用,例如在聊天机器人中存储对话历史以提供上下文感知的响应。
6. 代理
代理是能够根据它们处理的数据采取行动的自主组件。它们可以与其他组件、外部系统或用户进行交互,以在LangChain工作流程中执行特定任务。
用途:例如,代理可能处理用户交互,处理传入请求,并协调数据流通过链以生成适当的响应。
7. 索引和检索器
索引和检索器在高效管理和访问数据方面扮演关键角色。索引是保存模型训练数据的信息和元数据的数据结构。另一方面,检索器是与这些索引进行交互的机制,根据指定的条件提取相关数据,并通过提供相关上下文,使模型能够更好地回复。
用途:它们在快速从大型数据集中获取相关数据或文档方面起到了重要作用,这对于信息检索或问题回答等任务至关重要。
8. 文档转换器
在LangChain中,文档转换器是专门设计用于处理和转换文件的组件,以使其适合进一步的分析或处理。这些转换可能包括文本标准化、特征提取或将文本转换为不同格式。
用途:准备文本数据以进行后续处理阶段,例如由机器学习模型进行分析或进行高效检索的索引。
9. 嵌入模型
它们用于将文本数据转换为高维空间中的数值向量。这些模型捕捉了单词和短语之间的语义关系,实现了机器可读的表示。它们是LangChain生态系统内各种下游自然语言处理(NLP)任务的基础。
用途:通过提供文本的数值表示,促进语义搜索、相似性比较和其他机器学习任务。
10. 向量存储
这是一种专门用于存储和通过嵌入进行信息搜索的数据库系统类型,本质上分析类似文本数据的数值表示。向量存储作为存储这些嵌入的设施。
用途:基于语义相似性进行高效搜索。
设置和示例
使用PIP安装
首先,我们要确保在环境中安装了LangChain。
pip install langchain
环境设置
使用LangChain通常意味着与各种模型提供商、数据存储、API等组件进行集成。正如您已经了解的那样,像任何集成一样,为LangChain的运行提供相关和正确的API密钥至关重要。
假设我们想要使用OpenAI API。我们可以轻松完成以下两种方式之一:
- 将密钥设置为环境变量
OPENAI_API_KEY="..."
或者
import osos.environ['OPENAI_API_KEY'] = “...”
如果您选择不建立环境变量,则可以选择在初始化OpenAI LLM类时通过openai_api_key命名参数直接提供密钥:
- 直接在相关类中设置密钥。
from langchain.llms import OpenAIllm = OpenAI(openai_api_key="...")
LangChain的运用
轻松切换LLM
LangChain提供了一个LLM类,允许我们与不同的语言模型提供商(如OpenAI和Hugging Face)进行交互。
要开始使用任何LLM都非常简单,因为任何LLM的最基本和最易于实现的功能就是生成文本。
然而,要同时向不同的LLM提出完全相同的提示并不容易。
这就是LangChain的用处所在…
回到任何LLM最简单的功能,我们可以很容易地使用LangChain构建一个应用程序,该应用程序接收一个字符串提示并返回我们指定LLM的输出..Code by Author
我们可以仅用几行代码使用相同的提示来获取两个不同模型的响应!
Code by Author
令人印象深刻…对吗?
使用提示模板为我们的提示赋予结构
语言模型(LLM)的一个常见问题是它们无法升级复杂应用程序。LangChain通过提供一个解决方案来简化创建提示的过程,常规任务通常比定义任务更复杂,它需要概述AI的角色并确保事实准确性。其中的一个重要部分涉及重复的样板文本。LangChain通过提供提示模板来减轻这个问题,它会自动在新的提示中包含样板文本,从而简化提示创建,并确保在不同任务中保持一致性。
Code by Author
使用输出解析器获取结构化的响应
在基于聊天的互动中,模型的输出只是文本。然而,在软件应用中,具有结构化输出更可取,因为它允许进一步的编程操作。例如,在生成数据集时,以CSV或JSON等特定格式接收响应是希望的。假设可以创建一个适当的提示来引出一致并格式适宜的AI响应,这就需要工具来管理此输出。LangChain提供了输出解析器工具,以有效处理和利用结构化输出。
Code by Author
您可以在我的GitHub上查看完整代码。
结论
不久前,ChatGPT的先进能力让我们叹为观止。然而,技术环境不断变化,现在像LangChain这样的工具已经近在咫尺,使我们能够在个人电脑上仅用几个小时就能打造出杰出的原型。
LangChain是一个免费可用的Python平台,为用户提供了一个开发以LLMs(语言模型模型)为基础的应用程序的方法。该平台通过代理提供了一个灵活的接口,用于处理提示并作为诸如提示模板、更多LLMs、外部信息和其他资源的纽带,根据当前的文档。
想象一下聊天机器人、数字助理、语言翻译工具和情感分析实用工具;所有这些由LLMs启用的应用程序都可以在LangChain上实现。开发人员使用该平台来打造定制的语言模型解决方案,以满足不同的需求。
随着自然语言处理的范围不断扩大,其应用的领域似乎是无限的。
[Josep Ferrer](https://www.linkedin.com/in/josep-ferrer-sanchez)是来自巴塞罗那的分析工程师。他毕业于物理工程专业,目前在人类移动性应用数据科学领域工作。他是一名兼职内容创作者,专注于数据科学和技术。您可以在LinkedIn、Twitter或VoAGI上与他联系。