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

wordpress下载站模板营销软文范文200字

wordpress下载站模板,营销软文范文200字,wordpress手机怎么分享链接,电商平台数据库设计持久化对话 默认情况下#xff0c;聊天记忆存储在内存中ChatMemory chatMemory new InMemoryChatMemory()。 如果需要持久化存储#xff0c;可以实现一个自定义的聊天记忆存储类#xff0c;以便将聊天消息存储在你选择的任何持久化存储介质中。 MongoDB 文档型数据库聊天记忆存储在内存中ChatMemory chatMemory new InMemoryChatMemory()。 如果需要持久化存储可以实现一个自定义的聊天记忆存储类以便将聊天消息存储在你选择的任何持久化存储介质中。 MongoDB 文档型数据库数据以JSON - like的文档形式存储具有高度的灵活性和可扩展性。它不需要预先定义严格的表结构适合存储半结构化或非结构化的数据。 当聊天记忆中包含多样化的信息如文本消息、图片、语音等多媒体数据或者消息格式可能会频繁变化时MongoDB 能很好地适应这种灵活性。例如一些社交应用中用户可能会发送各种格式的消息使用 MongoDB 可以方便地存储和管理这些不同类型的数据。 整合SpringBoot 引入MongoDB依赖 !-- Spring Boot Starter Data MongoDB -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId /dependency添加远程连接配置 #MongoDB连接配置 spring:data:mongodb:uri: mongodb://localhost:27017/chat_memory_dbusername: rootpassword: xxx实体类 映射MongoDB中的文档相当与MySQL的表 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;Data AllArgsConstructor NoArgsConstructor Document(chatMessages) public class ChatMessages {//唯一标识映射到 MongoDB 文档的 _id 字段Idprivate ObjectId id;private String conversationId; //会话IDprivate String messagesJson; //消息JSON}消息序列化器 对聊天消息message进行 序列化 和 反序列化 操作 消息序列化messagesToJson 方法 将一组 Message 对象如 UserMessage、AssistantMessage转换为 JSON 字符串。 用于将内存中的聊天记录保存到存储介质如数据库、文件或通过网络传输。 消息反序列化messagesFromJson 方法 将 JSON 字符串还原为 Message 对象列表。 用于从持久化存储或网络接收的数据中恢复聊天消息对象。 支持多态反序列化MessageDeserializer 类 根据 JSON 中的 messageType 字段判断消息类型如 “USER” 或 “ASSISTANT”并创建对应的子类实例。 解决了 Jackson 默认无法识别接口或抽象类具体实现的问题。 格式美化可选 启用了 SerializationFeature.INDENT_OUTPUT使输出的 JSON 更具可读性适合调试和日志输出。 import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.UserMessage;import java.io.IOException; import java.util.List; import java.util.Map; //聊天消息序列化器 public class MessageSerializer {private static final ObjectMapper objectMapper new ObjectMapper();static {objectMapper.enable(SerializationFeature.INDENT_OUTPUT);SimpleModule module new SimpleModule();module.addDeserializer(Message.class, new MessageDeserializer());objectMapper.registerModule(module);}public static String messagesToJson(ListMessage messages) throws JsonProcessingException {return objectMapper.writeValueAsString(messages);}public static ListMessage messagesFromJson(String json) throws JsonProcessingException {return objectMapper.readValue(json, new TypeReferenceListMessage() {});}private static class MessageDeserializer extends JsonDeserializerMessage {Overridepublic Message deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {MapString, Object node p.readValueAs(Map.class);String type (String) node.get(messageType);switch (type) {case USER:return new UserMessage((String) node.get(text));case ASSISTANT:return new AssistantMessage((String) node.get(text));default:throw new IOException(未知消息类型: type);}}} }持久化类 Component RequiredArgsConstructor public class MongoChatMemory implements ChatMemory {Resourceprivate MongoTemplate mongoTemplate;Overridepublic void add(String conversationId, ListMessage messages) {Query query new Query(Criteria.where(conversationId).is(conversationId));ChatMessages chatMessages mongoTemplate.findOne(query, ChatMessages.class);ListMessage updatedMessages;if (chatMessages ! null) {try {updatedMessages new java.util.ArrayList(chatMessages.getMessagesJson() ! null? MessageSerializer.messagesFromJson(chatMessages.getMessagesJson()) : Collections.emptyList());} catch (JsonProcessingException e) {throw new RuntimeException(序列化消息失败, e);}updatedMessages.addAll(messages);} else {updatedMessages new java.util.ArrayList(messages);}try {String json MessageSerializer.messagesToJson(updatedMessages);if (chatMessages ! null) {Update update new Update().set(messagesJson, json);mongoTemplate.updateFirst(query, update, ChatMessages.class);} else {ChatMessages newChatMessages new ChatMessages();newChatMessages.setConversationId(conversationId);newChatMessages.setMessagesJson(json);mongoTemplate.insert(newChatMessages);}} catch (JsonProcessingException e) {throw new RuntimeException(序列化消息失败, e);}}Overridepublic ListMessage get(String conversationId, int lastN) {Query query new Query(Criteria.where(conversationId).is(conversationId));ChatMessages chatMessages mongoTemplate.findOne(query, ChatMessages.class);if (chatMessages null || chatMessages.getMessagesJson() null) {return Collections.emptyList();}try {ListMessage allMessages MessageSerializer.messagesFromJson(chatMessages.getMessagesJson());int size allMessages.size();int fromIndex Math.max(0, size - lastN);return allMessages.subList(fromIndex, size);} catch (JsonProcessingException e) {throw new RuntimeException(反序列化消息失败, e);}}Overridepublic void clear(String conversationId) {Query query new Query(Criteria.where(conversationId).is(conversationId));mongoTemplate.remove(query, ChatMessages.class);} }测试 初始化ChatClient时注入MongoChatMemory //健康报告对话 Component Slf4j public class HealthReportApp {private final ChatClient chatClient1;private static final String SYSTEM_PROMPT 你的名字是“小鹿”你是一家名为“北京协和医院”的智能客服。你是一个训练有素的医疗顾问和医疗伴诊助手。你态度友好、礼貌且言辞简洁。\n 1、请仅在用户发起第一次会话时和用户打个招呼并介绍你是谁。\n ;//初始化ChatClientpublic HealthReportApp(ChatModel dashscopeChatModel,MongoChatMemory mongoChatMemory) throws IOException {chatClient1 ChatClient.builder(dashscopeChatModel).defaultSystem(SYSTEM_PROMPT) //系统预设.defaultAdvisors(new MessageChatMemoryAdvisor(mongoChatMemory), //对话记忆//自定义日志 Advisor可按需开启new MyLoggerAdvisor(),// 自定义违禁词 Advisor可按需开启new ProhibitedWordAdvisor()//自定义推理增强可按需开启//new ReReadingAdvisor()).build();}public record HealthReport(String title, ListString suggestions) { }//生成健康报告对话public HealthReport doChatWithReport(String message, String chatId) {HealthReport healthReport chatClient1.prompt().system(SYSTEM_PROMPT 分析用户提供的信息每次对话后都要生成健康报告标题为{用户名}的健康报告内容为建议列表).user(message).advisors(spec - spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10)).call().entity(HealthReport.class);log.info(healthReport: {}, healthReport);return healthReport;}} mongodb记录如下 [ {messageType : USER,metadata : {messageType : USER},media : [ ],text : 你好我是程序员kk }, {messageType : ASSISTANT,metadata : {messageType : ASSISTANT},toolCalls : [ ],media : [ ],text : {\n \suggestions\: [\n \您好程序员kk我是北京协和医院的智能客服小鹿很高兴为您服务。\,\n \长期从事编程工作可能导致久坐建议您定时起身活动保持良好姿势。\,\n \注意用眼卫生每工作40-50分钟休息一下眼睛。\,\n \合理安排作息时间保证充足睡眠以维持身体和心理健康。\\n ],\n \title\: \程序员kk的健康报告\\n} }, {messageType : USER,metadata : {messageType : USER},media : [ ],text : 你是谁 }, {messageType : ASSISTANT,metadata : {finishReason : STOP,id : 0110f881-f29f-9cef-b142-7a7cf9e3e76c,role : ASSISTANT,messageType : ASSISTANT,reasoningContent : },toolCalls : [ ],media : [ ],text : {\n \suggestions\: [\n \您好我是北京协和医院的智能客服小鹿很高兴为您服务。\,\n \作为您的医疗顾问和伴诊助手我将为您提供专业建议。\,\n \请告诉我您的需求或问题我会尽力帮助您。\\n ],\n \title\: \程序员kk的健康报告\\n} } ]接口开发 为了在Controller层实现AI对话历史记录的功能将添加两个接口根据chatId查询特定对话历史记录和查询所有对话的摘要列表。 //获取所有conversationId public ListString findAllConversationIds(String userId) {if (userId null || userId.isEmpty()) {return Collections.emptyList(); // 或抛出异常}// 构建正则表达式以 userId _ 开头Pattern pattern Pattern.compile(^ Pattern.quote(userId) _);// 使用 regex 替代 matchesQuery query new Query(Criteria.where(conversationId).regex(pattern));return mongoTemplate.findDistinct(query,conversationId,ChatMessages.class,String.class); }/*** 根据 chatId 获取历史聊天记录* 支持参数 lastN 控制获取最近 N 条消息默认获取全部*/GetMapping(/history/{chatId})public BaseResponseListMessage getChatHistory(PathVariable String chatId,RequestParam(defaultValue -1) int lastN) {int effectiveLastN lastN 0 ? Integer.MAX_VALUE : lastN;ListMessage history chatMemory.get(chatId, effectiveLastN);return ResultUtils.success(history);}/*** 获取所有 chatId 列表用于展示对话历史页面*/GetMapping(/conversations)public BaseResponseListString getAllConversations() {Long currentUserId BaseContext.getCurrentId();String userId currentUserId.toString();ListString conversationIds chatMemory.findAllConversationIds(userId);return ResultUtils.success(conversationIds);}/*** 新建对话生成新的 chatId并在 MongoDB 中插入一条空记录*/PostMapping(/conversations/add)public BaseResponseString createNewConversation() {Long currentUserId BaseContext.getCurrentId();String conversationId currentUserId _ UUID.randomUUID().toString();chatMemory.add(conversationId, Collections.emptyList()); // 插入空消息记录return ResultUtils.success(conversationId);}/*** 删除指定 chatId 的对话记录*/DeleteMapping(/conversations/{chatId})public BaseResponseBoolean deleteConversation(PathVariable String chatId) {chatMemory.clear(chatId);return ResultUtils.success(true);}
http://www.hkea.cn/news/14295329/

相关文章:

  • 普洱建设网站做传销网站违法的吗
  • 太原网站建设方案托管网站开发超链接点击后变色
  • 做个网站需要什么设备网站站群建设
  • 漯河网站推广多少钱网站网站建设策划书
  • 网站建设经验交流材料成都旅行社网站建设
  • 雄安建设集团有限公司网站蓝色主题的网站模板
  • 山河建设集团有限公司的网站个人网页英文
  • 做百度网站一年多少钱找公司制作app多少钱
  • 网站做cpa赚钱吗杭州哪家网站建设公司好点
  • 门户网站建设公司价位网站的后台怎么做
  • 上海高登联合建设网站电商seo与sem是什么
  • 什么网站做视频最赚钱网站模板网站
  • 郓城菏泽网站建设免费动图制作app
  • 玉溪市住房城乡建设局网站用手机怎样免费做网站
  • 小组做数据库网站现在哪个网站做电商好
  • 直播网站建设项目策划书wordpress 无法发送邮件
  • 有做网站设计吗广州seo网站开发
  • 软件公司门户网站模板网站开发项目组成员
  • 建设官方网站怎么登录wordpress百度收录
  • 天津市建设工程备案网站宝安网站设计案例
  • SEO网站布局优化现在还用dw做网站设计么
  • 做微信公众号的网站有哪些网站的一般制作流程
  • 青岛微网站类wordpress
  • 六安网站建设定制wordpress 热门 tags
  • 广西做网站公司排名wordpress博客页修改
  • 魔方 网站建设 有限公司销售怎么找客户
  • 做网站练手电信网站服务器
  • 虚拟主机和网站的关系wordpress多广告位
  • 网站素材模板旅游html网页怎么做
  • 能看各种网站的浏览器做网站方案