当前位置: 首页 > news >正文

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;}

效果展示

在这里插入图片描述

http://www.lryc.cn/news/615840.html

相关文章:

  • 基于VuePress2开发文档自部署及嵌入VUE项目
  • vue如何监听localstorage
  • Vue 3 快速入门 第五章
  • vue2升级vue3:单文件组件概述 及常用api
  • Vue.js设计于实现 - 响应式(三)
  • (LeetCode 面试经典 150 题) 104. 二叉树的最大深度 (深度优先搜索dfs)
  • 深入解析微服务分布式事务的原理与优化实践
  • 双非二本如何找工作?
  • CPP继承
  • 40.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--初始化网关
  • 【递归、搜索与回溯算法】递归算法
  • 【前端基础】14、CSS设置背景(background相关的)
  • Unity中实现自动寻路
  • 串口通信初始化过程是怎样的???
  • 每日五个pyecharts可视化图表-line:从入门到精通 (2)
  • go语言运算符
  • H3C(基于Comware操作系统)与eNSP平台(模拟华为VRP操作系统)的命令差异
  • GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  • 【递归、搜索与回溯算法】深度优先搜索
  • python Flask简单图书管理 API
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • Lua基础+Lua数据类型
  • Hadoop MapReduce过程
  • nginx+Lua环境集成、nginx+Lua应用
  • 分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题
  • leetcode2379:得到K个黑块的最少涂色次数(定长滑动窗口)
  • Boost.Asio io_service 与 线程 的分析
  • 字节:计算机存储单位
  • 算术运算符指南