有电书房店铺主页二维码
有电书房
微信扫描二维码,访问我们的微信店铺

LangChain学习手册

88.20
运费: ¥ 5.00-22.00
库存: 300 件
LangChain学习手册 商品图0
LangChain学习手册 商品图1
LangChain学习手册 商品图2
LangChain学习手册 商品缩略图0 LangChain学习手册 商品缩略图1 LangChain学习手册 商品缩略图2

商品详情

书名:LangChain学习手册
书号:978-7-5239-1234-8
定价:98元
作者:[英]梅奥·奥辛(Mayo Oshin)[葡]努诺·坎波斯(Nuno Campos) 著 黄璐宸 陈超 柴一平 译
出版时间:2026-07-03
出版社:中国电力出版社
页码: 320    字数(千字):311
开本:特16开    版次:B1    印次:Y1


品牌介绍

中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。


编辑推荐

一句话推荐 使用LangChain和LangGraph构建AI与LLM应用。 专家推荐 “通过清晰的讲解和可落地的实用技巧,这本书是任何希望将LangChain的能力用于生产级生成式AI与智能体系统的首选资源。对于想要不断突破这一平台边界的开发者来说,这是一本必读之作。” ——Tom Taulli,IT咨询顾问,《AI-Assisted Programming》作者 “这本全面的指南涵盖了从文档检索与索引,到在生产环境中部署和监控AI智能体的方方面面。生动的示例、直观的插图,以及可上手的代码实践,让学习LangChain变得既有趣又高效!” ——Rajat K. Goel,IBM 高级软件工程师 编辑推荐 如果你希望构建可用于生产环境的AI应用,并且能够进行推理、以及从外部获取数据以实现上下文感知,那么你需要掌握LangChain——一个流行的开发框架和平台,用于构建、运行和管理智能体应用。许多领先企业都在使用LangChain,包括 Zapier、Replit、Databricks 等。本书是一本不可或缺的资源,特别适合已经掌握Python或JavaScript、但希望深入利用AI能力的初学开发者。 本书作者通过实用的见解和深入浅出的教程,系统性解析了LangChain的使用方式。本书从基础概念入手,逐步讲解如何构建一个能够利用你自有数据并且可用于生产环境的AI智能体。


产品特色

使用LangChain和LangGraph构建AI与LLM应用。


作者介绍

Mayo Oshin是一位科技创业者、AI顾问和天使投资人。他是LangChain开源库早期的开发贡献者和重要倡导者之一,也是广受欢迎的“与数据对话”AI活动的先驱。 Nuno Campos是LangChain的创始软件工程师之一。他拥有超过十年的Python和JavaScript软件工程经验,曾担任工程师、架构师,以及开源项目维护者。


内容介绍

本书的主要内容有:利用检索增强生成(RAG)的强大能力,结合外部的最新数据,提升大语言模型(LLM)的准确性。开发并部署能够与用户进行智能、上下文感知交互的AI应用。 使用LangGraph提供的强大智能体架构。集成并管理第三方API与工具,扩展AI应用的功能边界。对AI应用进行监控、测试与评估,持续优化性能表现。理解LLM应用开发的基础原理,以及它们如何与LangChain结合使用。
本书适用于本书是一本不可或缺的资源,特别适合已经掌握Python或JavaScript、但希望深入利用AI能力的初学开发者。


前言

前言 2022 年11 月30 日,总部位于旧金山的OpenAI 公司正式发布了ChatGPT,这款爆红的聊天机器人能够像人类一样生成内容、回答问题并解决问题。在发布后的两个月内,ChatGPT 的月活跃用户突破1 亿,成为迄今为止增长最快的大众科技应用。ChatGPT 的对话体验由OpenAI GPT-3.5 家族中经过指令调优与对话调优的大语言模型(LLM)驱动。我们稍后将正式定义这些概念。 无论是否使用LangChain,构建LLM 应用都离不开一个LLM。在本书中,我们将使用OpenAI API 作为示例中的LLM 提供商(其定价可在平台上查看)。使用LangChain 的一个好处是:你可以用OpenAI,也可以使用其他商业或开源的LLM 提供商来运行本书的所有示例。 三个月后,OpenAI 又发布了ChatGPT API,为开发者提供访问聊天和语音转文字能力的接口。这一发布引爆了无数新的应用与技术创新,它们都被笼统地归入“生成式AI”这一术语之下。 在定义生成式AI 和LLM 之前,我们先简单触及一个概念:机器学习。某些计算机算法(你可以把它想象成完成预定义任务的可重复执行的步骤,比如给一叠纸牌排序)是由软件工程师直接编写的。另一些算法则是通过大量训练数据“学习”出来的,这时软件工程师的角色从“编写算法”转变为“编写能训练出该算法的逻辑”。在机器学习领域,大量研究都聚焦于构建预测类算法,从预测明天的天气到为亚马孙快递员规划最优路径,无所不能。 随着大语言模型和其他生成模型(例如用于生成图像的扩散模型,本书不涉及)的出现,上述的机器学习技术如今被应用于生成新内容的问题,例如生成一段新的文本或绘图。这些内容既具有独特性,又受到训练数据中示例的启发。 LLM 尤其是一类专注于生成文本的生成模型。 LLM 与以往机器学习算法相比,还有两个显著差异: • 它们使用了更大规模的数据进行训练,从零开始训练此类模型的成本极其高昂。 • 它们具有更强的通用性。 同一个文本生成模型可以用于摘要、翻译、分类等多种任务,而以往的机器学习模型通常只针对某个特定任务训练和使用。 这两个差异共同促使软件工程师的角色再次发生改变,开发者需要投入越来越多的精力去研究“如何让LLM 按自己的需求工作”。这正是LangChain 想要解决的问题。 到2023 年底,越来越多的竞品LLM 出现,包括Anthropic 的Claude 和Google的Bard(后更名为Gemini),进一步扩大了行业对这些新能力的可访问性。随后,数千家成功的初创公司和大型企业开始将生成式AI API 引入其业务,用于构建各种场景下的应用,从客服聊天机器人到代码编写与调试工具不一而足。 2022 年10 月22 日,Harrison Chase 在GitHub 上提交了LangChain 开源库的第一个commit。LangChain 的起点源于一个重要的认识,最有价值的LLM 应用往往需要把LLM 与“其他计算或知识来源”结合起来。例如,你可以尝试让LLM 回答这个问题: 把1234 个球平均分给123 个人后还剩多少个? 你很可能会对它的数学表现感到失望。然而,如果你将LLM 与一个计算器函数配合使用,就可以指示LLM 将这个问题改写成计算器可以处理的格式: 1234 % 123 然后你可以把这个表达式传给计算器函数,得到一个准确的答案。LangChain是第一个(在撰写本书时也是规模最大的)提供这些构建模块以及能够将它们可靠组合成更大型应用的工具库。在讨论如何使用这些新工具构建令人信服的应用之前,让我们先更好地了解一下LLM 和LangChain。 LLM 简要入门 用通俗的语言来说,大语言模型(LLM)是一种经过训练的算法,它接收文本输入,并预测和生成类似人类的文本输出。从本质上讲,它的行为类似于我们熟悉的智能手机上的自动补全功能,但其能力被大幅度放大。 我们来拆解一下“大语言模型”这个术语: • “大”是指这些模型在训练过程中所使用的数据规模和参数规模。例如,OpenAI 的GPT-3 模型包含1750 亿个参数,这些参数是通过对45TB 文本数据的训练学习得到的。注1 在神经网络模型中,参数是控制每个神经元输出以及其与邻近神经元连接权重的数值(具体哪些神经元与哪些其他神经元连接,取决于神经网络的架构,这超出了本书的讨论范围)。 • “语言模型”是指一种计算机算法,它被训练用于接收书面文本(可以是英语或其他语言),并以书面文本的形式输出结果(可以是相同语言或不同语言)。它们都是“神经网络”,这是一种机器学习模型,其结构类似于人脑的抽象概念。最终的输出是由许多简单数学函数(称为神经元)及其之间的连接共同作用的结果。如果这些神经元以特定方式组织,并配合合适的训练过程和训练数据,就可以构建出一个能够理解单词和句子含义的模型,从而使其能够生成合理、可读的书面文本。 由于训练数据中英语占据主导地位,大多数模型在处理英语方面的表现优于其他使用人数较少的语言。这里所说的“优于”,是指更容易让模型在英语中生成符合预期的输出。也有一些专为多语言输出设计的LLM,例如BLOOM,它在训练中使用了更高比例的其他语言数据。有趣的是,即使是在主要以英语语料训练的LLM 中,不同语言之间的性能差异也没有人们预期的那么大。研究人员发现,LLM 能够将其对语义的理解部分迁移到其他语言上。注2 综合来看,大语言模型是经过海量文本训练的通用型语言模型。换句话说,这些模型通过学习大量文本数据(包括书籍、文章、论坛和其他公开来源)中的模式,来执行各种通用的文本相关任务。这些任务包括文本生成、摘要、翻译、分类等。 举个例子,如果我们指示一个LLM 完成以下句子: 英国的首都是_____________。 LLM 会接收这个输入文本,并预测出正确的输出答案“伦敦”。这看起来像魔法,但其实不是。其背后的原理是:LLM 会根据前面的词语序列,估算下一个词语或词组出现的概率。 从技术角度来说,模型的预测是基于“词元”而不是“单词”。一个词元代表文本中的原子单位。根据具体的分词方法,词元可以表示单个字符、单词、子词,甚至更大的语言单位。例如,使用GPT-3.5 的分词器(称为 cl100k),短语“good morning dearest friend”会被分成五个词元(以下使用下划线_ 表示空格字符): Good 词元ID:19045。 _morning 词元ID:6693。 _de 词元ID:409。 arest 词元ID:15795。 _friend 词元ID:4333。 通常,分词器的训练目标是将最常见的词编码为单个词元。例如,“morning”被编码为词元6693。而不太常见的词,或者其他语言中 的词(分词器通常是基于英语语料训练的),则需要多个词元来表示。例如,“dearest”被编码为两个词元:409 和15795。在常见的英文文本中,一个词元平均对应约四个字符,或者大约是一个单词的四分之三。 大语言模型预测能力背后的核心引擎是被称为Transformer 神经网络架构的技术。注3 Transformer 架构使模型能够处理数据序列,例如句子或代码行,并预测序列中最可能出现的下一个词。Transformer 的设计目标是通过将每个词与句子中的其他所有词进行关联,从而理解该词的上下文。这使得模型能够构建对句子、段落等(即词序列)整体意义的全面理解,即通过各部分之间的关系来理解整体含义。 因此,当模型看到词序列“the capital of England is”时,它会根据训练过程中见过的类似示例进行预测。在模型的训练语料中,“England”(或表示该词的标记)经常出现在与“France”“United States”“China”等词类似的位置。而“capital”这个词也常常出现在包含“England”“France”“US”等词的句子中,并与“London”“Paris”“Washington”等词共同出现。这种在训练过程中的重复,使模型具备了正确预测下一个词为“London”的能力。 你提供给模型的指令和输入文本被称为提示词。提示词对LLM 的输出质量有着显著影响。提示词设计(或称提示词工程)有一些最佳实践,包括提供清晰简洁的指令和具有上下文的示例,我们将在本书后续章节中进行讨论。在深入探讨提示词设计之前,让我们先了解一下目前可供使用的不同类型的LLM。 最基础的模型类型,也就是所有其他模型的起点,通常被称为预训练大语言模型。它是在海量文本数据上进行训练的,这些文本来自互联网、书籍、报纸、代码、视频字幕等,训练方式为自监督学习。这意味着(与监督式机器学习不同,后者在训练前需要研究人员准备好输入与期望输出的配对数据集)LLM 的训练数据对是从原始语料中自动推断出来的。事实上,在处理如此庞大的数据集时,唯一可行的方法就是自动从训练数据中构建这些输入– 输出对。 有两种常见的技术可以实现这一点: 预测下一个词 从训练数据中的每个句子中移除最后一个词,就可以得到一组输入与期望输出。例如: 输入:The capital of England is ___ 输出:London 预测缺失词 同样地,如果从每个句子中间省略一个词,也可以构建另一组输入与期望输出。例如: 输入:The ___ of England is London 输出:capital 这些模型本身并不容易直接使用,通常需要通过合适的前缀来“引导”模型生成正确的响应。例如,如果你想知道“英国的首都是哪里”,你可能需要使用提示词“The capital of England is”才能得到正确的回答,而不是更自然的“What is the capital of England?”。 指令微调的大语言模型 研究人员通过进一步训练(在前一节所述的漫长且昂贵的预训练基础上进行额外训练),使预训练的LLM 更易于使用。这种方法也被称为微调,主要包括以下两种方式: 任务特定数据集 这些是由研究人员手动整理的问题/ 答案配对数据集,提供了用户可能会向模型提出的常见问题的理想回答示例。例如,数据集中可能包含如下配对: Q:What is the capital of England? A:The capital of England is London. 与预训练数据集不同,这些数据集是人工构建的,因此规模必然较小。 基于人类反馈的强化学习 通过RLHF 方法,这些人工构建的数据集可以结合用户对模型输出的反馈进行增强。例如,用户A 更偏好回答“The capital of England is London” 而不是“London is the capital of England”,模型可以据此调整其输出偏好。 指令微调是推动更多人能够使用LLM 构建应用的关键,因为现在模型可以通过明确的指令进行提示,例如“What is the capital of England?”而不再局限于“The capital of England is”这样的句式。 对话微调的大语言模型 专为对话或聊天场景定制的模型,是在指令微调模型基础上的进一步增强。不同的LLM 提供方采用的技术各不相同,因此并非所有聊天模型都遵循相同的方式,但通常包括以下两个方面: 对话数据集 手动构建的微调数据集被扩展为包含更多的多轮对话示例,即由一系列提示词- 回复对组成的交互序列。 聊天格式 模型的输入与输出格式在自由文本之上增加了一层结构,将文本划分为与角色相关的部分(有时还包括其他元数据,如名称)。通常使用的角色包括: system:用于任务说明和背景设定。 user:表示用户的任务或问题。 assistant:表示模型的输出。 这种方法源自早期的提示词工程技术,使得模型输出更易于控制,同时也降低了模型将用户输入误解为系统指令的风险。这种误解也被称为越狱,可能导致精心设计的提示词(例如包含商业机密的内容)被错误地暴露给终端用户。 微调的大语言模型 微调LLM 是指在基础LLM 之上,使用专有数据集针对特定任务进行进一步训练而得到的模型。从技术角度来看,指令微调模型(instruction-tuned)和对话微调模型(dialogue-tuned)本质上也是微调模型的一种,但“微调LLM”这一术语通常用于描述由开发者针对特定任务进行定制训练的模型。 例如,一个模型可以被微调用于从上市公司的年度报告中准确提取情感倾向、风险因素和关键财务数据。通常,微调模型在所选任务上的表现更好,但会以牺牲通用性为代价。也就是说,它们在处理与目标任务无关的问题时的能力会有所下降。 在本书的后续内容中,当我们使用“LLM”这一术语时,指的是指令微调的大语言模型;而“聊天模型”则指的是对话微调的大语言模型,如本节前面所定义的那样。这些模型应当成为你使用LLM 时的主力工具。在启动新的LLM 应用时,首先应当考虑使用它们。 接下来, 我们将快速介绍一些常见的LLM 提示词技术, 然后深入探讨LangChain。 提示词技术简要介绍 如前文所述,软件工程师在使用大语言模型(LLM)时的主要任务通常不是训练一个LLM,甚至也不是微调一个模型,而是使用现有的LLM,并设法让它完成应用所需要的任务。目前已有多个商业LLM 提供商,例如OpenAI、Anthropic 和Google,也有一些开源的LLM(如Llama、Gemma 等)。这些模型是免费发布的,供开发者在其基础上进行构建。将现有的LLM 适配到你的任务中,这一过程被称为提示词工程。 过去两年中,已经发展出许多提示词技术。从广义上讲,本书就是关于如何使用LangChain 进行提示词工程,也就是如何通过LangChain 让LLM 实现你想要的功能。但在正式进入LangChain 之前,我们先来了解一些常见的提示词技术(如果你最喜欢的提示词方法没有列在这里,我们提前表示歉意,实在是种类太多,无法一一涵盖)。 为了更好地跟进本节内容,我们建议您将以下提示词复制到OpenAI Playground中亲自尝试: 1. 首先,在http://platform.openai.com 创建一个OpenAI API 账户,这将允许你以编程方式使用OpenAI 的大语言模型,也就是说,您可以通过Python或JavaScript 代码调用API。同时,你也将获得访问OpenAI Playground 的权限,可以直接在网页浏览器中试验提示词内容。 2. 如有需要,请为您的新账户添加付款信息。OpenAI 是一家商业LLM 提供商,每次你通过API 或者Playground 使用它们的模型时都需要支付费用。你可以在其官网查看最新的定价信息。过去两年中,随着新功能和优化的推出,使用OpenAI 模型的价格已经显著下降。 3. 接下来,前往OpenAI Playground,你就可以开始尝试以下提示词内容了。 本书将在多个章节中使用OpenAI API。 4. 进入Playground 后,你会在屏幕右侧看到一个预设面板,其中包括你选择的模型。如果继续向下查看该面板,会在“Model configuration”标题下看到一个名为temperature 的选项。将temperature 的滑块从中间向左移动,直到数值显示为0.00。temperature 控制的是LLM 输出的随机性,temperature数值越低,模型的输出就越确定。 现在,让我们开始探索提示词的内容吧! 零样本提示词(Zero-Shot Prompting) 第一种也是最直接的提示词技术,就是直接指示LLM 执行所需任务: How old was the 30th president of the United States when his wife's mother died? (美国第30 任总统在他妻子的母亲去世时多大年龄?) 这通常是你应该首先尝试的方法,尤其适用于简单问题,特别是当答案很可能出现在模型的训练数据中时。如果我们将上述提示词输入OpenAI 的gpt-3.5-turbo 模型,可能会得到如下回答: 美国第30 任总统Calvin Coolidge 在他岳母于1926 年去世时,年龄为48 岁。虽然模型正确识别出了第30 任总统,但答案并不完全准确。通常你需要对提示词和模型的响应进行多次迭代,才能构建一个可靠的系统。接下来的章节将进一步介绍如何做到这一点。 链式思维(Chain-of-Thought, CoT) 一种非常有用的提示词迭代方式是进一步指示模型“花时间思考”。研究发现,这种技术可以在多种任务中提升模型的表现。有趣的是,一篇较新的论文注4 指出,在某些“人类越思考反而表现越差”的任务中,链式思维提示词可能会降低LLM 的性能。这种方法被称为链式思维提示词,通常通过在提示前添加指令,引导模型描述其推理过程,例如: 请逐步思考。 美国第30 任总统在他妻子的母亲去世时多大年龄? 现在让我们看看在新提示词下,同一个模型会生成怎样的回答: 1. 首先,找出美国第30 任总统是谁。可以通过查阅美国总统列表或搜索“30th president of the United States”来完成。你会发现第30 任总统是Calvin Coolidge。 2. 接下来,查找Calvin Coolidge 担任总统的年份。这也可以通过在线搜索或查阅历史书籍来完成。你会发现他在1923 ~ 1929 年间担任总统。 3. 现在,你需要确定Calvin Coolidge 的岳母去世的年份。可以通过查阅他妻子Grace Goodhue Coolidge 的生平和去世时间来完成。你会发现她生于1879 年,卒于1957 年。 4. 计算Grace 的母亲去世时的年龄。她享年78 岁。 5. 计算Calvin Coolidge 在岳母去世时的年龄。将他的出生年份1872 与岳母去世年份1957 相减。结果是Calvin Coolidge 在岳母去世时是85 岁。 请注意,提示词中唯一的变化是添加了“Think step by step(逐步思考)”,但这对模型的输出产生了显著影响。现在模型输出了一系列合理的推理步骤,展示了回答该问题的思路。然而,尽管推理过程看起来合理,最终的答案仍然是错误的。原因在于模型在某些事实上出现了偏差,例如错误地列出了总统妻子的母亲的出生和去世年份。接下来我们将探讨如何改进这一点。 检索增强生成(Retrieval-Augmented Generation, RAG) 检索增强生成(RAG)是指在提示词中加入相关文本片段(也称为上下文),例如百科全书中的事实信息,以帮助模型更准确地完成任务。RAG 技术可以(并且在实际应用中应该)与链式思维(CoT)结合使用,但为了简化,我们在此处将这些技术分开演示。以下是包含RAG 的提示词示例: 上下文: - Calvin Coolidge(全名John Calvin Coolidge Jr.;/ ku l d /;1872 年7 月4 日 –1933 年1 月5 日)是美国律师和政治家,曾于1923 年至1929 年担任美国第30 任总统。 - Grace Anna Coolidge(婚前姓Goodhue;1879 年1 月3 日 – 1957 年7 月8 日)是美国第30 任总统Calvin Coolidge 的妻子。 - Grace Anna Goodhue 于1879 年1 月3 日出生在佛蒙特州伯灵顿,是Andrew Issachar Goodhue 和Lemira Barrett Goodhue 的独生女。 - Lemira A. Goodhue(婚前姓Barrett);出生日期:1849 年4 月26 日;出生地:美国佛蒙特州奇滕登县伯灵顿;去世日期:1929 年10 月24 日。 问题:美国第30 任总统在他妻子的母亲去世时多大年龄? 模型输出: 美国第30 任总统Calvin Coolidge 在他妻子的母亲Lemira A. Goodhue 于1929 年10 月24 日去世时,年龄为54 岁。 现在我们已经非常接近正确答案了。但如前所述,LLM 在处理数学计算时并不总是准确。在这个例子中,最终结果“54 岁”比实际年龄少了3 岁。让我们来看看如何改进。 工具调用 工具调用技术的核心是:在提示词前列出一组外部函数,这些函数可以被LLM使用,并附上每个函数的用途说明,以及如何在输出中表示希望调用这些函数的指令。最后,由你( 应用程序的开发者) 负责解析模型的输出,并调用相应的函数。 以下是一个示例: 工具列表: - 计算器:该工具接受数学表达式并返回其计算结果。 - 查询:该工具接受搜索引擎查询并返回第一个搜索结果。 如果你希望使用工具来得出答案,请以CSV 格式输出工具及其输入,包含以下表头:tool,input 问题:美国第30 任总统在他妻子的母亲去世时多大年龄? 模型可能输出如下: tool,input calculator, 2023-1892 search,“Calvin Coolidge 在他岳母去世时多大年龄?” 虽然LLM 正确遵循了输出格式的指令,但所选择的工具和输入并不是这个问题最合适的。这也揭示了在提示LLM 时最重要的事情之一:每种提示词技术在与其他技术结合使用时效果最佳。例如,在这个问题中,我们可以通过将工具调用、链式思维和检索增强生成结合起来,构造一个同时使用三种技术的提示词,从而获得更准确的结果。以下是包含所有三种技术的提示词示例: 上下文: - Calvin Coolidge(全名John Calvin Coolidge Jr.;/ kuːlɪdʒ/;1872 年7 月4 日 –1933 年1 月5 日)是美国律师和政治家,曾于1923 年至1929 年担任美国第30 任总统。 - Grace Anna Coolidge(婚前姓Goodhue;1879 年1 月3 日 – 1957 年7 月8 日)是美国第30 任总统Calvin Coolidge 的妻子。 - Grace Anna Goodhue 于1879 年1 月3 日出生在佛蒙特州伯灵顿,是Andrew Issachar Goodhue 和Lemira Barrett Goodhue 的独生女。 - Lemira A. Goodhue(婚前姓Barrett);出生日期:1849 年4 月26 日;出生地:美国佛蒙特州奇滕登县伯灵顿;去世日期:1929 年10 月24 日。 工具列表: - calculator:该工具接受数学表达式并返回其计算结果。 如果你希望使用工具来得出答案,请以CSV 格式输出工具及其输入,包含以下表头: tool,input 提示词: 请逐步思考。 美国第30 任总统在他妻子的母亲去世时多大年龄? 在这个提示词下,经过几次尝试,模型可能会输出如下内容: tool,input calculator,1929 - 1872 如果我们解析这个CSV 输出, 并使用calculator 工具执行表达式1929 -1872,我们最终会得到正确答案:57 岁。 正如前面的示例所展示的,通过将检索增强生成、链式思维和工具调用结合使用,你可以检索最相关的数据来为模型的输出提供依据,并且引导模型逐步推理,确保它有效地使用上下文。 少样本提示词 最后,我们来介绍另一种非常有用的提示词技术:少样本提示词。这种方法是通过向LLM 提供一些其他问题及其正确答案的示例,使模型能够在无需额外训练或微调的情况下学习如何执行新任务。与微调相比,少样本提示词更加灵活(你可以在查询时即时使用它),但它的效果通常不如微调强大。不过,通常建议在进行微调之前,先尝试少样本提示词。 静态少样本提示词 最基础的少样本提示词方式是预先准备一组示例,并将它们直接包含在提示词中。 动态少样本提示词 如果你拥有一个包含大量示例的数据集,则可以为每个新查询挑选最相关的示例,而不是使用固定的一组。 下一节将介绍如何使用LangChain 构建出结合这些提示词技术的LLM 应用程序。 LangChain 及其重要性 LangChain 是最早提供LLM 和提示词工程构建模块的开源库之一,并提供了可靠的工具,用于将这些模块组合成更大型的应用程序。截至目前,LangChain每月下载量已超过2800 万次,在GitHub 上拥有99000 颗星标,并拥有生成式AI 领域最大的开发者社区(超过72000 名成员)。LangChain 的出现使得没有机器学习背景的软件工程师也能利用LLM 的强大能力,构建出各种应用程序,从AI 聊天机器人到能够推理并负责任地采取行动的AI 智能体。 LangChain 的核心理念延续了前一节所强调的观点:提示词技术在组合使用时效果最佳。为了简化这一过程,LangChain 提供了每种主要提示词技术的抽象封装。所谓“抽象”,是指将这些技术的核心思想封装成易于使用的Python 或JavaScript 函数和类。这些抽象设计得非常灵活,能够很好地协同工作,并可组合成更复杂的LLM 应用程序。 此外,LangChain 提供了与主流LLM 提供商的集成, 包括商业模型[ 如OpenAI(] 和开源模型 [ 如Llama( 章中使用这些集成。 LangChain 还提供了提示词模板抽象,这使你可以重复使用提示词,将提示词中的静态文本与每次调用LLM 时不同的占位符分离开来,从而提高提示词的可维护性与灵活性。我们将在第1 章中进一步探讨这一点。此外,LangChain的提示词模板还可以存储在LangChain Hub 中,方便与团队成员共享和复用。LangChain 集成了许多第三方服务(例如Google Sheets、Wolfram Alpha、Zapier 等),并将它们以工具(tools)的形式暴露出来。这些工具遵循统一的接口标准,可直接用于工具调用(Tool Calling)技术中。 LangChain 提供了以下关键组件的集成:主流嵌入模型(一种语言模型,用于输出句子、段落等含义的数值表示,也就是所谓嵌入)、向量数据库(专门用于存储嵌入的数据库)以及向量索引(具备向量存储能力的常规数据库)的集成。 你将在第2 章和第3 章中了解到关于这些内容的更多信息。 对于链式思维(Chain-of-Thought,CoT),LangChain 通过其子库LangGraph提供了智能体抽象(Agent Abstractions),将链式思维推理与工具调用结合起来。这一方法最初由ReAct 论文( 应用: 1. 思考完成任务所需的步骤。 2. 将这些步骤转化为外部工具调用。 3. 接收工具调用的输出。 4. 重复上述过程,直到任务完成。 我们将在第5 ~ 8 章中探讨这部分内容。 在聊天机器人(chatbot)场景中,保留并利用先前的对话记录,对于生成后续的交互非常有用。这种机制被称为“记忆(Memory)”。第4 章将会讲解如何在LangChain 中使用记忆功能。 最后,LangChain 提供了将构建模块组合成完整应用程序的各种工具。第1 ~ 6章将会进行更多的讨论。 LangChain 还提供LangSmith( 工作流的平台;以及LangGraph,一个用于部署和扩展LangGraph 智能体的托管平台。第9 章和第10 章将会介绍它们。 本书将带给你什么 通过本书,我们希望向你传达将大语言模型加入软件工程工具箱所带来的激动人心的可能性。 我们之所以热爱编程,是因为我们喜欢创造事物,完成一个项目并看到最终成果,然后意识到,我们打造了一个全新的东西。使用LLM 进行编程令人兴奋,是因为它拓展了我们可以构建的事物的边界,让原本困难的任务变得简单(例如从长文本中提取相关数字),甚至让原本不可能的事情成为可能,试想如果在一年前构建一个自动化助手,你最终只会得到一个让人抓狂的电话语音菜单系统,也就是我们在拨打客服热线时都“熟悉并痛恨”的那种。 现在,借助LLM 和LangChain,你可以真正构建出令人愉悦的助手(或其他各种应用),它们可以与你对话,并在相当程度上理解你的意图。那种体验的差异简直是天壤之别!如果你也对此感到兴奋(就像我们一样),那么你来对地方了。 在本书的前言中,我们为你回顾了LLM 的核心原理,以及它为何能赋予你“构建事物”的超级能力。拥有这些理解语言并能用自然语言(如英语或其他语言)生成答案的大型机器学习模型,就像拥有一个可编程(通过提示词工程)、多功能的语言生成工具。我们希望在你读完本书之后,能够真正体会到它的强大之处。 我们将从一个很大程度上通过简单英文指令定制的AI 聊天机器人开始。这本身就足以令人眼前一亮:你现在可以无需编写代码,就“编程”出应用程序的一部分行为。 然后是下一项能力:让你的聊天机器人访问你自己的文档。这将使它从一个通用型助手,升级成一个在任何你能找到文本资料库的领域都具备知识的助手。比如,你可以让它根据你自己撰写的文档来回答问题,或者对这些文档进行总结。 之后,我们将让聊天机器人记住你之前的对话内容。这会带来两个方面的提升:一方面,与一个记得你说过什么的机器人对话会更加自然;另一方面,随着时间推移,机器人可以根据每位用户的偏好进行个性化调整。 接下来,我们将使用链式思维和工具调用技术,让聊天机器人具备规划并执行计划的能力,并不断迭代。这将使它能够处理更复杂的请求,例如撰写一篇关于你指定主题的研究报告。 随着你使用聊天机器人处理越来越复杂的任务,你会希望它能与你进行更好的协作。这包括让你具备在机器人执行操作前中断或授权的能力,以及赋予机器人在行动前请求更多信息或澄清问题的能力。 最后,我们将向你展示如何将聊天机器人部署到生产环境,并讨论在部署前后需要考虑的事项,包括延迟、可靠性和安全性。然后,我们会教你如何在生产环境中监控你的聊天机器人,并在使用过程中持续改进它。 在整个过程中,我们将教你每项技术的来龙去脉。等你读完本书时,你将真正地为自己的软件工程工具箱新增一项(或多项)强大的技能。 本书中使用的约定 本书采用以下排版约定: 斜体(Italic) 表示新术语、URL、电子邮件地址、文件名和文件扩展名。 等宽字体(Constant width) 表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。 使用代码示例 补充材料(代码示例、练习等)可在以下网址下载:。 如果您在使用代码示例时遇到技术问题或有相关疑问,请发送邮件至support@oreilly.com。 本书旨在帮助您完成工作。一般来说,如果本书提供了示例代码,您可以在自己的程序和文档中使用这些代码。除非您要复制大量代码内容,否则无需获得许可。例如,编写一个程序并使用本书中的多个代码片段,无需获得授权。但如果您要销售或分发O’Reilly 图书中的示例代码,则需要获得许可。引用本书并使用其中的代码片段来回答问题,无需授权;但如果您要在产品文档中大量使用本书中的代码示例,则需要获得许可。 我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Learning LangChain by Mayo Oshin and Nuno Campos (O’Reilly). Copyright 2025 Olumayowa ‘Mayo’ Olufemi Oshin, 978-1-098-16728-8”。 如果您认为自己的代码使用方式超出了合理使用范围或上述授权范围,请随时联系permissions@oreilly.com 。 O’Reilly 在线学习平台(O’Reilly Online Learning) 近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。 公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:/。 联系我们 任何有关本书的意见或疑问,请按照以下地址联系出版社。 美国: O’Reilly Media, Inc. 141 Stony Circle, Suite 195 Santa Rosa, CA 95401 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 勘误、示例和其他信息可访问https://oreil.ly/learning-langchain 获取。 对本书的评论或技术疑问,可以发电子邮件到errata@oreilly.com.cn。 欲了解本社图书和课程的新闻和信息,请访问我们的网站http://oreilly.com。 我们的LinkedIn:。 我们的YouTube:。 致谢 我们衷心感谢以下审阅者为本书提供了宝贵的技术反馈:Rajat Kant Goel,Douglas Bailley,Tom Taulli,Gourav Bais 和Jacob Lee。


目录

目录
前言 1
第1 章 使用LangChain 的LLM 基础知识 21
11 LangChain 环境设置指南 23
12 在LangChain 中使用LLM 25
13 让LLM 提示词可复用 28
14 从LLM 获取特定格式的输出 35
141 JSON 输出 35
142 其他机器可读格式与输出解析器 37
15 组装LLM 应用的诸多组件 38
151 使用Runnable 接口 38
152 命令式组合 40
153 声明式组合 43
16 总结 45
第2 章 RAG 第一部分:为你的数据建立索引 47
21 目标:为LLM 选择相关上下文 48
22 嵌入:将文本转换为数字 49
221 LLM 出现之前的嵌入 49
222 基于LLM 的嵌入 51
223 语义嵌入详解 52
23 将文档转换为文本 55
24 将文本拆分为块 57
25 生成文本嵌入 62
26 在向量数据库中存储嵌入 65
261 PGVector 环境设置 66
262 使用向量数据库 67
27 跟踪文档的变更 70
28 索引优化75
281 MultiVectorRetriever 76
282 RAPTOR:用于树状检索的递归抽象处理 80
283 ColBERT:优化嵌入 81
29 总结 83
第3 章 RAG 第二部分:与你的数据对话 85
31 RAG 简介 85
311 检索相关文档 87
312 使用相关文档生成LLM 预测结果 91
32 查询转换96
321 RewriteRetrieveRead(重写– 检索– 阅读) 97
322 多查询检索 99
323 RAGFusion 策略 103
324 假设文档嵌入(HyDE) 107
33 查询路由 111
331 逻辑路由 111
332 语义路由 115
34 查询构造 117
341 文本到元数据过滤器(TexttoMetadata Filter) 118
342 文本到SQL 121
35 总结 123
第4 章 使用LangGraph 为你的聊天机器人添加记忆  125
41 构建聊天机器人的记忆系统 126
42 LangGraph 简介 128
43 创建StateGraph 131
44 为StateGraph 添加记忆 136
45 修改聊天记录 138
451 截断消息 138
452 过滤消息 141
453 合并连续消息 143
46 总结 145
第5 章 使用LangGraph 构建认知架构  147
51 架构#1:LLM 调用 150
52 架构#2:链式架构 153
53 架构#3:路由器架构 158
54 总结 167
第6 章 智能体架构  169
61 “计划– 执行”循环 170
62 构建LangGraph 智能体 173
63 总是先调用工具 178
64 处理多个工具 183
65 总结 189
第7 章 智能体Ⅱ  191
71 反思 191
72 LangGraph 中的子图 198
721 直接调用子图 199
722 使用函数调用子图 201
73 多智能体架构 202
74 总结 208
第8 章 充分利用LLM 的模式  209
81 结构化输出  211
811 中间输出 214
812 逐词元流式输出LLM 的结果 217
813 人类参与模式 218
814 多任务LLM 226
82 总结 229
第9 章 部署:将你的AI 应用发布到生产环境  231
91 前置要求231
911 安装依赖 232
912 大语言模型 232
913 向量存储 233
914 后端API 238
915 创建LangSmith 账户 240
92 理解LangGraph 平台API 241
921 数据模型 242
922 功能 243
93 在LangGraph 平台上部署你的AI 应用 245
931 创建LangGraph API 配置 245
932 在本地测试你的LangGraph 应用 246
933 从LangSmith UI 部署 249
934 启动LangGraph Studio 251
94 安全性 254
95 总结 256
第10 章 测试:评估、监控与持续改进  257
101 LLM 应用开发周期中的测试技术 257
102 设计阶段:自我纠错式RAG 259
103 预生产阶段 266
1031 创建数据集267
1032 定义评估标准 271
1033 回归测试 276
1034 评估智能体的端到端性能 278
104 生产阶段 292
1041 追踪 293
1042 在生产环境中收集反馈 293
1043 分类和标记294
1044 监控与修复错误 295
105 总结 295
第11 章 构建基于LLM 的应用  297
111 交互式聊天机器人 298
112 与LLM 协同编辑 300
113 环境计算 301
114 总结 303


有电书房店铺主页二维码
有电书房
扫描二维码,访问我们的微信店铺

LangChain学习手册

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏