欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > SpringAI 函数工具调用

SpringAI 函数工具调用

2025/6/25 0:54:35 来源:https://blog.csdn.net/qq_37400096/article/details/148597924  浏览:    关键词:SpringAI 函数工具调用

工具调用

工具调用(也称为函数调用)是 AI 应用中的一种常见模式,允许模型与一组 API 或工具交互,增强其功能。

工具调用作用:

  • 信息检索

    此类工具可用于从外部来源检索信息,例如数据库、网络服务、文件系统或网络搜索引擎。目标是增强模型的知识,使其能够回答它原本无法回答的问题。因此,它们可以在检索增强生成(RAG)场景中使用。例如,可以使用工具检索特定位置的当前天气、检索最新的新闻文章或查询数据库中的特定记录。

  • 执行操作

    例如发送电子邮件、在数据库中创建新记录、提交表单或触发工作流。目标是自动化原本需要人工干预或明确编程的任务。例如,可以使用工具为与聊天机器人互动的客户预订航班、填写网页上的表单,或在代码生成场景中根据自动化测试(TDD)实现 Java 类。

工具调用链路
工具调用链路

example

@RestController
publicclass ToolController {@AutowiredChatClient chatClient;@GetMapping("/toolcall")public String toolCall(@RequestParam("msg") String msg){String response = chatClient.prompt(msg)//.tools(new DateTimeTools()).call().content();return response;}}

不加工具调用情况下:

自定义获取日期的函数:

public class DateTimeTools {@Tool(description = "今天是几号以及时间的时区")String getCurrentDateTime() {String response=  LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();System.out.println("getCurrentDateTime:"+response);return response;}
}

自定义发送邮件函数工具

@Tool(description = "发送邮件")String SendEmail(String mailText) {// 邮箱配置信息(替换为实际值)String host = "smtp.163.com";       // SMTP服务器String username = "from@163.com"; // 邮箱账号String password = "授权码";      // 邮箱授权码(非登录密码!)String toAddress = "to@163.com"; // 收件人// 邮件属性配置Properties props = new Properties();props.put("mail.smtp.host", host);props.put("mail.smtp.port", "465"); // SSL端口props.put("mail.smtp.auth", "true"); // 需要认证props.put("mail.smtp.ssl.enable", "true"); // 启用SSLprops.put("mail.debug", "true"); // 调试模式(可选)// 创建会话Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {returnnew PasswordAuthentication(username, password);}});try {// 创建邮件Message message = new MimeMessage(session);message.setFrom(new InternetAddress(username)); // 发件人message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress)); // 收件人message.setSubject("SpringAI测试主题"); // 主题message.setText("SpringAI:"+mailText); // 纯文本内容// 发送邮件Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException e) {e.printStackTrace();System.err.println("邮件发送失败: " + e.getMessage());}return"发送邮件成功";}

function作为tool进行调用

定义一个function

public class WeatherService  implements Function<WeatherRequest,WeatherResponse> {public WeatherResponse apply(WeatherRequest request) {return new WeatherResponse(23.0, Unit.C);}
}
public enum Unit {C, F}
public record WeatherRequest(String location, Unit unit) {}
public record WeatherResponse(double temp, Unit unit) {}

定义toolcallback和调用

@GetMapping("/functionCall")public String functionCall(@RequestParam("msg") String msg){//定义toolCallbackToolCallback toolCallback = FunctionToolCallback.builder("currentWeather", new WeatherService()).description("获取当地的天气").inputType(WeatherRequest.class).build();//调用String response = chatClient.prompt(msg).tools(toolCallback) //调用函数.call().content();return response;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词