AI辅助开发新体验:用快马平台生成基于Spring AI函数调用的智能工具集成示例
最近在尝试将AI能力集成到自己的应用中,发现Spring AI这个框架挺有意思的。它提供了一套标准化的方式,让Java开发者能轻松地把各种大模型的能力“搬”到自己的Spring Boot项目里。特别是它的“函数调用”功能,能让AI模型不再只是“纸上谈兵”,而是可以真正调用我们写好的工具函数,完成一些具体的任务,比如查天气、查股票、操作数据库等等。
这次我就想动手实践一下,用Spring AI的函数调用功能,做一个简单的智能天气查询助手。核心思路是:我写一个模拟查询天气的工具函数,然后通过Spring AI的机制告诉AI模型“你有这个能力”。当用户问“北京天气怎么样”时,AI模型会识别出用户的意图,自动调用我写的那个工具函数,拿到结果后,再组织成一段通顺的回复返回给用户。
听起来是不是有点像让AI拥有了“手”和“脚”?下面我就把整个从零搭建这个示例项目的思路和关键步骤梳理一下,算是一份学习笔记。
项目初始化与核心依赖首先,得有一个Spring Boot项目。现在用Spring Initializr或者IDE的创建向导都很方便。关键是要引入正确的依赖。对于Spring AI项目,核心依赖是
spring-ai-openai-spring-boot-starter(如果你用的是OpenAI的接口)或者对应其他模型提供商的starter。由于我们要用到函数调用功能,还需要确保引入的Spring AI版本是支持此特性的。通常,在pom.xml文件中声明好这些依赖,构建工具就会帮我们处理好一切。配置模型连接参数接下来,需要在
application.yml或application.properties配置文件中,设置AI模型的连接信息。这包括API的基础地址(比如OpenAI的或国内某个大模型的兼容接口地址)以及至关重要的API Key。Spring AI的配置非常简洁,基本上几行配置就能完成到AI服务的连接,省去了自己构造HTTP客户端、处理认证等繁琐步骤。定义“工具” - 天气查询函数这是整个示例的核心。我们需要创建一个工具函数。这里为了演示,我们不连接真实的天气API,而是模拟一个。我会创建一个Java类,比如叫
WeatherService,在里面定义一个方法,例如getCurrentWeather。这个方法接收一个城市名作为参数,然后返回一个模拟的天气信息字符串,比如“北京:晴,15-25摄氏度,微风”。 光定义方法还不够,需要让Spring AI知道这是一个可以被AI调用的“工具”。这里就用到了Spring AI的@Tool注解。把这个注解加到方法上,Spring AI在启动时就会自动发现并注册它。注解里还可以用description属性详细描述这个工具是干什么的,以及用@P注解来明确方法参数的描述,这些描述对于AI模型理解何时、如何调用这个工具至关重要。创建AI对话服务工具准备好了,下一步就是创建一个服务来驱动对话。我会创建一个
ChatService,里面注入Spring AI提供的ChatClient。这个ChatClient是对AI模型对话能力的封装。在服务方法里,我可以设定一个系统提示词,比如“你是一个天气助手,请根据工具查询的结果回答用户问题”。然后,将用户的提问(例如“北京天气如何?”)和注册好的工具信息一起发送给ChatClient。 Spring AI的智能之处就在这里:ChatClient在收到用户消息和可用的工具列表后,会请求AI模型进行推理。模型会判断当前对话是否需要调用工具。如果需要,它不会直接生成最终答案,而是会返回一个特殊的响应,指示应该调用哪个工具、传入什么参数。我们的服务代码需要能处理这种“工具调用请求”,然后去执行对应的工具函数(也就是我们刚才写的getCurrentWeather)。处理工具调用与组织最终回复当服务代码接收到AI模型的工具调用指令后,它会根据指令找到对应的工具方法并执行,获取到工具的执行结果(比如我们模拟的天气字符串)。然后,关键的一步来了:需要把这个工具执行的结果,作为新的消息再次发送给AI模型。通常,这是一条以“工具”身份发送的消息,内容是工具返回的结果。AI模型在收到这个结果后,会结合最初的用户问题和这个新的事实信息,生成一段完整、自然的最终回复,例如“根据查询,北京目前的天气是晴天,气温在15到25摄氏度之间,伴有微风,是个外出的好天气。”。最后,我们的服务将这个最终回复返回给用户。
编写测试用例验证流程功能写完了,一定要测试。我会写一个Spring Boot的集成测试。在测试类中,注入刚才创建的
ChatService,然后模拟用户调用它的对话方法,传入“查询北京天气”的请求。断言返回的字符串中应该包含我们模拟的天气信息(比如“15-25摄氏度”),并且整体回复是通顺的。这个测试能确保从用户提问,到AI识别意图、触发函数调用、执行本地代码、AI整合结果并回复的整个闭环是畅通无阻的。
通过上面这六步,一个基于Spring AI函数调用的智能工具集成示例就完成了。整个过程下来,最大的感受是Spring AI确实大幅降低了在Java应用中嵌入AI能力的门槛。它把复杂的模型交互、函数调用调度、上下文管理都封装成了简单的注解和API调用,让我们可以更专注于业务逻辑(也就是工具函数本身)和提示词工程。
做完这个Demo,我就在想,如果有一个平台能连项目初始化、依赖配置、示例代码生成这些步骤都进一步简化,甚至用AI来辅助完成,那该多好。没想到,还真让我找到了一个挺有意思的平台——InsCode(快马)平台。
我在想实现上面这个Spring AI函数调用示例时,就直接在InsCode(快马)平台的输入框里描述了我的想法:“创建一个Spring Boot项目,使用Spring AI的函数调用功能,实现一个能查询模拟天气的AI助手”。很快,它就为我生成了一个结构清晰、可直接运行的项目代码,包含了正确的依赖、配置示例、工具类和服务类的骨架代码,甚至还有简单的注释。这比我从头开始创建项目、搜索依赖、编写基础代码要快多了,尤其是不用担心依赖版本冲突这类琐碎问题。
更让我惊喜的是它的运行和部署体验。因为这个项目是一个标准的Spring Boot Web应用,启动后会持续运行一个服务端。在InsCode(快马)平台里,我基本上点一下“运行”按钮,它就在云端帮我把环境配好、服务跑起来了。我还能直接在一个模拟的浏览器窗口里看到效果,或者通过提供的接口地址进行测试,整个过程非常流畅。
对于想快速体验、学习或者演示一个像Spring AI集成这样的后端项目来说,这种无需配置本地Java环境、数据库,一键就能看到运行结果的方式,确实省心。它把AI辅助生成代码和云端的开箱即用运行环境结合了起来,让我这种更关注逻辑和效果的开发者,能更快地把想法变成可交互的实例。如果你也对AI应用开发感兴趣,但又不想在环境配置上花费太多时间,不妨试试用这种方式来快速启动你的下一个实验项目。
