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

内存

内存(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 中的很多接口都围绕文本展开。

相关推荐
GuWenyue13 小时前
写Agent还要重复封装工具?一套MCP多服务方案,3个能力让AI自动查地图、读写文件、操控浏览器
人工智能·机器学习·开源
GuWenyue13 小时前
90%AI新手不会调参!LangChain双模型流水线实战,一套代码兼顾严谨+创意
人工智能
光锥智能15 小时前
WAIC亮点|兼具泛化能力与作业效率的极智嘉机器人天团
人工智能·机器人
阳光是sunny15 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
甲维斯15 小时前
Kimi K3 重构10000行单文件屎山代码!
人工智能
陳陈陳15 小时前
Workflow vs Agent:别再被“调包侠”忽悠了,一张图看懂AI工程的“骨架”与“大脑”
langchain·agent·workflow
阳光是sunny15 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
新知图书16 小时前
11.3 详细实现与核心配置(作业批改智能体开发)
人工智能·agent·ai agent·智能体·扣子
深度研习笔记17 小时前
OpenCV工业视觉实战11|多线程解耦+视频流稳流+推理加速,彻底解决卡顿阻塞,实现毫秒级工业实时检测
人工智能·opencv·计算机视觉
delishcomcn17 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法