SpringAi 经过大模型来实现调用自己的Api
前言
在大模型应用开发中,仅依靠模型自身的知识库往往无法满足实际业务需求。通过 Tools 工具将自定义方法暴露给大模型调用,能够让 AI 具备操作业务系统、查询实时数据的能力,实现 “认知 - 决策 - 执行” 的完整闭环。本文将详细讲解如何基于 Spring AI 的 Tools 机制实现这一功能,包含从环境搭建到实际调用的全流程。
实现步骤
1.其实实现起来并不难,先构造出大模型(需要集成会话记忆),当然要选择支持tool的大模型,使用@Tool和@ToolParam就可以实现,用一个关闭和查询订单的案例讲一下
- @Tool注解告诉大模型提供了哪些工具,可以理解为用户发来的消息可以触发description中的关键词。@Tool-> description中的描述越详细越好
- @ToolParam可以理解调用这些工具需要用到哪些参数,参数名要有实际意义,像String a,Integer b,大模型是无法理解的,@ToolParam-> description中的描述越详细越好,当然实际业务中的参数校验是必不可少的
@Service
public class OrderToolService
{
@Autowired
//原有订单处理的service
private OrderService orderService;
@Tool(description = "关闭订单")
public String cancelOrder(@ToolParam(description = "订单id") String orderId,
@ToolParam(description = "用户名称") String userName) {
return orderService.cancelOrder(orderId, userName);
}
@Tool(description = "查询订单")
public List<
Order> selectOrder(@ToolParam(description = "用户名称") String userName) {
return orderService.selectOrder(userName);
}
}
2.只需要在ChatClient中把对应的实现类传递进来就可以了,chatClient .defaultTools(orderToolService)
@Autowired
private DashScopeChatModel dashScopeChatModel;
@Autowired
//基于内存的的对话记忆
private ChatMemory chatMemory;
@Autowired
private OrderToolService orderToolService;
@GetMapping("/co")
public String cancelOrder(String msg) {
System.out.println("提示词:"+msg);
ChatClient chatClient = ChatClient.builder(dashScopeChatModel)
//构建会话记忆
.defaultAdvisors(PromptChatMemoryAdvisor.builder(chatMemory).build())
//告诉大模型提供了哪些个类可以供大模型调用
.defaultTools(orderToolService)
.build();
String content = chatClient.prompt().user(msg).call().content();
System.out.println("回复:"+content);
return content;
}