博客 / 詳情

返回

13. Spring AI 的觀測性

13. Spring AI 的觀測性

@

目錄
  • 13. Spring AI 的觀測性
    • 觀測性
      • 為什麼Spring AI應用急需可觀測性?
        • AI服務成本失控的痛點
        • Spring AI可觀測性的價值
      • 實戰演練:構建可觀測的Spring AI翻譯應用
        • 第一步:Spring AI項目初始化
        • 第二步:Spring AI客户端配置
        • 第三步:構建Spring AI翻譯服務
        • 第四步:Spring AI翻譯API測試
      • Spring AI監控指標深度解析
        • 核心指標1:Spring AI操作性能監控
        • 核心指標2:Spring AI Token使用量精準追蹤
  • 最後:

觀測性

為什麼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> 
<!-- Spring Boot Actuator 監控 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--web-->
<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消耗
  • 制定基於使用量的預算策略

最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裏插入圖片描述

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.