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

Spring AI(六)Tool Calling本地回调方法

关于Tool Calling应该有很多解释,我这里就不赘述了。说说我的理解把,主要就是两个方面的用途:

1、当想使用私有数据回答的时候,可以使用这个。

2、提供数据给LLM进行定向回答或者优化答案的时候,可以用这个。

举个例子:

快递查询这种数据,基本上都不会喂给LLM,那我们想通过LLM查询快递信息就可以用这种方式实现。

第一步构建一个工具类。

在方法层面上增加@Tool的注解。

这个注解有两个常用属性。

description:简单就是提问的大概的描述。
returnDirect:是否直接返回结果,默认是false,也就是说会吧内容返回给LLM进行加工组合之后返回。
public class KuaiDiQueryTools {@Tool(description = "Please help me check the logistics information for the logistics tracking number ")public String getKuaiDiQuery(@ToolParam(description = "logistics tracking number,such as YT196807550996") String logisticsTrackingNumber){return "已发货\n" +"09-11 14:09正在安排圆通快递揽收\n" +"仓库处理中\n" +"09-11 14:02已打印快递单\n" +"09-11 13:57已出库\n" +"商家备货中\n" +"09-11 13:23已下单,商家正在安排配货";}
}
@ToolParam 是加到参数上面的,这个就是有些变量参数的时候用到。比如我们查询物流需要提供物流单号一样。同样需要指定description,用来做参数说明和举例。
    @GetMapping("/chat/steam")public Flux<String> chatStream(String msg, HttpServletResponse response){response.setCharacterEncoding("UTF-8");return chatClient.prompt(msg).tools(new KuaiDiQueryTools()).stream().content();}

使用其实比较简单,就是在聊天的时候指定就行。或者在chatClient的时候的使用defaultTools指定。

如果不需要LLM进行处理直接返回

    @Tool(description = "Please help me check the logistics information for the logistics tracking number ",returnDirect = true)

多个tool calling

新增一个tool

public class BaiduMapTools {@Tool(description = "Help me plan the route from the departure point to the destination ")public String getLine(@ToolParam(description = "departure point,such as beijing") String departurePoint,@ToolParam(description = "destination,such as shanghai") String destination){return "自驾出行";}
}
    /*** 流式返回* @param msg* @param response* @return*/@GetMapping("/chat/steam")public Flux<String> chatStream(String msg, HttpServletResponse response){response.setCharacterEncoding("UTF-8");return chatClient.prompt(msg).tools(new KuaiDiQueryTools()).tools(new BaiduMapTools()).stream().content();}

但是如果我想让回答按我指定的内容,不走LLM的话,就会出现只有一个tool返回的情况,如果单独只指定一个tool的

returnDirect = true

又发现没啥效果。

其实我期望输出的是,自驾出行+我自定义的物流信息。但是貌似除了两次对话,没有太好的别的方法

http://www.dtcms.com/a/393194.html

相关文章:

  • 《2511系统分析师第二遍阅读总结3》
  • 【Linux】系统部分——线程同步与生产者消费者模型
  • No008:共建产业知识生态——DeepSeek如何助力中小企业数字化转型
  • 3.8 开发环境 - IntelliJ IDEA
  • Paimon系列:IDEA环境读写Paimon表
  • Java进阶教程,全面剖析Java多线程编程,插入线程,笔记10
  • 成品油加油站综合服务智慧监管平台! “智控油站,计量秒核查” + “数治加油,科技防猫腻”
  • C++编程学习(第34天)
  • 【数据结构与算法Trip第5站】动态规划
  • 防抖那些事儿
  • 【办公类-115-01】20250920信息员每周通讯上传之文字稿整理
  • 深入解析HotSpot解释器方法调用机制:从invokevirtual到方法入口
  • 用AI修复失语者的声音:大模型如何帮助渐冻人重新“说话”?
  • 【ICCV 2023】通过学习采样来学习上采样
  • 有效解决舍入误差的方法
  • count down 90 days
  • GEO完全指南 AI时代的内容优化新范式
  • Npass gate transistor是什么器件?
  • TensorRT-LLM中的in-flight batching(IFB)
  • kaggle-NeurIPS - Open Polymer Prediction 2025-0.069
  • Linux基础网络命令
  • CTFHub 密码口令通关笔记:默认密码
  • IPv6 网络连接与 “v6ns“ 测试失败解决方案
  • C++11之move移动语义
  • 【计算机三级备考】真题总结
  • Linux基础指令(上)
  • Protocol Buffers .NET 运行时从核心 API 到工程实战
  • DFT教程 part1 VASP安装与学习推荐
  • 泛函 Φ(u) 驻点所满足的偏微分方程与自然边界条件
  • 基于springboot的健康饮食营养管理系统