一、Tools 原理大模型如何调用你的函数Tools工具以前也叫做function calling翻译过来叫做函数调用如果在我们的程序中添加了function calling功能那整个工作流程会发生一些改变我们简单的看一看。整个交互流程比纯文本生成要复杂一些但 LangChain4j 已经帮我们封装了绝大部分细节。理解下面的循环过程能让你更好地排查问题发送工具描述用户问题被发送给大模型同时携带一份“工具清单”——包括每个函数的名称、功能描述以及参数列表名称、类型、含义。这些信息来源于我们代码中的Tool和P注解。大模型决策大模型分析用户意图判断是否需要调用某个函数。如果需要它会返回一个结构化的响应指明要调用的函数名以及对应的参数值。AI 应用执行应用接收到调用指令后真正去执行这个 Java 方法比如操作数据库。结果反馈将函数的执行结果成功/失败信息、查询到的数据等再次发送给大模型。循环或结束大模型根据最新结果继续判断可能调用另一个函数也可能就此生成最终回答。这个循环会一直持续直到任务完成为止。简而言之大模型成了“大脑”你的业务函数成了“手脚”LangChain4j 则是负责协调的“神经系统”。二、快速实战为 AI 顾问增加预约功能假设我们的ReservationService已经封装好了数据库操作现在我们需要让大模型能够调用它来帮考生预约志愿填报服务。2.1 准备工具方法首先创建一个 Spring Bean并用Tool和P注解来描述方法。import com.itheima.consultant.pojo.Reservation; import com.itheima.consultant.service.ReservationService; import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; Component public class ReservationTool { Autowired private ReservationService reservationService; // 工具方法预约志愿填报服务 Tool(预约志愿填报服务) public void addReservation( P(考生姓名) String name, P(考生性别) String gender, P(考生手机号) String phone, P(预约沟通时间,格式为: yyyy-MM-ddTHH:mm) String communicationTime, P(考生所在省份) String province, P(考生预估分数) Integer estimatedScore ) { Reservation reservation new Reservation(null, name, gender, phone, LocalDateTime.parse(communicationTime), province, estimatedScore); reservationService.insert(reservation); } // 工具方法查询预约信息 Tool(根据考生手机号查询预约单) public Reservation findReservation(P(考生手机号) String phone) { return reservationService.findByPhone(phone); } }Tool放在方法上用字符串描述这个方法是干什么的。这个描述会被发给大模型务必清晰准确。P放在参数上说明这个参数代表什么比如“考生姓名”。LangChain4j 会把这些信息组织成 JSON Schema 发送给模型模型就能智能地从用户消息中提取出对应的值。2.2 在 AI 服务中配置工具工具类准备好后只需要在AiService注解的tools属性中指定 Bean 名称LangChain4j 就会自动将其纳入可调用工具列表。AiService( wiringMode AiServiceWiringMode.EXPLICIT, chatModel openAiChatModel, streamingChatModel openAiStreamingChatModel, chatMemoryProvider chatMemoryProvider, contentRetriever contentRetriever, // RAG 检索器 tools reservationTool // 新增工具配置 ) public interface ConsultantService { SystemMessage(fromResource system.txt) FluxString chat(MemoryId String memoryId, UserMessage String message); }就这样你的 AI 顾问瞬间就“长了手”。2.3 测试与日志观察启动应用后你可以这样测试用户你好我想预约一个志愿填报服务我姓张手机号是138xxxx明天下午3点有空我在浙江省预估分数650分。因为开启了会话记忆chatMemoryProvider模型会结合历史上下文一步步引导用户提供缺失的信息比如性别然后自动调用addReservation方法。在 IDEA 控制台中你会看到 LangChain4j 在发给大模型的请求中带上了tools参数里面清晰地列出了方法名、描述和参数信息。当模型决定调用时响应中会包含tool_callsLangChain4j 随即执行对应的 Java 方法并将结果再次发送。三、小结至此我们的 AI 志愿填报顾问已经从一个只会“回答”的聊天机器人升级成了能够查询最新数据RAG和操作业务系统Tools的智能助理。这两个能力组合起来便构成了智能体Agent的雏形。LangChain4j 将 Function Calling 的复杂度压缩到了几个注解之中让开发者可以专注于业务函数的实现而不必深究提示词工程和消息拼接的细节。掌握Tool和P的用法你就能轻松让大模型与任何 Java 服务交互。快打开 IDEA给你的 AI 应用也加上一双能干实事的“手”吧
* LangChain4j Tools 工具原理与实战
发布时间:2026/5/24 8:29:30
一、Tools 原理大模型如何调用你的函数Tools工具以前也叫做function calling翻译过来叫做函数调用如果在我们的程序中添加了function calling功能那整个工作流程会发生一些改变我们简单的看一看。整个交互流程比纯文本生成要复杂一些但 LangChain4j 已经帮我们封装了绝大部分细节。理解下面的循环过程能让你更好地排查问题发送工具描述用户问题被发送给大模型同时携带一份“工具清单”——包括每个函数的名称、功能描述以及参数列表名称、类型、含义。这些信息来源于我们代码中的Tool和P注解。大模型决策大模型分析用户意图判断是否需要调用某个函数。如果需要它会返回一个结构化的响应指明要调用的函数名以及对应的参数值。AI 应用执行应用接收到调用指令后真正去执行这个 Java 方法比如操作数据库。结果反馈将函数的执行结果成功/失败信息、查询到的数据等再次发送给大模型。循环或结束大模型根据最新结果继续判断可能调用另一个函数也可能就此生成最终回答。这个循环会一直持续直到任务完成为止。简而言之大模型成了“大脑”你的业务函数成了“手脚”LangChain4j 则是负责协调的“神经系统”。二、快速实战为 AI 顾问增加预约功能假设我们的ReservationService已经封装好了数据库操作现在我们需要让大模型能够调用它来帮考生预约志愿填报服务。2.1 准备工具方法首先创建一个 Spring Bean并用Tool和P注解来描述方法。import com.itheima.consultant.pojo.Reservation; import com.itheima.consultant.service.ReservationService; import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; Component public class ReservationTool { Autowired private ReservationService reservationService; // 工具方法预约志愿填报服务 Tool(预约志愿填报服务) public void addReservation( P(考生姓名) String name, P(考生性别) String gender, P(考生手机号) String phone, P(预约沟通时间,格式为: yyyy-MM-ddTHH:mm) String communicationTime, P(考生所在省份) String province, P(考生预估分数) Integer estimatedScore ) { Reservation reservation new Reservation(null, name, gender, phone, LocalDateTime.parse(communicationTime), province, estimatedScore); reservationService.insert(reservation); } // 工具方法查询预约信息 Tool(根据考生手机号查询预约单) public Reservation findReservation(P(考生手机号) String phone) { return reservationService.findByPhone(phone); } }Tool放在方法上用字符串描述这个方法是干什么的。这个描述会被发给大模型务必清晰准确。P放在参数上说明这个参数代表什么比如“考生姓名”。LangChain4j 会把这些信息组织成 JSON Schema 发送给模型模型就能智能地从用户消息中提取出对应的值。2.2 在 AI 服务中配置工具工具类准备好后只需要在AiService注解的tools属性中指定 Bean 名称LangChain4j 就会自动将其纳入可调用工具列表。AiService( wiringMode AiServiceWiringMode.EXPLICIT, chatModel openAiChatModel, streamingChatModel openAiStreamingChatModel, chatMemoryProvider chatMemoryProvider, contentRetriever contentRetriever, // RAG 检索器 tools reservationTool // 新增工具配置 ) public interface ConsultantService { SystemMessage(fromResource system.txt) FluxString chat(MemoryId String memoryId, UserMessage String message); }就这样你的 AI 顾问瞬间就“长了手”。2.3 测试与日志观察启动应用后你可以这样测试用户你好我想预约一个志愿填报服务我姓张手机号是138xxxx明天下午3点有空我在浙江省预估分数650分。因为开启了会话记忆chatMemoryProvider模型会结合历史上下文一步步引导用户提供缺失的信息比如性别然后自动调用addReservation方法。在 IDEA 控制台中你会看到 LangChain4j 在发给大模型的请求中带上了tools参数里面清晰地列出了方法名、描述和参数信息。当模型决定调用时响应中会包含tool_callsLangChain4j 随即执行对应的 Java 方法并将结果再次发送。三、小结至此我们的 AI 志愿填报顾问已经从一个只会“回答”的聊天机器人升级成了能够查询最新数据RAG和操作业务系统Tools的智能助理。这两个能力组合起来便构成了智能体Agent的雏形。LangChain4j 将 Function Calling 的复杂度压缩到了几个注解之中让开发者可以专注于业务函数的实现而不必深究提示词工程和消息拼接的细节。掌握Tool和P的用法你就能轻松让大模型与任何 Java 服务交互。快打开 IDEA给你的 AI 应用也加上一双能干实事的“手”吧