Spring AI Observations:讓AI應用監控變得簡單高效
在AI應用爆發式增長的今天,Spring AI 1.0版本帶來了革命性的可觀測性功能。本文將深入探討如何利用Spring AI + Micrometer 構建企業級AI應用監控體系,實現成本控制、性能優化和全鏈路追蹤。
為什么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管理):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring AI DeepSeek 集成 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Actuator 監控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
第二步: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
publicclassSpringAiTranslationController {
privatefinal ChatModel chatModel;
@PostMapping("/translate")
public TranslationResponse translate(@RequestBody TranslationRequest request) {
log.info("Spring AI翻譯請求: {} -> {}", request.getSourceLanguage(), request.getTargetLanguage());
Stringprompt= String.format(
"作為專業翻譯助手,請將以下%s文本翻譯成%s,保持原文的語氣和風格:\n%s",
request.getSourceLanguage(),
request.getTargetLanguage(),
request.getText()
);
StringtranslatedText= chatModel.call(prompt);
return TranslationResponse.builder()
.originalText(request.getText())
.translatedText(translatedText)
.sourceLanguage(request.getSourceLanguage())
.targetLanguage(request.getTargetLanguage())
.timestamp(System.currentTimeMillis())
.build();
}
}
@Data
@Builder
classTranslationRequest {
private String text;
private String sourceLanguage;
private String targetLanguage;
}
@Data
@Builder
classTranslationResponse {
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.operation
{
"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消耗
? 制定基于使用量的預算策略
Spring AI調用鏈路追蹤實戰
第一步:集成Zipkin追蹤
添加Spring AI追蹤依賴:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-brave</artifactId>
</dependency>
第二步:啟動Zipkin服務
docker run -d \
--name zipkin-spring-ai \
-p 9411:9411 \
-e STORAGE_TYPE=mem \
openzipkin/zipkin:latest
第三步:Spring AI追蹤配置
management:
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
tracing:
sampling:
probability: 1.0
Spring AI鏈路追蹤效果展示
Zipkin界面展示Spring AI調用鏈路:
Spring AI調用鏈路總覽
Spring AI詳細調用時序:
Spring AI調用時序分析
通過Zipkin可以清晰看到:
? Spring AI ChatClient的調用耗時
? DeepSeek API的響應時間
? 完整的Spring AI請求鏈路
Spring AI Observations源碼架構解析
Spring AI可觀測性核心流程:
Spring AI Observations架構圖
Spring AI的可觀測性基于以下核心組件:
1. ChatClientObservationConvention:定義Spring AI觀測約定
2. ChatClientObservationContext:Spring AI觀測上下文
3. MicrometerObservationRegistry:指標注冊中心
4. TracingObservationHandler:鏈路追蹤處理器
引用鏈接
[1]
start.spring.io: https://start.spring.io