LangChain4J 最佳实践和性能优化指南
目录
1. 开发最佳实践
1.1 代码组织结构
src/
├── main/java/com/company/ai/
│ ├── config/
│ │ ├── AiConfiguration.java
│ │ └── SecurityConfiguration.java
│ ├── service/
│ │ ├── ChatService.java
│ │ └── EmbeddingService.java
│ ├── controller/
│ │ └── AiController.java
│ ├── model/
│ │ └── ChatRequest.java
│ └── tools/
│ └── DatabaseTools.java
└── resources/
├── application.yml
└── prompts/
└── templates.txt
1.2 异常处理模式
@ControllerAdvice
public class AiExceptionHandler {
@ExceptionHandler(ModelException.class)
public ResponseEntity<ErrorResponse> handleModelException(ModelException e) {
log.error("AI模型调用失败", e);
return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE)
.body(new ErrorResponse("AI服务暂时不可用", "MODEL_ERROR"));
}
@ExceptionHandler(RateLimitException.class)
public ResponseEntity<ErrorResponse> handleRateLimit(RateLimitException e) {
return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
.body(new ErrorResponse("请求过于频繁,请稍后重试", "RATE_LIMIT"));
}
}
@Retryable(value = {
Exception.class}, maxAttempts = 3, backoff = @Backoff(delay = 1000))
public String callAiWithRetry(String prompt) {
return chatModel.generate(prompt);
}
1.3 配置管理最佳实践
app:
ai:
default-timeout: PT30S
max-retries: 3
models:
primary:
provider: openai
model-name: gpt-3.5-turbo
api-key: ${
OPENAI_API_KEY}
fallback:
provider: huggingface
model-name: microsoft/DialoGPT-large
memory:
max-messages: 20
cleanup-interval: PT1H
security:
input-max-length: 10000
rate-limit: 100
2. 性能优化策略
2.1 连接池优化
@Configuration
public class PerformanceConfiguration {
@Bean
public ChatLanguageModel optimizedChatModel() {
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectionPool(new ConnectionPool(20, 5, TimeUnit.MINUTES))
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
return OpenAiChatModel.builder()
.apiKey("sk-...")
.httpClient(httpClient)
.maxRetries(3)
.build();
}
}
2.2 缓存策略
@Service
public class CachedAiService {
private final ChatLanguageModel chatModel;
private fi