13. Spring AI 的观测性

2025-12-12 0 185

13. Spring AI 的观测

@[toc]

观测性

为什么Spring AI应用急需可观测性?

AI服务成本失控的痛点

在企业级AI应用中,使用DeepSeek、OpenAI、Google Gemini或Azure OpenAI等服务时,成本控制是一个严峻挑战:

  • Token消耗不透明:无法精确了解每次AI调用的成本
  • 费用增长失控:大规模应用中,AI服务费用可能呈指数级增长
  • 性能瓶颈难定位:AI调用链路复杂,问题排查困难
  • 资源使用不合理:缺乏数据支撑的优化决策
Spring AI可观测性的价值

Spring AI的可观测性功能为这些痛点提供了完美解决方案:

  • 精准Token监控:实时追踪输入/输出Token消耗,精确到每次调用
  • 智能成本控制:基于使用统计制定成本优化策略
  • 深度性能分析:识别AI调用瓶颈,优化响应时间
  • 完整链路追踪:端到端记录请求在Spring AI应用中的完整流转

实战演练:构建可观测的Spring AI翻译应用

第一步:Spring AI项目初始化

在start.spring.io[1]创建Spring Boot项目,集成Spring AI核心依赖:

Maven依赖配置(Spring AI BOM管理):


<dependency>
  <groupId>com.alibaba.cloud.ai</groupId>
  <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency> 

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
第二步:Spring AI客户端配置

主应用类配置:

@SpringBootApplication
publicclassSpringAiTranslationApplication {

    publicstaticvoidmain(String[] args) {
        SpringApplication.run(SpringAiTranslationApplication.class, args);
    }

    @Bean
    public ChatClient chatClient(ChatClient.Builder builder) {
        return builder.build();
    }
}

Spring AI配置文件:

# Spring AI 可观测性配置
management:
endpoints:
    web:
      exposure:
        include:\"*\"
endpoint:
    health:
      show-details:always
metrics:
    export:
      prometheus:
        enabled:true

spring:
threads:
    virtual:
      enabled:true
ai:
    deepseek:
      api-key:${DEEPSEEK_API_KEY}
      chat:
        options:
          model:deepseek-chat
          temperature: 0.8

环境变量设置:

export DEEPSEEK_API_KEY=your-deepseek-api-key

第三步:构建Spring AI翻译服务

智能翻译控制器:

@RestController
@RequestMapping(\"/api/v1\")
@RequiredArgsConstructor
@Slf4j
public class SpringAiTranslationController {

    private final ChatModel chatModel;

    @PostMapping(\"/translate\")
    public TranslationResponse translate(@RequestBody TranslationRequest request) {

        log.info(\"Spring AI翻译请求: {} -> {}\", request.getSourceLanguage(), request.getTargetLanguage());
        
        String prompt= String.format(
                \"作为专业翻译助手,请将以下%s文本翻译成%s,保持原文的语气和风格:n%s\",
                request.getSourceLanguage(),
                request.getTargetLanguage(),
                request.getText()
        );

        String translatedText= chatModel.call(prompt);
        
        return TranslationResponse.builder()
                .originalText(request.getText())
                .translatedText(translatedText)
                .sourceLanguage(request.getSourceLanguage())
                .targetLanguage(request.getTargetLanguage())
                .timestamp(System.currentTimeMillis())
                .build();
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class TranslationRequest {
    private String text;
    private String sourceLanguage;
    private String targetLanguage;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class TranslationResponse {
    private String originalText;
    private String translatedText;
    private String sourceLanguage;
    private String targetLanguage;
    private Long timestamp;
}
第四步:Spring AI翻译API测试
curl -X POST http://localhost:8080/api/v1/translate  
-H \"Content-Type: application/json\"  
-d \'{
  \"text\": \"Spring AI makes AI integration incredibly simple and powerful\",
  \"sourceLanguage\": \"英语\",
  \"targetLanguage\": \"中文\"
}\'

# 响应示例
{
  \"originalText\": \"Spring AI makes AI integration incredibly simple and powerful\",
  \"translatedText\": \"Spring AI让AI集成变得极其简单而强大\",
  \"sourceLanguage\": \"英语\",
  \"targetLanguage\": \"中文\",
  \"timestamp\": 1704067200000
}

Spring AI监控指标深度解析

核心指标1:Spring AI操作性能监控

指标端点:/actuator/metrics/spring.ai.chat.client

{
  \"name\":\"spring.ai.chat.client.operation\",
  \"description\":\"Spring AI ChatClient操作性能指标\",
  \"baseUnit\":\"seconds\",
  \"measurements\":[
    {
      \"statistic\":\"COUNT\",
      \"value\":15
    },
    {
      \"statistic\":\"TOTAL_TIME\",
      \"value\":8.456780293
    },
    {
      \"statistic\":\"MAX\",
      \"value\":2.123904083
    }
  ],
  \"availableTags\":[
    {
      \"tag\":\"gen_ai.operation.name\",
      \"values\":[\"framework\"]
    },
    {
      \"tag\":\"spring.ai.kind\",
      \"values\":[\"chat_client\"]
    }
  ]
}

业务价值

  • 监控Spring AI翻译服务调用频次
  • 分析Spring AI响应时间分布
  • 识别Spring AI性能瓶颈
核心指标2:Spring AI Token使用量精准追踪

指标端点 /actuator/metrics/gen_ai.client.token.usage

{
  \"name\":\"gen_ai.client.token.usage\",
  \"description\":\"Spring AI Token使用量统计\",
  \"measurements\":[
    {
      \"statistic\":\"COUNT\",
      \"value\":1250
    }
  ],
  \"availableTags\":[
    {
      \"tag\":\"gen_ai.response.model\",
      \"values\":[\"deepseek-chat\"]
    },
    {
      \"tag\":\"gen_ai.request.model\",
      \"values\":[\"deepseek-chat\"]
    },
    {
      \"tag\":\"gen_ai.token.type\",
      \"values\":[
        \"output\",
        \"input\",
        \"total\"
      ]
    }
  ]
}

成本控制价值

  • 精确计算Spring AI服务成本
  • 优化Prompt设计降低Token消耗
  • 制定基于使用量的预算策略

最后:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 13. Spring AI 的观测性 https://www.zuozi.net/36041.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务