


















import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.ai.tool.definition.ToolDefinition;
import org.springframework.ai.tool.method.MethodToolCallback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method;
import java.util.List;@Service
public class ToolService {@Autowired
private TicketService ticketService;
//
// record cancelParam(String dsadsa,String fdasfda){}
//
// @Tool(description = "退票")
// public String cancel(cancelParam param) {
// ticketService.cancel(param.dsadsa(), param.fdasfda());
// return "退票成功!";
// }// record cancelParam(String mmmmmmmmmmqweqweqw,String oooooooooodsfsdds){}
//
// // @Tool告诉大模型提供了什么工具
// @Tool(description = "根据订单号和乘客姓名办理机票退票业务,退票成功后会返还票款")
// public String cancel(
// //@ToolParam告诉大模型参数描述
// cancelParam param) {
// //先查询--->先校验
// ticketService.cancel(param.mmmmmmmmmmqweqweqw(), param.oooooooooodsfsdds());
// return "退票成功!";
// }//record cancelParam(String ticketNumber,String name){}
// @Tool告诉大模型提供了什么工具
// @Tool(description = "退票")
// public String cancel(
// //@ToolParam告诉大模型参数描述
// cancelParam param) {
// //先查询--->先校验
// ticketService.cancel(param.ticketNumber(), param.name());
// return "退票成功!";
// }// @Tool(description = "退票")
// public String cancel(
// //@TooLParam告诉大模型参数的描述 加严参数描述与校验
// @ToolParam(description = "预定号,可以是纯数字") String ticketNumber,
// @ToolParam(description = "真实人名(必填,必须为人的真实姓名,严禁用其他信息代替如缺失请传null)") String name) {
// // 后端代码加强校验和兜底保护
// //先查询--->先校验
// ticketService.cancel(ticketNumber, name);
// return "退票成功!";
// }record cancelParam(String ticketNumber,String name){}
// @Tool告诉大模型提供了什么工具
@Tool(description = "退票")
@PreAuthorize("hasRole('ADMIN')")
public String cancel(
//@TooLParam告诉大模型参数的描述 加严参数描述与校验
@ToolParam(description = "预定号,可以是纯数字") String ticketNumber,
@ToolParam(description = "真实人名(必填,必须为人的真实姓名,严禁用其他信息代替如缺失请传null)") String name) {
// 后端代码加强校验和兜底保护
// 获取当前登录用户信息
String username = SecurityContextHolder.getContext()
.getAuthentication()
.getName();
//先查询--->先校验
ticketService.cancel(ticketNumber, name);
return username + "退票成功!";
}@Tool(description = "获取指定位置的天气,根据位置自动推算经纬度")
public String getAirQuality(
@ToolParam(description = "纬度") double latitude,
@ToolParam(description = "经度") double longitude) {
return "天晴";
}/**
* 模拟从数据库中动态根据当前用户角色读取tooLs
* @param toolService
* @return
*/
public List<ToolCallback> getToolCallList(ToolService toolService) {
//1.获取tools处理的方法
Method method = ReflectionUtils.findMethod(ToolService.class,
"cancel", String.class, String.class);
//2.构建Tool定义信息 动态配置的方式@Tool @Toop
ToolDefinition build = ToolDefinition.builder()
.name("cancel")
.description("退票")
//对应@ToolParam
.inputSchema("""
{
"type": "object",
"properties": {
"ticketNumber": {
"type": "string",
"description": "预定号,可以是纯数字"
},
"name": {
"type": "string",
"description": "真实人名"
}
},
"required": ["ticketNumber", "name"]
}
""")
.build();
//一个Toolcallback对应一个tool
ToolCallback toolCallback = MethodToolCallback.builder()
.toolDefinition(build)
.toolMethod(method)
.toolObject(toolService) // 不能自己new,自己new不能解析依赖注
.build();
return List.of(toolCallback);}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。