Skip to content

Spring AI 面试题库(2026-05-21 23:28) ​


【面试题】1. Spring AI中ChatClient和ChatModel的核心区别是什么?实际项目如何选择? ​

【标准答案】 ChatModel是底层模型接口,直接对接各个AI供应商(OpenAI、Anthropic等),提供基础的chat能力。ChatClient是Spring AI 1.0推出的统一入口,在ChatModel之上封装了Fluent API、Advisor机制、对话记忆等高级特性。

实际选择很简单:

  • 直接用ChatClient:绝大多数业务场景,需要对话记忆、工具调用、Prompt模板等高级功能时
  • 直接用ChatModel:只需要裸模型调用、性能敏感、或者需要更底层控制的场景

简单说:ChatClient是Spring AI推荐的"标准姿势",ChatModel是给高级玩家的"底座"。


【面试题】2. Spring AI的Advisor机制是什么?在RAG场景中如何应用? ​

【标准答案】 Advisor是Spring AI 1.0引入的拦截器机制,允许在请求发送到模型前后插入自定义逻辑,类似于Spring MVC的Interceptor或AOP。

在RAG场景中的典型应用:

  • QuestionAnswerAdvisor:自动执行向量检索,将相关文档注入Prompt
  • 自定义检索Advisor:在请求前做Query改写、关键词提取
  • 后处理Advisor:对模型输出做合规过滤、格式校验

核心优势是把横切关注点(检索、记忆、日志)从业务代码中剥离,实现可插拔的架构设计。面试时强调:Advisor让RAG从"硬编码流程"变成"可配置管道",符合Spring的设计哲学。


【面试题】3. Spring AI的TokenTextSplitter有哪些参数?生产环境如何调优? ​

【标准答案】 核心参数:

  • chunkSize:单个文本块的最大token数(默认800)
  • chunkOverlap:相邻块的token重叠数(默认100)
  • keepSeparator:是否保留分隔符(如段落、标题)

生产调优策略:

  1. 根据模型上下文窗口调整:GPT-4可用更大chunk(1500-2000),小模型用800-1000
  2. 重叠率10-15%为宜:太小丢失上下文,太大增加存储和检索成本
  3. 保留语义分隔符:按段落、章节切分比硬切效果好
  4. 监控召回率:向量检索命中率低时,适当增大overlap或降低chunkSize

面试加分点:提到可以自定义Splitter,比如按Markdown标题层级切分,或者结合语义相似度做动态切分。


【面试题】4. Spring AI的Function Calling中,JSON Schema是如何自动生成的?有哪些坑? ​

【标准答案】 Spring AI通过反射读取@Bean注册的函数,提取参数类型和泛型信息,然后自动生成符合OpenAI规范的JSON Schema。

主要坑点:

  1. 复杂嵌套类型支持有限:List<Map<String, Object>>这种复杂结构可能生成失败,建议定义明确的POJO
  2. Optional类型处理:Spring AI默认将Optional视为可选参数,但某些模型(如智谱)对optional支持不一致
  3. 枚举类型:需要用@Schema注解显式声明allowedValues
  4. 默认值丢失:Java的默认参数无法映射到Schema,需用@Schema(defaultValue="xxx")补充
  5. 递归引用:自引用类型会导致死循环,需用@Schema(ref)手动处理

面试时强调:简单参数用基本类型+String,复杂入参定义DTO,遇到问题先看生成的Schema是否符合预期。


【面试题】5. Spring AI的VectorStore接口支持哪些实现?PGVector和Redis的选型依据是什么? ​

【标准答案】 官方支持:PGVector、Redis、Pinecone、Chroma、Milvus、Weaviate、Qdrant、Oracle AI等。

PGVector vs Redis选型:

  • PGVector优势:

    • 已有PostgreSQL基础设施直接复用,运维成本低
    • 支持事务,向量数据和业务数据可在同一事务中操作
    • 生态成熟,pgvector扩展持续迭代
    • 适合中小规模(百万级向量)、混合查询场景(SQL+向量)
  • Redis优势:

    • 内存存储,检索性能更高(毫秒级)
    • 天然支持缓存语义,适合实时性要求高的场景
    • 分布式架构易扩展
    • 适合高频查询、对延迟敏感的场景

面试总结:已有PG用PGVector,追求性能用Redis/Milvus,云上直接用Pinecone。


【面试题】6. Spring AI的ChatMemory持久化方案有哪些?生产环境推荐怎么做? ​

【标准答案】 内置实现:InMemoryChatMemory(内存存储,重启丢失)

生产推荐方案:

  1. Redis持久化:利用Redis的Hash结构存储对话历史,支持TTL自动过期,适合分布式部署
  2. 关系型数据库:设计conversation_id、message_order、role、content字段,支持复杂查询和审计
  3. 分布式缓存:如Caffeine本地缓存 + Redis二级缓存,平衡性能和可靠性

核心要点:

  • 分区存储:按conversation_id分组,避免单个会话过大
  • 滑动窗口策略:只保留最近N轮对话,避免token超限
  • 异步持久化:先写内存再异步落库,避免阻塞主流程
  • 过期策略:设置会话TTL,自动清理僵尸对话

面试加分:提到可以结合MessageChatMemoryAdvisor实现自动注入历史,无需业务代码感知。


【面试题】7. Spring AI项目中如何管理多模型切换?配置如何外部化? ​

【标准答案】 多模型管理策略:

  1. 配置切换:通过spring.ai.openai.api-key、spring.ai.anthropic.api-key等前缀区分,配合spring.profiles.active激活不同配置
  2. 动态路由:在代码中注入多个ChatModel Bean,根据业务条件选择:
    java
    @Bean
    ChatClient openaiClient(OpenAiChatModel model) { ... }
    @Bean
    ChatClient anthropicClient(AnthropicChatModel model) { ... }
  3. 配置外部化:API Key、Base URL、Model Name全部放到application-{env}.yml或配置中心(Nacos/Apollo)

生产实践:

  • 敏感信息加密:API Key用Jasypt加密,避免明文提交Git
  • 动态切换:结合配置中心实现灰度发布、AB测试
  • 故障转移:主模型不可用时自动fallback到备选模型

面试强调:Spring AI的spring.ai.*配置前缀是1.0统一规范,各供应商遵循相同模式,易于切换和扩展。


【面试题】8. Spring AI的Structured Output(BeanOutputConverter)如何保证输出符合POJO定义?有哪些常见失败场景? ​

【标准答案】 BeanOutputConverter通过将POJO的JSON Schema注入到Prompt中,约束模型输出格式,然后解析JSON映射到对象。

保证机制:

  1. Schema注入:自动生成符合POJO定义的JSON Schema,作为Prompt的一部分
  2. 格式约束:Prompt中明确要求"输出必须严格符合以下JSON格式"
  3. 解析校验:解析失败时抛出异常,触发重试或降级

常见失败场景:

  1. 模型不遵循指令:小模型、中文场景容易输出额外解释文本
  2. 字段类型不匹配:期望Integer模型返回了带引号的字符串
  3. 必填字段缺失:模型跳过了某些字段,导致解析失败
  4. 嵌套对象问题:复杂嵌套结构的Schema描述可能不准确
  5. 枚举值越界:模型输出了Schema中未定义的枚举值

应对策略:

  • 使用entity()方法替代手动Converter
  • 在Prompt中增加Few-shot示例
  • 对关键场景增加重试机制
  • 选择指令遵循能力强的模型(如GPT-4)

【面试题】9. Spring AI项目在生产环境中如何做Observability(可观测性)? ​

【标准答案】 核心监控维度:

  1. 指标监控(Metrics):集成Micrometer,监控调用次数、延迟分布、Token消耗、错误率等
  2. 链路追踪(Tracing):集成Micrometer Tracing + Zipkin/Jaeger,追踪一次对话的完整链路(检索→Prompt组装→模型调用→后处理)
  3. 日志审计:记录每次对话的输入输出、Token消耗、耗时、模型版本
  4. 告警机制:调用失败率、延迟P99、Token成本超阈值时触发告警

关键实践:

  • 自定义Metrics:用@Timed、@Counted注解,或手动埋点监控业务指标
  • 成本监控:累计Token消耗、按用户/场景分组统计,防止成本失控
  • 向量库监控:检索延迟、召回数量、索引大小等专用指标
  • 健康检查:暴露/actuator/health,包含各AI模型的连通性检查

面试强调:Spring AI天然集成Spring Boot Actuator和Micrometer,开箱即用,无需额外接入成本。


【面试题】10. Spring AI 1.0正式版相比之前的Milestone版本有哪些核心变化?升级时需要注意什么? ​

【标准答案】 核心变化:

  1. ChatClient统一入口:替代之前的PromptTemplate手动组装方式,Fluent API更简洁
  2. Advisor架构:新增拦截器机制,对话记忆、RAG检索等变成可插拔的Advisor
  3. VectorStore接口统一:各向量库实现遵循统一接口,切换成本低
  4. 配置前缀规范化:统一为spring.ai.{provider}.*格式,如spring.ai.openai.api-key
  5. 包名重构:从experimental包迁移到稳定包,部分API命名调整

升级注意点:

  1. API变化:ChatClient用法不同于旧的PromptTemplate,需重写调用逻辑
  2. 依赖更新:spring-ai-core、spring-ai-openai等版本号更新,排除旧依赖
  3. 配置迁移:spring.ai.*前缀替换旧的配置格式,需检查application.yml
  4. 向量库驱动更新:各VectorStore实现依赖版本变化,注意兼容性
  5. 测试覆盖:Advisor机制改变了调用链路,需补充单元测试

面试总结:1.0版本标志着Spring AI从实验性质走向生产就绪,API稳定性大幅提升,是企业级AI应用的首选框架。. **配置迁移