🔥学习日记|day10:使用 LangChain 释放 LLM 的力量
00 分钟
2023-5-1
2023-8-26
type
status
slug
summary
date
tags
category
password
Text
AI summary
AI custom autofill
Multi-select
Status
URL
hashtag
勘误
标签
标题
类型
贴文
🪄
icon
 
在本篇文章中,将探讨如何使用LangChain和大型语言模型(LLMs)来开发强大的基于语言的应用程序。本文将提供关于LLMs和LangChain的基础知识,以及如何使用这些工具来创建各种应用程序的全面指南。
LangChain 是一种基于区块链技术的语言交互协议,可以帮助开发者构建强大的语言应用程序,并提供语言交互的安全性、透明度和可靠性。其核心组件包括语言智能合约、语言插件和语言交互接口。通过使用这些组件,开发者可以创建各种基于语言的应用程序,如翻译应用、语音识别应用和智能聊天机器人等。
LLMs 是一种机器学习技术,可以自动学习语言规则和语言模式,从而生成自然语言文本。在基于语言的应用程序中,LLMs 可以用于生成语言模板、生成对话内容和完成翻译任务等。使用LLMs可以帮助开发者提高应用程序的自然性和流畅性,从而提供更好的用户体验。

1. LangChain简介

在过去几年中,大型语言模型 (LLM) 席卷了人工智能世界。随着 OpenAI 的 GPT-3 在 2020 年的突破性发布,我们见证了 LLM 的受欢迎程度稳步上升,并且随着该领域最近的进步而愈演愈烈。这些强大的 AI 模型为自然语言处理应用开辟了新的可能性,使开发人员能够在聊天机器人、问答系统、摘要工具等中创建更复杂、更像人类的交互。
在这个快速发展的环境中,LangChain 已经成为一个多功能框架,旨在帮助开发人员充分利用 LLM 的全部潜力,用于广泛的应用程序。LangChain 围绕将不同组件“链接”在一起的核心概念构建,简化了与 GPT-3、GPT-4 等 LLM 合作的过程,使您可以轻松创建定制的高级用例。
在本初学者指南中,我们的目标是为您提供 LangChain 的全面介绍,带您了解其基本功能,演示如何构建简单的应用程序,并提供实用技巧和最佳实践来帮助您充分利用这个强大的框架. 无论您是 LLM 的新手还是正在寻找构建语言生成应用程序的简化方法,本指南都将作为宝贵的资源,帮助您使用 LangChain 释放 LLM 的力量。
notion image

2. LangChain 的构建模块和用例

LangChain 是一种新兴的技术,它可以提供多种用例。LangChain 的构建模块是一个复杂而强大的系统,它包括许多不同的组件,每个组件都有不同的作用。这些组件涵盖了从语言处理到区块链技术的多个领域,这使得 LangChain 能够在多个行业中得到广泛应用。

2.1. 主要的 LangChain 构建块

1)模型

LangChain 提供对各种模型类型和模型集成的支持。它使您能够轻松地集成和使用不同的语言模型,从而增强应用程序的功能。例如,您可以使用 LangChain 将自然语言处理模型集成到您的机器学习模型中,从而提高模型的准确性和性能。

2)提示

LangChain 允许您有效地管理、优化和序列化提示。这有助于从语言模型中生成更准确和上下文相关的响应。通过使用 LangChain,您可以创建更复杂的提示,使用更多的数据源,以及更好地优化和改进提示的性能。

3)内存

LangChain 提供了内存的标准接口和内存实现的集合。它促进了链或代理中调用之间状态的持久化,增强了模型的知识和召回能力。使用 LangChain,您可以轻松地管理内存,跟踪模型的状态,以及改进模型的性能。

4)索引

为了增强语言模型的力量,LangChain 帮助您将它们与您自己的文本数据有效地结合起来。它提供了索引和搜索数据源的最佳实践。使用 LangChain,您可以轻松地搜索和查找文本数据,以便更好地训练和优化模型。

5)

链是对语言模型或其他实用程序的调用序列。LangChain 提供链的标准接口,以及用于常见应用程序的大量集成和端到端链。使用 LangChain,您可以轻松地创建和管理链,以便更好地控制模型的输出。

6)代理

代理使语言模型能够做出决策、采取行动、观察结果并重复该过程,直到达到目标。LangChain 提供了代理的标准接口,可供选择的代理选择,以及端到端代理的示例。使用 LangChain,您可以轻松地管理和优化代理,以便更好地控制模型的输出和性能。

2.2. LangChain 的常见用例

1)自治代理

LangChain 支持自治代理的开发,如 AutoGPT 和 BabyAGI,它们是长期运行的代理,执行多个步骤以实现目标。自治代理可以应用于各种领域,如金融、医疗、智能家居等,为用户提供更智能、更便捷的服务。

2)代理模拟

LangChain 促进了沙盒环境的创建,代理可以在沙盒环境中相互交互或对事件做出反应,从而深入了解他们的长期记忆能力。代理模拟可以帮助用户更好地理解和研究代理的工作方式,从而优化代理的性能和效果。

3)个人助理

LangChain 是构建个人助理的理想之选,这些个人助理可以采取行动、记住交互并可以访问您的数据,从而提供个性化的帮助。个人助理可以应用于各种场景,如日常生活、工作等,为用户提供更智能、更个性化的服务。

4)问答

LangChain 擅长回答针对特定文档的问题,利用这些文档中的信息构建准确且相关的答案。此外,LangChain 还可以分析并回答与文档相关的问题,以帮助您更好地理解和应用文档中的信息。问答功能可以应用于各种场景,如教育、咨询、客服等,为用户提供更快速、更准确的服务。

5)聊天机器人

利用语言模型的文本生成功能,LangChain 能够创建引人入胜的聊天机器人。此外,LangChain 还可以为聊天机器人提供自定义功能和行为,以满足特定需求。聊天机器人可以应用于各种场景,如娱乐、客服、教育等,为用户提供更友好、更互动的服务。

6)查询表格数据

LangChain 提供了有关使用语言模型查询以表格格式(例如 CSV 文件、SQL 数据库或数据框)存储的数据的指南。此外,LangChain 还可以协助您创建自定义的查询功能,以更方便地访问和分析数据。查询表格数据功能可以应用于各种领域,如商业、金融、医疗等,为用户提供更快速、更方便的服务。

7)代码理解

LangChain 协助使用语言模型从 GitHub 等平台查询和理解源代码。此外,LangChain 还可以为代码理解提供自定义功能和行为,以满足特定需求。代码理解功能可以应用于各种领域,如软件开发、数据分析等,为用户提供更快速、更准确的服务。

8)与 API 交互

LangChain 使语言模型能够与 API 交互,为它们提供最新信息和根据实时数据采取行动的能力。此外,LangChain 还可以协助您创建自定义的 API 功能,以满足特定需求。与 API 交互功能可以应用于各种领域,如金融、物流、医疗等,为用户提供更快速、更智能的服务。

9)提取

LangChain 帮助从非结构化文本中提取结构化信息,简化数据分析和解释。此外,LangChain 还可以协助您创建自定义的提取功能,以更方便地访问和分析数据。提取功能可以应用于各种领域,如数据分析、信息管理等,为用户提供更快速、更准确的服务。

10)摘要

LangChain 支持将较长的文档摘要成简洁、易于消化的信息块,使其成为数据扩充的强大工具。此外,LangChain 还可以为您提供自定义的摘要功能,以更好地满足特定需求。摘要功能可以应用于各种领域,如新闻、研究、分析等,为用户提供更快速、更准确的服务。

11)评估

由于使用传统指标评估生成模型具有挑战性,LangChain 提供提示和链来帮助使用语言模型本身进行评估过程。此外,LangChain 还可以协助您创建自定义的评估功能,以更好地满足特定需求。评估功能可以帮助用户更好地了解和优化模型的性能和效果。
既然已经对 LangChain 的主要构建块和用例有了深入的了解,就可以开始构建强大的应用程序,充分发挥语言模型的真正潜力。
例如,可以使用该模型来生成更自然且易于理解的文本,或者创建一款能够自动翻译多种语言的应用程序。您还可以将该模型与其他技术结合使用,例如自然语言处理和机器学习,以创建更加复杂和高级的应用程序。在处理大量数据时,该模型还可以帮助您提高处理速度和准确度,从而使您能够更好地管理和分析数据。因此,深入了解和掌握该模型的潜力可以帮助您在各种不同的应用场景中实现更多的创新和成功。

3. 使用 Python 设置 LangChain 项目

深入了解 LangChain 的最简单方法是开始构建实际应用程序,我们将在下面进行。
让我们首先创建一个新的项目文件夹:
接下来,创建一个新的 Python 虚拟环境:
 
该命令python3 -m venv env使用 Python 3venv模块创建一个名为 env 的新虚拟环境。
这是命令的细分:
  • python3:这指定该命令应使用 Python 3 作为解释器。
  • m venv:此标志表示该命令应运行内置的 venv 模块,该模块用于创建虚拟环境。
  • envenv:这是您要创建的虚拟环境的名称。在这种情况下,虚拟环境将被命名为
虚拟环境是一个独立的 Python 环境,允许您安装特定于特定项目的包和依赖项,而不会干扰系统范围的 Python 安装或其他项目。这种隔离有助于保持一致性并避免不同项目需求之间的潜在冲突。
创建虚拟环境后,您可以使用以下命令激活它:
激活虚拟环境后,我们就可以为我们的项目安装所需的依赖项了。首先,我们使用以下命令统计 LangChain 的安装情况:
控制台上的输出应该如下所示:
notion image
让我们继续安装openai包:
为了能够在 LangChain 中使用 OpenAI 的大型语言模型(LLM),需要这个包。
为了能够通过 LangChain 使用 OpenAI 的模型,您还需要从 OpenAI 检索 API 密钥。按着这些次序:
  1. 进入 OpenAI 网站: https: //www.openai.com/
  1. 如果您已有帐户,请单击“开始”或“登录”。
  1. 创建一个帐户或登录到您现有的帐户。
  1. 登录后,您将被定向到 OpenAI 仪表板。
  1. 通过单击左侧边栏菜单中的“API”或访问:https://platform.openai.com/signup导航到 API 部分
  1. 按照说明访问或注册 API。如果您符合条件,您将获得一个 API 密钥。
  1. API 密钥应该看起来像一个长字母数字字符串(例如,“sk-12345abcdeABCDEfghijKLMNOP”)。
要为我们的环境设置 OpenAI 密钥,您可以使用命令行:
或者您可以在脚本中包含以下两行 Python 代码:

4. 在 LangChain 中使用大型语言模型 (LLM)

LangChain 提供了一个 LLM 类,旨在与各种语言模型提供者对接,例如 OpenAI、Cohere 和 Hugging Face。此类为所有 LLM 类型提供标准接口。在本指南中,我们将引导您使用 OpenAI LLM 包装器将 LLM 与 LangChain 集成,尽管突出显示的功能对于所有 LLM 类型都是通用的。

4.1. 导入 LLM 包装器:

首先,导入所需的 LLM 包装器。在此示例中,我们将使用 LangChain 的 OpenAI 包装器:

4.2. 生成文本:

LLM 最基本的功能是生成文本。为此,只需调用 LLM 实例并传入一个字符串作为提示:
让我们将所有内容组合成文件langchain-llm-01.py中的完整 Python 脚本
让我们运行这个脚本:
然后您应该能够在控制台上看到输出:
notion image

4.3. 生成更详细的输出:

您还可以使用输入列表调用 LLM 实例,从而获得更完整的响应,其中包括多个顶级响应和特定于提供者的信息:
提供的代码有两个主要组成部分:
llm_result = llm.generate(["Tell me a joke", "Tell me a poem"]*15)
这行代码调用了实例generate()的方法llm,实例是LangChain LLM类的一个实例。generate()方法将提示列表作为输入。在这种情况下,列表由两个提示组成:“给我讲个笑话”和“给我讲一首诗”。*15操作重复此列表 15 次,生成一个总共包含 30 个提示的列表。
generate()使用此提示列表调用该方法时,LLM 会为每个提示生成响应。该方法返回一个结果对象,其中包含生成的响应以及其他信息。
len(llm_result.generations)这行代码检索对象中的世代数(生成的响应)llm_resultgenerations对象的属性是llm_result一个列表,其中包含为每个输入提示生成的响应。在这种情况下,由于有 30 个输入提示,llm_result.generations列表的长度将为 30,表示 LLM 已经生成了 30 个响应,对应于 30 个输入提示。

4.4. 访问最高响应和提供商特定信息:

您可以通过访问 generations 数组来访问 LLM 提供的世代:
您还可以使用属性llm_output检索有关输出的更多信息:
通过llm_output可用的结构特定于您正在使用的 LLM。在 OpenAI LLM 的情况下,它应该包含有关令牌使用的信息,例如:
这是包含在属性中的 LLM 提供者特定信息的字典表示llm_output在这种情况下,它显示有关令牌使用情况的信息:
  • completion_tokens:LLM 生成的令牌数作为对输入提示的响应。在这种情况下,LLM 生成了 3,903 个标记作为完成文本。
  • total_tokens:生成过程中使用的令牌总数,包括输入提示和生成的响应。在这种情况下,令牌总数为 4,023。
  • prompt_tokens:输入提示中的令牌数。在本例中,提示总共包含 120 个标记。
这些令牌计数在使用 LLM 时非常有用,因为它们可以帮助您了解与使用 LLM 生成文本相关的令牌使用和成本。
让我们将它们全部组合成一个新的 Python 脚本:
再次启动脚本将导致以下结果:
notion image

4.5. 估计令牌数

估计一段文本中的标记数量很有用,因为模型具有上下文长度(并且标记越多,成本越高),因此了解您传入的文本长度很重要。默认情况下,标记是估计的使用tiktoken.
这意味着您还需要安装相应的包:
然后,您可以使用以下代码行来获取最高令牌估计值:

结论

本博客文章提供了关于如何利用LangChain和大型语言模型(LLMs)开发强大的基于语言的应用程序的全面指南。它涵盖了LLMs和LangChain的基础知识,以及这些工具如何用于创建各种应用程序。
文章首先介绍了OpenAI包,这是使用OpenAI的LLMs与LangChain所需的。接下来,它解释了如何从OpenAI检索API密钥,这是访问OpenAI LLM模型所需的。文章然后通过步骤介绍了如何使用OpenAI LLM包装器将LLMs与LangChain集成,并提供了一个使用LLMs生成文本的示例Python脚本。
文章还涵盖了一些高级LLM功能,例如使用输入列表生成更详细的输出,访问特定于提供程序的信息和估计令牌计数。它解释了如何使用TikToken包估计令牌计数,这对于了解使用LLMs生成文本的成本非常有用。
最后,文章提供了LangChain的模块和常见用例的概述,包括自主代理、代理模拟、个人助手、问答、聊天机器人、查询表格数据和代码理解。它强调了LangChain模块化方法的灵活性,允许开发人员创建适合其特定需求的定制解决方案。
总的来说,本文为新手开发人员和那些寻找使用LangChain构建语言生成应用程序的简化方式的人提供了有价值的资源。它为理解和使用LangChain释放LLMs的强大功能提供了坚实的基础,可用于各种应用程序。
 

作者:Sebastian

评论