feat(ai): 集成DashScope AI聊天功能并配置加密支持

- 添加DashScope AI配置项,包括API密钥和模型参数
- 实现ChatClient配置类用于构建AI聊天客户端
- 创建控制器接口支持用户通过HTTP请求与AI交互
- 引入Jasypt加密库用于敏感信息加密
- 添加Spring AI和Alibaba DashScope依赖管理- 升级项目依赖并引入WebFlux支持异步处理
This commit is contained in:
hanserwei
2025-10-22 11:58:27 +08:00
parent fff8f46dcf
commit 4207c85202
5 changed files with 103 additions and 2 deletions

View File

@@ -0,0 +1,19 @@
package com.hanserwei.snailsai.config;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ChatClientConfiguration {
@Resource
private DashScopeChatModel dashScopeChatModel;
@Bean
public ChatClient dashScopeChatClient() {
return ChatClient.builder(dashScopeChatModel).build();
}
}

View File

@@ -0,0 +1,24 @@
package com.hanserwei.snailsai.controller;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
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;
@RequestMapping("/dashscope")
@RestController
public class DashScopeController {
@Resource
private ChatClient dashScopeChatClient;
@GetMapping("/chat")
public String chat(@RequestParam("userPrompt") String userPrompt) {
return dashScopeChatClient.prompt()
.user(userPrompt)
.call()
.content();
}
}

View File

@@ -0,0 +1,11 @@
package com.hanserwei.snailsai.utils;
import org.jasypt.util.text.AES256TextEncryptor;
public class EncryptorUtil {
public static void main(String[] args) {
AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
textEncryptor.setPassword("yyyyyyyyyyyy");
System.out.println(textEncryptor.encrypt("xxxxxxxxxxxxxxxxxxxxxx"));
}
}

View File

@@ -23,8 +23,20 @@ spring:
minimum-idle: 20 # 保持 20 个空闲连接(与最大连接数一致)
connection-timeout: 5000 # 获取连接超时 5 秒
max-lifetime: 28800000 # 8 小时(确保在数据库连接超时前被回收)
ai:
dashscope:
api-key: ENC(cMgcKZkFllyE88DIbGwLKot9Vg02co+gsmY8L8o4/o3UjhcmqO4lJzFU35Sx0n+qFG8pDL0wBjoWrT8X6BuRw9vNlQhY1LgRWHaF9S1zzyM=)
chat:
options:
model: qwen-plus
temperature: 0.5
logging:
level:
org.hibernate.SQL: debug
# 隐藏掉 Hibernate 冗长的连接池 INFO 信息
org.hibernate.orm.connections.pooling: WARN
org.hibernate.orm.connections.pooling: WARN
jasypt:
encryptor:
password: ${jasypt.encryptor.password}
algorithm: PBEWithHMACSHA512AndAES_256
iv-generator-classname: org.jasypt.iv.RandomIvGenerator