在Spring Boot中整合LangChain4j操作AI大模型,可以通过以下步骤实现。这里以整合OpenAI的GPT模型为例:
- 创建Spring Boot项目
使用Spring Initializr创建项目,选择以下依赖:
Spring Web
Lombok(可选,简化代码)
- 添加LangChain4j依赖
在pom.xml中添加依赖(检查最新版本):
langchain4j.openai.api-key=${OPENAI_API_KEY}
langchain4j.openai.model-name=gpt-3.5-turbo
langchain4j.openai.temperature=0.7
langchain4j.openai.timeout=60
或通过环境变量设置OPENAI_API_KEY。
-
创建LangChain4j配置类
@Configuration
public class LangChain4jConfig {@Value(“${langchain4j.openai.api-key}”)
private String apiKey;@Bean
public OpenAiChatModel openAiChatModel() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName(“gpt-3.5-turbo”)
.temperature(0.7)
.timeout(Duration.ofSeconds(60))
.build();
}
} -
定义AI服务接口
使用@SystemMessage或@UserMessage注解定义功能:
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
public interface TranslationService {
@SystemMessage("你是一个专业翻译,将输入翻译成法语。")
String translateToFrench(@UserMessage String text);
}
6. 创建服务层并调用AI模型
使用AiServices创建接口实现:
@Service
public class TranslationServiceImpl {
private final TranslationService translationService;
public TranslationServiceImpl(OpenAiChatModel chatModel) {
this.translationService = AiServices.create(TranslationService.class, chatModel);
}
public String translate(String text) {
return translationService.translateToFrench(text);
}
}
7. 创建REST控制器
@RestController
@RequestMapping(“/api/ai”)
public class AIController {
private final TranslationServiceImpl translationService;
public AIController(TranslationServiceImpl translationService) {
this.translationService = translationService;
}
@GetMapping("/translate")
public ResponseEntity<String> translateText(@RequestParam String text) {
String translated = translationService.translate(text);
return ResponseEntity.ok(translated);
}
}
- 测试API
启动应用后,通过curl或Postman测试:
curl http://localhost:8080/api/ai/translate?text=Hello,世界!
9. 高级功能示例
使用文档检索
// 1. 加载文档
Document document = FileSystemDocumentLoader.loadDocument(“path/to/file.txt”);
// 2. 创建Embedding模型和检索器
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
EmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
// 3. 分割文档并存储
DocumentSplitter splitter = new DocumentBySentenceSplitter();
List segments = splitter.split(document);
List embeddings = embeddingModel.embedAll(segments).content();
embeddingStore.addAll(embeddings, segments);
// 4. 创建检索链
RetrievalChain retriever = RetrievalChain.builder()
.embeddingModel(embeddingModel)
.embeddingStore(embeddingStore)
.build();
// 5. 使用检索结果增强AI回答
String answer = AiServices.builder(Assistant.class)
.chatLanguageModel(chatModel)
.retrievalChain(retriever)
.build()
.ask(“基于文档回答:问题内容”);
10. 处理异常
添加全局异常处理:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(OpenAiHttpException.class)
public ResponseEntity<String> handleOpenAiError(OpenAiHttpException ex) {
return ResponseEntity.status(ex.statusCode()).body(ex.getMessage());
}
}
注意事项
API成本控制:设置合理的maxTokens限制,避免长文本高费用。
超时设置:根据网络情况调整timeout。
本地模型:如需使用本地模型(如HuggingFace),替换OpenAiChatModel为LocalChatModel。
敏感信息:切勿将API密钥提交到代码仓库,使用环境变量或配置中心。
速率限制:处理OpenAI的速率限制错误(429),添加重试逻辑。