1. 项目概述
在Java生态中整合LangChain4j与Spring框架,本质上是在构建一个能够无缝对接大语言模型(LLM)能力的生产级应用架构。这种整合让开发者可以在熟悉的Spring环境中直接调用LangChain4j提供的AI功能,就像使用其他Spring组件一样自然。
我最近在实际项目中完成了这个整合过程,发现它远比想象中要简单高效。通过合理的配置,我们可以在Spring Boot应用中实现:
- 自动装配LangChain4j组件
- 依赖注入式的LLM服务调用
- 与现有Spring服务无缝协作
- 统一的异常处理机制
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 依赖管理
首先需要在pom.xml中添加必要的依赖项。关键依赖包括:
xml复制<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.24.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>0.24.0</version>
</dependency>
对于不同的LLM提供商,还需要添加对应的适配器依赖。例如使用OpenAI时:
xml复制<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.24.0</version>
</dependency>
2.2 配置文件设置
在application.yml中配置LLM连接参数:
yaml复制langchain4j:
openai:
api-key: ${OPENAI_API_KEY}
model-name: gpt-3.5-turbo
temperature: 0.7
timeout: 60s
重要提示:API密钥应该通过环境变量注入,不要直接硬编码在配置文件中。生产环境建议使用Vault或类似方案管理密钥。
3. 核心组件集成
3.1 自动装配原理
LangChain4j的Spring Boot Starter实现了标准的自动配置机制。关键自动配置类包括:
LangChain4jAutoConfiguration:核心配置OpenAiAutoConfiguration:OpenAI适配器配置EmbeddingStoreAutoConfiguration:向量存储配置
这些配置类通过@ConditionalOnClass和@ConditionalOnProperty注解实现条件装配,确保只有在添加了对应依赖并配置了必要参数时才会生效。
3.2 服务注入模式
整合后最常用的两种注入方式:
- 直接注入LLM服务:
java复制@Autowired
private OpenAiChatModel chatModel;
- 注入工具链构建器:
java复制@Autowired
private AiServicesFactory aiServicesFactory;
我更喜欢第二种方式,因为它提供了更灵活的组装能力。例如构建一个客服机器人服务:
java复制public interface CustomerSupportAgent {
@UserMessage("回答客户关于{{it}}的问题")
String answerQuestion(String question);
}
@Service
public class SupportService {
private final CustomerSupportAgent agent;
public SupportService(AiServicesFactory factory) {
this.agent = factory.create(CustomerSupportAgent.class);
}
public String handleQuery(String question) {
return agent.answerQuestion(question);
}
}
4. 高级整合技巧
4.1 自定义模块扩展
LangChain4j允许通过SPI机制扩展功能。创建自定义模块的步骤:
- 实现
dev.langchain4j.spi.ServiceHelper接口 - 在
META-INF/services下注册实现 - 通过
@Configuration将其纳入Spring上下文
例如实现一个自定义的记忆模块:
java复制public class RedisMemoryStore implements MemoryStore {
// 实现具体方法
}
@Configuration
public class LangChain4jExtensions {
@Bean
public MemoryStore redisMemoryStore(RedisTemplate<String, String> redisTemplate) {
return new RedisMemoryStore(redisTemplate);
}
}
4.2 与Spring Security集成
保护AI端点的最佳实践:
- 方法级权限控制:
java复制@PreAuthorize("hasRole('AI_USER')")
public String generateContent(String prompt) {
return chatM
