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

相关推荐
viperrrrrrrrrr716 小时前
Agent向量存储中的记忆衰退与记忆过载解决方案
langchain·大模型·agent·rag
爱喝白开水a2 天前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
cooldream20092 天前
LangChain PromptTemplate 全解析:从模板化提示到智能链构
langchain·prompt·prompttemplate
serve the people2 天前
LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
java·langchain·prompt
大模型真好玩2 天前
LangGraph实战项目:从零手搓DeepResearch(二)——DeepResearch架构设计与实现
人工智能·python·langchain
小北爱编程ma2 天前
【Langchain】memory所有类型介绍及代码示例
langchain
985小水博一枚呀3 天前
【AI大模型学习路线】第三阶段之RAG与LangChain——第十九章(实战基于Advanced RAG的PDF问答)系统部署与测试?
人工智能·学习·langchain·pdf
至此流年莫相忘3 天前
LangChain HelloWorld
langchain
玲小珑3 天前
LangChain.js 完全开发手册(十五)实战综合项目一:智能文档处理系统
前端·langchain·ai编程
成子不是橙子3 天前
Langchain | Ollama | Python快速上手使用LLM的DEMO
开发语言·python·langchain·ollama