LangChain入门:内存、记录聊天历史 ChatMessageHistory、模型、提示 ( Prompt )、模式 ( Schema )

发布于:2025-08-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

内存

内存(Memory)是在对话过程中存储和检索数据的概念。主要有两种方法:

  1. 根据输入,获取任何相关的数据。
  2. 根据输入和输出,相应地更新状态。

内存主要分为两种类型:短期内存和长期内存。

短期内存通常指的是如何在单个对话的上下文中传递数据(通常是先前的聊天消息或其摘要)。

长期内存处理的是如何在对话之间获取和更新信息的问题。

记录聊天历史 ChatMessageHistory

目前,与语言模型的主要接口是通过聊天界面进行的。ChatMessageHistory类负责记录所有先前的聊天互动。然后,可以直接将它们传递回模型,以某种方式进行总结,或者进行某种组合。

ChatMessageHistory提供了两个方法和一个属性。它提供的两个方法是add_user_message和add_ai_message,用于分别存储来自用户的消息和AI的响应。它提供的属性是messages属性,用于访问所有先前的消息。

模型

聊天模型

聊天模型接受一个聊天消息列表作为输入,并返回一个聊天消息。

语言模型 LLMs

语言模型接受文本作为输入,并返回文本作为输出。

文本嵌入模型 Text Embedding Models

文本嵌入模型接受文本作为输入,并以浮点数列表的形式返回该文本的数字表示。

提示 ( Prompt )

现在编写模型的新方法是通过提示。 “提示” 指的是模型的输入。这个输入通常不是硬编码的,而是通常由多个组件构成的。PromptTemplate 负责构建这个输入。

  • PromptValue:表示模型输入的类。
  • Prompt Templates:负责构建 PromptValue 的类。
  • 示例选择器 Example Selectors:在提示中包含示例通常是有用的。这些示例可以硬编码,但如果它们是动态选择的,则通常更有用。
  • 输出解析器 Output Parsers:语言模型(和聊天模型)输出文本。但是许多时候,您可能想获得比仅文本更有结构化的信息。这就是输出解析器发挥作用的地方。输出解析器负责(1)指示模型如何格式化输出,(2)将输出解析为所需格式(包括必要时进行重试)。

输出解析器 Output Parsers

Output parsers(输出解析器)是用于结构化语言模型响应的类。输出解析器必须实现两个主要方法:

  • get_format_instructions() -> str:一个返回包含语言模型输出格式化指令的字符串的方法。 parse(str) -> Any:一个接受字符串(假设为语言模型的响应)并将其解析为某种结构的方法。 还有一个可选的方法:

  • parse_with_prompt(str) -> Any:一个接受字符串(假设为语言模型的响应)和提示(假设为生成此响应的提示)的方法,并将其解析为某种结构。在输出解析器希望以某种方式重试或修复输出,并且需要来自提示的信息时,提供提示非常有用。

Prompt模板 Prompt Templates

“ PromptValue ”是最终传递给模型的内容。大多数情况下,该值不是硬编码的,而是根据用户输入、其他非静态信息(通常来自多个源)和固定的模板字符串动态创建的。

我们将负责创建“ PromptValue ”的对象称为 PromptTemplate。该对象公开了一种将输入变量作为输入并返回“ PromptValue ”的方法。

提示内容 PromptValue

“提示 Prompt”指的是传递给底层模型的内容。LangChain 提供了几种针对提示的抽象,以处理文本数据。

不同的模型可能期望不同的数据格式。在可能的情况下,我们希望允许在不同的模型类型中使用相同的提示。因此,我们有“ PromptValue ”的概念。这是一个类,公开了用于转换为每种模型类型所期望的确切输入类型(目前为文本或 ChatMessages )的方法。

模式 ( Schema )

聊天消息 ChatMessages

最终用户与之交互的主要接口是聊天接口。因此,一些模型提供商甚至开始以预期聊天消息的方式提供对底层 API 的访问。这些消息具有内容字段(通常是文本),并与用户相关联。目前支持的用户为系统、人类和 AI。

  • SystemChatMessage:表示应该将什么信息传达给 AI 系统的聊天消息。
  • HumanChatMessage:表示来自与 AI 系统交互的人类的信息的聊天消息。
  • AIChatMessage:表示来自 AI 系统的信息的聊天消息。

文档 Document

一份非结构化数据。由页面内容(数据的内容)和元数据(描述数据属性的辅助信息)组成。

例子 Examples

例子是输入/输出对,表示函数的输入和预期输出。它们可以在模型的训练和评估中使用。

这些可以是模型或链的输入/输出。两种类型的示例有不同的用途。模型的示例可用于微调模型。链式的示例可用于评估端到端链式过程,甚至可能训练替换整个链的模型。

文本 text

在处理语言模型时,您可以通过文本与其进行交互。作为一种过于简化的描述,很多模型是 “输入文本,输出文本”。因此,LangChain 中的很多接口都围绕文本展开。


网站公告

今日签到

点亮在社区的每一天
去签到