SpringBoot对接LangChain4J四件套

一、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 大进阶能力示例

  1. 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 调用中会自动保持上下文 。

  1. 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("北京") 并把结果组织成自然语言回答 。

  1. 多会话隔离(每用户独立记忆)
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 即可实现千人千面会话。

  1. 向量/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(ChatLanguageModelEmbeddingStore)适合高度定制;高层级 API(@AiService)适合 90% 业务场景

• 生产环境建议:

-- Memory 与 Tools 组合,可打造"有手有脑"的智能体

-- 向量库选 Milvus / Pinecone;文档更新时用后台任务异步重建索引

-- 使用 @SessionScope 或 Redis 存储 ChatMemory,实现分布式会话共享

• 版本要求:Java 17+、Spring Boot 3+

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

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

相关推荐
Smoothzjc1 天前
别再只把AI当聊天机器人了!揭秘大模型进化的终极形态,看完颠覆你的认知!
后端·langchain·ai编程
SCBAiotAigc1 天前
langchain1.x学习笔记(三):langchain之init_chat_model的新用法
人工智能·python·langchain·langgraph·deepagents
工藤学编程1 天前
零基础学AI大模型之LangChain智能体之initialize_agent开发实战
人工智能·langchain
ohyeah2 天前
打造 AI 驱动的 Git 提交规范助手:基于 React + Express + Ollama+langchain 的全栈实践
langchain·全栈·ollama
XiaoYu20022 天前
第11章 LangChain
前端·javascript·langchain
猫头虎2 天前
2025年AI领域年度深度总结:始于DeepSeek R1开源发布,终于Manus天价出海
人工智能·langchain·开源·prompt·aigc·ai编程·编程技术
真上帝的左手2 天前
26. AI-框架工具-LangChain & LangGraph
人工智能·langchain
大模型真好玩2 天前
LangGraph智能体开发设计模式(四)——LangGraph多智能体设计模式:网络架构
人工智能·langchain·agent
测试游记2 天前
基于 FastGPT 的 LangChain.js + RAG 系统实现
开发语言·前端·javascript·langchain·ecmascript
weixin_462446232 天前
【原创实践】LangChain + Qwen 智能体项目完整解析:构建RPA自动化操作代理
langchain·自动化·rpa