个人随笔
目录
SpringAI2.0工具调用的简单使用
2026-11-03 22:15:59

工具调用——即AI模型调用应用程序定义的函数并根据其结果采取行动的能力——是智能体型AI系统的核心构建模块。只能生成文本的模型只是聊天机器人;而能够发现信息、采取行动并循环执行直至达成目标的模型才是智能体。

一、目的

工具主要用于两个广泛的目的:

  • 信息检索——通过数据库、网络服务、文件系统或搜索引擎中的数据来扩充模型的知识。示例:获取当前天气、查询客户记录、查阅最新新闻。
  • 采取行动— 在您的系统中执行操作。示例:发送电子邮件、预订航班、更新记录、触发工作流

二、简单例子

1、定义工具

  1. public class MyTools {
  2. @Tool(description = "获取当前的时间,")
  3. String getCurrentDateTime() {
  4. return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();
  5. }
  6. }

2、使用工具

  1. @GetMapping("/ask6")
  2. public String ask6(String topic){
  3. String result = openaiChatClient
  4. .prompt()
  5. .user(u -> u.text("{topic}").param("topic",topic))
  6. .tools(new MyTools())
  7. .call()
  8. .content();
  9. return result;
  10. }

这样请求的时候看日志就会发送进行了多轮请求,大模型发现需要调用工具然后把调用工具的内容要求返回给springAI,springAI通过模型给的参数对工具进行调用再将结果返回给大模型。

三、补充

为啥在日志里面没有看到SpringAI将工具发送给大模型的日志?

springAI 默认不会打印【发给模型的 function /tools schema 报文】,你看到的 SimpleLoggerAdvisor 只打印组装好的 Prompt 消息列表(messages),工具定义(functions)不属于 Message,不在 messages 里面,所以这个日志看不到工具描述、schema。

把 functions 塞到 ChatOptions(也就是你日志里的 OpenAiChatOptions@b45af8c8)
传给大模型的完整请求体结构是这样(OpenAI 协议)

  1. {
  2. "messages": [ ... ],
  3. "tools": [
  4. {
  5. "type": "function",
  6. "function": {
  7. "name": "getCurrentDateTime",
  8. "description": "获取当前的时间",
  9. "parameters": { "type":"object","properties":{} }
  10. }
  11. }
  12. ]
  13. }
 2

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2