请看文档,流程不再赘述:官网及其示例

简易聊天

环境变量

引入Spring AI Alibaba
记忆对话还需要我们有数据库进行存储,mysql:mysql-connector-java

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.dd.ai</groupId><artifactId>spring-ai-alibaba-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai-alibaba-demo</name><description>spring-ai-alibaba-demo</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--        引入Spring AI Alibaba相关依赖--><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version></dependency>
<!--Spring AI Alibaba 提供了 jdbc、redis、elasticsearch 插件可以让聊天机器人拥有“记忆”。下面以 MySQL 为例,演示如何快速编写一个带有记忆的聊天机器人。--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-memory-jdbc</artifactId><version>1.0.0.2</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>1.0.0.2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

配置文件

AI_DASHSCOPE_API_KEY: zz
#APP_ID: zzzserver:port: 8080spring:application:name: spring-ai-demoai:dashscope:agent:api-key: ${AI_DASHSCOPE_API_KEY} # 百炼API Key,如未配置环境变量,请在这里替换为实际的值#app-id: ${APP_ID} # 大模型应用ID,,非必须#workspace-id: ${WORKSPACE_ID} # 业务空间ID,可选,未配置时使用主账号空间datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/ai?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=truejpa:hibernate:ddl-auto: update  # 自动更新数据库表结构show-sql: true      # 显示 SQL 语句

controller

package com.dd.ai.springaialibabademo.controller;import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
@RequestMapping("/helloworld")
public class HelloworldController {private static final String DEFAULT_PROMPT = "你是一个博学的智能聊天助手,请根据用户提问回答!";private final ChatClient dashScopeChatClient;public HelloworldController(ChatClient.Builder chatClientBuilder) {this.dashScopeChatClient = chatClientBuilder.defaultSystem(DEFAULT_PROMPT)// 实现 Logger 的 Advisor.defaultAdvisors(new SimpleLoggerAdvisor())// 设置 ChatClient 中 ChatModel 的 Options 参数.defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build()).build();}/*** ChatClient 简单调用*/@GetMapping("/simple/chat")public String simpleChat(@RequestParam(value = "query", defaultValue = "你好,很高兴认识你,能简单介绍一下自己吗?")String query) {return dashScopeChatClient.prompt(query).call().content();}/*** ChatClient 流式调用*/@GetMapping("/stream/chat")public Flux<String> streamChat(@RequestParam(value = "query", defaultValue = "你好,很高兴认识你,能简单介绍一下自己吗?")String query, HttpServletResponse response) {response.setCharacterEncoding("UTF-8");return dashScopeChatClient.prompt(query).stream().content();}}

记忆聊天

Spring AI Alibaba 提供了 jdbc、redis、elasticsearch 插件可以让聊天机器人拥有“记忆”。环境变量和配置文件都在上一步加入了,也就是以 MySQL 为例

需要修改的地方

  1. HelloworldController的构造函数
  public HelloworldController(JdbcTemplate jdbcTemplate, ChatClient.Builder chatClientBuilder) {// 构造 ChatMemoryRepository 和 ChatMemory// 创建基于 MySQL 的聊天记忆仓库,用于持久化存储对话历史记录ChatMemoryRepository chatMemoryRepository = MysqlChatMemoryRepository.mysqlBuilder().jdbcTemplate(jdbcTemplate).build();// 创建消息窗口形式的聊天记忆模块,使用上述仓库进行持久化存储ChatMemory chatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).build();// 构建 DashScopeChatClient 实例this.dashScopeChatClient = chatClientBuilder// 设置默认系统提示语.defaultSystem(DEFAULT_PROMPT)// 添加日志记录顾问,用于调试时查看输入输出内容.defaultAdvisors(new SimpleLoggerAdvisor())// 注册记忆管理顾问,用于自动加载和保存会话历史.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())// 配置模型参数:设置 TopP 采样策略为 0.7.defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build())// 完成客户端构建.build();}
  1. 方法参数
    @RequestParam(value = “chat-id”, defaultValue = “1”) String chatId
/*** ChatClient 简单调用*/@GetMapping("/simple/chat")public String simpleChat(@RequestParam(value = "query", defaultValue = "你好,很高兴认识你,能简单介绍一下自己吗?")String query,@RequestParam(value = "chat-id", defaultValue = "1") String chatId) {return dashScopeChatClient.prompt(query).advisors(a -> a.param(ChatMemory.CONVERSATION_ID, chatId)).call().content();}/*** ChatClient 流式调用*/@GetMapping("/stream/chat")public Flux<String> streamChat(@RequestParam(value = "query", defaultValue = "你好,很高兴认识你,能简单介绍一下自己吗?")String query, HttpServletResponse response,@RequestParam(value = "chat-id", defaultValue = "1") String chatId) {response.setCharacterEncoding("UTF-8");return dashScopeChatClient.prompt(query).advisors(a -> a.param(ChatMemory.CONVERSATION_ID, chatId)).stream().content();}

运行报错

在这里插入图片描述在这里插入图片描述

原因:由于 MySQL 表的字符集不支持存储 Unicode 表情符号导致的。表情符号😊的 UTF-8 编码为F0 9F 98 8A(4 字节),超出了utf8字符集的 3 字节限制

不知道改了啥,又可以了,可能是这个,把数据库的字符集改了一下

-- 将chat_db数据库的字符集改为utf8mb4
ALTER DATABASE chat_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913241.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913241.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913241.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习深度学习】模型参数量、微调效率和硬件资源的平衡点

目录 一、核心矛盾是什么&#xff1f; 二、微调本质&#xff1a;不是全调&#xff0c;是“挑着调” 三、如何平衡&#xff1f; 3.1 核心策略 3.2 参数量 vs 微调难度 四、主流轻量微调方案盘点 4.1 冻结部分参数 4.2 LoRA&#xff08;低秩微调&#xff09; 4.3 量化训…

【V13.0 - 战略篇】从“完播率”到“价值网络”:训练能预测商业潜力的AI矩阵

在上一篇 《超越“平均分”&#xff1a;用多目标预测捕捉观众的“心跳曲线”》 中&#xff0c;我们成功地让AI学会了预测观众留存曲线&#xff0c;它的诊断能力已经深入到了视频的“过程”层面&#xff0c;能精确地指出观众是在哪个瞬间失去耐心。 我的AI现在像一个顶级的‘心…

java微服务(Springboot篇)——————IDEA搭建第一个Springboot入门项目

在正文开始之前我们先来解决一些概念性的问题 &#x1f355;&#x1f355;&#x1f355; 问题1&#xff1a;Spring&#xff0c;Spring MVC&#xff0c;Spring Boot和Spring Cloud之间的区别与联系&#xff1f; &#x1f36c;&#x1f36c;&#x1f36c;&#xff08;1&#xff0…

服务器间接口安全问题的全面分析

一、服务器接口安全核心威胁 文章目录**一、服务器接口安全核心威胁**![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6f54698b9a22439892f0c213bc0fd1f4.png)**二、六大安全方案深度对比****1. IP白名单机制****2. 双向TLS认证(mTLS)****3. JWT签名认证****4. OAuth…

vs code关闭函数形参提示

问题&#xff1a;函数内出现灰色的形参提示 需求/矛盾&#xff1a; 这个提示对老牛来说可能是一种干扰&#xff0c;比如不好对齐控制一行代码的长度&#xff0c;或者容易看走眼&#xff0c;造成眼花缭乱的体验。 关闭方法&#xff1a; 进入设置&#xff0c;输入inlay Hints&…

ESXi 8.0安装

使用群晖&#xff0c;突然nvme固态坏了 新nvme固态&#xff0c;先在PC上格式化下&#xff0c;不然可能N100可能不认 启动&#xff0c;等待很长时间 回车 F11 输入密码&#xff0c;字母小写字母大写数字 拔掉U盘&#xff0c;回车重启 网络配置 按F2&#xff0c; 输入密码&…

【git学习】第2课:查看历史与版本回退

好的&#xff0c;我们进入 第2课&#xff1a;版本查看与回退机制&#xff0c;本课你将学会如何查看提交历史、对比更改&#xff0c;并掌握多种回退版本的方法。&#x1f4d8; 第2课&#xff1a;查看历史与版本回退&#x1f3af; 本课目标熟练查看 Git 提交记录掌握差异查看、版…

摄像头AI智能识别工程车技术及应用前景展望

摄像头AI自动识别工程车是智能交通系统和工程安全管理领域的一项重要技术。它通过图像识别技术和深度学习算法&#xff0c;实现对工程车的自动检测和识别&#xff0c;从而提高了施工现场的安全性和管理效率。以下是对该技术及其应用的详细介绍&#xff1a;一、技术实现数据收集…

Windows服务器安全配置:组策略与权限管理最佳实践

Windows服务器是企业常用的服务器操作系统&#xff0c;但其开放性和复杂性也使其成为攻击者的目标。通过正确配置组策略和权限管理&#xff0c;可以有效提高安全性&#xff0c;防止未经授权的访问和恶意软件的入侵。以下是详细的安全配置指南和最佳实践。 1. 为什么组策略和权限…

Windows部署Rocketmq问题汇总

最近研究了下Rocketmq消息中间件&#xff0c;在Win10上部署时遇到一些问题&#xff0c;做个记录 部署的是Rocketmq 4.92版本&#xff0c;对应使用的控制台用的1.0版本 下载地址 1.优化内存占用 修改 runserver.cmd 修改前 set "JAVA_OPT%JAVA_OPT% -server -Xms2g -Xmx…

动手学深度学习-学习笔记(总)

文章目录 1、概述2、内容2.1、python2.2、动手学深度学习2.2.1、课前准备2.2.2、预备知识2.2.3、线性神经网络 2.3、深度学习重要概念 3、常见问题3.1、安装 d2l 失败3.2、调用 mean() 方法报错3.3、markdown 常见公式3.4、执行动手学深度学习中的代码&#xff0c;无法显示图片…

springboot3.5 MySQL 自动装配解析

一、配置环境 1. 配置pom.xml <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency> 2、自动配置图解 二、相关代码解析 1、自动配置入口&#xff1a…

使用 Conda 工具链创建 Poetry 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》

Python 多版本治理理念&#xff08;Windows 平台 零基础友好&#xff09;-CSDN博客 Python 多版本与开发环境治理架构设计-CSDN博客 使用命令行创建项目本地的 Poetry 虚拟环境实战演示 —— 基于《Python 多版本与开发环境治理架构设计》的最佳实践-CSDN博客 一、Python311 环…

北小菜, python , onvif

第一节&#xff1a; 首先是环境的搭建。 环境的搭建。 roottopeet:/home/topeet/source_code/wang_onvif_python# python -m venv venv Command python not found, did you mean:command python3 from deb python3command python from deb python-is-python3 roottopeet:/ho…

TinyWebserver学习(9)-HTTP

一、相关知识 1、有限状态机&#xff1a; 有限状态机&#xff08;Finite State Machine, FSM&#xff09;是一种用于描述对象在其生命周期内可能经历的不同状态及其状态转换规则的模型。它广泛应用于游戏开发、网络协议、词法解析、UI逻辑控制等领域。以下是C中有限状态机的简…

2025最新软件测试面试八股文

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师…

React 强大的表单验证库formik之集成Yup、React Hook Form库

简介 Formik 是为 React 开发的开源表单库&#xff0c;提供状态管理、验证和提交处理功能&#xff0c;可简化复杂表单的开发。 核心优势 ‌- 状态管理 ‌&#xff1a;自动跟踪输入值、验证状态和提交进度&#xff0c;无需手动编写状态逻辑。 ‌ ‌- 验证功能 ‌&#xff1a;…

破解风电运维“百模大战”困局,机械版ChatGPT诞生?

面对风机87%的非计划停机&#xff0c;30多个专用模型为何束手无策&#xff1f;一套通用大模型如何实现轴承、齿轮、转子“一站式”健康管理&#xff1f;一、行业痛点&#xff1a;风机运维深陷“碎片化泥潭”1.1 87%停机故障由多部件引发齿轮断裂、轴承磨损、电机短路……风电故…

Spring Bean 控制销毁顺序的方法总结

控制Spring Bean销毁顺序的方法 在Spring框架中&#xff0c;有几种方法可以控制Bean的销毁顺序。以下是主要的几种方式及其示例代码&#xff1a; 1. 实现DisposableBean接口 实现DisposableBean接口并重写destroy()方法&#xff0c;Spring会按照依赖关系的相反顺序调用这些方…

Gemini CLI MCP 教程:设置、命令与实际使用

如果你想要为任何 MCP 服务器设置 Gemini CLI,这个快速教程将为你提供指导。 Gemini CLI 结合 MCP(模型上下文协议)服务器,改变了你通过自然语言命令进行编码的方式。 你可以要求 Gemini 分析你的代码库、管理文件、查询数据库,或通过对话提示与 API 交互。 MCP 服务器连…