一、10 秒认识
• LangChain4J:专为 Java 打造的"全家桶"式 LLM 框架,一条 API 同时支持 15+ 大模型、20+ 向量库
• Spring Boot:Java 生态最流行的微服务框架,LangChain4J 官方提供 langchain4j-spring-boot-starter
,开箱即用
二、5 步完成 Spring Boot 集成
1)依赖(Maven)
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.1.0-beta7</version>
</dependency>
<!-- 这里以 OpenAI 为例 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.1.0-beta7</version>
</dependency>
2)application.yml
yaml
langchain4j:
open-ai:
chat-model:
api-key: ${OPENAI_API_KEY}
model-name: gpt-4o-mini
3)启动类无需改动,Spring Boot 自动装配 ChatLanguageModel
Bean。
4)写一个 AI Service 接口
java
@AiService // ← 自动实现
public interface Assistant {
@SystemMessage("你是Java技术专家,回答简洁")
String chat(@UserMessage String userMessage);
}
5)直接注入使用
java
@RestController
@RequiredArgsConstructor
public class ChatController {
private final Assistant assistant;
@GetMapping("/chat")
public String chat(@RequestParam String q) {
return assistant.chat(q);
}
}
至此,浏览器访问 http://localhost:8080/chat?q=你好
即可对话。
三、4 大进阶能力示例
- Memory(会话记忆)
java
@Bean
public Assistant assistant(ChatLanguageModel model) {
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10); // 仅保留最近10轮
return AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.chatMemory(memory)
.build();
}
同一个 Assistant
Bean 在多轮 HTTP 调用中会自动保持上下文 。
- Tools(函数调用)
java
public class WeatherService {
@Tool("获取城市天气") // ← 关键注解
public String getWeather(@P("城市") String city) {
return city + " 今天 26℃,晴";
}
}
@Bean
public Assistant assistant(ChatLanguageModel model, WeatherService tools) {
return AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.tools(tools) // 注入工具
.build();
}
用户输入"北京天气如何?"时,LLM 会自动调用 getWeather("北京")
并把结果组织成自然语言回答 。
- 多会话隔离(每用户独立记忆)
java
@Service
public class SessionManager {
private final Map<String, Assistant> userSessions = new ConcurrentHashMap<>();
private final ChatLanguageModel model;
public Assistant of(String userId) {
return userSessions.computeIfAbsent(userId, k ->
AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.chatMemory(MessageWindowChatMemory.withMaxMessages(20))
.build());
}
}
Controller 层传入 userId
即可实现千人千面会话。
- 向量/RAG(检索增强生成)
a) 依赖
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-milvus</artifactId>
<version>1.1.0-beta7</version>
</dependency>
b) 文档摄取
java
Document doc = FileSystemDocumentLoader.loadDocument(Paths.get("java-guide.pdf"));
DocumentSplitter splitter = DocumentSplitters.recursive(300, 50);
List<TextSegment> segments = splitter.split(doc);
EmbeddingModel embeddingModel = new OpenAiEmbeddingModel();
EmbeddingStore<TextSegment> store = MilvusEmbeddingStore.builder()
.uri("http://localhost:19530")
.collectionName("java_kb")
.dimension(1536)
.build();
EmbeddingStoreIngestor.ingest(segments, embeddingModel, store);
c) 检索 + 生成
java
public interface ExpertRag {
@SystemMessage("基于以下上下文回答:\n{{context}}")
String answer(@UserMessage String question);
}
@Bean
public ExpertRag expertRag(ChatLanguageModel chatModel, EmbeddingStore<TextSegment> store) {
return AiServices.builder(ExpertRag.class)
.chatLanguageModel(chatModel)
.retrievalAugmentor(DefaultRetrievalAugmentor.builder()
.embeddingStore(store)
.embeddingModel(new OpenAiEmbeddingModel())
.maxResults(3)
.build())
.build();
}
用户提问时自动做向量检索,将最相关的 3 个片段作为 {{context}}
传给 LLM 生成答案 。
四、最佳实践小结
• 低层级 API(ChatLanguageModel
、EmbeddingStore
)适合高度定制;高层级 API(@AiService
)适合 90% 业务场景
• 生产环境建议:
-- Memory 与 Tools 组合,可打造"有手有脑"的智能体
-- 向量库选 Milvus / Pinecone;文档更新时用后台任务异步重建索引
-- 使用 @SessionScope
或 Redis 存储 ChatMemory
,实现分布式会话共享
• 版本要求:Java 17+、Spring Boot 3+
至此,你已拥有从简单聊天到完整 RAG 的完整武器库。Happy coding!
文章已同步到JavaToNode(一个适合Java后端入门的Node全栈项目)