1. 引言
2024 年以来,大模型应用的开发范式从「手工拼接 Prompt」快速演进为「框架驱动的工程化开发」。对于后端工程师,尤其是 Java 技术栈团队,选择一款合适的 AI 框架决定了项目初期的开发效率、中期的可维护性以及后期的扩展能力。
市面上的 AI 框架数量不少,但真正值得在后端工程中认真评估的,主要有四个方向:
- Spring AI:Spring 官方出品,深度融入 Spring 生态,适合传统 Java 企业级应用。
- LangChain4j:LangChain 的 Java 移植版,API 设计贴近 LangChain 思想,生态活跃。
- AgentScope:阿里巴巴开源的智能体(Agent)框架,强调多智能体协作与可视化。
- Embabel:轻量级嵌入式 AI 编排库,追求零依赖、低侵入、易测试(国内较新出现的小众方案)。
本文不会停留在「概念介绍」层面,而是通过同一个业务场景——智能客服问题分流与回答——分别用四个框架实现,并给出可运行的代码。最后从架构、性能、生态、学习曲线、生产落地等维度做横向对比,帮助你做出选型决策。
2. 四大框架速览
在写代码之前,先建立整体认知。
| 维度 | Spring AI | LangChain4j | AgentScope | Embabel |
|---|---|---|---|---|
| 出品方 | Spring 官方 | 社区(LangChain Java 版) | 阿里巴巴 | 社区/轻量方案 |
| 主要语言 | Java | Java | Python(核心) | Java |
| 定位 | 企业级 Spring 集成 | 通用 LLM 应用开发 | 多智能体系统 | 嵌入式轻量编排 |
| 依赖侵入 | 高(依赖 Spring Boot) | 中(独立可用) | 低(Python 包) | 极低(核心无外部依赖) |
| 多模型支持 | OpenAI、Azure、Ollama、通义等 | 非常丰富(30+) | 阿里系模型优先 | 适配主流 OpenAI 兼容接口 |
| RAG 能力 | 内置 | 内置且成熟 | 可组合实现 | 轻量实现 |
| 智能体(Agent) | 基础支持 | 支持 Function Calling | 核心能力 | 基础编排 |
| 学习曲线 | 平缓(Spring 开发者友好) | 中等 | 中等(需 Python) | 低 |
| 生产成熟度 | 高 | 高 | 中高 | 中低(较新) |
一句话总结:
- 你已经是 Spring 深度用户,希望无缝集成 →Spring AI。
- 你想要 LangChain 同款理念、不受 Spring 绑定、生态最全 →LangChain4j。
- 你的核心诉求是「多智能体协作 / Agent 编排」→AgentScope。
- 你想要极致轻量、快速嵌入现有系统、方便测试 →Embabel。
3. 统一实战场景与环境准备
3.1 业务场景
我们要实现一个「智能客服分流系统」,需求如下:
- 用户输入一句话(如
"我的订单什么时候发货?")。 - 系统先做意图识别,判断属于「物流查询」「退款咨询」「技术故障」中的哪一类。
- 根据意图调用对应工具(模拟查询订单、查询退款进度、查询系统状态)。
- 最后用大模型整理成自然语言答复返回给用户。
这是一个典型的「意图识别 + Function Calling + 结果汇总」链路,能充分体现框架的核心能力差异。
3.2 通用环境
- 模型服务:本文统一使用 OpenAI 兼容接口(可替换为 Ollama 本地模型、通义千问、DeepSeek 等)。
BASE_URL:https://api.openai.com(或本地 Ollama 的http://localhost:11434)MODEL_NAME:gpt-4o-mini(可替换为qwen-plus、deepseek-chat)API_KEY:你的密钥
- JDK:17+(Spring AI 与 LangChain4j 建议 17 以上)
- 构建工具:Maven
后文代码中的密钥统一用环境变量注入,避免硬编码。
4. Spring AI 实战
4.1 引入依赖
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0</version></dependency>同时需要在pom.xml中添加 Spring AI 的里程碑仓库:
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url></repository></repositories>4.2 配置文件
在application.yml中配置模型接入:
spring:ai:openai:base-url:${AI_BASE_URL:https://api.openai.com}api-key:${AI_API_KEY}chat:options:model:${AI_MODEL:gpt-4o-mini}temperature:0.34.3 定义工具函数
Spring AI 通过@Tool注解将普通 Java 方法暴露给大模型:
importorg.springframework.ai.tool.annotation.Tool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.stereotype.Component;@ComponentpublicclassCustomerServiceTools{@Tool(name="query_order_status",description="根据订单号查询物流状态")publicStringqueryOrderStatus(@ToolParam(description="订单号")StringorderId){// 模拟数据库查询return"订单 "+orderId+" 已于 2026-10-06 发货,预计 10-09 送达,物流单号 SF1234567890";}@Tool(name="query_refund_progress",description="根据订单号查询退款进度")publicStringqueryRefundProgress(@ToolParam(description="订单号")StringorderId){return"订单 "+orderId+" 的退款申请已审核通过,预计 3 个工作日内原路退回";}@Tool(name="check_system_health",description="检查系统当前运行状态")publicStringcheckSystemHealth(){return"系统运行正常,所有服务在线,最近一次故障发生在 30 天前";}}4.4 编写服务类
importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.stereotype.Service;@ServicepublicclassCustomerServiceAgent{privatefinalChatClientchatClient;publicCustomerServiceAgent(ChatClient.Builderbuilder,CustomerServiceToolstools){this.chatClient=builder.defaultSystem(""" 你是一名电商客服助手。请先判断用户意图,属于以下三类之一: 1. 物流查询:用户询问发货、物流、配送。 2. 退款咨询:用户询问退款、退货、金额退回。 3. 技术故障:用户反馈系统异常、无法使用。 判断意图后调用对应工具,并根据工具返回结果整理成友好、简洁的答复。 如果无法判断,请直接询问用户补充信息。 """).defaultTools(tools).build();}publicStringchat(StringuserMessage){returnchatClient.prompt().user(userMessage).call().content();}}4.5 控制器与启动类
importorg.springframework.web.bind.annotation.*;@RestController@RequestMapping("/api/chat")publicclassChatController{privatefinalCustomerServiceAgentagent;publicChatController(CustomerServiceAgentagent){this.agent=agent;}@PostMappingpublicStringchat(@RequestBodyChatRequestrequest){returnagent.chat(request.message());}publicrecordChatRequest(Stringmessage){}}启动类使用标准的 Spring Boot 入口:
@SpringBootApplicationpublicclassSpringAiDemoApplication{publicstaticvoidmain(String[]args){org.springframework.boot.SpringApplication.run(SpringAiDemoApplication.class,args);}}4.6 运行效果
请求POST /api/chat,携带:
{"message":"我的订单 A10086 什么时候发货?"}大模型会先判断为「物流查询」意图,调用queryOrderStatus("A10086"),最终返回类似:
您的订单 A10086 已于 2026-10-06 发货,物流单号 SF1234567890, 预计 10-09 送达,请您留意物流信息。Spring AI 小结:与 Spring Boot 的集成体验非常顺滑,@Tool注解让函数调用变得简单,适合已深度使用 Spring 的团队。缺点是必须引入 Spring 全家桶,对非 Spring 项目侵入性较大。
5. LangChain4j 实战
5.1 引入依赖
LangChain4j 模块化程度很高,本场景需要引入 OpenAI 集成和 Core:
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>1.0.0</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>1.0.0</version></dependency>5.2 定义工具
LangChain4j 使用@Tool注解(来自langchain4j核心包):
importdev.langchain4j.agent.tool.Tool;importdev.langchain4j.agent.tool.P;publicclassCustomerServiceTools{@Tool("根据订单号查询物流状态")publicStringqueryOrderStatus(@P("订单号")StringorderId){return"订单 "+orderId+" 已于 2026-10-06 发货,预计 10-09 送达,物流单号 SF1234567890";}@Tool("根据订单号查询退款进度")publicStringqueryRefundProgress(@P("订单号")StringorderId){return"订单 "+orderId+" 的退款申请已审核通过,预计 3 个工作日内原路退回";}@Tool("检查系统当前运行状态")publicStringcheckSystemHealth(){return"系统运行正常,所有服务在线,最近一次故障发生在 30 天前";}}5.3 构建 Agent 服务
LangChain4j 提供了 AI Services 这种声明式编程模型,也可以使用链式 API。这里展示更灵活的链式 API:
importdev.langchain4j.memory.chat.MessageWindowChatMemory;importdev.langchain4j.model.openai.OpenAiChatModel;importdev.langchain4j.service.AiServices;publicclassCustomerServiceAgent{publicstaticStringchat(StringuserMessage){// 1. 构建模型OpenAiChatModelmodel=OpenAiChatModel.builder().baseUrl(System.getenv("AI_BASE_URL")).apiKey(System.getenv("AI_API_KEY")).modelName(System.getenv("AI_MODEL")==null?"gpt-4o-mini":System.getenv("AI_MODEL")).temperature(0.3).build();// 2. 使用 AI Services 声明式绑定工具Assistantassistant=AiServices.builder(Assistant.class).chatLanguageModel(model).tools(newCustomerServiceTools()).chatMemory(MessageWindowChatMemory.withMaxMessages(10)).build();returnassistant.answer(userMessage);}interfaceAssistant{@dev.langchain4j.service.SystemMessage(""" 你是一名电商客服助手。请先判断用户意图,属于以下三类之一: 1. 物流查询:用户询问发货、物流、配送。 2. 退款咨询:用户询问退款、退货、金额退回。 3. 技术故障:用户反馈系统异常、无法使用。 判断意图后调用对应工具,并根据工具返回结果整理成友好、简洁的答复。 如果无法判断,请直接询问用户补充信息。 """)Stringanswer(StringuserMessage);}}5.4 运行入口
publicclassLangChain4jDemo{publicstaticvoidmain(String[]args){Stringreply=CustomerServiceAgent.chat("我的订单 A10086 什么时候发货?");System.out.println(reply);}}5.5 LangChain4j 特色能力演示
LangChain4j 在 RAG 方面非常成熟,这里补一段极简的向量检索示例,展示其生态优势:
importdev.langchain4j.data.document.Document;importdev.langchain4j.data.document.splitter.DocumentSplitters;importdev.langchain4j.data.segment.TextSegment;importdev.langchain4j.memory.chat.MessageWindowChatMemory;importdev.langchain4j.model.embedding.EmbeddingModel;importdev.langchain4j.model.openai.OpenAiEmbeddingModel;importdev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;importdev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;// 简易 RAG:将知识库切片、向量化、检索增强EmbeddingModelembeddingModel=OpenAiEmbeddingModel.builder().baseUrl(System.getenv("AI_BASE_URL")).apiKey(System.getenv("AI_API_KEY")).modelName("text-embedding-3-small").build();InMemoryEmbeddingStore<TextSegment>store=newInMemoryEmbeddingStore<>();Documentdoc=Document.from("退换货政策:支持 7 天无理由退货,质量问题 15 天内可换新。");varsegments=DocumentSplitters.recursive(300,50).split(doc);store.addAll(segments.stream().map(seg->embeddingModel.embed(seg).content()).map(embedding->dev.langchain4j.data.embedding.Embedding.from(embedding)).toList(),segments);EmbeddingStoreContentRetrieverretriever=EmbeddingStoreContentRetriever.builder().embeddingStore(store).embeddingModel(embeddingModel).maxResults(3).build();LangChain4j 小结:API 设计贴近 LangChain 原版理念,模块化极好,既可以轻量使用也能构建复杂 RAG/Agent 链路。不强制绑定 Spring,对纯 Java 项目和微服务都友好。缺点是配置项较多,初次上手需要理解其模块划分。
6. AgentScope 实战
AgentScope 是阿里巴巴开源的智能体框架,核心语言是 Python,在 Java 生态中需要借助 Python 服务或网关调用。如果你的团队以 Java 为主,这一点需要重点评估。
6.1 安装
pipinstallagentscope6.2 配置模型
AgentScope 支持通过配置文件或代码注册模型。这里使用代码方式注册一个 OpenAI 兼容模型:
importagentscopefromagentscope.modelimportOpenAIChatModelfromagentscope.agentimportReActAgentfromagentscope.toolimportToolkit,ToolResponse# 初始化 AgentScopeagentscope.init()# 注册 OpenAI 兼容模型model=OpenAIChatModel(config_name="my_qwen",model_name="qwen-plus",api_key="你的API_KEY",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)6.3 定义工具
AgentScope 的 Toolkit 允许把普通 Python 函数包装成工具:
fromagentscope.toolimportToolkitdefquery_order_status(order_id:str)->str:"""根据订单号查询物流状态。"""returnf"订单{order_id}已于 2026-10-06 发货,预计 10-09 送达,物流单号 SF1234567890"defquery_refund_progress(order_id:str)->str:"""根据订单号查询退款进度。"""returnf"订单{order_id}的退款申请已审核通过,预计 3 个工作日内原路退回"defcheck_system_health()->str:"""检查系统当前运行状态。"""return"系统运行正常,所有服务在线,最近一次故障发生在 30 天前"toolkit=Toolkit()toolkit.register_tool_function(query_order_status)toolkit.register_tool_function(query_refund_progress)toolkit.register_tool_function(check_system_health)6.4 构建多智能体
AgentScope 的核心优势是多智能体协作。我们可以构建两个 Agent:一个负责意图识别,一个负责执行工具并回复:
fromagentscope.agentimportReActAgentfromagentscope.messageimportMsg# 意图识别智能体intent_agent=ReActAgent(name="意图识别员",model=model,sys_prompt="""你是客服意图识别专家。 将用户输入归类为以下之一:物流查询、退款咨询、技术故障。 只输出意图名称,不要输出其他内容。""",)# 工具执行智能体service_agent=ReActAgent(name="客服执行员",model=model,toolkit=toolkit,sys_prompt="""你是客服执行员。根据意图调用相应工具查询信息, 并将结果整理成友好、简洁的答复返回给用户。""",)# 编排:意图识别 -> 工具执行defhandle_user_message(user_input:str)->str:intent_msg=Msg("user",user_input,role="user")intent_result=intent_agent(intent_msg)intent=intent_result.get_text_content().strip()prompt