Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性

简介: Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性

概述




Cloud Native

随着 LLM(大语言模型)基础技术的不断成熟和应用领域的广泛挖掘,越来越多的企业和开发者开始将 LLM 技术集成到自己的互联网服务架构中,市场上涌现出了一大批基于 LLM 技术搭建的爆款应用。Python 语言受益于其丰富的框架和社区生态,成为了众多开发者搭建这些 AI 应用时的第一选择。但随着 AI 应用架构日益成熟,吞吐量、访问性能、可扩展性、微服务生态等重要指标也成为众多开发者和运维人员关注的焦点。恰好,经历了互联网时代考验的 Java 语言在这些方面已经有了很成熟的解决方案和生态。那么,使用 Java 语言能否也像 Python 一样快速搭建出来 AI 应用呢?

作为炙手可热的 Java 应用开发框架,Spring 给出了解决方案——Spring AI [1]。Spring AI 旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。以 Spring AI 为底座,Spring AI Alibaba 项目 [2] 引入了阿里云通义系列大模型的全面适配,带来了丰富的工具集和深度的云服务集成,让开发者数分钟就能搭建一个 AI 应用。在生成式 AI 应用中,可观测性也是一个非常重要的能力,它不仅可以应对应用本身的性能调优、错误追踪等常规问题,还能成为解决 AI 应用中成本控制、模型偏见、模型幻觉等问题的利器。Spring AI Alibaba 在 Spring AI 可观测性基础上进行了扩展,对通义系列大模型及阿里云工具集的可观测性进一步扩展,提供了更加细节的可观测能力。此外,阿里云应用实时监控服务(ARMS)原生集成了对 Spring AI 可观测性数据的支持,使用者无需修改业务代码,只需适当调整启动配置,就能获得全套的企业级可观测服务。

本文将基于 Spring AI Alibaba,借由通义千问提供的模型服务搭建一个简单的在线聊天 AI 应用,并借助 ARMS 完成对 AI 应用中调用过程的追踪和用量观测。

快速搭建 Spring AI 应用




Cloud Native

本节演示如何基于 Spring AI Alibaba 开发一个在线聊天 Agent 应用,并支持大模型调用本地函数来查询某城市某天的天气,可以在此处查看示例源码 [3]

1. 新建一个项目,在项目的 pom.xml 中引入 spring-ai-alibaba-starter 依赖:


<dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-starter</artifactId>  <version>1.0.0-M3.2</version></dependency>

2. 修改 application.yml,添加 dashscope 的 api key,请将 ${AI_DASHSCOPE_API_KEY} 替换为您通义大模型的 API Key,获取方式参见 [4]


spring:  application:    name: chatmodel-example
  ai:    dashscope:      api-key: ${AI_DASHSCOPE_API_KEY}

3. 编写聊天服务 Controller 类,/weather-service 基于客户的提示词查询天气:


@RestController@RequestMapping("/ai/func")public class FunctionCallingController {
  private final ChatClient chatClient;
  public FunctionCallingController(ChatClient.Builder chatClientBuilder) {    this.chatClient = chatClientBuilder.build();  }
  @GetMapping("/weather-service")  public String weatherService(String subject) {    return chatClient.prompt()      .function("getWeather", "根据城市查询天气", new MockWeatherService())      .user(subject)      .call()      .content();  }}

4. 编写 function 供大模型调用:


public class MockWeatherService implements Function<MockWeatherService.Request, Response> {  @Override  public Response apply(Request request) {    if (request.city().contains("杭州")) {      return new Response(String.format("%s%s晴转多云, 气温32摄氏度。", request.date(), request.city()));    }    else if (request.city().contains("上海")) {      return new Response(String.format("%s%s多云转阴, 气温31摄氏度。", request.date(), request.city()));    }    else {      return new Response(String.format("暂时无法查询%s的天气状况。", request.city()));    }  }
  @JsonInclude(JsonInclude.Include.NON_NULL)  @JsonClassDescription("根据日期和城市查询天气")  public record Request(      @JsonProperty(required = true, value = "city") @JsonPropertyDescription("城市, 比如杭州") String city,      @JsonProperty(required = true, value = "date") @JsonPropertyDescription("日期, 比如2024-08-22") String date) {  }}

5. 编写 Spring Boot 启动类:


@SpringBootApplicationpublic class FunctionCallingExampleApplication {  public static void main(String[] args) {    SpringApplication.run(FunctionCallingExampleApplication.class, args);  }}

部署应用




Cloud Native

通过以上五步,我们的 AI Agent 应用已经可以正常部署,要集成可观测性并将数据上报到 ARMS,还需要做少量改动。

1. 修改 application.yml 文件,开启可观测性相关数据的开关,实际生产中可以按需开启:


spring:  ai:    chat:      client:        observations:          # 记录调用者输入的内容          include-input: true      observations:          # 记录大模型输出          include-completion: true          # 记录大模型提示词          include-prompt: true

2. 修改 pom.xml 文件,引入可观测性相关依赖:


<dependency>  <!-- spring 提供的可观测工具包,用于初始化 micrometer 组件 -->  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-actuator</artifactId></dependency>
<dependency>  <!-- micrometer-opentelemetry 桥接器,用于将 micrometer 链路追踪代理到 opentelemetry -->  <groupId>io.micrometer</groupId>  <artifactId>micrometer-tracing-bridge-otel</artifactId></dependency>

3. 在 Spring Boot 启动类中调整 OpenTelemetrySdk 获取方式,改为直接从 GlobalOpenTelemetry 中获取(这一步是为了获取到 Java Agent 中的 sdk 实例,而 micrometer 默认行为是初始化一个新的 sdk 实例。)


@Beanpublic OpenTelemetry openTelemetry() {    return GlobalOpenTelemetry.get();}

4. 下载 Aliyun Java Agent 并在应用的启动脚本中添加以下三行,相关内容获取可以参考接入文档 [5],请将:${path-to-agent} 和 ${your-license-key} 分别替换为 Java Agent 的解压路径和从 ARMS 控制台获取到的 licenseKey:

如果您正在使用 K8s 部署您的应用,则不需要修改任何的启动命令,直接在您的集群安装 ack-onepilot,并为应用添加相关 label 即可,详情可参考文档 [6]。


-javaagent:/${path-to-agent}/aliyun-java-agent.jar-Darms.licenseKey=${your-license-key}-Darms.appName=spring-ai-alibaba-chat-demo

5. 启动应用并验证效果。

验证调用效果




Cloud Native

1. 在浏览器地址栏输入以下链接访问:


http://localhost:8080/ai/func/weather-service?subject=2024年8月12日杭州天气怎么样?

返回如下响应:


2024年8月12日,杭州的天气预报为晴转多云,气温32摄氏度。请做好防晒措施,并留意实际天气变化。

2. 登录 ARMS 控制台,找到 spring-ai-alibaba-chat-demo 应用查看对应调用链信息。

3. 查看某一条特定的 trace,可以看到用量信息及其他关键信息,如大模型调用的 response id、模型名称、temperature 等:

4. 单击右侧的 “Events”,可以查看到模型调用过程的输入输出信息:

展望




Cloud Native

截止到目前,Spring AI Alibaba 已经全面兼容 Spring AI 最新版本可观测能力,并为通义系列多模态大模型可观测性提供了支持。未来将围绕 VectorStore、Retrieve、Tool 等场景集成更加丰富的可观测性,并深度集成 ARMS 产品,提供更多维度的 AI 应用观测视图和总览大盘。如果您也对 Spring AI Alibaba 项目感兴趣,欢迎参与社区贡献!

社区链接:https://github.com/alibaba/spring-ai-alibaba

相关文章
|
11天前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
145 29
|
2天前
|
开发框架 人工智能 Java
破茧成蝶:传统J2EE应用无缝升级AI原生
本文探讨了技术挑战和解决方案,还提供了具体的实施步骤,旨在帮助企业顺利实现从传统应用到智能应用的过渡。
破茧成蝶:传统J2EE应用无缝升级AI原生
|
3天前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
|
12天前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
170 70
|
12天前
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
241 57
|
4天前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
56 20
|
2天前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
|
8天前
|
人工智能 搜索推荐 Java
【重磅】JeecgBoot 里程碑 v3.8.0 发布,支持 AI 大模型、应用、AI 流程编排和知识库
JeecgBoot 最新推出了一整套 AI 大模型功能,包括 AI 模型管理、AI 应用、知识库、AI 流程编排和 AI 对话助手。这标志着其转型为 “AI 低代码平台”,旨在帮助开发者快速构建和部署个性化 AI 应用,降低开发门槛,提升效率。
50 12
|
17天前
|
人工智能 自然语言处理 安全
大企业的AI应用如何更懂业务?
数字经济推动中国经济高质量发展,大型企业数字化转型至关重要。AI技术浪潮下,国资委提出“应用领航、数据赋能、智算筑基”三大方向,深化AI与实体经济融合。CRM系统作为数智化基础设施,连接客户端与业务端,成为企业核心基座。以纷享销客为例,其通过“连接型CRM”打通数据壁垒,提供灵活组织架构配置,满足个性化需求。ShareAI平台赋能营销、销售和服务全链路智能化,确保数据安全并支持私有化部署。选择具备行业积淀和实战经验的CRM服务商,才能让数智化真正驱动业务增长与企业转型。
|
16天前
|
人工智能 开发框架 运维
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless MCP 运行时业界首发,函数计算支持阿里云百炼 MCP 服务!阿里云百炼发布业界首个全生命周期 MCP 服务,无需用户管理资源、开发部署、工程运维等工作,5 分钟即可快速搭建一个连接 MCP 服务的 Agent(智能体)。作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力。
157 0
 Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
下一篇
oss创建bucket