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//原有订单处理的serviceprivate 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)
@Autowiredprivate DashScopeChatModel dashScopeChatModel;@Autowired//基于内存的的对话记忆private ChatMemory chatMemory;@Autowiredprivate 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;}