Java AI 框架选型:LangChain4j 还是 Spring AI?

RAG 实战:用 Spring AI + pgvector 搭建企业知识库问答系统 先讲个真实的故事。去年我帮一个电商团队做客服系统。第一版用 LLM + RAG,效果不错——用户问"退换货政策是什么",它能精准回答。老板很高兴,甩过来一个新需求:这就是问题所在。前几篇我们构建的 AI 应用本质上是一个知识问答系统——用户提问,AI 从文档里找答案。但在真实业务中,用户需要的不是"回答",而是"动作"。查订单要调订单系统,查物流要对接快递 API,退款要操作支付网关。这些需要执行,不只是回答。这就是从 ChatBot 到 Agent 的范式跃迁:一句话定义 Agent:LLM 负责理解"用 阅读详情

为什么 Java 开发者需要关注这件事

两年前,大部分 Java 团队面对大模型浪潮的反应是:“我们用 HTTP 调 OpenAI 的 API 不就行了?”

到了 2026 年,如果你还在手写 HttpClient 拼 JSON 调模型接口,说明你还没有遇到真正的复杂度——

  • • 当你需要对接多个模型供应商(OpenAI、通义千问、DeepSeek、本地 Ollama)并随时切换时;
  • • 当你需要实现 RAG,把企业知识库和大模型结合时;
  • • 当你需要 Function Calling,让模型调用你的业务系统时;
  • • 当你需要 Agent,让模型自主规划、分步执行任务时。

手写 HTTP 调用的代码会迅速膨胀成难以维护的意大利面条式代码(Spaghetti Code)。而无代码平台(如 Dify、Coze)虽然降低了门槛,但在复杂业务场景中,无法灵活打通系统的各个环节,实现业务的流转和自动化。深入学习编码开发平台依然是 AI 应用开发的核心路径。

框架的价值,就是在这些复杂度面前给你一个经过验证的架构。 Spring AI 的定位正是"连接企业数据与 API 和 AI 模型之间的桥梁"。

本文将深入剖析 Java 生态三大主流 AI 框架:Spring AI、LangChain4j、Semantic Kernel Java,从架构设计、代码实现、生产适用性三个维度给出我的判断。

一、框架全景对比

先上一张总览表,后面逐个拆解:

维度Spring AILangChain4jSemantic Kernel Java
出品方Broadcom/Spring 官方团队社区驱动微软
Spring Boot 兼容3.5.x(原生集成)3.x(通过 langchain4j-spring)无原生集成
模型提供商OpenAI、Anthropic、Google、Amazon、Ollama、智谱等OpenAI、Anthropic、通义、DeepSeek、智谱、Moonshot 等 20+ 家OpenAI、Azure OpenAI、Hugging Face
Vector Store 支持PGVector、Milvus、Qdrant、Weaviate、Pinecone、Redis、Elasticsearch、Chroma、Neo4j 等 14 种PGVector、Milvus、Qdrant、Weaviate、Pinecone、Redis、Elasticsearch 等需自行集成
RAG 支持✅(Advisors 模式)✅✅(最完整,含文档加载、分割、检索全链路)✅(基础支持)
Agent 能力中等(ToolCallAdvisor + MCP 支持)较强(Tool + Agent 编排,最成熟)FunctionChoiceBehavior 引导(Java 版实现不完整)
声明式 API❌(命令式 ChatClient)✅(AI Services 注解)❌
国内模型支持好(智谱官方集成)最好(通义、DeepSeek、智谱、Moonshot 等)弱(无官方集成)
学习曲线低(Spring 用户)中高
社区活跃度高高中低
版本状态正式发布正式发布RC1(候选版本)

二、Spring AI:Spring 生态的自然延伸

架构设计哲学

Spring AI 的设计哲学非常 Spring:约定优于配置,抽象优于实现。

它定义了一套统一的 ChatModel、EmbeddingModel、VectorStore 接口,各个模型提供商通过 starter 提供实现。你只需要在 application.yml 里切换配置,代码一行不改。Spring AI 的目标是将 Spring 生态的设计原则——可移植性、模块化设计、POJO 作为构建块——应用到 AI 领域。

spring.ai.openai.api-key=sk-xxx        → OpenAIspring.ai.ollama.base-url=http://...   → 本地 Ollamaspring.ai.zhipuai.api-key=xxx          → 智谱

核心代码剖析

1. 最简对话 — ChatClient 流式 API

Spring AI 的 ChatClient 提供了流式 API 来与 AI 模型通信,支持同步和流式两种编程模型。

<!-- Maven 依赖(推荐通过 BOM 管理版本) --><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.ai</groupId>            <artifactId>spring-ai-bom</artifactId>            <version>1.1.3</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-model-openai</artifactId>    <!-- 版本由 BOM 统一管理,无需手写 --></dependency>
``````plaintext
@RestControllerclass MyController {    private final ChatClient chatClient;    // ChatClient.Builder 是 prototype bean,每次注入创建新实例    public MyController(ChatClient.Builder chatClientBuilder) {        this.chatClient = chatClientBuilder                .defaultSystem("你是一个专业的Java技术顾问")                .build();    }    @GetMapping("/ai")    String generation(String userInput) {        return this.chatClient.prompt()                .user(userInput)                .call()                .content();    }}

在最简单场景下,call() 方法向 AI 模型发送请求,content() 方法以 String 形式返回响应。这是 Spring AI 最核心的交互模式。

2. 多模型切换

Spring AI 支持在同一应用中使用多个 ChatModel。注意: 若需手动创建多个 ChatClient 实例,必须先通过配置项禁用自动配置,否则启动时会产生 Bean 冲突:

# application.ymlspring:  ai:    chat:      client:        enabled: false   # 禁用自动配置,才能手动注册多个 ChatClient
``````plaintext
@Configurationpublic class ChatClientConfig {    // 注意:多模型共存需要在 classpath 上同时添加两个模型的 starter 依赖,    // 并在 application.yml 中分别配置各自的 api-key    @Bean    public ChatClient openAiChatClient(OpenAiChatModel chatModel) {        return ChatClient.create(chatModel);    }    @Bean    public ChatClient anthropicChatClient(AnthropicChatModel chatModel) {        return ChatClient.create(chatModel);    }}

使用 @Qualifier 注入特定实例:

@RestControllerpublic class MultiModelController {    private final ChatClient openAiClient;    private final ChatClient anthropicClient;    public MultiModelController(            @Qualifier("openAiChatClient") ChatClient openAiClient,            @Qualifier("anthropicChatClient") ChatClient anthropicClient) {        this.openAiClient = openAiClient;        this.anthropicClient = anthropicClient;    }}
3. Prompt 结构化

Spring AI 的 Prompt 类是一个容器,包含一组有序的 Message 对象和请求选项。每条 Message 代表 Prompt 中的一个角色:

  • • System Role:引导 AI 的行为和响应风格,在对话开始前提供指令。
  • • User Role:代表用户的输入——问题、命令或陈述。
Prompt prompt = new Prompt(List.of(    new SystemMessage("你是一个Java架构师,回答要简洁专业"),    new UserMessage("Spring Boot 3.x 的 GraalVM 原生镜像支持怎么样?")));ChatResponse response = chatModel.call(prompt);

Prompt 类还提供了便捷方法:getUserMessage() 返回最后一条用户消息,getSystemMessage() 返回第一条系统消息,getUserMessages() 返回所有用户消息列表。

4. RAG 检索增强

Spring AI 通过 Advisors API 实现 RAG,封装了重复的 Generative AI 模式,转换发送给语言模型和从语言模型接收的数据,并在各种模型和用例之间提供可移植性:

@Configurationpublic class RagConfig {    @Bean    public VectorStore vectorStore(JdbcTemplate jdbcTemplate,                                    EmbeddingModel embeddingModel) {        return new PgVectorStore(jdbcTemplate, embeddingModel);    }}@RestControllerpublic class RagController {    private final ChatClient chatClient;    public RagController(ChatClient.Builder builder, VectorStore vectorStore) {        this.chatClient = builder                .defaultAdvisors(                    QuestionAnswerAdvisor.builder(vectorStore).build()                )                .build();    }    @GetMapping("/rag")    public String rag(@RequestParam String question) {        return chatClient.prompt()                .user(question)                .call()                .content();    }}

QuestionAnswerAdvisor 是一个拦截器,在每次调用前自动从向量库检索相关文档片段并拼接进 Prompt。整个 RAG 流程对业务代码完全透明。

5. 对话记忆

Spring AI 提供了内置的 MessageChatMemoryAdvisor,无需手动维护会话状态:

import org.springframework.ai.chat.memory.ChatMemory;import org.springframework.ai.chat.memory.ChatMemoryRepository;import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository;import org.springframework.ai.chat.memory.MessageWindowChatMemory;import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;@Configurationpublic class MemoryConfig {    @Bean    public ChatMemoryRepository chatMemoryRepository() {        return new InMemoryChatMemoryRepository();    }    @Bean    public ChatMemory chatMemory(ChatMemoryRepository repository) {        // 保留最近 15 轮对话窗口        return MessageWindowChatMemory.builder()                .chatMemoryRepository(repository)                .maxMessages(15)                .build();    }}@RestControllerpublic class ChatController {    private final ChatClient chatClient;    public ChatController(ChatClient.Builder builder, ChatMemory chatMemory) {        this.chatClient = builder                .defaultAdvisors(                    MessageChatMemoryAdvisor.builder(chatMemory).build()                )                .build();    }    @PostMapping("/chat")    public String chat(@RequestParam String sessionId,                       @RequestParam String message) {        return chatClient.prompt()                .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, sessionId))                .user(message)                .call()                .content();    }}

Spring AI 的真正优势

1. 零心智负担的 Spring 集成

如果你的项目已经是 Spring Boot,引入 Spring AI 的成本是最低的。Spring AI 支持 Spring Boot 自动配置和 Starters,覆盖所有 AI 模型和向量存储。自动配置、健康检查、可观测性(Observability)全部开箱即用。

2. VectorStore 抽象层设计优秀

Spring AI 支持的向量数据库包括:Apache Cassandra、Azure Vector Search、Chroma、Elasticsearch、Milvus、MongoDB Atlas、MariaDB、Neo4j、Oracle、PostgreSQL/PGVector、Pinecone、Qdrant、Redis、Weaviate 等 14 种。切换向量库只需换依赖和配置,业务代码不用动。

3. 结构化输出(Structured Outputs)

Spring AI 支持将 AI 模型输出直接映射到 POJO,这在需要模型返回结构化数据(如 JSON、实体对象)时非常有用。

4. MCP 支持(1.1.x 新增)

Spring AI 1.1.x 引入了对 Model Context Protocol(MCP)的支持,可以更灵活地接入外部工具和数据源,拓宽了 Agent 能力的边界。Spring AI 团队是 MCP Java SDK 的主要维护者之一,在协议层面的话语权保证了这一集成的长期质量。

Spring AI 的短板

Agent 编排能力仍弱于 LangChain4j。

Spring AI 通过 ToolCallAdvisor 和 Recursive Advisors 提供了基础的 Agent 能力,支持工具调用和简单的自改进循环。但在多工具自动编排、多步推理框架、Agent 任务规划等方面,仍缺乏 LangChain4j 那样成熟的抽象层。Advisors 机制本质上是拦截器模式,而非 Agent 模式,两者在能力上限上有本质差距。在需要复杂 Agent 调度和工具链组合的场景下,Spring AI 可能受限。

不过值得关注的是,Spring AI 2.0 正在这个方向上进行架构级的强化,详见本文第八节的前瞻分析。

三、LangChain4j:功能最全面的 Java AI 框架

架构设计哲学

LangChain4j 的设计理念是:覆盖 AI 应用开发的全部生命周期。

它提供标准化 API,支持 20 余家主流大模型提供商和嵌入存储,从低级提示词模板到高级 AI 服务,适合构建聊天机器人和 RAG 管道。

核心代码剖析

1. 声明式 AI Service(最优雅的设计)

这是 LangChain4j 最让我惊艳的设计。它用 Java 接口 + 注解 的方式定义 AI 能力:

<!-- 推荐使用 BOM 管理版本 --><dependencyManagement>    <dependencies>        <dependency>            <groupId>dev.langchain4j</groupId>            <artifactId>langchain4j-bom</artifactId>            <version>1.12.2</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><dependency>    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-open-ai</artifactId></dependency>
``````plaintext
import dev.langchain4j.service.AiServices;import dev.langchain4j.service.SystemMessage;import dev.langchain4j.service.UserMessage;import dev.langchain4j.service.V;public interface TechAssistant {    @SystemMessage("""        你是一个资深Java技术顾问。        回答要简洁、准确,给出代码示例时用Java语言。        如果不确定,明确告知用户。        """)    String ask(@UserMessage String question);    @SystemMessage("根据以下参考资料回答问题")    String ragAsk(        @UserMessage String question,        @V("context") String context    );    @SystemMessage("分析这段Java代码的问题")    @UserMessage("请分析以下代码:\n{{code}}")    String reviewCode(@V("code") String code);}

使用时:

import dev.langchain4j.model.chat.ChatLanguageModel;import dev.langchain4j.model.openai.OpenAiChatModel;ChatLanguageModel model = OpenAiChatModel.builder()        .apiKey("sk-xxx")        .modelName("gpt-4o")        .temperature(0.3)        .build();TechAssistant assistant = AiServices.create(TechAssistant.class, model);// 直接调用,像调用普通 Service 一样String answer = assistant.ask("Java 21 的虚拟线程适合什么场景?");

这个设计的精妙之处在于: 它把 Prompt Engineering 和业务逻辑解耦了。@SystemMessage、@UserMessage、@V 注解负责 Prompt 的组装,业务代码只需要关注"调用哪个接口、传什么参数"。

对比 Spring AI 的命令式调用——Prompt 组装和业务逻辑耦合在一起:

// Spring AI:命令式调用,Prompt 与业务代码写在同处String answer = chatClient.prompt()    .system("你是一个Java技术顾问,回答要简洁准确")    .user("Java 21 的虚拟线程适合什么场景?")    .call()    .content();

命令式 vs 声明式的区别:命令式是"在哪里用、怎么拼"写在调用代码里;声明式是把"怎么拼"提升到接口定义层,调用代码只表达"用什么、传什么"。当项目有几十上百个 AI 接口时,声明式方案在可维护性上优势巨大——接口定义即文档,改 Prompt 不需要翻业务代码。

2. 完整的 RAG 流程

LangChain4j 在 RAG 方面提供了最完整的支持——包括文档加载、分割、嵌入、存储、检索和生成的全链路能力:

import dev.langchain4j.data.document.Document;import dev.langchain4j.data.document.DocumentSplitter;import dev.langchain4j.data.document.DocumentSplitters;import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;import dev.langchain4j.data.segment.TextSegment;import dev.langchain4j.model.embedding.EmbeddingModel;import dev.langchain4j.model.openai.OpenAiEmbeddingModel;import dev.langchain4j.rag.content.retriever.ContentRetriever;import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;import dev.langchain4j.store.embedding.EmbeddingStore;import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;// Step 1: 文档加载Document document = FileSystemDocumentLoader.loadDocument("docs/architecture.pdf");// Step 2: 文档分割DocumentSplitter splitter = DocumentSplitters.recursive(300, 30);List<TextSegment> segments = splitter.split(document);// Step 3: 向量化 + 存储EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()        .apiKey("sk-xxx")        .modelName("text-embedding-3-small")        .build();EmbeddingStore<TextSegment> store = PgVectorEmbeddingStore.builder()        .host("localhost")        .port(5432)        .database("ai_db")        .table("knowledge")        .dimension(1536)        .build();EmbeddingStoreIngestor.builder()        .embeddingModel(embeddingModel)        .embeddingStore(store)        .build()        .ingest(segments);// Step 4: 检索 + 生成ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()        .embeddingStore(store)        .embeddingModel(embeddingModel)        .maxResults(5)        .minScore(0.75)        .build();TechAssistant assistant = AiServices.builder(TechAssistant.class)        .chatLanguageModel(model)        .contentRetriever(retriever)        .build();String answer = assistant.ask("Spring Boot 3.x 的 GraalVM 原生镜像支持怎么样?");
3. Tool 工具调用
import dev.langchain4j.agent.tool.Tool;import dev.langchain4j.agent.tool.P;public class DatabaseTool {    @Tool("查询用户订单信息,当用户询问订单状态、物流信息时调用")    public String queryOrder(        @P("用户ID") String userId,        @P("订单号,可选") String orderId    ) {        OrderService orderService = SpringContextHolder.getBean(OrderService.class);        List<Order> orders = orderService.queryByUserId(userId, orderId);        return JSON.toJSONString(orders);    }    @Tool("查询商品库存,当用户询问是否有货时调用")    public String checkStock(@P("商品SKU") String sku) {        InventoryService inv = SpringContextHolder.getBean(InventoryService.class);        int stock = inv.getStock(sku);        return stock > 0 ? "SKU " + sku + " 库存充足,剩余 " + stock + " 件"                         : "SKU " + sku + " 已售罄";    }}// 使用TechAssistant assistant = AiServices.builder(TechAssistant.class)        .chatLanguageModel(model)        .tools(new DatabaseTool())        .build();// 用户说 "我订单 20240315001 到哪了?"// 模型自动识别意图,调用 queryOrder 方法String answer = assistant.ask("我订单 20240315001 到哪了?");

LangChain4j 的 @Tool 注解非常优雅:只需在普通 Java 方法上加一个注解,框架会自动把工具定义转换成模型的 Function Calling Schema,把用户的自然语言意图映射到工具调用,再把返回值回传给模型生成最终回答。

4. 对话记忆
import dev.langchain4j.memory.ChatMemory;import dev.langchain4j.memory.chat.MessageWindowChatMemory;// 内存记忆(开发阶段)ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);TechAssistant assistant = AiServices.builder(TechAssistant.class)        .chatLanguageModel(model)        .chatMemory(memory)        .build();// 或使用 Provider 支持多会话(生产环境)TechAssistant assistant = AiServices.builder(TechAssistant.class)        .chatLanguageModel(model)        .chatMemoryProvider(sessionId -> MessageWindowChatMemory.builder()                .maxMessages(15)                .build())        .build();

关于持久化: 如需 Redis 或数据库持久化对话记忆,可实现 ChatMemoryStore 接口自定义存储逻辑。

LangChain4j 的真正优势

1. 声明式 API 是杀手级特性。 在企业级项目中,AI 能力往往需要以 Service 接口的形式暴露给业务层。LangChain4j 的 AiServices 天然适配这种模式,接口即契约,Prompt 即文档。

2. 国内模型支持最全面。 LangChain4j 内置了通义千问(DashScope)、智谱 GLM、Moonshot、DeepSeek、零一万物等国内主流模型的官方集成,这对国内团队是刚需,而不是可选项。

3. Agent 和 Tool 系统成熟度最高。 在复杂 RAG、多步 Agent、工具调用、对 AI 输出流程有高度控制的场景下,LangChain4j 更加灵活,自动处理 tool_calls 循环的能力已相当稳定。

LangChain4j 的不足

1. Spring 集成需要额外工作。 LangChain4j 本质是一个纯 Java 库,虽然提供了 langchain4j-spring-boot-starter 模块,但与 Spring Boot 生态的深度融合(如 Actuator 指标、自动健康检查)不及 Spring AI 原生。

2. 学习曲线较高。 需要理解 AiServices、ChatMemory、ContentRetriever、Tools 等多个核心概念,以及如何将它们组合,对初学者不如 Spring AI 友好。

四、Semantic Kernel Java:值得了解但不建议使用

一个重要说明

在进入代码之前,有必要先点明这个版本号后缀的含义:当前 Java 版本仍是候选版本(RC1),尚未正式发布。与之相比,Spring AI 和 LangChain4j 均是正式发布的稳定版本。这一差距会贯穿你在 Semantic Kernel Java 上的整个使用体验。

架构设计哲学

Semantic Kernel 的核心概念是 Kernel(内核)+ Plugins(插件)+ Planners(规划器)。它的设计起源于微软的 C# 技术栈,强调企业级安全、可观测性和插件化架构。Java 版本是后续移植的产物,这一背景深刻影响了其 API 风格。

核心代码剖析

1. 构建 Kernel + 对话
<dependency>    <groupId>com.microsoft.semantic-kernel</groupId>    <artifactId>semantickernel-api</artifactId>    <version>1.4.4-RC1</version></dependency><dependency>    <groupId>com.microsoft.semantic-kernel</groupId>    <artifactId>semantickernel-aiservices-openai</artifactId>    <version>1.4.4-RC1</version></dependency>
``````plaintext
import com.microsoft.semantickernel.Kernel;import com.microsoft.semantickernel.aiservices.openai.chatcompletion.OpenAIChatCompletion;import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;// 构建 Chat Completion 服务Kernel kernel = Kernel.builder()    .withAIService(ChatCompletionService.class,        OpenAIChatCompletion.builder()            .withModelId("gpt-4o")            .withApiKey("sk-xxx")            .build())    .build();// 构建对话历史ChatHistory chatHistory = new ChatHistory();chatHistory.addSystemMessage("你是一个专业的Java技术顾问");chatHistory.addUserMessage("Java 21 的虚拟线程适合什么场景?");// 调用(Reactor 响应式风格)List<ChatMessageContent<?>> response = kernel.getService(ChatCompletionService.class)        .getChatMessageContentsAsync(chatHistory, kernel, null)        .block();String answer = response.get(0).getContent();

注意: Maven 依赖中保留版本号是必要的——Semantic Kernel Java 尚未发布正式版,无法通过 Spring BOM 或 Maven Central 的版本推导自动获取,必须手动指定。

2. Plugin 定义(类似 Function Calling)
import com.microsoft.semantickernel.semanticfunctions.annotations.DefineKernelFunction;import com.microsoft.semantickernel.semanticfunctions.annotations.KernelFunctionParameter;public class WeatherPlugin {    @DefineKernelFunction(name = "getWeather", description = "获取指定城市的天气信息")    public String getWeather(        @KernelFunctionParameter(name = "city", description = "城市名称") String city    ) {        return city + "今天晴,25°C";    }    @DefineKernelFunction(name = "searchFlights", description = "查询航班信息")    public String searchFlights(        @KernelFunctionParameter(name = "from", description = "出发城市") String from,        @KernelFunctionParameter(name = "to", description = "到达城市") String to    ) {        return from + "到" + to + "的航班:CA1234 08:00, MU5678 14:30";    }}// 注册 PluginKernelPlugin weatherPlugin = KernelPluginFactory        .createFromObject(new WeatherPlugin(), "Weather");Kernel kernel = Kernel.builder()        .withAIService(ChatCompletionService.class, chatCompletion)        .withPlugin(weatherPlugin)        .build();
3. 关于工具调用与 Planner 功能的重要说明

当前版本新增了 FunctionChoiceBehavior,用于替代旧版的 ToolCallBehavior,引导模型调用插件中的函数。这是相比上一个版本的重要 API 变化,如果你基于旧版文档编写代码,请注意迁移。

然而,C# 版本中亮眼的 HandlebarsPlanner 和 SequentialPlanner 功能在 Java 版本中仍未完整实现。Java 版本目前支持基础的 FunctionChoiceBehavior 来引导模型调用工具,但尚无等同于 C# 版 Planner 的 Java 稳定实现,多步工具链的自动编排仍需开发者手动处理。

这是 Java 版本与 C# 版本最显著的功能 gap 之一。如果你基于网上或官方文档的 C# 示例直接翻译成 Java 代码,会发现相关类根本不存在,请务必注意这一陷阱。

Semantic Kernel Java 的问题

1. Java 版本是 C# 版本的二等公民,且仍处于 RC 阶段。 Semantic Kernel 的 C# 版本是微软亲自维护的旗舰实现,功能迭代快、文档完善、社区活跃。Java 版本属于后续移植,功能持续滞后,部分特性延迟数个月甚至更长时间才出现在 Java 端,且版本至今仍是 RC 状态。

2. API 设计不够 Java 化。getChatMessageContentsAsync(...).block() 这种风格带有浓厚的 C# 异步编程(Reactive Extensions)痕迹,在 Java 生态中显得格格不入。相比之下,LangChain4j 的 assistant.ask("hello") 和 Spring AI 的 chatClient.prompt().call().content() 都更符合 Java 开发者的直觉。

3. 国内模型支持几乎为零。 没有内置的通义千问、DeepSeek 等集成,在国内环境下基本不可用。

4. 社区活跃度明显偏低。 在 GitHub Star 数量、Issue 响应速度、第三方教程资源等维度,Java 版本的 Semantic Kernel 都远落后于 Spring AI 和 LangChain4j。遇到问题时难以从社区获得及时的支持。

五、Spring AI vs LangChain4j 代码级对比

说明: 本节聚焦 Spring AI 和 LangChain4j 这两个社区最活跃、生产适用性最高的框架进行代码级对比。Semantic Kernel Java 因版本仍处于 RC 状态、社区活跃度低、国内模型支持不足,不在本次对比之列(详见第四节分析)。

5.1 构建同一个 RAG 应用的代码量对比

假设需求:构建一个企业知识库问答系统,支持 PDF 文档导入、向量检索、对话记忆。

Spring AI 版本
import org.springframework.ai.chat.memory.ChatMemory;import org.springframework.ai.chat.memory.ChatMemoryRepository;import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository;import org.springframework.ai.chat.memory.MessageWindowChatMemory;import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;import org.springframework.ai.chat.client.advisor.QuestionAnswerAdvisor;import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;@Servicepublic class KnowledgeService {    private final ChatClient chatClient;    private final VectorStore vectorStore;    public KnowledgeService(ChatClient.Builder builder,                             VectorStore vectorStore,                             ChatMemoryRepository memoryRepository) {        this.vectorStore = vectorStore;        ChatMemory chatMemory = MessageWindowChatMemory.builder()                .chatMemoryRepository(memoryRepository)                .maxMessages(15)                .build();        this.chatClient = builder                .defaultAdvisors(                    QuestionAnswerAdvisor.builder(vectorStore).build(),                    MessageChatMemoryAdvisor.builder(chatMemory).build()                )                .build();    }    public void ingestPdf(String filePath) {        var reader = new PagePdfDocumentReader(filePath);        var splitter = new TokenTextSplitter(300, 50);        var documents = reader.get();        var segments = splitter.apply(documents);        vectorStore.add(segments);    }    public String ask(String sessionId, String question) {        return chatClient.prompt()                .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, sessionId))                .user(question)                .call()                .content();    }}
LangChain4j 版本
import dev.langchain4j.service.AiServices;import dev.langchain4j.service.SystemMessage;import dev.langchain4j.service.UserMessage;import dev.langchain4j.memory.ChatMemory;import dev.langchain4j.memory.chat.MessageWindowChatMemory;import dev.langchain4j.rag.content.retriever.ContentRetriever;import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;public interface KnowledgeAssistant {    @SystemMessage("""        你是企业知识库助手。根据参考资料回答问题。        如果参考资料中没有相关内容,明确告知用户。        回答要专业、简洁,引用具体章节。        """)    String ask(@UserMessage String question);}@Servicepublic class KnowledgeService {    private final KnowledgeAssistant assistant;    private final EmbeddingStore<TextSegment> store;    public KnowledgeService() {        this.store = PgVectorEmbeddingStore.builder()                .host("localhost")                .port(5432)                .database("ai_db")                .table("knowledge")                .dimension(1536)                .build();        EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()                .apiKey("sk-xxx")                .modelName("text-embedding-3-small")                .build();        ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()                .embeddingStore(store)                .embeddingModel(embeddingModel)                .maxResults(5)                .minScore(0.7)                .build();        ChatMemory memory = MessageWindowChatMemory.withMaxMessages(15);        ChatLanguageModel model = OpenAiChatModel.builder()                .apiKey("sk-xxx")                .modelName("gpt-4o")                .temperature(0.3)                .build();        this.assistant = AiServices.builder(KnowledgeAssistant.class)                .chatLanguageModel(model)                .contentRetriever(retriever)                .chatMemory(memory)                .build();    }    public void ingestPdf(String filePath) {        Document document = FileSystemDocumentLoader.loadDocument(filePath);        DocumentSplitter splitter = DocumentSplitters.recursive(300, 30);        List<TextSegment> segments = splitter.split(document);        EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()                .apiKey("sk-xxx")                .modelName("text-embedding-3-small")                .build();        EmbeddingStoreIngestor.builder()                .embeddingModel(embeddingModel)                .embeddingStore(store)                .build()                .ingest(segments);    }    public String ask(String question) {        return assistant.ask(question);    }}

对比感受:

维度Spring AILangChain4j
代码行数~45 行~55 行
对话记忆Advisor 内置,几行配置框架内置,一行配置
Prompt 管理混在业务代码中注解声明,与业务解耦
可维护性接口多了以后会乱接口定义即文档
Spring 生态集成原生无缝需额外配置

Spring AI 在快速启动、与已有 Spring 项目整合方面更优;LangChain4j 在 Prompt 组织、复杂控制、自定义 RAG 服务方面更灵活。当前版本的两个框架在对话记忆的易用性上已趋于一致,Spring AI 通过 MessageChatMemoryAdvisor 补齐了这一短板。

5.2 构建同一个 Agent 应用的对比

假设需求:构建一个能自动查天气、查航班、预订酒店的旅行助手 Agent。

LangChain4j 版本
import dev.langchain4j.agent.tool.Tool;import dev.langchain4j.agent.tool.P;public class TravelTools {    @Tool("查询城市天气")    public String getWeather(@P("城市名") String city) {        return WeatherService.query(city);    }    @Tool("查询航班信息")    public String searchFlights(        @P("出发城市") String from,        @P("到达城市") String to,        @P("日期,格式 yyyy-MM-dd") String date    ) {        return FlightService.search(from, to, date);    }    @Tool("预订酒店")    public String bookHotel(        @P("城市名") String city,        @P("入住日期") String checkIn,        @P("退房日期") String checkOut,        @P("房间类型") String roomType    ) {        return HotelService.book(city, checkIn, checkOut, roomType);    }}TravelAssistant assistant = AiServices.builder(TravelAssistant.class)        .chatLanguageModel(model)        .tools(new TravelTools())        .build();// 框架自动处理整个 tool_calls 循环://   1. 调用 getWeather("上海")//   2. 调用 searchFlights("当前城市", "上海", "2026-03-26")//   3. 调用 bookHotel("上海", "2026-03-26", "2026-03-28", "商务房")//   4. 综合结果生成最终回答String answer = assistant.chat("我下周三要去上海出差,帮我查下天气和航班,订个商务房");
Spring AI 版本

Spring AI 支持方法级 @Tool 注解,无需定义额外的 Request/Response DTO:

import org.springframework.ai.tool.annotation.Tool;import org.springframework.ai.tool.annotation.ToolParam;@Componentpublic class TravelTools {    @Tool(description = "查询城市天气")    public String getWeather(@ToolParam(description = "城市名称") String city) {        return WeatherService.query(city);    }    @Tool(description = "查询航班信息")    public String searchFlights(        @ToolParam(description = "出发城市") String from,        @ToolParam(description = "到达城市") String to,        @ToolParam(description = "日期,格式 yyyy-MM-dd") String date    ) {        return FlightService.search(from, to, date);    }    @Tool(description = "预订酒店")    public String bookHotel(        @ToolParam(description = "城市名称") String city,        @ToolParam(description = "入住日期") String checkIn,        @ToolParam(description = "退房日期") String checkOut,        @ToolParam(description = "房间类型") String roomType    ) {        return HotelService.book(city, checkIn, checkOut, roomType);    }}@RestControllerpublic class TravelController {    private final ChatClient chatClient;    public TravelController(ChatClient.Builder builder, TravelTools travelTools) {        this.chatClient = builder                .defaultTools(travelTools)                .build();    }    @PostMapping("/travel")    public String travel(@RequestBody String message) {        return chatClient.prompt()                .user(message)                .call()                .content();    }}
Semantic Kernel Java 版本
import com.microsoft.semantickernel.semanticfunctions.annotations.DefineKernelFunction;import com.microsoft.semantickernel.semanticfunctions.annotations.KernelFunctionParameter;public class TravelPlugin {    @DefineKernelFunction(name = "getWeather", description = "查询城市天气")    public String getWeather(        @KernelFunctionParameter(name = "city", description = "城市名") String city    ) {        return WeatherService.query(city);    }    @DefineKernelFunction(name = "searchFlights", description = "查询航班信息")    public String searchFlights(        @KernelFunctionParameter(name = "from", description = "出发城市") String from,        @KernelFunctionParameter(name = "to", description = "到达城市") String to,        @KernelFunctionParameter(name = "date", description = "日期") String date    ) {        return FlightService.search(from, to, date);    }    @DefineKernelFunction(name = "bookHotel", description = "预订酒店")    public String bookHotel(        @KernelFunctionParameter(name = "city", description = "城市名") String city,        @KernelFunctionParameter(name = "checkIn", description = "入住日期") String checkIn,        @KernelFunctionParameter(name = "checkOut", description = "退房日期") String checkOut,        @KernelFunctionParameter(name = "roomType", description = "房间类型") String roomType    ) {        return HotelService.book(city, checkIn, checkOut, roomType);    }}// 注册 Plugin(当前版本以 FunctionChoiceBehavior 替代旧版 ToolCallBehavior)KernelPlugin travelPlugin = KernelPluginFactory        .createFromObject(new TravelPlugin(), "Travel");Kernel kernel = Kernel.builder()        .withAIService(ChatCompletionService.class, chatCompletion)        .withPlugin(travelPlugin)        .build();// 注意:Java 版本暂无等同 C# HandlebarsPlanner 的自动编排实现。// 当前可通过 FunctionChoiceBehavior 配置引导模型调用工具,// 但仍需开发者手动处理多轮 tool_calls 循环,比 LangChain4j 繁琐许多。

三个框架的 Agent 实现对比:

维度Spring AILangChain4jSemantic Kernel Java
定义工具方法 + @Tool + @ToolParam方法 + @Tool + @P方法 + @DefineKernelFunction
需要 DTO 类❌ 不需要❌ 不需要❌ 不需要
自动处理 tool_calls 循环✅ 框架自动处理✅ 框架自动处理⚠️ 需手动处理
自动多步编排(Planner)❌ 无✅ 框架自动处理⚠️ Java 版尚未完整实现
代码量较少最少最多
API 可读性好最好较差(注解冗长,风格偏 C#)

从这张表可以看出,Spring AI 和 LangChain4j 在工具定义层面已经非常接近,主要差距落在多步 Agent 自动编排上。LangChain4j 的框架会自动处理完整的 tool_calls 循环直到模型生成最终回答,而 Spring AI 在这方面的实现目前仍有差距。Semantic Kernel Java 版本的 Agent 能力受限于移植进度,对 Java 开发者并不友好。

六、我的判断:不是中立,是结论

经过对三个框架的架构分析、代码实践和生产验证,我的判断如下:

🥇 首选:LangChain4j

适用场景:绝大多数 Java AI 应用开发。

理由:

  1. 声明式 API 是面向未来的架构选择。 当 AI 能力在项目中从 1 个接口增长到 50 个接口时,LangChain4j 的 AiServices 注解方案在可维护性上碾压命令式调用。接口定义即文档,Prompt 改动不需要翻业务代码。
  2. 功能完整度最高。 RAG、Agent、Tool Calling、对话记忆、Guardrails、文档加载器——你需要的东西它都有,而且质量不差。
  3. 国内模型支持最好。 通义千问(DashScope)、DeepSeek、智谱 GLM、Moonshot 都有官方集成,这对于国内团队是刚需,而不是可选项。
  4. 社区活跃度高,迭代快。 遇到问题能在 GitHub Issues 中找到答案,新功能的响应速度也快,正式版本稳定可靠。

🥈 次选:Spring AI

适用场景:已有 Spring Boot 项目,需要快速、轻量地接入大模型能力,且业务复杂度以 RAG 和基础工具调用为主。

理由:

  1. Spring 生态的无缝集成不可替代。 如果你的项目深度依赖 Spring 的自动配置、Actuator 监控、Security 安全框架,Spring AI 的集成成本最低,Observability 等企业级特性开箱即用。
  2. VectorStore 抽象层设计优秀。 统一的接口 + 14 种向量库实现,切换向量库时业务代码不用动。
  3. 核心短板已在当前版本补齐。 内置的 MessageChatMemoryAdvisor 解决了对话记忆管理的问题,方法级 @Tool 注解也解决了工具定义繁琐的历史问题。
  4. 但多步 Agent 编排仍是瓶颈。 一旦需求升级到"多工具自主规划 + 多步推理",Spring AI 的能力上限仍不及 LangChain4j。这是选择两者的核心判断依据。而随着 Spring AI 2.0 的成熟,这一差距有望缩小,详见下一章节。

🥉 不推荐:Semantic Kernel Java

适用场景:几乎没有。除非公司强制要求微软技术栈,或团队主体是从 C# 迁移到 Java。

理由:

  1. Java 版本是 C# 版本的二等公民,且仍处于 RC 阶段。 功能持续滞后,Planner 等核心特性在 Java 端尚未完整实现。
  2. API 设计不符合 Java 开发者的习惯。 大量 .block() 调用和冗长注解让代码维护成本居高不下。
  3. 国内模型支持为零。 在中国云环境下几乎不可用。
  4. 社区生态与另外两者差距悬殊。 遇到问题时难以获得及时的社区支持,第三方资料也极为匮乏。

七、最佳实践:推荐技术栈

对于一个新启动的 Java AI 应用项目,我的推荐技术栈是:

<!-- Spring Boot 基础 --><parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>3.5.6</version></parent><!-- LangChain4j BOM:统一管理所有 langchain4j 模块版本,避免冲突 --><dependencyManagement>    <dependencies>        <dependency>            <groupId>dev.langchain4j</groupId>            <artifactId>langchain4j-bom</artifactId>            <version>1.12.2</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement><!-- LangChain4j Spring Boot 集成 --><dependency>    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-spring-boot-starter</artifactId></dependency><!-- 模型提供商(按需选择其一或多个) --><dependency>    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency><dependency>    <!-- 国内:通义千问 / DashScope -->    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId></dependency><!-- 向量数据库 --><dependency>    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-pgvector</artifactId></dependency><!-- 文档解析 --><dependency>    <groupId>dev.langchain4j</groupId>    <artifactId>langchain4j-document-parser-apache-pdfbox</artifactId></dependency>

提示: 通义千问(DashScope)在 LangChain4j 1.x 中已迁移至社区模块,artifact 为 langchain4j-community-dashscope-spring-boot-starter。旧版的 langchain4j-dashscope-spring-boot-starter 是 0.x 时代的命名,已不适用于当前版本。

# application.ymllangchain4j:  open-ai:    chat-model:      api-key: ${OPENAI_API_KEY}      model-name: gpt-4o      temperature: 0.3      max-tokens: 2048    embedding-model:      api-key: ${OPENAI_API_KEY}      model-name: text-embedding-3-small
``````plaintext
# 推荐项目结构├── assistant/│   ├── TechAssistant.java          // 声明式 AI 接口│   ├── KnowledgeAssistant.java     // RAG 知识库助手│   └── CodeReviewAssistant.java    // 代码审查助手├── tool/│   ├── DatabaseTool.java           // 数据库查询工具│   ├── HttpTool.java               // 外部 API 调用工具│   └── FileTool.java               // 文件操作工具├── rag/│   ├── DocumentIngestService.java  // 文档导入服务│   └── RagConfig.java              // RAG 配置├── memory/│   └── ChatMemoryConfig.java       // 对话记忆配置└── controller/    ├── ChatController.java         // 对话接口    └── IngestController.java       // 文档导入接口

这套结构的核心思路是:assistant/ 层只放声明式 AI 接口,任何人看到接口签名就能理解它的职责;tool/ 层放工具实现,与 AI 接口解耦;rag/ 层管理知识库相关的配置和流程。业务层通过 @Autowired 注入 assistant/ 下的接口,对 AI 框架的细节完全无感。

八、前瞻:Spring AI 2.0 将带来什么

本文主体内容基于 Spring AI 1.1.3 撰写,但 Spring AI 2.0 的里程碑版本已在进行中,其变化幅度足以影响框架选型的判断——尤其是对 Spring AI 最大短板"Agent 能力"的评价。核心影响是:Spring AI 2.0 正在通过生态系统化的方式补齐 Agent 能力短板,了解 2.0 的方向,有助于在规划长期技术栈时做出更有前瞻性的决策。

8.1 核心平台升级:Spring Boot 4 + Spring Framework 7

Spring AI 2.0.0-M1 是 2.x 系列的第一个里程碑,发布于 2025 年 12 月 11 日。2.0.0-M3 于 2026 年 3 月 16 日与 1.1.3 正式版同期发布,基于 Spring Boot 4.0 GA 和 Spring Framework 7.0 构建,以 Jakarta EE 11 为新基线。这不是一次普通的版本号递进,而是一次底层平台的代际迭代。

Jakarta EE 11 带来了为 Java 21 构建的 16 个更新规范,包括 Jakarta Concurrency 3.1 中的虚拟线程支持,以及整个技术栈中的 Records 支持。对 AI 应用而言,虚拟线程的意义尤为重要:当你需要并发编排数十个 LLM 调用时,传统线程池很容易成为瓶颈,而虚拟线程能以极低的开销支撑大规模并发,这对高吞吐量的 AI 推理服务是实质性的提升。

版本进展:

  • • 2.0.0-M1(2025 年 12 月 11 日):首个里程碑,67 个改进和修复
  • • 2.0.0-M2(2026 年 1 月 23 日):94 个变更——36 个改进、16 个 bug 修复、38 个文档更新、4 个依赖升级
  • • 2.0.0-M3(2026 年 3 月 16 日):与 1.1.3 正式版同期发布,包含重要的破坏性变更

值得注意的是,2.0.0-M3 包含若干破坏性变更,包括 MCP 注解包重命名(从 org.springaicommunity.mcp 迁移至 org.springframework.ai.mcp.annotation)、MCP 传输工件迁移、Jackson 2 升级至 Jackson 3,以及从 ToolContext 中移除对话历史。如果你打算从 1.x 迁移到 2.0,升级前务必仔细阅读官方 Upgrade Notes。

8.2 Agent 生态:从框架到生态系统

Spring AI 2.0 在 Agent 方向最值得关注的,不只是框架本身的增强,而是围绕它形成的生态系统正在快速成型。

Embabel:Spring 创始人亲自操刀的 Agent 框架

Embabel Agent Framework 由 Spring Framework 创始人 Rod Johnson 创建,旨在通过在 Spring AI 之上提供更高层级的抽象,简化 JVM 上 AI Agent 的构建。它于 2025 年 6 月首次发布,目前版本为 0.3.x。

Embabel 的核心思路是引入目标导向行动规划(GOAP)算法:Agent 由强类型的动作、目标和领域模型组成,当假设条件发生变化或某个步骤失败时,执行路径可以动态重新规划,使 Agent 行为保持可解释性、确定性和可测试性。

Embabel 构建于 Spring AI 之上,拥抱 Spring 组件模型,但定位上更像是 Spring AI 的上层框架:Spring AI 类似于 Servlet API 层面,而 Embabel 更像 Spring MVC——复杂需求用 Embabel 比直接使用 Spring AI 更易于表达和测试。

这个类比非常准确。如果你已经在用 Spring AI,Embabel 是将 Agent 能力推向生产级可靠性的自然延伸,而无需更换基础框架。

MCP 生态的深化

Spring AI 2.0 重点强化了 MCP(Model Context Protocol)支持,包括将 MCP 注解从社区模块合并入 Spring AI 核心的 org.springframework.ai.mcp.annotation 包,以及面向企业认证合规的 MCP Security。Spring AI 团队也是 MCP Java SDK 的主要维护者,这意味着在协议演进层面,Spring AI 2.0 将始终保持第一梯队的响应速度。

Agent2Agent(A2A)协议支持

Spring AI 正在推进对 Agent2Agent(A2A)协议的集成,这是一个用于 AI Agent 之间无缝通信的开放标准,使 Agent 能够跨平台发现能力、交换消息、协调工作流。2026 年 1 月 29 日,Spring 官方博客发布了关于 A2A 集成的详细指南。当企业 AI 系统从单 Agent 走向多 Agent 协作时,A2A 协议的重要性将快速凸显。

8.3 空指针安全(Null Safety)

这是一个容易被忽视但对企业级开发很有价值的特性。Spring AI 2.0 整个代码库正在迁移到 JSpecify,通过 NullAway 在编译期强制执行空值安全,对 Kotlin 用户而言将转化为真正的可空类型支持。这在大型团队协作和长期维护的项目中能显著减少运行时 NPE。

8.4 对选型判断的影响

综合以上变化,Spring AI 2.0 正在做的事情,是将 1.x 版本的短板——Agent 编排薄弱——通过生态系统化的方式补齐:框架本身专注做好底层抽象和 MCP 集成,Agent 编排的上层能力交给 Embabel 这样的专项框架来承载。

这个分层策略是合理的,但也意味着当前(2026 年上半年)Spring AI 2.0 尚处于 Milestone 阶段,生产项目不应直接升级。待 2.0 正式 GA、Embabel 完成稳定版本发布后,Spring AI + Embabel 的组合将在 Agent 场景下与 LangChain4j 形成真正意义上的竞争。

如果你的项目预计在 2026 年下半年或更晚才进入 Agent 阶段的重度使用,并且团队对 Spring 生态有强烈偏好,值得持续关注 2.0 的进展,并在技术选型中为这条路线保留空间。


写在最后

框架选型不是信仰之争。Spring AI 有它的舒适区,Semantic Kernel 有它的适用场景,但如果你问我 “现阶段,Java 团队做 AI 应用应该选什么”,我的答案是:

LangChain4j。

不是因为它完美,而是因为它的声明式架构设计、功能完整度和国内生态支持这三件事同时做到位了。在 AI 应用从 PoC 走向生产的过程中,这三点决定了你的代码是越写越优雅,还是越写越难维护。

如果你的项目已深度依赖 Spring,不想引入额外的学习和集成成本,Spring AI 也是一个扎实的选择——但要清楚它在复杂 Agent 编排上的当前天花板,同时密切关注 Spring AI 2.0 + Embabel 组合的成熟进度,在合适的时机评估升级路径。

框架选错了可以换,但架构选错了,重构的代价是乘法级的。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

Java对接AI大模型(一)【Langchain4j】 随着AI大模型技术的升起,人们越来越感觉到生活上的便捷以及人机对话照进现实.什么是大模型呢?大模型(Large Model),通常是指参数量非常庞大的深度学习模型,特别是在自然语言处理(NLP)、计算机视觉(CV)等领域中,模型参数数量达到数十亿甚至数千亿的规模。为了弥补Java在AI领域的工具短板,现在市面上出现了几款针对Java的AI开发工具. 阅读详情

相关推荐

Java后端LLM框架选型:Spring AI与LangChain4j实战对比

大语言模型(LLM)已从概念验证进入Java后端生产落地深水区,框架选型本质是工程可控性与开发效率的权衡。Spring AI将LLM能力深度融入Spring生命周期,以注解驱动和自动监控降低接入门槛;LangChain4j则采用组件化设计,通过ChatModel、Retriever、Tool等标准接口实现高可测、易扩展的RAG与Agent编排。二者差异不在功能多寡,而在控制粒度——前者适合快速交付的确定性场景,后者支撑复杂知识增强与自主决策系统。结合JVM调优、线程池配置、熔断降级等Java原生工程实践,才

weixin_32075843的博客 221

Java程序员最好的AI框架,伴随着Spring到来了

Spring AI Alibaba 是一个专为阿里云通义大模型设计的实现框架,它基于 Spring AI 的API,支持接入包括对话、文生图、文生语音等在内的多种生成式AI服务。Spring AI Alibaba 核心优势在于其标准化了各类AI提供者的接口,让开发者能够通过简单的配置切换不同的AI服务提供商,无需重复编写大量代码。此外,该框架还提供了诸如输出解析、Prompt模板等功能,极大地简化了AI应用开发流程。

whisperzzza的博客 3612

【Java开发者必看】LangChain4j入门指南:轻松集成大语言模型到SpringBoot应用

LangChain4j 旨在简化将大语言模型(LLM)集成到 Java 应用中的过程,支持构建聊天机器人、智能助手等应用。

Spring Boot-Common On With You 2258

Java中人工智能的框架

在 Java 中, 常用的人工智能框架有: Deeplearning4j: 一个用于深度学习的开源 Java 框架, 可以在多种平台上运行, 包括 CPU, GPU 和 Apache Hadoop。 Weka: 一个用于数据挖掘和机器学习的开源 Java 框架, 包含大量的算法和工具, 可以用于数据预处理, 分类, 回归, 聚类和关联分析等。 Mallet: 一个用于自然语言处理的开源 Ja...

weixin_35749440的博客 3225

ali140滑块

ali 140滑块采用补环境的方式进行逆向,需要的文件主要为这两个,其中collina.js是最主要的环境校验和参数加密的逻辑,这两个文件放本地进行补环境。然后挂上代理,先保证能够正常运行代码,补了些许后能够正常运行了,我们打印最主要的加密函数看看:n值就是得到:挂上代理看看鼠标事件,不管加密逻辑,关心入参即可:收集一些鼠标事件传进记录的函数。其余就是处理一些环境值,一些resetSA的逻辑就行。截图记录:

bboysteed的博客 1678

AD9361数字调制入门:从IQ调制原理到动手实现第一个ASK信号(Vivado工程详解)

本文详细介绍了如何使用AD9361射频收发器实现ASK数字调制,从IQ调制原理到Vivado工程实现。通过Verilog代码示例和FPGA架构设计,帮助开发者理解纯逻辑实现数字调制解调的关键技术,特别适合软件无线电(SDR)初学者入门实践。

weixin_29158047的博客 374

Spring-AI vs LangChain4J:Java生态的AI框架选型指南

最近在搞AI相关的项目,发现Java生态下有两个比较主流的框架:Spring-AI和LangChain4J。说实话,刚开始我也挺纠结选哪个,毕竟两个看起来都挺不错的。今天就来聊聊这两个框架的区别,以及在实际项目中怎么选。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 4万+

LTspice基础教程-028.Timestep too small

Q: “Timestep too small” error message A: If the LTspice program can’t find a solution for the guessed time step, then the program decreases the time step and tries again. This can’t work forever. If...

gaoyong_wang的博客 2万+

LangChain4j vs Spring AI Alibaba:Java AI 框架实战对比与选型指南

选 LangChain4j:当你需要灵活适配多模型、轻量化集成、跨云部署时,它是敏捷开发的最佳选择,尤其适合初创团队和现有系统的 AI 能力增强。选 Spring AI Alibaba:当你深度使用阿里云生态、需要企业级运维保障、构建复杂多智能体系统时,它能提供从开发到落地的全链路支持,显著降低大型团队的协作成本。随着 Java AI 生态的成熟,双框架共存将成为主流模式 —— 用 LangChain4j 快速验证业务原型,用 Spring AI Alibaba 实现规模化落地。

m0_72256543的博客 1429

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

shufawangzhang的博客 3988

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

Java AI框架选型:Spring AI、LangChain4j与AgentScope怎么选?

随着大模型从概念走向工程落地,AI应用开发框架成为开发者关注的焦点。无论基于Spring生态还是Python技术栈,框架的核心价值都在于降低模型调用、RAG检索、工具编排与多智能体协作的复杂度。本文从工程实践视角出发,对比Spring AI、LangChain4j、AgentScope等主流方案,分析各自适用边界——例如Spring AI Alibaba在NL2SQL场景下的企业级优势,LangChain4j在RAG链路上的灵活性,以及AgentScope 2.0的RAG as Service理念。结合团队

weixin_29051193的博客 202

C#每日面试题-属性和字段的区别

在C#面试中,“属性(Property)和字段(Field)的区别”是基础且高频的考点。很多初学者会把两者混为一谈,甚至觉得“属性就是加了get/set的字段”,但这种理解只停留在表面。面试考察的核心,是对“封装思想”的理解,以及两者在语法特性、底层实现、实际应用中的本质差异。今天我们从“基础认知→核心差异→底层原理→实际应用→面试避坑”五个层面,把这个知识点讲透,既保证新手能看懂,又能满足面试的深度要求。

Amon的专栏 779

Java后端AI框架选型:Spring AI、LangChain4j与AgentScope怎么选

AI应用开发正成为后端工程的核心场景,但面对Spring AI、LangChain4j、AgentScope等众多框架,技术选型常陷入“哪个更好”的争论。理解框架本质是关键:Spring AI是Spring生态的官方AI集成层,适合在现有Spring Boot项目中快速接入大模型与RAG;LangChain4j则提供更灵活的LLM应用开发能力,尤其适合深度定制RAG链路与Agent编排。而AgentScope作为Python多智能体平台,在复杂协作场景有优势,但引入需评估团队技术栈成本。从语言生态、RAG实

weixin_31155097的博客 195

RK3568 OpenHarmony3.2 NFC 驱动适配(PN7150)II

承接上文《RK3568 OpenHarmony3.2 NFC 驱动适配(PN7150)I》,继续PN7150 NFC模块的整体适配。本文主要介绍包括HDI实现层、框架层以及设备适配层的代码修改思路。具体包括vendor_adaptor、hdi_service等;以及foundation下的frameworks、services等。此外还包括相关三方库libnfc-nci在鸿蒙平台的移植和适配。需要注意的是,当前nfc适配只是基于作者手上的RK3568平台以及相关OpenHarmony3.2的代码。

Martian_Jonas的博客 1360

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1011

Java AI框架选型指南:Spring AI、LangChain4j、AgentScope与Embabel对比

在Java生态中集成大模型能力时,开发者常面临Spring AI、LangChain4j、AgentScope与Embabel等框架的选型困惑。这些框架分别面向不同场景:Spring AI提供Spring风格的AI抽象与Advisor链,LangChain4j擅长声明式AI服务与RAG链路,AgentScope专注多Agent消息传递与分布式协作,Embabel则强调类型安全的Kotlin DSL编排。理解各框架的基因差异,结合团队技术栈与项目需求,才能做出合理选择。本文通过实际项目经验,梳理选型决策树与避

weixin_31220401的博客 289

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java AI框架选型指南:Spring AI、LangChain4j、AgentScope与Embabel深度对比

大模型应用开发中,Java开发者常面临框架选型困惑。AI框架本质是连接业务系统与模型能力的抽象层,通过统一接口、组件化设计和编排机制,降低集成复杂度。Spring AI提供模型接入抽象,LangChain4j专注RAG流水线,AgentScope实现多智能体协作,Embabel侧重知识推理。合理选型可显著提升开发效率与系统可维护性,适用于企业知识库问答、多Agent客服、合规审查等场景。本文深入拆解四个框架的定位差异与混搭方案,助你做出合适的技术决策。

weixin_33139275的博客 317

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

用Java开发AI智能体应用,五大框架对比与选型指南:Spring AI、Spring AI Alibaba、LangChain4j、Agents-Flex、Solon AI

本文深度解析了2025年Java生态中五大主流AI智能体开发框架:Spring AI、Spring AI Alibaba、LangChain4j、Agents-Flex与Solon AI。文章详细对比了各框架的核心能力、适用场景、JDK要求及优劣势,并提供了直观的选型对比表。旨在帮助Java开发者根据项目需求(如企业级应用、多Agent协作、老系统改造或轻量化部署),选择最合适的AI开发框架,加速智能应用落地。

寒水馨 · 轻量级技术文档 · hanshuixin.org 4520

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java大模型开发框架深度对决:Spring AI与LangChain4j的技术选型指南

Spring AI和LangChain4j虽然都服务于Java生态中的大模型开发,但设计理念和技术路线有着显著差异。理解它们的核心定位是技术选型的第一步。Spring AI约定优于配置企业级支持和无缝集成。Spring AI旨在为Java开发者提供简单易用的AI开发体验,特别适合已有Spring技术栈的企业快速引入AI能力。其核心优势在于:与Spring Boot深度集成,自动配置和依赖注入统一的抽象接口(ChatClient、EmbeddingClient等)企业级特性:安全、事务、监控等。

深耕互联网架构与AI领域多年,专注大模型工程化、云原生架构、AI驱动系统,分享实战经验、前沿技术和架构方法论。每周产出深度长文+技术短文,涵盖大厂案例、论文解读与工程实践。拒绝水文,只讲干货。关注我,与一线架构师共同探索技术本质。 1281

Java AI框架选型指南:Solon AI、Spring AI与LangChain4j对比

在Java生态中集成AI能力已成为企业级开发的重要趋势。随着大模型技术的普及,Java开发者面临多种AI框架选型挑战。本文从技术架构、核心能力和工程实践角度,深度解析Solon AI、Spring AI和LangChain4j三大主流框架的差异。Solon AI凭借框架中立设计和Java 8+兼容性,特别适合遗留系统改造;Spring AI深度集成Spring Boot生态,提供开箱即用的开发体验;LangChain4j则延续Python生态的设计哲学,适合需要复杂编排的场景。通过对比LLM调用、RAG实现

weixin_33806914的博客 469

Java AI 框架选型指南:Spring AI、LangChain4j、AgentScope、Embabel 对比

大模型应用开发中,RAG(检索增强生成)与智能体编排是核心工程问题。RAG 通过向量检索与生成模型结合提升回答准确性,其效果依赖文档切分、相似度阈值与混合检索融合算法;智能体编排则解决多角色协作与任务分解问题。合理运用这些技术,可在企业知识问答、复杂工单处理、多步骤报告生成等场景中显著降低幻觉、提升自动化水平。然而,Java 生态中 Spring AI、LangChain4j、AgentScope、Embabel 定位各异,选型需权衡团队技术栈与业务状态复杂度。本文围绕 RAG 链路调优、RRF 去重缺陷、

weixin_31499265的博客 68

Java AI框架对比:Spring AI与LangChain4j选型指南

在Java企业级开发中,AI集成已成为技术演进的关键方向。Spring AI作为Spring生态的官方扩展,采用模块化设计提供统一接口,显著降低AI能力接入成本,特别适合快速嵌入现有Spring应用。LangChain4j则基于链式架构实现组件化工作流,在复杂AI场景如多工具调用、条件路由等方面展现优势。两种框架分别代表了快速集成与灵活构建两种技术路线,开发者可根据项目需求选择:Spring AI适合需要与企业监控、安全体系快速集成的场景,而LangChain4j更擅长处理专业级AI流水线。通过性能实测可见

weixin_33462927的博客 244

Java AI框架选型指南:LangChain4j、Spring AI还是Agent-Flex?

在Java后端开发中,AI能力集成已成为工程实践的重要方向。当团队需要构建智能客服或知识库问答系统时,如何选择一个合适的AI框架往往比写代码更关键。LangChain4j、Spring AI与Agent-Flex分别代表了组件化组装、Spring生态融合和流程编排三条技术路线。从核心原理来看,它们对模型调用、记忆管理、检索增强生成(RAG)和工具调用的抽象层次截然不同。理解这些差异,有助于根据业务场景做出正确决策:快速原型验证适用LangChain4j,已有Spring Boot系统集成适用Spring A

weixin_29029995的博客 222
上一篇: 字节AI Agent一面面吐了|16问全程拷打,从多模态底层到Agent工程化,句句戳中痛点
下一篇: 全局 GraphRAG、知识图谱与实体解析详解
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2835原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值