Spring AI 面试题库
生成时间:2026-05-21 22:04
本轮 Spring AI 面试题库(带答案)
【面试题】1. Spring AI 的 ChatClient 和直接用 ChatModel 有什么区别?为什么要推出 ChatClient?
【标准答案】 ChatModel 是底层抽象,只负责发送 Prompt 拿到 Response,是"裸调用"。ChatClient 是 Spring AI 1.0 推出的高层统一入口,它做了三件事: 第一,Fluent API 链式调用,代码更清晰,比如 chatClient.prompt().user("xxx").call().content()。 第二,内置 Advisor 机制,可以把对话记忆、RAG 检索、日志追踪等能力以拦截器方式插进去,不用每次手动拼。 第三,统一了同步和流式响应的调用方式,call() 是同步,stream() 是流式。
面试可以说:"我们项目用 ChatClient 作为统一入口,对话记忆、RAG 增强都是通过 Advisor 配进去的,代码解耦,维护方便。"
【面试题】2. RAG 流程中 TokenTextSplitter 有什么作用?切分粒度怎么选?
【标准答案】 TokenTextSplitter 的作用是把长文档切成固定大小的文本块,因为大模型单次调用有 token 限制,向量检索也需要粒度合适的片段。
切分粒度选择原则:
- 太大(比如 2000 token):检索不精准,可能带进很多无关内容
- 太小(比如 100 token):语义被截断,"这个项目由三个模块组成"可能被切成三段,检索时只见树木不见森林
实战建议:一般用 300-500 token,配合 50-100 token 的重叠区(overlap),确保跨块的语义不会完全丢失。我们项目用的是 400 token + 80 overlap。
另外要提一点:切分时最好按段落、章节边界切,而不是硬切,这样语义更完整。
【面试题】3. Spring AI 的 Advisor 机制是什么?能解决哪些问题?
【标准答案】 Advisor 是 Spring AI 1.0 引入的拦截器架构,类似 Spring MVC 的 HandlerInterceptor 或 AOP,但它作用在 ChatClient 调用链路上。
核心解决的问题: 第一,对话记忆:MessageChatMemoryAdvisor 在请求前自动注入历史消息,响应后自动保存新消息。 第二,RAG 增强:QuestionAnswerAdvisor 在请求前先做向量检索,把相关文档拼到 Prompt 里。 第三,日志追踪、权限校验:可以自定义 Advisor 做统一的 traceId 注入、敏感词过滤等。
好处是这些能力可以组合、可插拔,不用每次调用都手动写一遍。
面试可以说:"我们封装了一个 TraceAdvisor,每次调用自动注入 traceId 到 system prompt,方便排查问题。"
【面试题】4. Function Calling 中 @Bean 注册的函数是怎么被调度的?
【标准答案】 Spring AI 的 Function Calling 流程分四步:
第一步,注册:用 @Bean 声明一个 Function<P, R> 类型的函数,Spring AI 自动扫描并生成 JSON Schema。
第二步,调用:用户问题进来,大模型判断需要调用函数,返回 tool_call 类型的响应,里面包含函数名和参数。
第三步,执行:Spring AI 拦截这个响应,根据函数名从 Bean 容器找到对应的函数,用参数执行,拿到结果。
第四步,回填:把函数执行结果作为 tool_response 发回大模型,大模型再基于结果生成最终答案。
关键点:整个过程是自动的,开发者只需要写函数实现,调度逻辑 Spring AI 框架完成。
【面试题】5. Spring AI 支持哪些向量数据库?它们各自适合什么场景?
【标准答案】 主流支持的向量库:
PGVector:适合已有 PostgreSQL 的项目,零额外运维成本,但性能一般,适合中小规模数据。
Redis:适合对延迟敏感的场景,已有 Redis 基础设施时复用成本低,但持久化需要配置。
Pinecone:全托管服务,免运维,适合快速验证和创业项目,但国内访问可能有问题。
Milvus:开源高性能,适合大规模向量检索,亿级数据也没问题,但运维成本高。
Chroma:轻量级嵌入式,适合本地开发测试,单机部署快速。
我们项目用的是 PGVector,因为本身就有 PostgreSQL 集群,向量数据量不大(百万级),复用现有基础设施最省事。
【面试题】6. Structured Output 用 BeanOutputConverter 时遇到过什么坑?
【标准答案】 几个典型坑:
第一,字段命名:大模型输出的 JSON key 默认是驼峰,但如果有 @JsonProperty 注解,要确保注解值和实际输出一致,否则映射失败。
第二,必填字段:如果 POJO 字段没有默认值且 LLM 没返回,反序列化会报错。建议用 Optional 或给默认值。
第三,嵌套对象:复杂嵌套结构 LLM 可能生成不规范,建议用 @Schema 注解明确描述每个字段的含义和类型。
第四,枚举值:LLM 生成的枚举值要和 Java 枚举完全匹配(包括大小写),最好在 prompt 里明确枚举范围。
我们踩过枚举的坑,后来在 system prompt 里加了一句:"status 字段只能是 ACTIVE、INACTIVE、DELETED 三种值",问题就解决了。
【面试题】7. Chat Memory 怎么做持久化?InMemoryChatMemory 有什么问题?
【标准答案】 InMemoryChatMemory 是内存实现,重启就丢失,只适合无状态场景或测试。
持久化方案: 第一,数据库:把 Message 列表序列化成 JSON 存到 MySQL/PostgreSQL,按会话 ID 查询。 第二,Redis:用 List 结构存历史消息,设置 TTL 自动过期。 第三,专业存储:有些向量库支持存原始文本,可以和向量数据放一起。
我们项目用的是 Redis,每个会话一个 key,存最近 20 条消息,设置 24 小时过期。读取时反序列化,通过 MessageChatMemoryAdvisor 注入。
关键点:不要存太多历史,token 会爆,一般保留最近 10-20 条或按 token 数截断。
【面试题】8. Spring AI 多模型切换怎么配置?生产环境怎么管理 API Key?
【标准答案】 配置切换:Spring AI 用 spring.ai.* 前缀,比如:
spring.ai.openai.api-key=xxxspring.ai.anthropic.api-key=xxxspring.ai.ollama.base-url=http://localhost:11434
代码里注入 ChatModel,Spring Boot 自动装配对应实现。多模型场景可以注入多个,用 @Qualifier 区分。
API Key 管理: 第一,外部化配置:坚决不写在代码里,用环境变量或配置中心(Nacos、Vault)。 第二,加密存储:配置中心里的 Key 要加密,应用启动时解密。 第三,轮换机制:定期更换 Key,有泄漏风险时能快速切换。 第四,按环境隔离:开发、测试、生产用不同 Key。
我们用 Vault 管理 API Key,Spring Boot 配合 spring-cloud-vault 启动时拉取,Key 在代码里零暴露。
【面试题】9. Spring AI 的 Observability 怎么做?监控哪些指标?
【标准答案】 Spring AI 集成了 Micrometer,可以直接对接 Prometheus、Grafana 等监控体系。
核心指标: 第一,调用次数:按模型、按接口统计调用频率。 第二,延迟:P50、P95、P99 响应时间,排查性能瓶颈。 第三,Token 消耗:输入输出 token 数,控制成本。 第四,错误率:失败请求比例,区分超时、限流、模型错误。 第五,向量检索延迟:RAG 场景的检索耗时。
我们项目配置了 Prometheus + Grafana,关键告警:
- 单次调用超过 30 秒
- 5 分钟错误率超过 5%
- Token 成本异常飙升
另外,每次调用会在日志里打 traceId,配合 ELK 做全链路追踪。
【面试题】10. Spring AI 1.0 相比之前的 Milestone 版本有什么重大更新?
【标准答案】 几个关键更新:
第一,ChatClient 统一入口:之前 ChatModel、StreamingChatModel、ImageModel 等都是独立入口,1.0 统一到 ChatClient 的 Fluent API,同步流式一把梭。
第二,Advisor 架构:之前对话记忆、RAG 增强都是手动拼,1.0 引入 Advisor 机制,拦截器模式,可组合可插拔。
第三,VectorStore 接口统一:之前各向量库实现不统一,1.0 抽象了标准接口,切换向量库改配置就行。
第四,配置前缀统一:全部用 spring.ai.*,之前有些用 spring.ai.openai.*,有些用其他前缀,现在规范了。
第五,Spring AI MCP 支持:支持 Model Context Protocol 协议,可以接更多外部工具和上下文。
面试可以说:"我们项目从 Milestone 升级到 1.0,最大的收益是 ChatClient 统一入口和 Advisor 架构,代码简化了很多。"
题目统计
- 本次生成:10 道面试题
- 覆盖模块:核心架构、RAG、Function Calling、向量数据库、结构化输出、对话记忆、多模型管理、监控、版本更新
- 适用版本:Spring AI 1.0 正式版