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

相关推荐
NEXT066 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain
孤舟晓月8 小时前
Langchain 1.0后astream_events事件类型及生命周期简析
langchain·大模型·langgraph
玄同7659 小时前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
学习是生活的调味剂11 小时前
大模型应用之使用LangChain实现RAG(一)
langchain·rag
小天呐12 小时前
08—langchain Retrieval
langchain
Dontla15 小时前
黑马大模型RAG与Agent智能体实战教程LangChain提示词——6、提示词工程(提示词优化、few-shot、金融文本信息抽取案例、金融文本匹配案例)
redis·金融·langchain
JaydenAI15 小时前
[LangChain之链]LangChain的Chain——由Runnable构建的管道
python·langchain
草帽lufei15 小时前
LangChain 框架核心向量存储
langchain
猫头虎15 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
qq_54702617916 小时前
LangChain 1.0 核心概念
运维·服务器·langchain