Tool Calling

xiaojiuaigc@163.com 发布于 2025-07-27 145 次阅读


我们调用deepseek的api问目前是几月几号

回答的结果显然不对,原因是 AI 大语言模型本身是 “封闭” 的:

无法访问私有数据: 无法读取你的个人邮件、公司数据库等。

知识截止: 它们的训练数据有截止日期,无法获取实时信息(如最新天气、股价、新闻)。

缺乏执行能力: 它们无法直接执行操作(如发送邮件、查询数据库、控制智能家居)。

我们可以使用Function Call的功能来解决这个问题

AI 大模型中的 Function Call(函数调用), 它是一个极其重要的功能,它极大地扩展了大语言模型的能力边界,使其从单纯的文本生成器升级为能够感知、决策并操作外部世界的智能代理。

其优势与价值如下:

  1. 访问实时信息: 获取股票、天气、新闻、航班等最新数据。
  2. 操作外部系统: 发送邮件、创建日历事件、控制 IoT 设备、操作数据库。
  3. 执行精确计算/转换: 调用计算器、货币转换器等。
  4. 检索私有/专有数据: 连接企业内部数据库、知识库、CRM 系统。
  5. 增强可靠性: 将需要精确性的任务(如计算、数据查询)交给专门工具处理,减少模型“幻觉”。
  6. 构建智能代理(Agents): Function Call 是实现 AI Agent 自动规划和执行复杂任务序列(如“查天气-订机票-发通知”)的基础技术。
  7. 简化开发: 开发者只需定义好函数接口,模型能理解如何调用,无需复杂的自然语言解析。
  8. 提升用户体验: 用户可以用自然语言无缝触发复杂的后端操作。

Spring AI 中 Tool Calling 的处理流程

Spring AI 通过一套灵活的抽象机制支持工具调用 (Tool Calling),使您能够以一致的方式定义、解析和执行工具。

TIP: 在 Spring AI 框架中,Function Call 被称之为 Tool Calling

我们想让模型能够使用某个工具时,我们会在聊天请求中包含该工具的定义。每个工具定义包含一个名称(name)、一个描述(description)以及输入参数的模式(schema),处理流程如下:

  1. 模型调用: 调用 AI 大模型时,会将提示词以及可供使用的工具集,一同发送过去。由 AI 大模型决定是否需要调用某个工具,当需要时,它会反馈一个响应,其中包含工具名称以及依照定义的输入参数模式构建的输入参数。
  2. 执行工具: Spring AI 负责使用工具名称来识别对应的工具,并使用提供的输入参数执行该工具。
  3. 处理结果: Spring AI 处理工具调用的结果。
  4. 返回结果: Spring AI 将工具调用的结果发送回 AI 大模型。
  5. 模型生成最终响应: 模型利用工具调用的结果作为额外上下文,生成最终面向用户的响应。

为了解决大模型获取不到时间的问题我们可以定义一个tool

/**
* 日期tool
*/
@Slf4j
public class DateTimeTools {
@Tool(description = "获取当前的时间")
String getCurrentDateTime() {
return LocalDateTime.now().toString();
}
}
@Bean
public ChatClient chatClient(DeepSeekChatModel chatModel) {
return ChatClient.builder(chatModel)
// .defaultSystem("现在请你扮演小酒的客服")//为模型设定的角色
.defaultAdvisors(new SimpleLoggerAdvisor()//添加Spring AI的日志记录器
// ,new MyAdvisor()//添加自定义的日志记录器这个只有在非流式对话的情况下有用
, MessageChatMemoryAdvisor.builder(chatMemory).build()
)
.defaultTools(new DateTimeTools())
.build();
}

现在就能获取到当前时间了