第一章 LangChain:开启大语言模型时代的钥匙
虽然大语言模型通过学习大量的文本数据获得了强大的文本生成能力,但它仍然是基于模式匹配的算法,而非真正的思考实体。这意味着它并不能真正理解提示词的含义,它只是通过在大量的训练数据中寻找并生成与提示词匹配的文本来给出答案。所以,在选择提示词时,需要细心考虑,确保命令清晰、具体,并能够引导模型生成想要的结果。同时,也需要认识到这些模型的局限性——它们并不能真正理解我们的命令,只是在模仿人类的语言。
Token
在大语言模型,如 GPT-4 中,Token 不仅是模型理解和处理文本的基本单位,还具有一些更深层次的功能。首先,通过把文本拆分为 Token,模型能更好地理解和捕捉文本的结构。例如,一个英文句子的不同部分(主题、动作、对象等)可以被模型识别和处理,帮助模型理解句子的含义。其次,Token 在模型的训练中起着重要的作用。语言模型通过预测给定的一系列 Token 后面可能出现的下一个 Token,从而学习语言的规律和结构。这个学习过程通常是基于大量的文本数据进行的,模型从每一个 Token 的预测中积累经验,提高自身的预测能力。
模型支持的上下文长度
“上下文长度”指的是模型在生成新的文本或理解输入的语句时,可以考虑的最多字数,可以理解成大语言模型的“脑容量”。例如,8K 版本可以处理包含 8000 个 Token 的短篇文章,而 32K 版本则可以处理包含 32000 个 Token 的长篇文章。这个功能升级是非常重要的,尤其是在处理大型的、连贯输入的文本时体现得淋漓尽致,比如长篇小说、研究报告等。如果你和大语言模型聊着聊着,发现它回答的内容已经偏题或者重复,说明它已经忘记了之前和你聊的内容,“脑容量”不够了。
第二章 langchain入门指南
langchain的两个关键
在现代软件工程中,如何将庞大复杂的系统划分为更小、更易于管理和使用的部分,已经成了设计和开发的核心考量。在这个背景下,LangChain 以“组件”和“链”作为 2 个关键概念,为 LLM 应用开发者提供了便利。
记忆模块
LangChain 提供了一个名为“记忆”的组件,用于维护应用程序的状态。这个组件不仅允许用户根据最新的输入和输出来更新应用状态,还支持使用已存储的会话状态来调整或修改即将输入的内容。这样,它能为实现更复杂的对话管理和信息跟踪提供基础设施。 记忆组件具有两个基本操作:读取(Reading)和写入(Writing)。在执行核心 逻辑之前,系统会从记忆组件中读取信息以增强用户输入。执行核心逻辑之后,返回最终答案之前,系统会将当前运行的输入和输出写入记忆组件,以便在未来的运行中引用。 这种设计方式提供了一种灵活且可扩展的方法,使得 LangChain 可以更有效地管理对话和应用状态。在内置的记忆组件中,最简单的是缓冲记忆。缓冲记忆只是将最近的一些输入/输出预置到当前的输入中。
第三章 模型I/O
LangChain 推出了模型 I/O,这是一种与大语言模型交互的基础组件。模型 I/O 的设计目标是使开发者无须深入理解各个模型平台的 API 调用协议就可以方便地与各种大语言模型平台进行交互(图 3-2 中的③)。本质上来说,模型 I/O 组件是对各个模型平台 API 的封装,这个组件封装了 50 多个模型接口。 这就好比 LangChain 提供了通用包装器,无论你要和哪种模型进行交互,都可以通过这个包装器(图 3-2 中第③部分的 LLM 模型包装器和聊天模型包装器)来实现。开发者可以很方便地与最新、最强大的模型(如 2023 年 7 月的 GPT-4)进行交互,也可以与本地私有化部署的语言模型,甚至在 HuggingFace 上找到的开源模型进行交互。只需要几行代码,开发者就可以与这些模型对话,无须关心模型平台的底层 API 调用方式。
模型包装器
对于 LLM 模型包装器,其输入通常是单一的字符串提示词(prompt)。例如,你可以输入”Translate the following English text to French: ‘{text}'”,然后模型会生成对应的法文翻译。另外,LLM 模型包装器主要用于文本任务,例如给定一个提示“今天的天气如何?”模型会生成一个相应的答案“今天的天气很好。” 聊天模型包装器,其输入则是一系列的聊天消息。通常这些消息都带有发言人的标签(比如系统、AI 和人类)。每条消息都有一个 role(角色)和 content(内容)。例如,你可以输入[{“role”: “user”, “content”: “Translate the following English text to French: ‘{text}'”}],模型会返回对应的法文翻译,但是返回内容包含在 AIMessage(…) 内。