资讯动态

Java AI转型实战(六):Function Calling,让AI能动手干活

发布时间:2026/8/25 14:10:32 来源:尧图企业网站定制
从“只会说”到“能干活”AI自动调用你的Java方法01 引子前几篇文章我们让AI能够对话、能够记住上下文、能够流式输出。但仔细想想这些能力都还停留在“聊天”层面。AI只能“说”不能“做”。比如用户问“现在几点了”“北京今天天气怎么样”“帮我查一下数据库里有多少订单”以前AI只能回答“我无法获取实时信息”或者“请你自己去看”。体验非常割裂——用户明明在和一个“智能体”对话但得到的却是“人工智障”般的回复。这一篇的目标让AI能主动调用你写的Java方法真正动手干活。02 什么是 Function Calling一句话概括Function Calling 是让大模型在对话过程中自动识别用户意图并调用你预先注册的Java方法Tool的能力。没有 Function Calling 时用户现在几点了 AI抱歉我无法获取实时时间信息。有 Function Calling 时用户现在几点了 AI自动调用 getCurrentTime() 方法 现在是2026年08月21日 14:30:25。03 原理AI是怎么知道该调哪个方法的很多人会误以为AI“聪明到”能直接执行Java代码。实际上整个过程是这样的用户提问 → AI理解意图 → 匹配Tool描述 → 返回调用指令 → Spring AI执行Java方法 → 返回结果 → AI组织回复关键点你注册Tool时会写一段description告诉AI这个方法是干什么的AI不会真的执行代码它只是根据description和用户问题判断“该不该调用”然后返回一个结构化的调用指令包含方法名和参数真正干活的是Spring AI它收到调用指令后通过反射执行你写的Java方法AI拿到结果后再把它转成自然语言回复用户所以AI本质上是个“调度员”而不是“执行者”。04 代码实现第一步写一个无参数的Tool获取当前时间在com.example.myai.tool包下创建TimeTool.java关键点Component让Spring管理这个BeanTool(description ...)这是AI判断是否调用该方法的唯一依据描述越清晰AI判断越准确第二步写一个带参数的Tool查询天气创建WeatherTool.java关键点ToolParam(description ...)告诉AI每个参数的含义让AI能正确从用户问题中提取参数方法体内目前是模拟数据用来验证链路是否通畅第三步在Service中注册Tool修改AIService.java将Tool注册到ChatClient中关键改动构造函数中注入TimeTool和WeatherTool.defaultTools(timeTool, weatherTool)将Tool注册到ChatClient中一次注册所有方法同步和流式都能使用05 测试验证启动项目在浏览器或Postman中测试。测试场景一无参数调用请求测试场景二带参数调用请求两个场景均成功AI能正确识别意图并调用对应的Java方法。06 特别说明为什么没有真实API也能返回天气细心的读者可能发现了WeatherTool里并没有调用任何真实的天气API而是直接返回了硬编码的模拟数据。但AI依然能“回答”北京的天气。这是怎么做到的实际上AI并不知道真实的天气。整个过程是AI识别出用户想查天气AI提取参数city北京AI通知Spring AI调用getWeather(北京)Spring AI执行你的Java方法返回硬编码的字符串城市: 北京, 天气: 晴, 温度: 28°C, 湿度: 60%AI把这个字符串“朗读”给你听所以AI只是在“复读”你后端返回的内容。如果要查询真实天气只需要替换getWeather方法体内的逻辑——调用第三方天气API如高德地图、和风天气解析JSON返回真实数据即可。这种“模拟测试”的价值在于它验证了整个链路是通的——AI能正确识别意图、正确提取参数、正确触发后端方法。下一步只需要替换数据源就能产生真正的业务价值。07 踩坑记录坑一description 必须清晰明确// ❌ 太模糊AI可能不会调用 Tool(description 获取时间) public String getCurrentTime() { ... } // ✅ 清晰明确AI更容易判断 Tool(description 获取当前系统时间包括年月日时分秒) public String getCurrentTime() { ... }坑二参数的 description 要具体// ❌ 太模糊AI可能提取不到正确的参数 ToolParam String city // ✅ 具体说明AI能更准确地提取 ToolParam(description 城市名称如北京、上海、深圳) String city坑三多个Tool时AI可能“选错”如果两个Tool的description过于相似AI可能会调用错误的那个。确保每个Tool的职责清晰、描述有区分度。08 下期预告目前AI返回的内容还是自然语言文本虽然可读性好但对程序来说难以处理。比如让AI“查询本月销售额”它可能会返回“根据最新数据本月销售额为1,280,000元比上月增长了12%。”这对人类来说很好但如果另一个程序想拿这个数字做后续计算就没办法了。下一篇我们学习Output Parser——让AI返回结构化的数据如JSON或Java对象方便程序直接处理。 我是超超不吵吵10年Java全栈正在转型AI应用开发。每周一篇实战笔记不贩卖焦虑只分享能落地的技术。全网同名欢迎关注。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价