内存
内存(Memory)是在对话过程中存储和检索数据的概念。主要有两种方法:
- 根据输入,获取任何相关的数据。
- 根据输入和输出,相应地更新状态。
内存主要分为两种类型:短期内存和长期内存。
短期内存通常指的是如何在单个对话的上下文中传递数据(通常是先前的聊天消息或其摘要)。
长期内存处理的是如何在对话之间获取和更新信息的问题。
记录聊天历史 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 中的很多接口都围绕文本展开。