Spring AI vs LangChain4j(怎么看)
结论(建议):主路径优先 Spring AI(你已是 Spring Boot 3.4.3);用 Port 包住模型调用,避免业务代码锁死某一框架。
LangChain4j 作为备选(RAG/Tool 抽象更「AI 框架味」时再评估)。
不要两个一起上生产。 Python + LangGraph 仅用于编排实验或后期重工作流。
1. 它们各自解决什么
| Spring AI | LangChain4j | |
|---|---|---|
| 定位 | Spring 生态的 AI 集成层 | Java 侧偏 LangChain 理念的 AI 框架 |
| 与 Boot | 一等公民,配置/Bean 自然 | 可集成,但要自己粘合更多 |
| Chat / Streaming | ✅ | ✅ |
| Structured Output | ✅(持续增强) | ✅ 较成熟 |
| Tool / Function Calling | ✅ | ✅ |
| RAG 组件 | ✅(Advisor、向量等) | ✅ 生态很全 |
| 与你现状契合度 | 高(Boot 3.4) | 中高 |
| 国内资料/阿里云衔接 | Spring AI Alibaba 等路线活跃 | 也有,但和 Boot「官方感」弱一点 |
两者都能做你的 C 端 MVP 和 B 端只读分析。差异在工程手感与生态绑定,不是能力有无。
2. 针对 TourMate 的推荐
主推荐:Spring AI
理由:
- 你不会为了学 AI 丢掉 Java/Spring——文档原底稿也是这个判断。
- C 端 MVP 核心是 Structured Output + 1~2 个 Tool + 调现有 Service,Spring AI 足够。
- 配置、观测、与现有
application-*.yml、Bean 装配路径最短。 - 若日后用通义等国内模型,Spring AI 生态有现成对接叙事。
何时改选 / 加选 LangChain4j
- 你做完 Spike 后发现某条 RAG/Agent 抽象在 Spring AI 里明显别扭。
- 团队更熟 LangChain4j,或已有可复用组件。
- 仍建议:只保留一个作为生产依赖。
Python + LangGraph 放哪
- 学习 / Spike:独立小目录或小仓,验证 State / Checkpoint / HITL。
- 生产默认:B 端第一期用 Java 固定工作流(状态机或显式步骤编排)即可。
- 等「长任务恢复 + 多级人工审批」成为日常痛点,再让 Python 编排调主站 Tool API。
这与原底稿「Java 主业务、Python 做编排实验」一致,只是把「实验」和「上线」边界写死。
3. 防锁定:无论选谁都要做的事
在 Domain 或 Application 边缘定义 Port,例如:
ILlmPort.chat(messages, schema) → Structured DTO
ILlmPort.stream(...)Infrastructure 里用 Spring AI(或 LangChain4j)实现。
这样:
- 换模型厂商 ≠ 换业务代码
- 换框架 ≠ 重写活动查询
- 评测可以绕过真实 LLM 打桩
4. Spike 建议(2 天内可做完)
不要先建大仓,在主站或一次性分支里验证:
- 通义 / OpenAI 兼容接口:流式 Chat
- JSON Schema →
ActivitySearchIntent - Function Calling 调一个假
search_activities - 看 Token、超时、错误重试是否好控
过关后再正式加模块依赖与 API。
5. 一句话
Spring AI 还是 LangChain4j?
先 Spring AI + Port 隔离;LangChain4j 当备胎;LangGraph 当工作流实验室,不是 C 端 MVP 的前提。