Spring AI 实战(11):收官!10 道面试高频题 + 一张脑图带走全系列

本篇是 Spring AI 系列第 11 篇,也是收官篇。前 10 篇我们把"用"(#1–#9)和"原理"(#10)都铺完了。最后这一篇把全系列收成一张可收藏的知识网,再给你 10 道面试高频题 + 一份避坑清单——既能当面试弹药,也能当复习地图。如果你正在准备 Java / 后端 / AI 应用岗的面试,这篇建议直接收藏。

这篇怎么用最高效

  1. 面试前:把第五节「10 道高频题」过一遍,每题能口述 3 句话就算过关。
  2. 复习时:脑图当目录,哪块模糊回对应篇重读(前文回顾已给你链好)。
  3. 做项目时:避坑清单贴在显示器边,比查文档快。

一、全系列知识脑图(文字版,建议收藏)

Spring AI 全栈
├─ 核心抽象
│   ├─ ChatClient       统一门面(prompt/call/stream)
│   ├─ ChatModel        模型抽象(OpenAI/DeepSeek/Ollama…)
│   └─ 分层思想         业务只依赖接口,换实现不改代码
├─ 输入增强
│   ├─ PromptTemplate   外部 .st 模板,参数填充
│   ├─ ChatMemory       记忆(InMemory / Alibaba MySQL+Redis)
│   └─ Advisor 链       拦截器,order 定顺序(日志→记忆→RAG→模型)
├─ 输出控制
│   ├─ 结构化输出        BeanOutputConverter → Java 对象
│   └─ 多模态输入        UserMessage + Media(看图)
├─ 能力扩展
│   ├─ Tool Calling      @Tool 暴露 Java 方法给 AI 调
│   ├─ MCP              标准协议接外部工具/数据源(N×M→N+M)
│   └─ 文生图            ImageModel(DALL·E / 万相)
├─ 知识增强(RAG)
│   ├─ 文档加载 Reader   Text/PDF/Tika
│   ├─ 切分 Splitter     TokenTextSplitter(粒度定召回)
│   ├─ 向量化 Embedding 维度必须与向量库一致
│   ├─ 存储 VectorStore  PgVector(默认)/ Redis / Milvus(海量)
│   └─ 检索增强          QuestionAnswerAdvisor + SearchRequest
└─ 工程化
    ├─ 自动装配          starter + @ConditionalOnClass
    └─ 选型对比          Spring AI vs LangChain4j vs Alibaba

这棵树从下往上看:越往下越偏工程化(自动装配、选型),越往上越偏业务价值(RAG、多模态)。记不住细节时,先记住这六层,再往里填。


二、10 道面试高频题(附答题要点)

1. Spring AI 和直接调 OpenAI SDK 比,优势在哪?
答:统一抽象屏蔽厂商差异,换模型只换 starter+配置;内置 PromptTemplate、记忆、RAG、工具调用、Advisor 等工程能力;与 Spring 生态无缝集成(DI、配置中心、监控)。直接调 SDK 则每家 API 碎片化、换模型重写、缺工程化。

2. ChatClient 和 ChatModel 是什么关系?
答:ChatClient 是面向开发者的统一门面(fluent API),ChatModel 是底层模型抽象接口。ChatClient 内部委托 ChatModel 发请求。业务代码依赖 ChatClient,与具体厂商解耦。

3. 结构化输出怎么实现?为什么模型返回的是 JSON 却能变 Java 对象?
答:用 BeanOutputConverter<T>(或其他 StructuredOutputConverter),它把目标类的字段结构生成格式说明塞进 Prompt,模型按格式输出 JSON,converter 再反序列化。要点:字段名要对齐、数字别带单位、必要时 @JsonProperty

4. 工具调用(Tool Calling)的原理?
答:用 @Tool 把 Java 方法描述(名称+参数 schema+说明)交给模型;模型根据用户意图决定是否调用、提取参数;框架执行方法并把结果回传模型;模型整合后给出自然语言回答。description 写不清,模型就不调。面试加分项:一次"带工具的回答"可能触发两次 ChatModel.call——第一次拿 tool_calls,第二次拿最终答案。

5. RAG 的完整链路是什么?切分粒度为什么重要?
答:加载文档 → TokenTextSplitter 切分 → EmbeddingModel 向量化 → 存入 VectorStore;问答时把问题向量化,检索 topK 相似块,QuestionAnswerAdvisor 拼进 Prompt。切分粒度直接决定召回质量:太大杂糅、太小语义断裂。

6. 向量库怎么选型?
答:先复用已有的(已在用 PG 选 PgVector,已在用 Redis 选 Redis);默认 PgVector(运维最省、百万级够用);知识上千万/专业检索再上 Milvus。第一死穴:向量维度必须和 Embedding 模型一致。

7. MCP 解决了什么问题?和 @Tool 有什么区别?
答:MCP 是标准化的"模型-工具/数据源"协议,把 N 个模型 × M 个工具的连接降到 N+M(统一协议)。@Tool 是 Spring AI 内把方法暴露给模型的注解,作用域在单个应用内;MCP 让任意兼容的 server 能力可被任意模型复用,解耦更彻底。

8. Advisor 责任链是什么?顺序错了会怎样?
答:Advisor 是拦截器,在请求发出前和响应回来后各介入一次,getOrder() 定顺序(典型:日志→记忆→RAG→模型)。顺序错会导致记忆/RAG 失效(如记忆在 RAG 之后注入,模型看不到历史)。

9. 多模态在 Spring AI 里怎么分?
答:分两半——"看图"靠 UserMessage+Media(ChatModel),"画图"靠 ImageModel(文生图)。二者独立抽象,模型必须本身支持对应能力。

10. 自动装配是怎么把 ChatClient 造出来的?
答:starter 含 AutoConfiguration.imports@ConditionalOnClass 检测 SDK 类存在才装配;读取 spring.ai.* 配置创建 ChatModelChatClient 默认 bean。换 starter 即换底层实现,业务零改。


三、避坑清单(直接背)

正确做法
换 Embedding 模型必须重建向量索引(维度绑定)
记忆 / RAG 顺序记忆 Advisor 必须在 RAG Advisor 之前
多 starter 并存@Autowired ChatClient 可能多 bean 冲突,用 @Primary
工具不调用@Tool 的 description 写清,模型才认
文生图 URL返回的是临时 URL,要持久化得自己落库
纯文本模型硬塞图DeepSeek 等不支持多模态,塞 Media 会失败
切分粒度远比"用什么向量库"更影响 RAG 效果
流式调用.stream() 返回 Flux,非 WebFlux 环境要 .block() 或正确订阅
Advisor 没生效defaultAdvisors(...)(全局)而非 advisor(...)(单次)

四、Spring AI vs LangChain4j vs Spring AI Alibaba

维度Spring AILangChain4jSpring AI Alibaba
定位Spring 官方抽象Java 版 LangChainSpring AI 的阿里增强(社区)
生态Spring 原生框架中立绑定阿里云(通义/百炼)
记忆/存储标准接口自带实现提供 Alibaba MySQL/Redis Starter
图形化/低码有部分增强
选择建议已在 Spring 体系、要标准抽象想框架中立、快速上手深度用阿里云模型/基础设施

三者不互斥:Spring AI 是底座,Alibaba 是在其上补阿里云适配与开箱即用组件。


五、后续学习路径

  1. 动手:把本系列示例收敛到一个 GitHub 仓库(part01~part11),跑通每个 demo。
  2. 深入源码:读 ChatClient 默认实现与至少一个模型的 ChatModel 实现,看 Advisor 链怎么驱动。
  3. 做项目:用 internal-knowledge-base(企业内部知识库)这类真实场景串起 Tool Calling + RAG + 记忆,比单篇练更有体感。
  4. 关注版本:Spring AI 1.0 GA 后迭代快,盯官方 migration guide,避免 API 漂移。

小结

这是本系列收官篇,把前 10 篇收成一张网:

  • 脑图:核心抽象 → 输入增强 → 输出控制 → 能力扩展 → 知识增强(RAG) → 工程化,六块串成全栈。
  • 10 道面试题:覆盖 ChatClient/ChatModel 关系、结构化输出、工具调用、RAG 链路、向量库选型、MCP、Advisor 链、多模态、自动装配——基本是 Java AI 岗的高频弹药。
  • 避坑清单:维度绑定、Advisor 顺序、多 bean 冲突、description 写清、URL 落库、模型能力矩阵、切分粒度、流式处理、Advisor 注册方式,共 9 条。
  • 三者关系:Spring AI 是底座,LangChain4j 框架中立,Alibaba 补阿里云适配,按需选用。

到这里,Spring AI 从"为什么用"到"怎么用"再到"为什么能这么用",整条线就通了。感谢一路看到这里——收藏这张脑图和面试题,面试前翻一遍,比临时抱佛脚管用得多。


如果这篇对你有帮助,点个关注 👀 我会持续更新 Spring AI 实战系列,从聊天、RAG 到原理篇篇带完整代码,关注不迷路。

博主:10 年 Java 全栈开发,优质创作者。专注 Spring 源码、架构设计与 Spring AI 实战。

前文回顾:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不才不才不不才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值