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全栈项目)

相关推荐
王国强20093 小时前
LangChain 设计原理分析³ | 从零实现一个自定义 Runnable 模块
langchain
喵王叭3 小时前
【大模型核心技术】Agent 理论与实战
人工智能·langchain
TechCampus4 小时前
Langchain4j + Flux 实现高可用 LLM 流式对话系统 教你如何接入AI
langchain
都叫我大帅哥5 小时前
幽默深度指南:LangChain中的RunnableParallel - 让AI任务像交响乐团般协同工作
python·langchain·ai编程
GetcharZp17 小时前
别再只知道 ChatGPT 了!用 LangChain 撸了个“AI 智能体”,自动化工作不是梦!
langchain·agent
GetcharZp1 天前
RAG 应用进阶指南:别再“一次性”加载了!教你构建可分离、可维护的动态 AI 知识库
langchain·llm·deepseek
都叫我大帅哥1 天前
当数据流经LangChain时,RunnablePassthrough如何成为“最懒却最聪明”的快递员?
python·langchain