)
同一需求三套写法用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手实战对比本文是「Java 大模型框架专题」系列第 5 篇实战收尾篇。全系列 5 篇建议按序阅读[总纲] 2026 Java 大模型框架选型终极指南Spring AI vs LangChain4j vs AgentScope Java 深度横评[深度] Spring AI 2.0 深度解析[深度] LangChain4j 深度解析[深度] AgentScope Java 深度解析[实战]同一需求三套写法本篇发布后请把每行标题替换为对应文章的超链接形成专题矩阵互导闭环一、需求定义一个技术问答助手前四篇都在讲是什么、怎么选。这篇反过来用一个真实需求把三家拉出来遛一遛。需求一个技术问答助手要求用户问一个技术问题先从知识库检索相关文档RAG需要时能调用工具比如查当前时间以流式方式输出带依据的回答。说明以下代码为示意实现突出各框架的编程范式与代码量差异具体 API 以官方文档为准文末附链接。二、Spring AI 2.0 实现// 配置RAG 检索器挂进 Advisor 链ConfigurationclassAiConfig{BeanChatClientchatClient(ChatClient.Builderbuilder,VectorStorestore){returnbuilder.defaultAdvisors(QuestionAnswerAdvisor.builder(store).build()).build();}}// 工具Tool 声明被 ToolCallingAdvisor 自动发现ComponentclassTimeTools{Tool(description返回当前 UTC 时间)Stringnow(){returnInstant.now().toString();}}RestControllerclassAssistantController{privatefinalChatClientchatClient;AssistantController(ChatClient.Builderbuilder){this.chatClientbuilder.build();}GetMapping(value/ask,producesMediaType.TEXT_EVENT_STREAM_VALUE)FluxStringask(RequestParamStringq){returnchatClient.prompt().system(你是技术问答助手优先依据检索到的上下文回答).user(q).stream().content();// 流式输出}}特点命令式 FluentRAG 靠QuestionAnswerAdvisor挂载工具靠Tool自动发现流式返回FluxString。三、LangChain4j 实现interfaceAssistant{SystemMessage(你是技术问答助手优先依据检索到的上下文回答)FluxStringanswer(UserMessageStringquestion);// 流式}// 检索器ContentRetrieverretrieverEmbeddingStoreContentRetriever.builder().embeddingStore(store)// pgvector / InMemory 等.embeddingModel(embeddingModel).maxResults(3).build();// 工具classTimeTools{Tool(返回当前 UTC 时间)Stringnow(){returnInstant.now().toString();}}// 装配AssistantassistantAiServices.builder(Assistant.class).chatLanguageModel(model).contentRetriever(retriever)// 自动把检索结果注入上下文.tools(newTimeTools()).build();FluxStringanswerassistant.answer(Spring AI 2.0 需要哪个 Boot 版本);特点声明式AiServiceRAG 靠ContentRetriever自动注入工具靠Tool注入流式靠方法返回类型Flux自动切换。四、AgentScope Java 实现// 把检索知识库封装成一个工具交给 Agent 自主调用classKnowledgeTools{Tool(在技术知识库中检索相关文档)Stringsearch(ToolParamStringquery){returnvectorSearch(query);}}// 用 HarnessAgent 承载生产级 Agent长期记忆 / 会话持久化 / 沙箱HarnessAgentassistantHarnessAgent.builder().name(技术问答助手).model(model)// Qwen / OpenAI / Claude / Gemini….tools(newKnowledgeTools(),newTimeTools()).build();Responserespassistant.run(Spring AI 2.0 需要哪个 Boot 版本);特点Agent 编排式RAG 不是内建抽象而是封装成一个Tool让 Agent 自主决定何时调用用HarnessAgent直接获得记忆、持久化、沙箱能力。五、三份代码并排对比维度Spring AILangChain4jAgentScope Java代码风格命令式 Fluent声明式接口Agent 编排式RAG 方式QuestionAnswerAdvisorContentRetriever自动注入Tool封装检索Agent 自主调工具接入ToolBeanTool注入ToolToolParam流式FluxStringFluxString返回类型即语义事件系统32 类事件心智模型“给 Spring 服务加 AI 能力”“把 AI 服务当接口实现”“编排一个会自己干活的 Agent”额外白拿观测/自动配置记忆/护栏/非阻塞记忆/持久化/沙箱/HITL读法三者都能完成这个需求但**舒服程度取决于你的心智模型**——Spring 团队觉得第一列最顺Quarkus/纯 Java 团队觉得第二列最顺做多智能体的人觉得第三列才是正解。六、真实跑起来会遇到什么坑说明规避Boot 版本Spring AI 2.0 跑不了 Boot 3.x迁 Boot 4或先用 LangChain4j 双 Starter依赖数量LangChain4j 模块多容易引错按需引别一把梭*心智成本AgentScope 抽象高Demo 与生产的 API 不同先 ReActAgent 跑通再上 HarnessAgentRAG 效果三家都依赖检索质量上限切块策略 相似度阈值是真正的胜负手七、结论回到系列第 1 篇的那句话三个框架不在同一层。做单体智能本场景就是→Spring AISpring 栈 / Boot 4或LangChain4j跨框架 / 生态最全做多智能体自治系统→AgentScope Java。这个技术问答助手恰好是单体智能的典型所以Spring AI 与 LangChain4j 是更贴合的答案但如果你要把它升级成研究-写作-评审分工的 AI 团队AgentScope 的HarnessAgent 子智能体编排就是更优解。你正在做的项目是单体智能还是多智能体协作评论区聊聊我帮你对号入座。系列矩阵导航 [第 1 篇·总纲] 三框架选型深度横评含分层定位图 决策树) [第 2 篇·深度] Spring AI 2.0 深度解析 [第 3 篇·深度] LangChain4j 深度解析 [第 4 篇·深度] AgentScope Java 深度解析本文数据截至 2026-11-02代码为示意实现API 细节分别以 Spring AI、LangChain4j、AgentScope Java 官方文档为准。