LangChain介绍
许多开源模型,如 Meta AI 的 LLaMa、Deepseek 的 Deepseek-LLM、IBM 的 Granite 和 Google 的 Flan-T5,可以通过 Hugging Face 访问。即使您只是希望您的模型能反映对当前事件的实时感知,它也需要外部信息:模型的内部数据仅在其预训练期间的时间点是最新的。LangChain 通过简单的实用程序解决了这个问题,可以为系统添加记忆功能,
什么是 LangChain?
LangChain 是一个用于使用大型语言模型 (LLM) 进行应用程序开发的开源编排框架。LangChain 提供基于 Python 和 Javascript 的库,其工具和 API 简化了构建由 LLM 驱动的应用程序(如聊天机器人和 AI 智能体)的过程。
LangChain 充当几乎所有 LLM 的通用接口,提供了一个集中化的开发环境来构建 LLM 应用程序并将其与外部数据源和软件工作流集成。LangChain 基于模块的方法允许开发人员和数据科学家动态比较不同的提示(prompts),甚至不同的基础模型,而几乎无需重写代码。这种模块化环境还允许程序使用多个 LLM:例如,一个应用程序可以使用一个 LLM 来解释用户查询,并使用另一个 LLM 来撰写响应。
LangChain 由 Harrison Chase 于 2022 年 10 月推出,并迅速崛起:截至 2023 年 6 月,它是 Github 上增长最快的开源项目。随着接下来一个月 OpenAI 的 ChatGPT 的隆重发布,LangChain 在生成式 AI (genAI) 广泛普及之后,为爱好者和初创公司更容易接触这项技术发挥了重要作用。智能体式 AI (Agentic AI) 在可访问性方面的进步目前正在推动自动化革命。
LangChain 可以支持 LLM 和自然语言处理 (NLP) 的大多数用例,例如聊天机器人、智能搜索、问答、摘要服务,甚至能够进行机器人流程自动化 (RPA) 的 AI 智能体。
与 LLM 的集成
LLM 不是独立应用程序:它们是经过预训练的统计模型,必须与应用程序(以及在某些情况下是特定的数据源)配对才能达到其目的。
例如,Chat-GPT 不是一个 LLM:它是一个聊天机器人应用程序,根据您选择的版本,使用 GPT-3.5 或 GPT-4 语言模型。虽然是 GPT 模型负责解释用户的输入并组织自然语言响应,但(除其他外)是应用程序提供了供用户键入和阅读的界面,以及支配聊天机器人体验的 UX 设计。即使在企业层面,Chat-GPT 也不是唯一使用 GPT 模型的应用程序:微软使用 GPT-4 来驱动 Bing Chat。
此外,尽管基础模型(例如为 LLM 提供动力的模型)是在海量数据集上预训练的,但它们并非无所不知。如果特定任务需要访问特定的上下文信息(如内部文档或领域专业知识),则必须将 LLM 连接到那些外部数据源。即使您只是希望您的模型能反映对当前事件的实时感知,它也需要外部信息:模型的内部数据仅在其预训练期间的时间点是最新的。
同样,如果给定的生成式 AI 任务需要访问外部软件工作流(例如,如果您希望您的虚拟智能体与 Slack 集成),那么您将需要一种方法将该 LLM 与该软件的 API 集成。
虽然这些集成通常可以通过完全手写代码来实现,但诸如 LangChain 和 IBM watsonx 人工智能产品组合之类的编排框架极大地简化了这一过程。它们还使得尝试不同 LLM 以比较结果变得容易得多,因为只需最少的代码更改即可换入和换出不同的模型。
LangChain 如何工作?
LangChain 的核心是一个通过使用抽象来简化 LLM 应用程序编程的开发环境:抽象通过将一个或多个复杂过程表示为封装其所有组成步骤的命名组件来简化代码。
抽象是日常生活和语言中的常见元素。例如,“π”让我们可以表示圆的周长与其直径的比率,而无需写出其无限的数字。同样,恒温器让我们可以控制家中的温度,而无需理解其中涉及的复杂电路——我们只需要知道不同的恒温器设置如何转化为不同的温度。
LangChain 本质上是一个用于 Python 和 Javascript 的抽象库,代表了使用语言模型所需的常见步骤和概念。这些模块化组件(如函数和对象类)是生成式 AI 程序的构建模块。它们可以“链”在一起创建应用程序,从而最大限度地减少执行复杂 NLP 任务所需的代码量和精细理解。尽管 LangChain 的抽象方法可能会限制专家程序员对应用程序进行精细自定义的程度,但它使专家和新手都能够快速进行实验和原型设计。
导入语言模型
几乎任何 LLM 都可在 LangChain 中使用。只要您有 API 密钥,将语言模型导入 LangChain 就很容易。LLM 类旨在为所有模型提供标准接口。
大多数 LLM 提供商都要求您创建一个帐户才能接收 API 密钥。其中一些 API——尤其是那些用于专有闭源模型(如 OpenAI 或 Anthropic 提供的模型)的 API——可能会产生相关费用。
许多开源模型,如 Meta AI 的 LLaMa、Deepseek 的 Deepseek-LLM、IBM 的 Granite 和 Google 的 Flan-T5,可以通过 Hugging Face 访问。IBM watsonx 通过与 Hugging Face 的合作,也提供了一套精选的开源模型。在任一服务上创建帐户都将允许您为该提供商提供的任何模型生成 API 密钥。
LangChain 不限于开箱即用的基础模型:CustomLLM 类允许使用自定义的 LLM 包装器。同样,您可以使用 IBM watsonx API 和 Python SDK(包含 LangChain 集成)通过 WatsonxLLM 类(以及该模型的特定项目 ID)在 LangChain 中构建使用您已针对特定需求训练或微调过的模型的应用程序。
提示模板 (Prompt Templates)
提示(Prompts)是给 LLM 的指令。编写能有效提供必要上下文、使 LLM 能够以对您最有用的方式解释输入和构建输出的提示的“艺术”,通常称为提示工程 (prompt engineering)。
LangChain 中的 PromptTemplate 类规范了提示的组成,无需手动硬编码上下文和查询。提示的重要元素同样作为正式类输入,例如 input_variables。因此,提示模板可以包含和重现上下文、指令(如“不要使用技术术语”)、一组指导其回复的示例(这称为“少样本提示/few-shot prompting”)、指定的输出格式或待回答的标准问题。您可以保存一个结构良好的提示模板并为其命名,并根据需要轻松重用。
尽管这些元素都可以手动编码,但 PromptTemplate 模块能够实现与其他 LangChain 功能(例如同名的链/chains)的平滑集成。
链 (Chains)
顾名思义,链是 LangChain 工作流的核心。它们将 LLM 与其他组件结合在一起,通过执行一系列功能来创建应用程序。
最基本的链是 LLMChain。它只是调用一个模型和该模型的提示模板。例如,假设您将一个提示保存为“ExamplePrompt”,并想针对 Flan-T5 运行它。您可以从 langchain.chains 导入 LLMChain,然后定义 chain_example = LLMChain(llm = flan-t5, prompt = ExamplePrompt)。要为给定输入运行链,您只需调用 chain_example.run(“input”)。
要将一个函数的输出用作下一个函数的输入,您可以使用 SimpleSequentialChain。每个函数可以根据您的特定需求使用不同的提示、不同的工具、不同的参数,甚至不同的模型。
索引 (Indexes)
为了完成某些任务,LLM 需要访问其训练数据集中未包含的特定外部数据源,例如内部文档、电子邮件或数据集。LangChain 将此类外部文档统称为“索引”。
文档加载器 (Document Loaders)
LangChain 为第三方应用程序提供了各种各样的文档加载器。这可以轻松地从以下来源导入数据:文件存储服务(如 Dropbox、Google Drive 和 Microsoft OneDrive)、网络内容(如 YouTube、PubMed 或特定 URL)、协作工具(如 Airtable、Trello、Figma 和 Notion)、数据库(如 Pandas、MongoDB 和 Microsoft)等等。
向量数据库 (Vector Databases)
与“传统”结构化数据库不同,向量数据库通过将数据点转换为向量嵌入(vector embeddings)来表示它们:这是一种具有固定维度数量的向量形式的数值表示,通常使用无监督学习方法聚类相关的数据点。这使得即使对于海量数据集也能进行低延迟查询,从而大大提高了效率。向量嵌入还存储每个向量的元数据,进一步增强了搜索的可能性。
LangChain 为超过 25 种不同的嵌入方法以及超过 50 种不同的向量存储(包括云托管和本地)提供了集成。
文本分割器 (Text Splitters)
为了提高速度并减少计算需求,通常明智的做法是将大型文本文档分割成更小的部分。LangChain 的 TextSplitters 将文本分割成小的、语义上有意义的块,然后可以使用您选择的方法和参数将它们组合起来。
检索 (Retrieval)
一旦连接了外部知识源,模型必须能够根据需要快速检索和整合相关信息。与 watsonx 一样,LangChain 提供检索增强生成 (RAG):其检索器模块接受字符串查询作为输入,并返回一个 Document 列表作为输出。
使用 LangChain,我们还可以构建智能体式 RAG (agentic RAG) 系统。在传统的 RAG 应用程序中,LLM 会提供一个向量数据库供其在形成响应时参考。相比之下,智能体式 AI 应用程序不仅限于数据检索。智能体式 RAG 还可以包含用于执行数学计算、写电子邮件、执行数据分析等任务的工具。
记忆 (Memory)
默认情况下,LLM 不具备对先前交互的任何长期记忆(除非该聊天记录被用作查询的输入)。LangChain 通过简单的实用程序解决了这个问题,可以为系统添加记忆功能,选项范围从保留所有对话的全部内容,到保留迄今为止对话的摘要,再到保留最近的 n 次交换。
工具 (Tools)
尽管 LLM 被宣扬具有强大的能力和多功能性,但它们也有重要的局限性:即缺乏最新信息、缺乏领域专业知识以及普遍存在的数学计算困难。
LangChain 工具是一组函数,使 LangChain 智能体能够与现实世界的信息交互,以扩展或改进其可提供的服务。著名的预构建 LangChain 工具示例包括:
-
Wolfram Alpha:提供对强大计算和数据可视化功能的访问,从而实现复杂的数学能力。
-
Google Search:提供对 Google 搜索的访问,为应用程序和智能体配备实时信息。
-
OpenWeatherMap:获取天气信息。
-
Wikipedia:提供对维基百科文章信息的有效访问。
LangChain 智能体 (Agents)
我们可以使用 LangChain 框架构建一个智能体,赋予 LLM 决策、使用工具和逐步完成复杂任务的能力,而不仅仅是生成单个文本响应。与仅使用 LLM 进行的简单提示-响应交互不同,由 LangChain 驱动的智能体可以思考、计划、执行一系列动作、学习和适应。
LangChain 提供了简化的用户体验,提供了一个现成的、可扩展的框架来创建 AI 智能体,因此无需构建新的工具选择逻辑、推理循环(例如用于 ReAct 智能体)、观察/动作跟踪或提示编排和格式化。
具体的 LangChain 包、类和方法因您打算使用的 AI 平台而异。WatsonxLLM 类中允许使用 LangChain 与 watsonx.ai 模型通信的一些关键组件包括:
-
langchain_ibm:负责 LangChain IBM 集成的包。必须安装此包才能使用以下任何类和方法。
-
ibm_watsonx_ai:允许连接到 watsonx.ai 服务(如 IBM Cloud 和 IBM Cloud Pak for Data)的库。
-
APIClient:ibm_watsonx_ai 库的主类,用于管理 API 服务资源。参数包括 API 凭据和端点。
-
WatsonxLLM:IBM watsonx.ai 基础模型的包装器。此包装器提供链集成并且必须导入。参数包括模型 ID、watsonx.ai API 密钥、URL 端点、项目 ID 以及任何 LLM 参数。
-
ModelInference:实例化模型接口的类。参数包括模型 ID、watsonx.ai 凭据、项目 ID、模型参数等。实例化后,模型可以传入该类。
-
invoke:直接使用单个字符串类型提示调用模型的方法。
-
generate:使用列表中的多个字符串类型提示调用模型的方法。
另一个用于通过集成工具调用和与 watsonx.ai 模型链式调用来构建 AI 智能体的 LangChain 类是 ChatWatsonx。这个在我们许多教程中使用的类,利用 bind_tools 方法在每次迭代时将工具列表传递给 LLM。这些可以包括自定义工具和预构建工具。要检索 AI 智能体响应,可以使用 invoke 方法。一旦调用智能体,响应的 tool_calls 属性会显示所进行的每个工具调用的名称、参数、ID 和类型(如果有)。
LangGraph
LangGraph 由 LangChain 创建,是一个开源的 AI 智能体框架,支持多智能体编排,并使开发人员能够构建不同智能体交互、专业化和协作的智能体工作流。
LangGraph 的核心是利用基于图的架构的力量来建模和管理 AI 智能体工作流各个组件之间复杂的关系。结合人在回路的监控机制以及一套 API 和工具集成,LangGraph 为用户提供了一个用于开发 AI 解决方案和工作流的通用平台,包括聊天机器人、状态图和其他基于智能体的系统。
借助 langchain-mcp-adapters 库,LangGraph 智能体也可以使用在模型上下文协议 (MCP) 服务器上定义的工具。mcp 库也允许用户构建自定义 MCP 服务器。本质上,MCP 实现了 AI 系统(如 AI 智能体)与外部工具之间的安全连接。因此,给定标准的 MCP,各种 LLM 可以连接到相同的工具和数据源。
AI 学院 (AI Academy)
(此部分为内容链接和描述,保留原文格式)
为什么基础模型是 AI 的范式转变
了解一类新型的、灵活的、可重用的 AI 模型如何能够释放新收入、降低成本和提高生产率,然后使用我们的指南进行深入探讨。
前往该剧集
LangSmith
LangSmith 于 2023 年秋季发布,旨在弥合使 LangChain 声名鹊起的易用原型设计能力与构建生产级 LLM 应用程序之间的差距。
LangSmith 提供了监控、评估和调试应用程序的工具,包括自动跟踪所有模型调用以发现错误和测试不同模型配置下的性能的能力。LangSmith 的使用不仅限于使用 LangChain 生态系统构建的应用程序。智能体性能的评估是使用 LLM-as-a-judge 评估器完成的。这种可观察性和这些关键指标旨在优化更健壮、成本效益更高的应用程序。
开始使用 LangChain
LangChain 是开源且免费使用的:源代码可在 Github 上下载。
LangChain 也可以通过简单的 pip 命令安装在 Python 上:pip install langchain
。要安装所有 LangChain 依赖项(而不仅仅是您认为必要的那些),您可以运行命令 pip install langchain[all]
。
IBM 提供了许多分步教程,包括 LangChain 工具调用、智能体式 RAG、LLM 智能体编排、智能体式分块等。
LangChain 用例
使用 LangChain 制作的 AI 应用程序为各种用例提供了极大的实用性,从简单的问答和文本生成任务到使用 LLM 作为“推理引擎”的更复杂的解决方案。
聊天机器人 (Chatbots)
聊天机器人是 LLM 最直观的用途之一。LangChain 可用于为聊天机器人的特定用途提供适当的上下文,并将聊天机器人集成到具有自身 API 的现有通信渠道和工作流中。
摘要 (Summarization)
可以要求语言模型总结多种类型的文本,从分解复杂的学术文章和转录本到提供传入电子邮件的摘要。
问答 (Question Answering)
使用特定文档或专业知识库(如 Wolfram、arXiv 或 PubMed),LLM 可以从存储中检索相关信息并阐述有用的答案。如果经过微调或正确提示,一些 LLM 即使没有外部信息也能回答许多问题。
数据增强 (Data Augmentation)
LLM 可用于生成合成数据以用于机器学习。例如,可以训练一个 LLM 来生成与训练数据集中的数据点非常相似的额外数据样本。
虚拟智能体 (Virtual Agents)
与正确的工作流集成后,LangChain 的智能体 (Agent) 模块可以使用 LLM 自主确定后续步骤并使用机器人流程自动化 (RPA) 采取行动。
更多推荐
所有评论(0)