Tool Calling
约 618 字大约 2 分钟
2025-10-26
概述
工具调用(Tool Calling)或函数调用允许大语言模型在必要时调用一个或多个可用的工具,这些工具通常由开发者定义。工具可以是任何东西:网页搜索、对外部API的调用,或特定代码的执行等。
,然后由应用程序执行这个工具,并报告工具执行的结果给模型。当LLM可以访问工具时,它可以在合适的情况下调用其中一个工具,这是一个非常强大的功能。Tool Callig(也称为Function Calling)它允许大模型与一组API或工具进行交互,将LLM的智能与外部工具或API无缝衔接,从而增强大模型其功能。
如下图所示,为Tool Calling的调用过程

应用场景
- 访问实时数据,例如天气数据、金融数据等;
- 执行某种工具类/辅助类操作,例如发送邮件、查询数据库然后生成Excel文件等;
开发步骤
1️⃣创建工具类
public class DateTimeTool {
/**
* description:表示工具类的详细描述
* returnDirect = true:表示直接返回,工具调用的结果不需要再返回给大模型进行解析
* returnDirect = false:表示将结果返回给大模型,由大模型加工后再返回给用户
* @description 获取当前时间工具类
*/
@Tool(description = "获取当前时间", returnDirect = false)
public String getCurrentTime() {
return LocalDateTime.now().toString();
}
}2️⃣创建测试代码
基于ChatClient的调用方式:
@GetMapping("/template10")
public Flux<String> template10(@RequestParam("message") String message) {
return chatClient.prompt().user(message)
.tools(new DateTimeTool())
.stream().content();
}基于ChatModel的调用方式:
/**
* @param message
* @description http://localhost:8854/chat/template10?message=请告诉我当前时间
*/
@GetMapping("/template10")
public String template10(@RequestParam("message") String message) {
ToolCallback[] tools = ToolCallbacks.from(new DateTimeTool());
ToolCallingChatOptions toolCallingChatOptions = ToolCallingChatOptions.builder().toolCallbacks(tools).build();
Prompt prompt = new Prompt(message, toolCallingChatOptions);
return chatModel.call(prompt).getResult().getOutput().getText();
}3️⃣测试代码
我们先不添加Tool Calling调用的方式,询问大模型当前的时间:

可以看到大模型的返回的就结果肯定不是实时的。
然后,我们再添加Tool Calling的调用方式,询问大模型当前的时间:

此时可以看到,时间是实时的。