在 SpringBoot 中接入 LangChain4J 开发指南

目录
简介
LangChain4j 是一个强大的 Java AI 开发框架,它可以帮助我们快速构建基于大语言模型的应用。本文将详细介绍如何在 SpringBoot 项目中集成 LangChain4J,并实现一个简单的 AI 聊天应用。
项目架构
graph TD A[SpringBoot Application] --> B[LangChain4J Config] B --> C[ChatLanguageModel] B --> D[MessageMemory] C --> E[OpenAI API] A --> F[ChatService] F --> C F --> D A --> G[ChatController] G --> F style A fill:#f9f,stroke:#333,stroke-width:2px style B fill:#bbf,stroke:#333,stroke-width:2px style C fill:#dfd,stroke:#333,stroke-width:2px style D fill:#dfd,stroke:#333,stroke-width:2px style E fill:#fdd,stroke:#333,stroke-width:2px
环境准备
- JDK 17+
- SpringBoot 3.x
- Maven/Gradle
- OpenAI API Key
项目配置
Maven 依赖
首先在 pom.xml
中添加必要的依赖:
<dependencies>
<!-- SpringBoot 基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- LangChain4j 核心依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.27.1</version>
</dependency>
<!-- LangChain4j Spring 集成 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>0.27.1</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
配置文件
在 application.yml
中添加相关配置:
langchain4j:
chat-model:
provider: openai
api-key: ${OPENAI_API_KEY}
model-name: gpt-4
temperature: 0.7
timeout: 60s
base-url: https://your-gpt4-mini-api-endpoint # 如果使用自定义 API
核心实现
项目结构
src/main/java/com/example/demo/
├── config/
│ └── LangChain4jConfig.java
├── service/
│ ├── ChatService.java
│ └── PromptService.java
├── controller/
│ └── ChatController.java
├── model/
│ ├── ChatRequest.java
│ └── ChatResponse.java
└── DemoApplication.java
配置类
@Configuration
@Slf4j
public class LangChain4jConfig {
@Value("${langchain4j.chat-model.api-key}")
private String apiKey;
@Value("${langchain4j.chat-model.base-url}")
private String baseUrl;
@Bean
public ChatLanguageModel chatLanguageModel() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName("gpt-4")
.baseUrl(baseUrl)
.timeout(Duration.ofSeconds(60))
.temperature(0.7)
.logRequests(true)
.logResponses(true)
.build();
}
@Bean
public MessageMemory messageMemory() {
return MessageMemory.withMaxMessages(10);
}
}
服务实现
@Service
@Slf4j
public class ChatService {
private final ChatLanguageModel chatModel;
private final MessageMemory memory;
public ChatService(ChatLanguageModel chatModel, MessageMemory memory) {
this.chatModel = chatModel;
this.memory = memory;
}
public String chat(String userMessage) {
try {
memory.add(UserMessage.from(userMessage));
String response = chatModel.generate(memory.messages());
memory.add(AiMessage.from(response));
return response;
} catch (Exception e) {
log.error("AI 服务调用失败", e);
throw new AIException("AI 服务暂时不可用,请稍后重试");
}
}
}
高级特性
对话流程
sequenceDiagram participant Client participant Controller participant ChatService participant OpenAI Client->>Controller: POST /api/chat Controller->>ChatService: chat(message) ChatService->>ChatService: 添加用户消息到记忆 ChatService->>OpenAI: 生成回复 OpenAI-->>ChatService: 返回回复 ChatService->>ChatService: 添加 AI 回复到记忆 ChatService-->>Controller: 返回回复 Controller-->>Client: 返回响应 note over Client,OpenAI: 完整的对话流程
Prompt 模板使用
@Service
public class PromptService {
private final PromptTemplate promptTemplate = PromptTemplate.from(
"你是一个{{role}},请用专业的角度回答:{{question}}"
);
private final ChatLanguageModel chatModel;
public String getResponse(String role, String question) {
String prompt = promptTemplate.apply(Parameters.from(
"role", role,
"question", question
));
return chatModel.generate(prompt);
}
}
最佳实践
API Key 安全性
- 使用环境变量或配置中心存储 API Key
- 避免直接在代码中硬编码敏感信息
- 定期轮换 API Key
性能优化
- 使用异步处理长时间运行的 AI 请求
- 实现请求缓存减少 API 调用
- 合理设置超时时间和重试策略
成本控制
- 实现 Token 计数和使用统计
- 设置调用限额
- 监控 API 调用成本
常见问题
如何处理 API 超时?
建议设置合理的超时时间,并实现重试机制:
@Retryable(
value = {TimeoutException.class},
maxAttempts = 3,
backoff = @Backoff(delay = 1000)
)
public String chatWithRetry(String message) {
return chatService.chat(message);
}
总结
通过本文的介绍,我们学习了如何在 SpringBoot 项目中集成 LangChain4J,实现了一个基础的 AI 聊天应用。主要包括:
- 基础配置和依赖管理
- 核心功能实现
- 高级特性使用
- 性能优化和监控
- 安全性考虑
在实际开发中,建议根据具体需求选择合适的功能特性,同时注意安全性、性能和成本控制等方面的考虑。