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

asp网站开发技术免费建网站模板平台

asp网站开发技术,免费建网站模板平台,wordpress tag 数字,做网站还有用大型语言模型(LLMs)是无状态的,这意味着它们不会保留关于之前交互的信息。当想在多次交互中保持上下文或状态时,这可能会成为一个限制。为了解决这一问题,Spring AI 提供了对话记忆功能,允许你在与大型语言…

大型语言模型(LLMs)是无状态的,这意味着它们不会保留关于之前交互的信息。当想在多次交互中保持上下文或状态时,这可能会成为一个限制。为了解决这一问题,Spring AI 提供了对话记忆功能,允许你在与大型语言模型的多次交互中存储和检索信息。

“对话记忆”(ChatMemory)抽象类让你能够实现多种类型的记忆,以支持不同的使用场景。消息的底层存储由“对话记忆存储库”(ChatMemoryRepository)处理,其唯一职责就是存储和检索消息。具体保留哪些消息以及何时删除这些消息,则由“对话记忆”(ChatMemory)的具体实现来决定。策略示例可能包括保留最近的 N 条消息、保留一段时间内的消息,或者保留不超过一定令牌(token)数量限制的消息。

在选择记忆类型之前,了解对话记忆与对话历史记录之间的区别至关重要。

  • 对话记忆(Chat Memory):大型语言模型在对话过程中保留并用于维持上下文感知能力的信息。
  • 对话历史记录(Chat History):整个对话过程的全部记录,包括用户与模型之间交换的所有消息。

“对话记忆”(ChatMemory)抽象类旨在管理对话记忆。它允许你存储和检索与当前对话上下文相关的消息。然而,它并不适合用于存储对话历史记录。如果你需要保留所有交换消息的完整记录,应考虑采用其他方法,例如借助 Spring Data 来高效存储和检索完整的对话历史记录。

快速入门

Spring AI 会自动配置一个 ChatMemory bean,可以直接在应用程序中使用它。默认情况下,它使用一个内存存储库来存储消息(InMemoryChatMemoryRepository)以及一个 MessageWindowChatMemory 实现来管理对话历史记录。如果已经配置了不同的存储库(例如 Cassandra、JDBC 或 Neo4j),Spring AI 将会改用该存储库。

@Autowired
ChatMemory chatMemory;

接下来的将进一步介绍 Spring AI 中可用的不同记忆类型和存储库。

记忆类型

“对话记忆”(ChatMemory)抽象类允许实现各种类型的记忆,以适应不同的使用场景。记忆类型的选择会显著影响应用程序的性能和行为。本节将介绍 Spring AI 提供的内置记忆类型及其特性。

消息窗口对话记忆(Message Window Chat Memory)

MessageWindowChatMemory 会维护一个消息窗口,其中包含的消息数量不超过指定的最大值。当消息数量超过该最大值时,较旧的消息会被移除,但系统消息会得以保留。默认的窗口大小为 20 条消息。

MessageWindowChatMemory memory = MessageWindowChatMemory.builder().maxMessages(10).build();

这是 Spring AI 用于自动配置 ChatMemory bean 的默认消息类型。

记忆存储

Spring AI 提供了 ChatMemoryRepository 抽象类用于存储对话记忆。本节将介绍 Spring AI 提供的内置存储库及其使用方法,不过,如果有需要,也可以自行实现存储库。

内存存储库

InMemoryChatMemoryRepository 使用 ConcurrentHashMap 在内存中存储消息。

默认情况下,如果尚未配置其他存储库,Spring AI 会自动配置一个类型为 InMemoryChatMemoryRepository 的 ChatMemoryRepository bean,你可以直接在应用程序中使用它。

@Autowired
ChatMemoryRepository chatMemoryRepository;

也可以手动创建 InMemoryChatMemoryRepository,按照以下方式操作:

ChatMemoryRepository repository = new InMemoryChatMemoryRepository();

JdbcChatMemoryRepository

JdbcChatMemoryRepository 是一个内置实现,它使用 JDBC 将消息存储在关系型数据库中。它开箱即用地支持多种数据库,非常适合需要持久化存储对话记忆的应用程序。

首先,将以下依赖项添加到项目中:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId>
</dependency>

Spring AI 为 JdbcChatMemoryRepository 提供了自动配置功能,可以直接在应用程序中使用它。

@Autowired
JdbcChatMemoryRepository chatMemoryRepository;ChatMemory chatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).maxMessages(10).build();

如果更倾向于手动创建 JdbcChatMemoryRepository,可以通过提供一个 JdbcTemplate 实例和一个 JdbcChatMemoryRepositoryDialect 来实现:

ChatMemoryRepository chatMemoryRepository = JdbcChatMemoryRepository.builder().jdbcTemplate(jdbcTemplate).dialect(new PostgresChatMemoryDialect()).build();ChatMemory chatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).maxMessages(10).build();
支持的数据库与方言抽象

Spring AI 通过方言抽象支持多种关系型数据库。以下数据库是开箱即用地支持的:

  • PostgreSQL
  • MySQL / MariaDB
  • SQL Server
  • HSQLDB

当使用 JdbcChatMemoryRepositoryDialect.from(DataSource) 时,可以从 JDBC URL 中自动检测出正确的方言。可以通过实现 JdbcChatMemoryRepositoryDialect 接口来扩展对其他数据库的支持。

配置属性以下是翻译结果,使用表格呈现:
属性描述默认值
spring.ai.chat.memory.repository.jdbc.initialize-schema控制何时初始化数据库模式。可选值:embedded(默认)、always、never。embedded
spring.ai.chat.memory.repository.jdbc.schema用于初始化的模式脚本位置。支持 classpath: URL 和平台占位符。classpath:org/springframework/ai/chat/memory/repository/jdbc/schema-@@platform@@.sql
spring.ai.chat.memory.repository.jdbc.platform如果使用了 @@platform@@ 占位符,则在初始化脚本中使用的平台。自动检测
Schema 初始化

自动配置会在启动时,使用针对你数据库的供应商特定的 SQL 脚本,自动创建 SPRING_AI_CHAT_MEMORY 表。默认情况下,模式初始化仅针对嵌入式数据库(如 H2、HSQL、Derby 等)运行。

可以使用 spring.ai.chat.memory.repository.jdbc.initialize-schema 属性来控制模式初始化:

spring.ai.chat.memory.repository.jdbc.initialize-schema=embedded # 仅针对嵌入式数据库进行初始化(默认设置)spring.ai.chat.memory.repository.jdbc.initialize-schema=always # 总是进行初始化spring.ai.chat.memory.repository.jdbc.initialize-schema=never # 从不进行初始化(在与 Flyway/Liquibase 等数据库迁移工具一起使用时很有用)

若要覆盖模式脚本的位置,可以使用以下方式:

spring.ai.chat.memory.repository.jdbc.schema=classpath:/custom/path/schema-mysql.sql
扩展方言

若要为新数据库添加支持,需要实现 JdbcChatMemoryRepositoryDialect 接口,并提供用于选择、插入和删除消息的 SQL 语句。然后,你可以将自己的自定义方言传递给存储库构建器。

ChatMemoryRepository chatMemoryRepository = JdbcChatMemoryRepository.builder().jdbcTemplate(jdbcTemplate).dialect(new MyCustomDbDialect()).build();

CassandraChatMemoryRepository

CassandraChatMemoryRepository 使用 Apache Cassandra 来存储消息。它适用于需要持久化存储聊天记忆的应用程序,尤其是在需要高可用性、持久性、可扩展性以及利用生存时间(TTL,Time-To-Live)特性时。

CassandraChatMemoryRepository 采用时间序列模式,会记录所有过去的聊天窗口,这对于治理和审计非常有价值。建议将生存时间(TTL)设置为某个值,例如三年。

若要使用 CassandraChatMemoryRepository,首先需要在项目中添加相关依赖:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-cassandra</artifactId>
</dependency>

Spring AI 为 CassandraChatMemoryRepository 提供了自动配置功能,可以直接在应用程序中使用它。

@Autowired
CassandraChatMemoryRepository chatMemoryRepository;ChatMemory chatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).maxMessages(10).build();

如果更倾向于手动创建 CassandraChatMemoryRepository,可以通过提供一个 CassandraChatMemoryRepositoryConfig 实例来实现:

ChatMemoryRepository chatMemoryRepository = CassandraChatMemoryRepository.create(CassandraChatMemoryConfig.builder().withCqlSession(cqlSession));ChatMemory chatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).maxMessages(10).build();
配置属性
http://www.dtcms.com/a/524475.html

相关文章:

  • 前端竞态问题是什么?怎么解决?
  • 问题记录--elementui中el-form初始化表单resetFields()方法使用时出现的问题
  • 运用jieba库解决词频分析问题
  • 【Linux】自动化构建工具--make/Makefile
  • 乡镇网站建设工作计划商城网站支付端怎么做
  • 咸阳网站开发公司电话seo网站关键词排名优化公司
  • 八股文面试题(全栈所有)
  • Mac Studio 和 DGX Spark 可用性分析
  • 【小白笔记】「while」在程序语言中的角色
  • 网站推广员怎么做怎么投诉网站制作公司
  • Flexbox 与定位结合-实现更复杂布局
  • 基于随机森林算法的Boss直聘数据分析及可视化-hadoop+django+spider
  • 最适合seo的网站源码专门做网页的网站
  • 企业微信机器人配置webhook自动推送错误订单信息
  • Web3 前端与合约交互
  • 基于window/ubuntu安装rknn-toolkit2【docker】
  • Mac安装配置MySQL
  • JumpServer堡垒机的安装部署
  • Harmony鸿蒙开发0基础入门到精通Day05--JavaScript篇
  • 福州医疗网站建设电商平台管理系统
  • 【乐鑫】乐鑫平台库文件生成方法
  • 文件IO操作
  • GStreamer视频编码
  • 【Go】--闭包
  • 正规网店代运营公司seo难不难
  • 【Dataset】如何高效处理海量数据并从中智能筛选出有代表性的样本?
  • 攻防世界-Web-Confusion1
  • python:怎样用 Django 开发电子商务程序
  • 【u-boot】u-boot驱动模型-struct uclass_driver
  • 昌吉网站建设公司怎么用php安装wordpress