一、10 秒认识
• LangChain4J:专为 Java 打造的“全家桶”式 LLM 框架,一条 API 同时支持 15+ 大模型、20+ 向量库
• Spring Boot:Java 生态最流行的微服务框架,LangChain4J 官方提供 langchain4j-spring-boot-starter
,开箱即用
二、5 步完成 Spring Boot 集成
1)依赖(Maven)
<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
langchain4j: open-ai: chat-model: api-key: ${OPENAI_API_KEY} model-name: gpt-4o-mini
3)启动类无需改动,Spring Boot 自动装配 ChatLanguageModel
Bean。
4)写一个 AI Service 接口
@AiService // ← 自动实现public interface Assistant { @SystemMessage("你是Java技术专家,回答简洁") String chat(@UserMessage String userMessage);}
5)直接注入使用
@RestController@RequiredArgsConstructorpublic 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(会话记忆)
@Beanpublic Assistant assistant(ChatLanguageModel model) { ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10); // 仅保留最近10轮 return AiServices.builder(Assistant.class) .chatLanguageModel(model) .chatMemory(memory) .build();}
同一个 Assistant
Bean 在多轮 HTTP 调用中会自动保持上下文 。
- Tools(函数调用)
public class WeatherService { @Tool("获取城市天气") // ← 关键注解 public String getWeather(@P("城市") String city) { return city + " 今天 26℃,晴"; }}@Beanpublic Assistant assistant(ChatLanguageModel model, WeatherService tools) { return AiServices.builder(Assistant.class) .chatLanguageModel(model) .tools(tools) // 注入工具 .build();}
用户输入“北京天气如何?”时,LLM 会自动调用 getWeather("北京")
并把结果组织成自然语言回答 。
- 多会话隔离(每用户独立记忆)
@Servicepublic 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) 依赖
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-milvus</artifactId> <version>1.1.0-beta7</version></dependency>
b) 文档摄取
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) 检索 + 生成
public interface ExpertRag { @SystemMessage("基于以下上下文回答:\n{{context}}") String answer(@UserMessage String question);}@Beanpublic 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全栈项目)