掘金 人工智能 23小时前
SpringBoot对接LangChain4J四件套
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

LangChain4J是一款专为Java开发者设计的全能型大型语言模型(LLM)框架,它提供了一条API即可同时支持15款以上的大模型和20款以上的向量库。文章详细介绍了如何利用`langchain4j-spring-boot-starter`,在Spring Boot环境中快速集成LangChain4J,仅需5步即可实现基础的AI对话功能。此外,还深入演示了包括会话记忆(Memory)、工具调用(Tools)、多会话隔离以及检索增强生成(RAG)等四大进阶能力,为Java开发者构建复杂的AI应用提供了完整的解决方案。

🧠 **全能LLM框架 LangChain4J**:LangChain4J是专为Java生态打造的LLM框架,通过单一API接口,能够无缝对接超过15种主流大模型和20余种向量数据库,极大地简化了Java开发者在LLM应用开发中的模型和数据源选择成本,提供了高度的灵活性和扩展性。

🚀 **Spring Boot无缝集成**:文章通过提供详细的Maven依赖配置和`application.yml`示例,展示了如何仅需几行代码即可将LangChain4J集成到Spring Boot项目中。通过Spring Boot的自动装配机制,`ChatLanguageModel` Bean能够被自动创建和注入,使得开发者可以直接通过`@AiService`注解定义AI服务接口,并轻松实现AI对话功能。

💡 **四大进阶能力扩展**:LangChain4J支持多种高级功能,包括:1. **Memory**,使AI能够记住多轮对话的上下文;2. **Tools**,允许AI调用外部函数(如查询天气)来执行具体任务;3. **多会话隔离**,通过`@SessionScope`或Redis等方式实现用户会话的独立管理;4. **RAG(检索增强生成)**,结合向量数据库(如Milvus)和文档加载器,实现基于外部知识库的智能问答,大幅提升AI回答的准确性和时效性。

🛠️ **生产环境最佳实践**:文章建议在生产环境中,将Memory和Tools能力结合,打造更智能的AI体;选择Milvus或Pinecone作为向量库,并异步处理文档更新后的索引重建;对于会话管理,推荐使用`@SessionScope`或Redis实现分布式会话共享,以应对高并发场景;同时,明确指出项目对Java 17+和Spring Boot 3+的版本要求。

一、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(ChatLanguageModelEmbeddingStore)适合高度定制;高层级 API(@AiService)适合 90% 业务场景
• 生产环境建议:
– Memory 与 Tools 组合,可打造“有手有脑”的智能体
– 向量库选 Milvus / Pinecone;文档更新时用后台任务异步重建索引
– 使用 @SessionScope 或 Redis 存储 ChatMemory,实现分布式会话共享
• 版本要求:Java 17+、Spring Boot 3+

至此,你已拥有从简单聊天到完整 RAG 的完整武器库。Happy coding!

文章已同步到JavaToNode(一个适合Java后端入门的Node全栈项目)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain4J Java Spring Boot LLM AI集成
相关文章