Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee My腾云code My51cto

Happy_EveryDay

可以平凡 不可以平庸 无爱则无忧,无欲则无求,无怒而无敌,无怨才是佛。所有烦恼,都是放不下的执著 开源技群 328035181 MyGitee

博客园 首页 管理

加严参数描述与校验

后端代码加强校验和兜底保护

系统Prompt设定限制

 

1、pom

<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.2.0</spring-boot.version>
<spring-ai.version>1.0.0</spring-ai.version>
<spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version>
    <jedis.version>5.2.0</jedis.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 阿里云通义千问(DashScope)starter -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!--对话记忆 chat-memory-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-autoconfigure-model-chat-memory</artifactId>
</dependency>

<!-- Spring AI JDBC 聊天记忆核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId>
</dependency>
<!-- Spring Boot JDBC Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>

<!-- Spring AI Alibaba Redis 记忆 Starter -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-memory-redis</artifactId>
</dependency>

<!-- Jedis 客户端依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>

</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 统一管理Spring AI依赖版本 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${spring-ai-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Spring AI 里程碑/快照仓库(必须配置,否则依赖无法下载) -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>


2、yml

server:
port: 18081
spring:
ai:
dashscope:
api-key: sk-8718a83408d7443b9544cXXXXXXXX
chat:
memory:
repository:
jdbc:
initialize-schema: always
schema: classpath:/sql/schema-mysql.sql
   memory:
   # Redis 配置必须放在 spring.ai 下,层级要和你的 @Value 匹配
   redis:
   host: 192.168.91.165 # 你的 Redis 地址
   port: 6379
   timeout: 5000
   # password: 123456 # 有密码再打开

datasource:
url: jdbc:mysql://192.168.91.165:3306/springai?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
logging:
level:
org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: debug
#org.springframework.ai.chat.client.advisor: debug

 


 
3、service

import org.springframework.stereotype.Service;

//票务服务
@Service
public class TicketService {

//退票
public void cancel(String ticketNumber, String name) {
// 实际业务逻辑:调用数据库/API执行退票
System.out.println("退票成果");
}
}




 
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ToolService {

@Autowired
private TicketService ticketService;

// @Tool告诉大模型提供了什么工具
@Tool(description = "退票")
public String cancel(
//@TooLParam告诉大模型参数的描述 加严参数描述与校验
@ToolParam(description = "预定号,可以是纯数字") String ticketNumber,
@ToolParam(description = "真实人名(必填,必须为人的真实姓名,严禁用其他信息代替如缺失请传null)") String name) {
// 后端代码加强校验和兜底保护
//先查询--->先校验
ticketService.cancel(ticketNumber, name);
return "退票成功!";
}


// // 示例工具:查询长沙某名字的人数
// @Tool(description = "查询长沙地区叫某个名字的人数")
// public String locationNameCounts(
// @ToolParam(description = "要查询的名字") String name
// ) {
// return "长沙地区叫" + name + "的人有10个";
// }

}








4、controller




import com.sb.dashscope18081.service.ToolService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.ResponseBody;

/**
* @author Administrator
*/
@RequestMapping("/openai")
@ResponseBody
@Controller
public class ChatclientToolController {

@Autowired
private ChatClient.Builder chatClientBuilder;
//
@Autowired
private ToolService toolService;
//ChatClient chatClient;

// public ChatclientToolController(ChatClient.Builder chatClientBuilder, ToolService toolService) {
// chatClient= chatClientBuilder
// .defaultTools(toolService)
// .build();
// }

@GetMapping("/simple/tool3")
public String tool3(
@RequestParam(value = "message",
defaultValue = "讲个笑话") String message
) {
// // 构建ChatClient并调用
ChatClient chatClient = chatClientBuilder
//
//系统Prompt设定限制
.defaultSystem("""
# 角色
你是智能航空客服助手
## 要求
"严禁随意补全或猜测工具调用参数。
参数如缺失或语义不准,请不要补充或随意传递,请直接放弃本次工具调用。"
""")
.build();
String content = chatClient.prompt()
.user(message)
.tools(toolService)//用 .tools() 替代 defaultTools()
.call()
.content();

System.out.println(content);
return content;
}
   
}



5、
5.1

  http://localhost:18081/openai/simple/tool3?message=退票,男,6465

image

 

5.2
http://localhost:18081/openai/simple/tool3?message=退票,6465

image

 

image

 

 
5.3
http://localhost:18081/openai/simple/tool3?message=退票,身高,6465


系统Prompt设定限制

image

 

image

 

image

 

image

 





posted on 2026-05-21 16:54  cn2025  阅读(2)  评论(0)    收藏  举报