LangChain 入门和一些基本名词概念
langChain 简介
langchain 是一个用于构建基于大语言模型(LLM)的应用程序的框架。它提供了一些工具和组件,可以帮助开发者更轻松地创建和管理与LLM交互的应用程序。
LangChain 的一些特性
LLM 和 提示(Prompt)
LangChain 对所有LLM 进行了API抽象, 统一了接口, 使得不同的LLM 可以无缝切换。 提示(Prompt) 是与 LLM 交互的关键部分, LangChain 提供了一个提示模板系统, 使得提示的创建和管理变得更加简单和灵活。
链(Chain)
链(Chain) 是 LangChain 的核心概念之一, 它允许将多个组件组合在一起, 形成一个完整的工作流。 例如, 可以将 LLM、提示、数据源和其他组件组合在一起, 创建一个复杂的应用程序。 LangChain 提供了多种内置的链类型, 例如序列链、条件链和并行链等, 使得创建复杂的工作流变得更加简单。
LCEL (LangChain Expression Language)
LCEL 是 LangChain 的表达式语言, 允许用户使用简单的语法来定义和操作数据。 LCEL 可以用于创建动态提示、条件逻辑和其他复杂的操作, 使得应用程序更加灵活和可扩展。 LCEL 的语法类似于 JavaScript, 使得开发者可以轻松上手。
数据增强生成(RAG)
RAG 全称为 Retrieval-Augmented Generation, 是一种结合了信息检索和生成模型的技术。 它允许在生成文本时使用外部数据源, 提高生成文本的准确性和相关性。 LangChain 提供了对 RAG 的支持, 使得开发者可以轻松地将外部数据源集成到应用程序中。
简单来讲就是用户可以通过检索外部数据来增强生成的文本, 使得生成的文本更加准确和相关。 例如, 在回答问题时, 可以先检索相关的文档,然后再使用 LLM 生成答案。 这样可以提高生成文本的准确性和相关性。
代理(Agent) 又叫智能体
代理(Agent) 是 LangChain 中的一个重要概念, 它允许用户创建可以自主决策和执行任务的智能体。 代理可以根据环境和输入动态调整其行为, 使得应用程序更加灵活和智能。 LangChain 提供了多种内置的代理类型, 例如基于规则的代理、基于模型的代理等, 使得创建智能体变得更加简单。
Agent 的关键时不但能够调用 LLM 生成文本, 还可以调用其他工具和 API 来执行任务。 它有自主决策和执行任务的能力!
例如, 可以创建一个代理, 它可以根据用户的输入调用 LLM 生成文本,然后根据生成的文本调用外部 API 来获取数据。 这样可以创建一个更加智能和灵活的应用程序。
市面上常见的Agent:
- Siri: 苹果的语音助手, 可以执行各种任务, 例如发送短信、设置闹钟等。
- Google Assistant: 谷歌的语音助手, 可以执行各种任务, 例如搜索信息、播放音乐等。
模型记忆 (Memory)
模型记忆是 LangChain 中的一个重要概念, 它允许用户在与 LLM 交互时保持上下文信息。 这对于需要多轮对话或上下文感知的应用程序非常重要。 LangChain 提供了多种内置的记忆类型, 例如短期记忆、长期记忆等, 使得创建具有上下文感知能力的应用程序变得更加简单。
LangChain 的框架
如图:
LangSmith
LangSmith 是 LangChain 的一个重要组成部分, 它提供了一个可视化的界面, 使得开发者可以轻松地创建、管理和调试应用程序。 LangSmith 提供了多种工具和功能,例如可视化工作流、调试工具、性能分析等, 使得开发者可以更加高效地开发和维护应用程序。
Template
LangChain 提供了多种内置的模板, 使得创建和管理提示变得更加简单。 模板可以用于创建动态提示、条件逻辑和其他复杂的操作, 使得应用程序更加灵活和可扩展。 LangChain 的模板系统支持多种格式,例如文本、JSON、XML 等, 使得开发者可以根据需要选择合适的格式。
LangServe
具体来说,LangServe 提供了以下功能:
部署框架: 它提供了一个框架,用于将您使用 LangChain 构建的应用程序部署到各种环境中,例如本地、云端等。
API 服务: 它允许您将您的 LangChain 应用程序转换成 RESTful API,使其可以通过 HTTP 请求访问。
管理和监控: 它提供了一些工具和功能,用于管理和监控您的已部署应用程序,例如负载均衡、监控等。
LangChain 库(Libraries)
- langchain-core: 基础抽象和LCEL
- langchain-community: 第三方集成
- langchain
下面再详细介绍
LangChain
包含上面提到的3个主要组件, Chains, Agents, RAG
LangChain-Community
LangChain-Community 是 LangChain 的一个社区驱动的扩展库, 它提供了许多额外的功能和组件, 使得开发者可以更加灵活地创建应用程序。 LangChain-Community 包含了许多第三方集成、工具和示例, 使得开发者可以轻松地使用各种外部数据源和服务。
常见的扩展包有
Model I/O
通常由Model 提供商编写,
例如 OpenAI、Hugging Face 等。 这些扩展包提供了对特定模型的支持, 使得开发者可以轻松地使用这些模型。
Retrieval
通常由数据提供商编写,通常包含下面的组件
- Retriever: 用于检索数据的组件, 例如从数据库、搜索引擎等检索数据。
- Document Loader: 用于加载数据的组件, 例如从文件、数据库等加载数据。
- Vector Store: 用于存储和检索数据的组件, 例如向量数据库、搜索引擎等。
- Text Splitter: 用于将文本分割成块的组件, 例如将长文本分割成短文本。
- Embedding model: 用于将文本转换为向量的组件, 例如使用 Word2Vec、BERT 等模型将文本转换为向量。
Agent Tooling
包括
- Tool: 用于执行任务的组件, 例如调用 API、执行命令等。
- Toolkit: 用于管理和组织工具的组件, 例如将多个工具组合在一起, 创建一个工具包。
LangChain Core
LangChain Core 是 LangChain 的核心库, 它提供了 LangChain 的基本功能和组件。 LangChain Core 包含了 LLM、提示、链、代理等核心概念和功能, 使得开发者可以轻松地创建和管理应用程序。 LangChain Core 是 LangChain 的基础, 所有其他组件和扩展都是基于 LangChain Core 构建的。
LCEL
LCEL 是 LangChain 的表达式语言, 允许用户使用简单的语法来定义和操作数据。
功能包括
- Parallelization: 允许用户并行执行多个操作, 提高性能和效率。
- Fallback: 允许用户定义备用操作, 当主操作失败时执行备用操作。
- Tracing: 允许用户跟踪和记录操作的执行过程, 便于调试和分析。
- Batching: 允许用户将多个操作批量处理, 提高性能和效率。
- Streaming: 允许用户实时处理数据流, 提高性能和效率。
- Async: 允许用户异步执行操作,提高性能和效率。
- Composition: 允许用户将多个操作组合在一起, 创建一个复杂的工作流。
langChain 的任务处理流程
- 用户输入: 用户通过界面或API输入请求,例如提问或命令。
- 预处理: 系统对用户输入进行预处理,例如清洗、分词等操作。
- 检索: 系统根据用户输入检索相关数据,例如从数据库、搜索引擎等检索数据。
- 生成: 系统使用 LLM 生成响应,例如回答问题、执行命令等。
- 后处理: 系统对生成的响应进行后处理,例如格式化、过滤等操作。
- 返回结果: 系统将处理后的结果返回给用户,例如通过界面或API返回响应。
langChain 的一些核心概念
-
LLM (Large Language Model): 大语言模型, 是一种基于深度学习的自然语言处理模型, 可以用于生成、理解和处理自然语言文本。 模型接受1个文本输入, 生成1个文本输出。 例如, OpenAI 的 GPT-3、Google 的 BERT 等都是 LLM。
-
Chat Model
Chat Model 是一种基于 LLM 的对话模型, 可以用于生成和理解对话文本。 它可以处理多轮对话, 具有上下文感知能力。 例如, OpenAI 的 ChatGPT、Google 的 LaMDA 等都是 Chat Model。 -
Message
Message 是与 Chat Model 交互的基本单位, 它包含了输入文本、输出文本和其他元数据。 Message 可以用于表示用户输入、模型输出和系统状态等信息。 LangChain 提供了多种内置的消息类型, 例如文本消息、图像消息等, 使得与 Chat Model 的交互更加灵活和丰富。
也分为 HumanMessage, AIMessage, SystemMessage, FunctionMessage 和 ToolMessage
-
Prompt
Prompt 是与 LLM 交互的关键部分, 它是一个包含输入文本和其他元数据的模板。 Prompt 可以用于生成动态提示、条件逻辑和其他复杂的操作, 使得与 LLM 的交互更加灵活和可扩展。 LangChain 提供了多种内置的提示类型, 例如文本提示、JSON 提示等, 使得创建和管理提示变得更加简单。 -
Output Parser
Output Parser 是用于解析 LLM 输出的组件, 它可以将 LLM 生成的文本转换为结构化数据或其他格式。 Output Parser 可以用于处理复杂的输出,例如 JSON、XML 等, 使得与 LLM 的交互更加灵活和可扩展。 LangChain 提供了多种内置的输出解析器, 例如 JSON 解析器、XML 解析器等, 使得创建和管理输出解析器变得更加简单。 -
Retriever
Retriever 是用于检索数据的组件, 它可以根据用户输入从数据库、搜索引擎等检索相关数据。 Retriever 可以用于增强 LLM 的生成能力,例如在回答问题时使用外部数据源, 提高生成文本的准确性和相关性。 LangChain 提供了多种内置的检索器, 例如基于关键词的检索器、基于向量的检索器等, 使得创建和管理检索器变得更加简单。
Langchain 已经为我们封装好了 加载文件数据(Document loader), 分割数据(Text splitter), 向量化数据(Embedding model), 存储数据(Vector store), 检索数据(Retriever) 的功能, 使得我们可以轻松地将外部数据源集成到应用程序中。
- Vector Store
Vector Store 是用于存储和检索数据的组件, 它可以将文本转换为向量, 并存储在向量数据库中。 Vector Store 可以用于增强 LLM 的生成能力,例如在回答问题时使用外部数据源, 提高生成文本的准确性和相关性。 LangChain 提供了多种内置的向量存储器, 例如基于向量数据库的向量存储器、基于搜索引擎的向量存储器等, 使得创建和管理向量存储器变得更加简单。