当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/316070.html

相关文章:

  • Linux3
  • 在CentOS 7上搭建GitLab服务器的完整指南
  • 第二十五天(数据结构:树)
  • 智慧社区(七)——基于 ECharts 与 Spring Boot 实现小区住户数据统计可视化
  • Java面试宝典:对象的内存布局
  • 龙芯(loongson) ls2k1000 openwrt
  • 人工智能领域、图欧科技、IMYAI智能助手2025年3月更新月报
  • 网络巡查平台管理办法对政务管理有哪些作用
  • 进阶向:PDF合并/拆分工具
  • RabbitMQ削峰填谷详解:让系统在流量洪峰中“稳如泰山”
  • 在 MCP 中实现 “askhuman” 式交互:原理、实践与开源方案
  • Java: jwt 入门介绍(Introduction to JSON Web Tokens)
  • Spring 的依赖注入DI是什么?
  • ChatGPT以及ChatGPT强化学习步骤
  • 陪诊小程序开发:用科技重构就医陪伴的“温度经济”
  • K8S健康检查巡检清单
  • 【JMeter】压测脚本生成完善增强
  • 奇偶校验码原理与FPGA实现
  • Java 配置文件深度解析:application.properties 与 application.yml 全方位对比
  • 制氧机语音控制方案设计以及使用场景
  • 北京JAVA基础面试30天打卡02
  • 浮雕软件Artcam安装包百度云网盘下载与安装指南
  • Linux-Day11.WEB服务,虚拟主机
  • 布控球是什么?布控球有什么作用?什么场景下会使用到布控球设备?一篇短文带你了解
  • 人工智能之数学基础:利用全概率公式如何将复杂事件转为简单事件
  • 寿司:米粒里藏着的鲜与巧
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)
  • 【测试报告】Hsu营销平台系统 - 测试报告
  • 嵌入式#define __assert __assert写法解析
  • 起落架大型结构件深孔测量探究 - 激光频率梳 3D 轮廓检测