当前位置: 首页 > 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.dtcms.com/a/324054.html

相关文章:

  • 复现论文《基于深度强化学习的微能源网能量管理与优化策略研究》
  • 创建降阶模型用于搅拌槽中的涡流预测
  • nestjs官网推荐typeorm而不是prisma的原因
  • 第十六讲:AVL树和红黑树
  • MySQL的隔离级别及MVCC原理解析
  • AutoGPT与AgentGPT引领自动化革命
  • openresty-lua-redis案例
  • 无须炮解,打开即是Pro版
  • 商业银行元宇宙布局现状及未来图景三维思考
  • 基于BP神经网络PID控制的电机转速控制器设计复现
  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • Shell脚本-变量的定义方式有哪些
  • TF-IDF提取关键词(附实战案例)
  • ​LabVIEW键盘鼠标监控
  • Python 2025:最新技术趋势与展望
  • [激光原理与应用-223]:机械 - 机加厂加工机械需要2D还是3D图?
  • 红楼梦文本数据分析
  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • 诺基亚就4G/5G相关专利起诉吉利对中国汽车及蜂窝模组企业的影响
  • (一)Tailwindcss
  • 【开源】分层状态机(HFSM)解析:复杂逻辑的清晰表达与FPGA实现(附完整的Verilog交通灯案例及仿真)
  • Loki+Alloy+Grafana构建轻量级的日志分析系统
  • aurora接口ufc控流设计
  • Rust面试题及详细答案120道(11-18)-- 控制流与函数
  • Docker 镜像常见标签(如 `标准`、`slim`、`alpine` 和 `noble`)详细对比
  • 利用 SD-WAN 技术优化机房运维与网络安全评估的最佳实践
  • 2025下半年AI技术热点全景透视:从多模态革命到具身智能爆发
  • SpringMVC的知识点总结
  • Microsoft Store​​ 总是打不开页面怎么办
  • LeetCode131~150题解