Spring AI 是否“鸡肋”?——聊聊它对比 Dify 的真实护城河

Spring AI 是否“鸡肋”?——聊聊它对比 Dify 的真实护城河

CoderJia 33 2026-01-12

自从 Spring AI 出现,就经常看到有工程师在吐槽:“既然有了 Dify、Coze 这种好用的可视化编排平台,Spring AI 这种纯代码框架是不是有点鸡肋?感觉就是把 Agent 那套逻辑硬搬回代码里,既没有工作流直观,发布还麻烦。”

说实话,我刚接触 Spring AI(包括 Spring AI Alibaba)的时候,第一反应也是这样。像 Dify、n8n 拖拖拽拽就能搞定的 RAG 和 Agent,我用 Spring AI 还要写一堆 Configuration 和 Service,这不是历史倒退吗?

但随着自己在真实的业务开发中要落地 AI 功能时,才发现事情并不是这样。Spring AI 和 Dify 其实是两个维度的产物:Dify 是给产品经理和运维看的“装修好的样板间”,而 Spring AI 是给架构师和开发者准备的“钢筋混凝土”。

针对你提出的疑惑,我们从 Java 应用开发和 AI 工程化两个角度,剥开表象聊聊本质。

一、 核心分歧:是“调用能力”还是“融入业务”?

大家提到的第一点疑惑非常典型:“底层都是调模型,企业应用也不会有太大性能突破,瓶颈都在模型服务器。”

这话对了一半。模型推理确实是物理瓶颈,但在企业级应用中,瓶颈往往不只在“推理”,而在“上下文的获取”和“结果的执行”。

Dify 的局限

Dify 非常适合独立场景。比如要做一个“公司知识库问答”或者“客服机器人”,Dify 是无敌的。因为它和你的核心业务系统是松耦合的。

但在复杂的业务流中,Dify 就显得力不从心了。

Spring AI 的优势

举个真实的 Java 开发场景:“在这个电商订单系统中,用户想问‘我上周买的那个红色杯子发货了吗?如果没有,帮我改成蓝色’。”

如果用 Dify:
你需要给 Dify 写好几个 HTTP API 工具:

  1. get_order_history(user_id)
  2. check_shipping_status(order_id)
  3. update_product_color(order_id, color)

然后 Dify 通过像前端开发一样网络请求你的 Java 后端接口。这中间涉及到鉴权、网络延迟、以及数据一致性问题。如果业务逻辑变了,就得同时改 Java 代码和 Dify 的配置。

如果用 Spring AI:
这就变成了原生 Java 方法的调用。Spring AI 的 Function Calling 机制可以直接绑定现有的 @Service bean

// Spring AI 可以直接把这个 Bean 注册为 Agent 的工具
@Service
public class OrderService implements Function<OrderRequest, OrderStatus> {
  
    @Autowired
    private OrderRepository orderRepo; // 直接访问数据库,不用走 HTTP
  
    @Transactional // 事务控制!这是 Dify 做不到的
    public OrderStatus apply(OrderRequest request) {
        // 1. 查库
        // 2. 校验库存
        // 3. 锁定库存
        // 4. 修改订单
        // 这里的事务回滚、异常处理,完全遵循你现有的 Spring 体系
    }
}

优势总结: Spring AI 允许 AI 侵入到你的 Service 层内部。它能复用你的事务管理器(Transaction Manager)、安全上下文(Spring Security)和数据库连接池。这不是简单的“搬运 Agent”,而是让 AI 拥有了操作业务的“手”。

二、 所谓的“死板发布流程”,恰恰是企业的生命线

大家提到的第二点:“企业应用上线要走严格发布流程,灵活性不强。”

初听起来像是缺点,但在公司眼中,这叫 “可治理性(Governance)”

1. 版本控制与代码审查

Dify 的工作流通常保存在数据库或 YAML 导出文件中。当你的 Prompt 从 V1 变到 V2,或者你的 RAG 检索逻辑变了,在 Dify 里很难做细粒度的版本对比。

Spring AI 把 Prompt、参数配置、工具定义全部代码化了。

  • Prompt 也是代码,例如存放在 src/main/resources/prompts 下。
  • 你可以用 Git 管理变更记录:“2024-01-12:优化了 Prompt 的 System 角色设定,修复了幻觉问题”。
  • 这就意味着 AI 逻辑的变更可以走 Code Review,可以回滚,可以配合 CI/CD 流水线进行自动化测试。

2. 可测试性

你很难对 Dify 的一个复杂工作流写“单元测试”。你只能端对端地测。
而在 Spring AI 中,你可以 Mock 底层的 ChatClient,专门测试你的 OutputParser 是否能正确解析 JSON,或者测试你的 Function 在参数缺失时是否抛出了正确的异常。

对于企业核心业务(比如涉及资金、审批),这种“死板”的测试和发布流程是必须的兜底。

三、 性能瓶颈

对于大家关心的性能问题,确实,Spring AI 加速不了 GPU 的推理速度。但是,它能决定你的应用服务器在等待 GPU 响应时,会不会被拖垮。

AI 交互是典型的 Long-polling(长耗时) 任务。

  • Python (Dify 的常见后端) 在处理高并发长连接时,资源消耗相对较高。
  • Spring AI 从设计之初就深度支持 Project Reactor (也就是之前提过的 WebFlux)。
    当几千个用户同时在等待大模型吐字时,Spring AI 可以利用非阻塞 I/O,只用极少的线程挂起等待,而把 CPU 资源释放给其他业务处理。
// Spring AI 的流式响应,天然契合 Reactive Stack
public Flux<String> chat(String message) {
    return chatClient.prompt()
        .user(message)
        .stream() // 流式返回,不占用过多内存
        .content();
}

这解决的不是模型慢的问题,而是应用服务器崩不崩的问题。

四、 什么时候该用谁?

说了这么多,不是说 Dify 不好。Dify 和 Spring AI 其实是互补的:

什么时候用 Dify/Coze?

  • 快速原型验证(POC):老板明天就要看效果。
  • 非核心业务:企业内部文档问答、行政助手、HR 问答。
  • 非技术人员主导:运营或 PM 需要频繁调整 Prompt 和流程,不想依赖开发发版。
  • 独立应用:不需要深度读写核心业务库。

什么时候用 Spring AI?

  • 核心业务集成:AI 需要直接操作订单、资金、审批流(涉及事务)。
  • 高复杂度逻辑:业务逻辑复杂到用“工作流连线”已经画成蜘蛛网了,不如写代码清晰。
  • 需要极致的可观测性:需要把 AI 的 Token 消耗、耗时集成到现有的 Micrometer/Prometheus/Grafana 监控体系中。
  • 国产化适配:比如 Spring AI Alibaba 对通义千问等国产模型的适配,在 Java 生态里做到了配置即用,这对于国内企业合规很重要。

总结

Spring AI 并没有带来算法层面的突破,它的价值在于 “工程化”

它把狂野的 AI 关进了 Spring 的笼子里。虽然失去了随意拖拽的自由,但换来了类型安全、事务一致性、可测试性和企业级的稳定性。

对于 Java 开发者来说,Spring AI 不是要你去造一个新的 Dify,而是让你手里现有的千万行 Java 代码,能“听懂人话”。 这才是它真正的用途。