跳到主要内容 基于 LangChain 构建 LLM 应用:核心组件与架构解析 | 极客日志
Python AI 算法
基于 LangChain 构建 LLM 应用:核心组件与架构解析 本文探讨了大型语言模型(LLMs)在独立使用时的局限性,如知识过时、无法行动及幻觉风险。介绍了 LangChain 框架如何通过链(Chains)、代理(Agents)、记忆(Memory)和工具(Tools)等核心组件解决这些问题。文章详细阐述了 LangChain 的模块化架构,对比了与其他框架的差异,并说明了如何利用外部数据源和推理算法增强 LLM 能力,构建动态、数据感知的应用程序。
剑仙 发布于 2025/2/6 更新于 2026/4/21 1 浏览大型语言模型(LLMs)如 GPT-4 已经展示了在生成类似人类文本方面的巨大能力。然而,仅通过 API 访问 LLMs 存在一些局限性。相反,将它们与其他数据源和工具结合使用可以实现更强大的应用。在本章中,我们将介绍 LangChain 作为一种克服 LLMs 局限性并构建创新语言应用的方法。我们旨在演示如何将最近的 AI 进展与像 LangChain 这样强大的框架相结合的潜力。
我们将首先概述在单独使用 LLMs 时面临的一些挑战,例如缺乏外部知识、错误的推理和无法采取行动。LangChain 通过不同的集成和特定任务的现成组件解决了这些问题。我们将通过示例演示开发人员如何利用 LangChain 的功能来创建定制的自然语言处理解决方案,概述所涉及的组件和概念。
目标是说明 LangChain 如何实现构建动态、数据感知的应用程序,超越仅通过 API 调用 LLMs 时的可能性。最后,我们将讨论与 LangChain 相关的重要概念,如 Chains(链)、Action Plan Generation(行动计划生成)和 Memory(内存),这些概念对于理解 LangChain 的工作原理非常重要。
超越随机鹦鹉
什么是 LangChain?
探索 LangChain 的关键组件
LangChain 如何工作?
将 LangChain 与其他框架进行比较
超越随机鹦鹉 概述 :由于它们能够生成类似人类文本并理解自然语言,大型语言模型(LLMs)因其在围绕内容生成、文本分类和摘要等方面的能力而受到重视和普及。然而,它们表面上的流畅性掩盖了限制其在实际应用中的效用的严重缺陷。随机鹦鹉的概念有助于阐明这一基本问题。
随机鹦鹉指的是能够产生令人信服的语言但缺乏对词语背后真实含义的任何真正理解的 LLMs。这个术语由研究人员 Emily Bender、Timnit Gebru、Margaret Mitchell 和 Angelina McMillan-Major 在他们具有影响力的论文《On the Dangers of Stochastic Parrots》(2021)中创造,该术语批评那些毫无根据地模仿语言模式的模型。如果没有扎根于现实世界,模型可能会产生不准确、不相关、不道德或逻辑不通的响应。
仅仅通过提升计算和数据规模并不能赋予推理能力或常识。LLMs 在面临诸如组合性差距(Ofir Press 等人的《测量和缩小语言模型中的组合性差距》;2023)等挑战时表现出困难。这意味着 LLMs 无法连接推理或使响应适应新情况。要克服这些障碍,需要通过采用真正理解的技术来增强 LLMs。仅仅通过原始模型规模不能将随机模仿转化为有益系统。需要创新,如提示、思维链推理、检索基础和其他方法来教育模型。
让我们稍微详细地看一下这个论点。如果您希望跳过这些详细信息,请继续下一节。我们将在这里深入了解 LLMs 的局限性,克服这些局限性的方法以及 LangChain 如何促使应用程序系统地减轻这些缺陷并扩展 LLMs 的功能。
LLMs 的限制是什么? 正如已经确认的那样,LLMs 提供了令人印象深刻的功能,但也存在一些限制,这些限制阻碍了它们在某些情境中的有效性。在开发应用程序时了解这些限制是至关重要的。与 LLMs 相关的一些痛点包括:
过时的知识: LLMs 仅依赖于它们的训练数据。如果没有外部集成,它们无法提供最新的实时信息。
无法采取行动: LLMs 无法执行交互式操作,如搜索、计算或查找。这严重限制了其功能。
缺乏上下文: LLMs 难以整合相关上下文,如先前的对话和为了一致和有用的响应所需的补充细节。
产生幻觉的风险: 对某些主题了解不足可能导致 LLMs 生成不正确或荒谬的内容,如果不经过适当的基础支撑。
偏见和歧视: 根据它们的训练数据,LLMs 可能表现出宗教、意识形态或政治性质的偏见。
透明度不足: 大型复杂模型的行为可能是不透明且难以解释的,这对与人类价值观的一致性提出了挑战。
缺乏上下文记忆: LLMs 可能难以理解和整合来自先前提示或对话的上下文。它们可能不记得先前提到的细节,也可能未能提供超出给定提示的额外相关信息。
让我们更详细地说明其中一些限制,因为它们非常重要。如前所述,LLMs 在实时知识的缺乏和无法自行采取行动方面存在显著限制,这限制了它们在许多现实情境中的有效性。例如,LLMs 没有与外部信息源的固有连接。它们受限于用于开发它们的训练数据,这在随着时间的推移不可避免地变得越来越过时。对于发生在其训练数据截止日期之后的当前事件,LLM 将毫无察觉。询问 LLM 有关最新新闻或社会动态的问题将使其无法在没有外部支持的情况下构建响应。
此外,LLMs 无法与其周围的世界进行动态交互。它们无法检查天气,查找本地数据或访问文档。没有进行网页搜索、与 API 进行接口、运行计算或根据新的提示采取任何实际行动的能力,LLMs 仅在预先存在的信息范围内运行。即使在讨论其训练数据中包含的主题时,LLM 在没有检索外部知识的情况下难以整合实时上下文和具体信息。例如,LLM 可以流利地讨论用于财务分析的宏观经济原则,但在检索当前业绩数据并计算相关统计数据方面,它将无法进行实际分析。没有动态查找的能力,它的财务讨论保持一般和理论性。同样,LLM 可能在生动描述过去的新闻事件时表现出色,但如果要求其提供有关今天同一故事的最新发展,它可能会犹豫不决。
通过将 LLMs 与外部数据源、分析程序和工具集成,可以帮助克服这些限制。但是单独使用时,LLMs 缺乏与现实环境的联系,这通常对于有用的应用程序是至关重要的。它们令人印象深刻的自然语言能力需要适当的基础和行动,以产生实质性的见解,而不仅仅是华丽但空洞的文本。
让我们通过一些 LLMs 问题的例子更详细地了解这些限制。在 OpenAI ChatGPT 界面中询问有关 LangChain 的问题中,涉及到了截止日期问题:
在这种情况下,模型能够正确捕捉问题并给出正确的反馈,尽管并非总是如此。如果您通过其他端点访问模型或使用其他模型,它可能会捏造信息(产生幻觉)。此外,它可能对某些实体没有知识,或者可能完全涉及不同的实体。在 OpenAI 游乐场中询问相同的问题,我得到了这个回答:
在这种情况下,我们可以看到该模型谈论了一个不同的 LangChain,这是一个基于去中心化区块链的翻译平台。这是一个关于相关性的问题,可以称为幻觉。通过访问外部数据,如天气 API、用户偏好或来自网络的相关信息,可以纠正这个问题,这对于创建个性化和准确的语言驱动应用至关重要。
LLMs 在涉及逻辑推理或数学问题的某些任务上表现不佳。例如,即使是先进的 LLMs 在高中水平的数学方面表现也较差,不能执行它们之前没有见过的简单数学运算。我们可以通过一个简单的演示来说明这一点:
正如您所见,该模型对第一个问题给出了正确的回答,但在第二个问题上失败了。如果您想知道真实的结果是什么,如果我们使用计算器,我们得到的是:
LLM 没有存储计算结果,或者在训练数据中没有足够的频繁出现,无法可靠地记住编码在其权重中。因此,它无法正确地提出解决方案。在这种情况下,LLM 不是合适的工具。
部署使用 LLM 的聊天机器人和其他应用程序需要深思熟虑的设计和监控,以解决偏见和不适当内容等风险。例如,微软的 Tay 聊天机器人在 2016 年上线后不久由于毒性互动导致的冒犯性推文而被下线。
至于推理,例如,当单独询问水果的密度和水的密度时,LLM 可能会正确识别它们,但它会很难综合这些事实来确定水果是否会漂浮(这是一个多跳问题)。该模型无法弥合其不连贯的知识。
我们如何缓解 LLM 的限制呢? 检索增强 :该技术通过访问知识库来补充 LLM 过时的训练数据,提供外部背景并减少产生虚构内容的风险。
提示工程 :这涉及通过提供关键上下文精心制作提示,以引导适当的响应。
监控、过滤和审核 :这涉及对应用程序输入和输出的新问题进行持续而有效的监督,以检测问题。然后,手动审核和自动过滤器纠正输出的潜在问题。包括以下内容:
过滤器,如屏蔽列表、敏感分类器和禁止词过滤器,可以自动标记问题。
宪法原则监视和过滤不道德或不适当的内容。
人工审核提供有关模型行为和输出的见解。
记忆 :通过在交互之间保留对话数据和上下文,保留对话上下文。
微调 :在应用程序领域和原则上使用更合适的数据对 LLM 进行训练和调整。这使模型的行为适应了其具体目的。
要再次强调之前提到的,仅仅通过原始模型规模无法赋予组合推理或其他缺失功能。需要使用显式技术,如引导提示和思维链推理,来弥补组合性差距。通过自问提示等方法,可以减轻这些缺陷,鼓励模型有条不紊地分解问题。
将这些工具整合到培训流水线中提供了原本缺失的能力。提示提供了上下文,链接实现了推理步骤,而检索则整合了事实。总体而言,这将随机鹦鹉转变为推理引擎。
深思熟虑的提示工程和微调使模型适用于实际应用。通过自动化和人工审核,持续监控可以发现任何新出现的问题。过滤器是第一道防线。采用宪法人工智能原则还鼓励构建能够道德行为的模型。这种综合方法结合了准备、警惕和固有的有益设计。
将 LLM 连接到外部数据源进一步降低了虚构风险,并通过准确、最新的信息增强了响应。然而,安全地集成诸如数据库之类的来源会增加复杂性。像 LangChain 这样的框架简化了这一过程,同时为负责任的 LLM 使用提供了结构和监督。它们允许组合提示的模型查询和数据源,以克服独立 LLM 的缺陷。通过勤奋的增强,我们可以创建以前由于固有的模型限制而无法实现的 AI 系统。这引出了我们下一个讨论的主题。
什么是 LLM 应用? 将 LLM 与其他工具结合起来,使用专门的工具,LLM 驱动的应用有潜力改变我们的数字世界。通常,这是通过对 LLM 进行一个或多个提示的链式调用完成的,但也可以利用其他外部服务(如 API 或数据源)来执行任务。
客户层处理用户交互。前端层处理呈现和业务逻辑。后端层处理逻辑、API、计算等。最后,数据库存储和检索数据。
相比之下,LLM 应用是一种利用 LLM 理解自然语言提示并生成响应文本输出的应用程序。LLM 应用通常具有以下组件:
客户层,用于收集用户输入,如文本查询或决策。
提示工程层,用于构建引导 LLM 的提示。
LLM 后端,用于分析提示并生成相关的文本响应。
输出解析层,用于解释 LLM 响应以适应应用程序界面。
通过函数 API、知识库和推理算法的可选集成,以增强 LLM 的能力。
在最简单的情况下,前端、解析和知识库部分有时可能没有明确定义,只留下客户端、提示和 LLM:
使用函数 API 访问 Web 工具和数据库。
用于复杂逻辑链的高级推理算法。
通过知识库的检索增强生成。
我们将在第 5 章《构建像 ChatGPT 的聊天机器人》中讨论检索增强生成(RAG),它通过外部知识增强 LLM。这些扩展将 LLM 应用的能力拓展到超越 LLM 知识本身。例如:
函数调用允许带有参数的 API 请求。
SQL 函数支持会话式数据库查询。
像链式思考这样的推理算法促进多步逻辑。
正如前图所示,客户层收集用户的文本查询和决策。提示工程构造引导 LLM 的提示,考虑到外部知识或能力(或先前的交互),而不对模型本身进行更改。LLM 后端根据其训练动态理解和响应提示。输出解析解释 LLM 文本以供前端使用。知识库可以增强 LLM 的信息,而可选地,就像传统应用程序中的数据库后端一样,信息可以写入其中。
LLM 后端以一种细致入微、类似人类的方式处理语言,而无需硬编码规则。
基于过去的互动,响应可以个性化和情境化。
先进的推理算法支持复杂的多步推理链。
基于 LLM 或实时检索到的最新信息的动态响应。
LLM 应用使用的关键能力是能够理解提示中的微妙语言并生成连贯、类似人类的文本响应。与传统代码相比,这有助于更自然的交互和工作流程。
LLM 提供了类似人类的语言能力,无需手动编码。因此,无需提前手动预测和编码每种语言场景。LLM 与外部服务、知识和推理算法的集成简化了创新应用程序的开发。
但是负责任的数据实践至关重要-PII 应该远离公共平台,并在需要时应在内部进行模型微调。前端和输出解析器都可以包含有关行为、隐私和安全性的审查和强制规则。未来的研究必须解决有关潜在滥用、偏见和限制的担忧。
我们将在本书中看到很多 LLM 应用的例子;以下是我们将遇到的一些例子:
聊天机器人和虚拟助手:这些应用使用像 ChatGPT 这样的 LLM 与用户进行自然对话,并协助进行日程安排、客户服务和信息查找等任务。
智能搜索引擎:LLM 应用可以解析用自然语言编写的搜索查询,并生成相关的结果。
自动内容生成:应用可以利用 LLM 生成文章、电子邮件、代码等内容,基于文本提示。
问答:用户可以用通俗的语言向 LLM 应用提问,并从模型的知识中快速获得信息性的答案。
情感分析:您可以使用 LLM 应用分析客户反馈、评论和社交帖子,以总结情感并提取关键主题。
文本摘要:您可以使用 LLM 后端自动生成长文档和文章的简洁摘要。
数据分析:您可以使用 LLM 进行自动数据分析和可视化,以提取洞察。
代码生成:您可以设置软件协同编程助手,可以帮助解决业务问题。
LLM 的真正力量不在于独立使用 LLM,而在于将 LLM 与其他知识和计算源结合使用。LangChain 框架旨在实现这种精确集成,促进基于上下文和推理的定制 NLP 解决方案的开发。LangChain 解决了与 LLM 相关的痛点,并为创建定制 NLP 解决方案提供了直观的框架。
什么是 LangChain? LangChain 由 Harrison Chase 于 2022 年创建,是一个用于构建 LLM 驱动应用程序的开源 Python 框架。它为开发人员提供了模块化、易于使用的组件,用于将语言模型与外部数据源和服务连接起来。该项目已经吸引了来自 Sequoia Capital 和 Benchmark 等公司的数百万美元的风险投资,这些公司曾为苹果、思科、谷歌、WeWork、Dropbox 等许多成功的公司提供过资金。
LangChain 通过提供可重用的组件和预先组装的链条简化了复杂 LLM 应用程序的开发。其模块化架构将对 LLM 和外部服务的访问抽象为一个统一的接口。开发人员可以组合这些构建块来执行复杂的工作流程。
构建有影响的 LLM 应用程序涉及到提示工程、偏见缓解、生产化和整合外部数据等挑战。LangChain 通过其抽象和可组合的结构减少了这个学习曲线。
除了基本的 LLM API 使用外,LangChain 还通过其代理和内存支持高级交互,如对话上下文和持久性。这允许聊天机器人、收集外部数据等。
特别是,LangChain 对链、代理、工具和内存的支持使开发人员能够构建能够以更复杂的方式与其环境交互,并能够随时间存储和重用信息的应用程序。其模块化设计使其易于构建适用于各种领域的复杂应用程序。对于行动计划和策略的支持提高了应用程序的性能和稳健性。对于内存和对外部信息的访问的支持降低了幻觉,从而增强了可靠性。
LangChain 为开发人员提供的主要优势包括:
灵活可调整的 LLM 集成的模块化架构。
将多个服务链接在一起,不仅仅是 LLM。
面向目标的代理交互,而不是孤立的调用。
在执行过程中的状态持久性的内存。
开源访问和社区支持。
正如前文所述,LangChain 是开源的,用 Python 编写,尽管存在用 JavaScript 或更确切地说是 TypeScript(LangChain.js)实现的伴随项目,以及为 Ruby 提供代码执行的新兴 Langchain.rb 项目。在本书中,我们专注于该框架的 Python 版本。
虽然资源如文档、课程和社区有助于加速学习过程,但培养在应用 LLM 方面的专业知识需要投入专注的时间和努力。对于许多开发人员来说,学习曲线可能是影响有效利用 LLM 的阻碍因素。
在 Discord 聊天服务器上有着活跃的讨论,多个博客和定期的见面会在各个城市举行,包括旧金山和伦敦。甚至有一个聊天机器人 ChatLangChain,可以回答有关 LangChain 文档的问题。它是使用 LangChain 和 FastAPI 构建的,并通过文档网站在线提供!
LangChain 带有许多扩展和一个正在围绕它发展的更大生态系统。正如前文所述,它已经有大量的集成,每周都在添加许多新的集成。这个截图突显了一些集成(来源:integrations.langchain.com):
至于更广泛的生态系统,LangSmith 是一个平台,通过为 LLM 应用程序提供强大的调试、测试和监控功能,来补充 LangChain。例如,开发人员可以通过查看详细的执行跟踪来快速调试新的链。可以根据数据集评估备用提示和 LLMs,以确保质量和一致性。使用分析功能使基于数据的决策围绕优化成为可能。
LlamaHub 和 LangChainHub 提供了可重用元素的开放库,以简化构建复杂的 LLM 系统。LlamaHub 是由 LlamaIndex 社区创建的数据加载器、阅读器和工具库。它提供实用程序,可以轻松将 LLMs 连接到各种知识源。加载器摄取用于检索的数据,而工具使模型能够读取/写入外部数据服务。LlamaHub 简化了创建定制数据代理以解锁 LLM 功能的过程。
LangChainHub 是在 LangChain 中共享用于提示、链和代理的工件的中央存储库。受 Hugging Face Hub 启发,它旨在成为一个一站式资源,用于发现用于构建复杂 LLM 应用程序的高质量构建块。最初的发布重点是一组可重用的提示。未来计划包括添加对链、代理和其他关键 LangChain 组件的支持。
LangFlow 和 Flowise 是 UI,允许通过将侧边栏组件拖放到画布上并将它们连接在一起来创建可执行流程图中的 LangChain 组件。这是进行实验和原型制作流程的快速方式,如 Flowise 的以下截图所示(来源:):
您可以看到一个代理(在本章后面讨论),它连接到一个搜索界面(Serp API),一个 LLM 和一个计算器。LangChain 和 LangFlow 可以在本地部署,例如,使用 Chainlit 库,也可以在不同的平台上部署,包括 Google Cloud。langchain-serve 库有助于使用单个命令将 LangChain 和 LangFlow 部署到 Jina AI 云上,作为 LLM 应用程序即服务。
尽管仍然相对较新,但 LangChain 通过其对组件(如内存、链和代理)的组合,解锁了更先进的 LLM 应用。它旨在简化本可以复杂的 LLM 应用程序开发。因此,在本章的这一部分,我们将关注 LangChain 及其组件的工作原理。
LangChain 的关键组件 Chains、agents、memory 和 tools 使得创建复杂的 LLM 应用成为可能,这些应用不仅仅局限于对单个 LLM 的基本 API 调用。在接下来专门讨论这些关键概念的子章节中,我们将考虑它们如何通过将语言模型与外部数据和服务结合起来,实现强大系统的开发。在本章中,我们不会深入讨论具体的实现模式;然而,我们将更详细地讨论这些组件在哪些方面表现出色。到最后,您应该具备足够的理解水平,能够使用 LangChain 构建系统。让我们从链开始!
什么是 Chains? 在 LangChain 中,链是将模块化组件组合成可重用流水线的关键概念。例如,开发人员可以将多个 LLM 调用和其他组件按顺序组合在一起,创建用于社交互动、数据提取和数据分析等复杂应用的应用。以最一般的术语来说,链是对组件的一系列调用,其中可以包括其他链。最无害的链的例子可能是 PromptTemplate,它将格式化的响应传递给语言模型。
Prompt chaining 是一种可以用来改善 LangChain 应用性能的技术,它涉及将多个提示链接在一起以自动完成更复杂的响应。更复杂的链集成了与 LLM Math(用于数学相关查询)或 SQLDatabaseChain(用于查询数据库)等工具相结合的模型。这些被称为实用链,因为它们将语言模型与特定工具结合在一起。
链甚至可以强制执行策略,例如监管有毒的输出或符合道德原则。LangChain 实现了链,以确保输出的内容既不是有毒的,也不违反 OpenAI 的审核规则(OpenAIModerationChain),也符合道德、法律或定制原则(ConstitutionalChain)。
一个 LLMCheckerChain 通过一种称为自反思的技术来验证语句,以减少不准确的响应。LLMCheckerChain 可以通过验证提供的语句和问题的基本假设来防止幻觉并减少不准确的响应。在 2023 年 5 月的一篇由卡内基梅隆大学、艾伦研究所、华盛顿大学、NVIDIA、加利福尼亚大学圣地亚哥分校和谷歌研究等研究人员共同发表的论文中(SELF-REFINE: Iterative Refinement with Self-Feedback),发现这种策略平均可以提高大约 20% 的任务性能,其中包括对话响应、数学推理和代码推理。
一些链可以做出自主决策。与代理一样,路由链可以根据其描述来决定使用哪个工具。RouterChain 可以动态选择使用哪种检索系统,例如提示或索引。
模块化:逻辑被分解为可重用的组件。
组合性:组件可以灵活地进行排序。
可读性:管道中的每个步骤都很清晰。
可维护性:可以添加、删除和交换步骤。
可重用性:通用流水线变成可配置的链。
工具集成:轻松集成 LLMs、数据库、API 等。
生产力:快速构建可配置链的原型。
这些优势共同使复杂的工作流程封装成易于理解和适应的链接流水线成为可能。
通常,开发 LangChain 链涉及将工作流程分解为逻辑步骤,如数据加载、处理、模型查询等。设计良好的链将单一职责组件串联在一起。步骤应该是无状态函数,以最大程度地提高可重用性。配置应该是可定制的。强大的错误处理与异常和错误同样重要以确保可靠性。监控和日志记录可以通过不同的机制启用,包括回调。
什么是 agents? 代理是 LangChain 中创建与用户和环境动态交互系统的关键概念。代理是一个能够采取行动来实现目标和任务的自治软件实体。
链和代理是类似的概念,值得剖析它们的区别。LangChain 的核心思想是将 LLMs 和其他组件组合在一起共同工作。链和代理都是这样做的,但方式不同。两者都扩展了 LLMs,但代理通过编排链来实现,而链则组合了更低层次的模块。链通过排序组件定义可重用的逻辑,而代理利用链来采取以目标为驱动的行动。代理组合和编排链。代理观察环境,根据观察结果决定执行哪个链,执行链的指定操作,然后重复此过程。
代理使用 LLMs 作为推理引擎来决定采取哪些行动。LLM 被提示可用的工具、用户输入和先前步骤。然后,它选择下一步操作或最终响应。
工具(在本章后面讨论)是代理调用以采取现实世界行动的功能。为代理提供正确的工具并有效地描述它们对于代理实现目标至关重要。
代理执行时期编排了查询代理、执行工具操作和反馈观察的循环。这处理了低层次的复杂性,如错误处理、日志记录和解析。
目标导向执行:代理可以计划针对特定目标的逻辑链。
动态响应:观察环境变化使代理能够做出反应和适应。
有状态性:代理可以在交互过程中保持内存和上下文。
鲁棒性:通过捕获异常并尝试替代链处理错误。
组合性:代理逻辑结合了可重用的组件链。
总的来说,这使代理能够处理复杂的多步工作流程和像聊天机器人这样持续互动的应用。
在关于 LLMs 限制的部分,我们已经看到对于计算来说,一个简单的计算器优于一个包含数十亿参数的模型。在这种情况下,代理可以决定将计算传递给计算器或 Python 解释器。我们可以在这里看到一个简单的应用程序,其中代理连接到 OpenAI 模型和 Python 函数:
根据输入,代理可以决定运行一个 Python 函数。每个代理还决定使用何种工具以及何时使用。我们将在第 4 章《构建功能强大的助手》中更详细地讨论这是如何运作的机制。
代理和链的一个关键局限性是它们的状态无关性——每次执行都是在孤立的环境中进行,不保留之前的上下文。这就是记忆概念变得关键的地方。在 LangChain 中,记忆是指在链执行之间持久保存信息以实现状态保持的能力。
什么是 memory? 在 LangChain 中,记忆指的是链或代理执行之间持久存在的状态。强大的记忆方法为开发人员构建会话式和交互式应用程序提供了关键的优势。例如,在记忆中存储聊天历史上下文可以提高随着时间推移的 LLM 响应的一致性和相关性。
与将每个用户输入视为孤立提示不同,链可以在每次调用时传递会话记忆到模型,以提供一致性。代理还可以将有关世界的事实、关系和推断持久保存在记忆中。即使真实世界的条件发生变化,这些知识仍然可用,保持代理在上下文中得知。记忆目标和已完成任务允许代理跟踪跨对话的多步目标的进度。此外,在记忆中保留信息可减少对 LLMs 获取重复信息的调用次数。这降低了 API 使用和成本,同时仍然为代理或链提供所需的上下文。
LangChain 提供了记忆的标准接口、与数据库等存储选项的集成,以及有效将记忆整合到链和代理中的设计模式。
ConversationBufferMemory 存储模型历史中的所有消息。这会增加延迟和成本。
ConversationBufferWindowMemory 仅保留最近的消息。
ConversationKGMemory 将交流总结为知识图,以整合到提示中。
由数据库支持的 EntityMemory 持久保存代理状态和事实。
此外,LangChain 集成了许多数据库选项用于持久存储:
像 Postgres 和 SQLite 这样的 SQL 选项支持关系数据建模。
像 MongoDB 和 Cassandra 这样的 NoSQL 选择支持可扩展的非结构化数据。
Redis 提供了用于高性能缓存的内存数据库。
AWS DynamoDB 等托管云服务消除了基础设施负担。
除了数据库外,专为记忆服务的服务器(如 Remembrall 和 Motörhead)为优化的会话上下文提供了选择。正确的记忆方法取决于持久性需求、数据关系、规模和资源等因素,但强大地保留状态对于会话式和交互式应用程序至关重要。
LangChain 的记忆集成,从短期缓存到长期数据库,使得构建有状态、上下文感知的代理成为可能。设计有效的记忆模式将开启下一代功能强大且可靠的 AI 系统。LangChain 带有许多可用于应用程序的工具,虽然一个简短的部分可能无法完全介绍,但我将尝试给出一个简要的概述。
什么是 tools? 工具提供了模块化接口,使代理能够集成外部服务,如数据库和 API。工具包将共享资源的工具进行分组。工具可以与模型结合以扩展其功能。LangChain 提供了诸如文档加载器、索引和向量存储等工具,用于促进在 LLMs 中增强数据检索的数据的检索和存储。
机器翻译:语言模型可以使用机器翻译工具更好地理解和处理多种语言的文本。该工具使非专门用于翻译的语言模型能够理解并回答不同语言的问题。
计算器:语言模型可以利用简单的计算器工具解决数学问题。计算器支持基本的算术运算,使模型能够准确解决专门设计用于数学问题解决的数据集中的数学查询。
地图:通过与 Bing Map API 或类似服务连接,语言模型可以检索位置信息,协助路线规划,提供驾驶距离计算,并提供有关附近兴趣点的详细信息。
天气:天气 API 为语言模型提供全球各个城市的实时天气信息。模型可以回答关于当前天气状况或特定位置在不同时间段内的天气预报的查询。
股票:通过与 Alpha Vantage 等股票市场 API 连接,语言模型可以查询特定股票市场信息,如开盘和收盘价格、最高和最低价格等。
幻灯片:配备制作幻灯片工具的语言模型可以使用 python-pptx 库等 API 提供的高级语义或根据给定主题从互联网中检索图像来创建幻灯片。这些工具有助于在各种专业领域需要的幻灯片创建任务中。
表格处理:使用 pandas DataFrames 构建的 API 使语言模型能够在表格上执行数据分析和可视化任务。通过连接到这些工具,模型可以为用户提供处理表格数据的更简化和自然的体验。
知识图:语言模型可以使用模拟人类查询过程的 API 查询知识图,例如查找候选实体或关系、发送 SPARQL 查询并检索结果。这些工具有助于基于知识图中存储的事实知识回答问题。
搜索引擎:通过利用 Bing Search 等搜索引擎 API,语言模型可以与搜索引擎互动,提取信息并对实时查询提供答案。这些工具增强了模型从网络中获取信息并提供准确响应的能力。
维基百科:配备维基百科搜索工具的语言模型可以搜索维基百科页面上的特定实体,查找页面内的关键词,或通过消除相似名称的实体进行消歧义。这些工具有助于使用从维基百科检索的内容执行问答任务。
在线购物:将语言模型与在线购物工具连接,使其能够执行搜索物品、加载有关产品的详细信息、选择项目特征、浏览购物页面,并根据特定用户说明做出购买决策等操作。
其他工具包括 AI 绘画,允许语言模型使用 AI 图像生成模型生成图像;3D 模型构建,使语言模型能够使用先进的 3D 渲染引擎创建 3D 模型;化学性质,使用像 PubChem 这样的 API 解决有关化学性质的科学问题;以及数据库工具,促使自然语言访问数据库数据以执行 SQL 查询和检索结果。
这些各种工具为语言模型提供了额外的功能和能力,使其能够执行超越文本处理的任务。通过通过 API 与这些工具连接,语言模型可以增强其在翻译、数学问题解决、基于位置的查询、天气预测、股票市场分析、幻灯片创建、表格处理和分析、图像生成、文本转语音转换等领域的能力。
所有这些工具都可以为我们提供先进的 AI 功能,几乎没有工具的限制。我们可以轻松构建定制工具,以扩展 LLMs 的功能,正如我们将在下一章中看到的那样。使用不同的工具扩展了语言模型应用的范围,使其能够更有效地处理各种实际任务。在讨论了链、代理、记忆和工具之后,让我们将所有这些组合在一起,形成 LangChain 如何将它们作为运动部分组合在一起的整体图景。
LangChain 是如何工作的? LangChain 框架通过提供模块化组件简化了构建复杂的 LLM(语言模型)应用程序,这些组件有助于将语言模型与其他数据和服务进行连接。该框架将功能组织成模块,涵盖了从基本的 LLM 交互到复杂的推理和持久化的各个方面。
这些组件可以组合成管道,也称为链,按照以下操作的顺序进行排列:
加载文档
用于检索的嵌入
查询 LLMs
解析输出
写入内存
链将模块与应用程序目标相匹配,而代理则利用链与用户进行目标导向的交互。它们根据观察结果重复执行操作,规划最优逻辑链,并在对话中持续存储记忆。
LLMs 和聊天模型:提供连接和查询语言模型(如 GPT-3)的接口。支持异步、流式和批量请求。
文档加载器:从各种来源摄取数据到包含文本和元数据的文档中。支持加载文件、网页、视频等。
文档转换器:通过拆分、合并、过滤、翻译等方式操作文档,以适应模型的数据。
文本嵌入:为语义搜索创建文本的向量表示。提供嵌入文档和查询的不同方法。
向量存储:存储嵌入文档向量以进行高效的相似性搜索和检索。
检索器:基于查询返回文档的通用接口。可以利用向量存储。
工具:代理用于与外部系统交互的接口。
代理:基于环境观察使用 LLMs 规划动作的目标驱动系统。
工具包:初始化共享资源(如数据库)的工具组。
内存:通过读取/写入会话数据在对话和工作流之间持续保存信息。
回调:连接到管道阶段进行日志记录、监控、流式传输等的回调。回调使监控链成为可能。
综上所述的功能使使用 LangChain 构建强大、高效、有能力的 LLM 应用程序成为可能。每个功能都有其复杂性和重要性,因此有必要详细解释。
LangChain 提供了与 LLMs(如 GPT-3)和聊天模型连接和查询的接口。这些接口支持异步请求、流式响应和批量查询,为集成不同语言模型提供了灵活的 API。
虽然 LangChain 本身不提供模型,但通过 LLM 包装器支持与各种语言模型提供者的集成,使应用程序能够与聊天模型以及文本嵌入模型提供者进行交互。支持的提供者包括 OpenAI、HuggingFace、Azure 和 Anthropic。提供标准化接口意味着可以轻松替换模型以节省成本和能源,或获得更好的性能。我们将在第 3 章《使用 LangChain 入门》中详细介绍一些选项。
LangChain 的核心构建块之一是 prompt 类,允许用户通过提供简洁的指令或示例与 LLMs 进行交互。prompt 工程有助于优化提示以实现最佳模型性能。模板在输入方面提供了灵活性,并在各种应用程序中经过了实战测试。我们将在第 3 章《使用 LangChain 入门》中开始讨论 prompt,并在第 8 章《定制 LLMs 及其输出》中深入探讨 prompt 工程。
文档加载器允许从各种来源摄取数据到包含文本和元数据的文档中。然后,通过文档转换器(拆分、合并、过滤、翻译等)操作这些文档,以适应 LLMs 的使用。
数据加载器包括用于存储数据以及与外部系统交互的实用程序,如 Web 搜索或数据库,尤其是数据检索。示例包括 Microsoft Word 文档(.docx)、HTML、以及其他常见格式,如 PDF、文本文件、JSON 和 CSV。其他工具可能会向潜在客户发送电子邮件,为您的关注者发布有趣的双关语,或向同事发送 Slack 消息。我们将在第 5 章《构建像 ChatGPT 一样的聊天机器人》中详细讨论这些工具。
文本嵌入模型创建捕捉语义含义的文本向量表示。这使得通过查找具有最相似向量表示的文本进行语义搜索成为可能。向量存储通过索引嵌入文档向量以实现高效的基于相似性的检索。
当处理大型文档时,向量存储就变得重要,其中文档需要被分块以传递给 LLM。文档的这些部分将被存储为嵌入,这意味着它们是信息的向量表示。所有这些工具都增强了 LLMs 的知识,并提高了它们在问答和摘要等应用中的性能。
有许多用于向量存储的集成,包括 Alibaba Cloud OpenSearch、AnalyticDB for PostgreSQL、Meta AI 的 Annoy 库(用于近似最近邻搜索)、Cassandra、Chroma、Elasticsearch、Facebook AI 相似性搜索(Faiss)、MongoDB Atlas Vector Search、PGVector(用于 Postgres 的向量相似性搜索)、Pinecone、scikit-learn(用于 k 最近邻搜索的 SKLearnVectorStore)等。我们将在第 5 章《构建像 ChatGPT 一样的聊天机器人》中探讨这些集成。
虽然接下来的章节将深入探讨 LangChain 组件的一些使用模式和用例的细节,但以下资源提供了关于 LangChain 组件以及它们如何组装成管道的宝贵信息。
除了 LangChain 之外,还有一些其他框架;然而,我们会看到 LangChain 是其中最突出且功能丰富的之一。
与其他框架比较 LangChain LLM(语言模型)应用程序框架的开发旨在提供专门的工具,能够有效地利用 LLMs 的力量来解决复杂的问题。已经涌现出一些库,它们满足有效地将生成式 AI 模型与其他工具结合起来构建 LLM 应用程序的需求。
有几个用于构建动态 LLM 应用程序的开源框架。它们在开发先进的 LLM 应用程序方面都提供了价值。以下图表显示了它们随时间的流行程度(数据来源:GitHub 星标历史,):
我们可以看到每个项目随时间在 GitHub 上获得的星标数量。Haystack 是比较的框架中最老的,始于 2020 年初(根据最早的 GitHub 提交记录)。在 GitHub 上的星标方面,它也是最不受欢迎的。LangChain、LlamaIndex(之前称为 GPTIndex)和 SuperAGI 始于 2022 年末或 2023 年初,与 LangChain 相比,它们在短时间内的受欢迎程度显著不足,而 LangChain 则取得了令人瞩目的增长。AutoGen 是微软最近发布的项目,已经引起了一些关注。在本书中,我们将看到 LangChain 的许多功能,并探索其特点,这是其受欢迎程度爆发增长的原因。
LlamaIndex 专注于高级检索而不是 LLM 应用程序的更广泛方面。同样,Haystack 专注于创建具有用于可伸缩信息检索的检索器、读取器和其他数据处理程序的组件的大规模搜索系统,同时通过预训练模型实现语义索引。
LangChain 擅长使用代理将 LLMs 链接在一起,以委派动作给模型。其用例强调提示优化和上下文感知的信息检索/生成;然而,借助其 Pythonic 高度模块化的界面和庞大的工具集合,它是实施复杂业务逻辑的头号工具。
SuperAGI 具有与 LangChain 类似的功能。它甚至配备了一个市场,一个用于工具和代理的存储库。然而,与 LangChain 相比,它的范围和支持程度没有那么广泛。
AutoGen 简化了由 LLMs 驱动的复杂工作流的构建、编排和优化。其关键创新在于实现可定制的对话代理,通过自动聊天在不同的 LLMs、人类和工具之间自动协调。AutoGen 简化了代理定义和交互,以自动组合最优的基于 LLM 的工作流。
我没有包括 AutoGPT(以及类似的工具如 AutoLlama),这是一个递归应用,它分解任务,因为与 LangChain 相比,它基于人类和 LLM 反馈的推理能力非常有限。因此,它经常陷入逻辑循环并定期重复步骤。我还省略了一些专注于提示工程的库,例如 Promptify。
还有其他使用 Rust、JavaScript、Ruby 和 Java 等语言的 LLM 应用程序框架。例如,用 Rust 编写的 Dust 专注于 LLM 应用程序的设计和部署。
像 LangChain 这样的框架旨在通过提供护栏、约定和预构建模块来降低障碍,但基础知识仍然是重要的,以避免陷阱并从 LLMs 中最大化价值。在交付功能强大、负责任的应用程序时,投资于教育将带来回报。
总结 LLMs 产生令人信服的语言,但在推理、知识和访问工具方面存在显著的限制。LangChain 框架简化了由 LLMs 驱动的复杂应用程序的构建,可以缓解这些缺点。它为开发人员提供了像链一样的模块化、可重用的构建块,用于组合管道,以及像代理一样用于目标导向交互。这些构建块组合在一起形成 LLM 应用程序,并具有扩展功能。
正如我们在本章中所见,链允许按顺序调用 LLMs、数据库、API 等,以完成多步骤的工作流。代理利用链基于观察采取行动来管理动态应用程序。内存跨执行持久保存信息以维护状态。总体而言,这些概念使开发人员能够通过集成外部数据、操作和上下文来克服单个 LLM 的限制。换句话说,LangChain 将复杂的编排简化为可定制的构建块。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online