Spring AI 面试题库
生成时间:2026-05-22 22:50 题目数量:10道 覆盖范围:Spring AI核心架构、RAG、Function Calling、多模型、Structured Output、Chat Memory、微服务部署、1.0更新、生态集成、前沿趋势
【面试题】1. Spring AI中ChatClient和ChatModel的区别是什么?实际开发中该用哪个?
【标准答案】ChatModel是底层抽象接口,直接跟大模型通信,输入Prompt返回ChatResponse,属于"裸调用"。ChatClient是Spring AI 1.0引入的统一高层API,内部封装了ChatModel,同时集成了Advisor链、Fluent API、结构化输出、对话记忆等能力。实际开发中90%场景用ChatClient,它提供的链式调用更简洁:chatClient.prompt().user("xxx").advisors(...).call()。只有在需要极细粒度控制模型参数或做底层扩展时才直接用ChatModel。面试关键点:ChatClient = ChatModel + Advisor + Fluent API + 生态集成,是Spring AI推荐的主入口。
【面试题】2. RAG流程中TokenTextSplitter的chunkSize和overlap怎么调?过大过小各有什么问题?
【标准答案】chunkSize控制每次切分的文本长度,overlap控制相邻块的重叠字符数。chunkSize过大:检索时噪声多,不相关的段落混入上下文,token浪费且答案精度下降;chunkSize过小:语义被截断,同一个完整知识点被拆到不同块里,检索可能漏掉关键信息。overlap的作用是保证边界处的语义连续性,通常设为chunkSize的10%-20%。经验值:中文文档chunkSize 500-1000、overlap 50-100效果较好;代码类文档可以小一点chunkSize 300-500。实际调优要结合向量库的similaritySearch召回率做评估,没有银弹,靠实验定。
【面试题】3. Spring AI的Function Calling中,@Bean注册的函数是怎么被模型发现和调用的?整个调度流程讲一下。
【标准答案】分三步走:第一步,开发者用@Bean注册一个返回类型为Function的Bean,Spring AI自动扫描并将其函数名、参数结构生成JSON Schema描述;第二步,用户请求时通过ChatClient的.functions("funcName")声明可用函数,Spring AI把函数描述塞入请求的tools字段发给模型;第三步,模型判断需要调用工具时返回tool_call响应(含函数名+参数),Spring AI拦截该响应,本地执行对应Bean的apply方法,将结果再拼回上下文重新调用模型,最终拿到自然语言答案。关键点:函数执行在本地而非模型侧,模型只负责决策"调哪个、传什么参",Spring AI框架负责调度和结果回填。
【面试题】4. Spring AI对接多个大模型时,如何实现运行时动态切换?配置上怎么管理?
【标准答案】Spring AI通过spring.ai.*配置前缀隔离不同模型的参数,比如spring.ai.openai.api-key、spring.ai.ollama.base-url各自独立。运行时切换有两种方案:一是多ChatModel Bean注入,用@Qualifier按名获取不同的ChatModel实现,手动选择调用;二是利用Spring AI的ChatClient.Builder动态构建,不同场景注入不同ChatModel。生产环境推荐方案一配合策略模式,在Service层根据业务路由选择模型——比如简单问答走Ollama本地模型降成本,复杂推理走OpenAI保质量。面试加分点:提到配置外部化用Nacos/Apollo管理,结合Properties实现动态刷新。
【面试题】5. Structured Output用BeanOutputConverter把模型输出映射到POJO时,常见的坑有哪些?怎么规避?
【标准答案】三大坑:第一,模型输出不严格遵循Schema,尤其是嵌套对象和枚举值经常出错——规避方式是在Prompt里显式要求"只输出JSON,不要任何其他内容",并用converter.getFormat()注入格式指令;第二,LLM生成非法JSON(缺括号、多余逗号),BeanOutputConverter内部有修复逻辑但不保证100%成功——生产环境建议加try-catch做降级;第三,Schema约束不足导致模型"自由发挥"字段——规避方式是用Jackson注解(@JsonProperty、@JsonIgnore)和Bean Validation(@NotNull、@Size)双重约束Schema生成。entity()方法是最简写法,底层也是走BeanOutputConverter,但错误处理更弱,复杂场景建议手动用converter。
【面试题】6. ChatMemory的InMemoryChatMemory能上生产吗?持久化方案有哪些选择?
【标准答案】InMemoryChatMemory绝对不能直接上生产——应用重启对话全丢,多实例部署时各实例内存不共享,用户换一台机器就失忆。持久化方案三条路:一是数据库存储,自己实现ChatMemoryRepository接口,把消息序列化后存MySQL/PostgreSQL,按conversationId查询恢复,最通用;二是Redis存储,利用Redis的List结构存消息历史,设置TTL自动过期,适合高并发场景;三是用Spring AI社区已有的JdbcChatMemory等扩展实现直接接入。面试核心:ChatMemory接口只定义了add和get,具体存储实现完全可插拔,MessageChatMemoryAdvisor负责在调用前注入历史消息到Prompt上下文中。
【面试题】7. Spring AI 1.0正式版相比0.x系列,最大的架构变化是什么?对开发者有什么实际影响?
【标准答案】最核心的三个变化:第一,ChatClient成为统一入口,0.x时代要用不同方式调不同模型,1.0后全部走ChatClient的Fluent API,学习成本大幅降低;第二,Advisor架构替代了旧的拦截器模式,Advisor可以链式编排,每个Advisor处理一次请求/响应,实现横切关注点(日志、记忆、RAG、重试等)的优雅解耦;第三,VectorStore接口统一,0.x时代各向量库API不统一,1.0统一了add/delete/similaritySearch方法,切换向量库只需换依赖和配置,业务代码零改动。对开发者的实际影响:代码更简洁、可测试性更强、模型和向量库替换成本趋近于零。
【面试题】8. 在微服务架构下用Spring AI,API Key怎么安全管理?直接写在application.yml里有什么风险?
【标准答案】直接写application.yml里三大风险:代码仓库泄露(推到Git就完蛋)、多环境无法隔离(开发/测试/生产用同一个Key)、轮换困难(改Key要重新部署)。安全管理方案:首选Spring Cloud Vault或HashiCorp Vault,应用启动时从Vault动态拉取Key,内存中使用不落盘;次选配置中心(Nacos/Apollo)加密存储,配合Spring的Environment Post Processor解密注入;最低要求也要用环境变量注入:spring.ai.openai.api-key=${OPENAI_API_KEY},K8s环境下用Secret挂载。面试加分:提到Key轮换机制,Vault支持动态Secret自动续期,比静态Key安全一个量级。
【面试题】9. Spring AI的Advisor机制和Spring MVC的Interceptor有什么本质区别?能举一个自定义Advisor的实际场景吗?
【标准答案】本质区别:Interceptor拦截的是HTTP请求/响应,工作在Web层;Advisor拦截的是大模型调用链,工作在AI层。Advisor有请求和响应两个回调点(advice on request / advice on response),可以修改发往模型的Prompt,也可以修改模型返回的结果,而且Advisor之间可以链式组合形成pipeline。实际场景举例:内容安全审查Advisor——在请求端扫描用户输入是否含敏感词,命中则拦截不调用模型;在响应端扫描模型输出是否违规,命中则替换为兜底回复。另一个场景:Token用量统计Advisor,响应端提取usage信息上报Micrometer,实现调用成本实时监控。
【面试题】10. Spring AI MCP是什么?它和Function Calling有什么关系和区别?
【标准答案】MCP是Model Context Protocol的缩数,是Anthropic提出的开放协议,定义了AI模型与外部工具/资源的标准化交互方式。Spring AI MCP是对该协议的实现,让Spring AI应用既能作为MCP Client调用外部工具,也能作为MCP Server暴露自己的能力。和Function Calling的关系:Function Calling是模型侧的能力(模型决定调什么工具),MCP是传输协议侧的规范(定义工具怎么注册、发现、调用)。可以理解为MCP是Function Calling的"传输层升级"——Function Calling走的是Spring AI内部调度,MCP走的是标准化协议通道,支持跨进程、跨服务调用工具。区别:Function Calling适合单体应用内嵌工具,MCP适合分布式场景下工具的动态发现与编排。Spring AI 1.0+同时支持两者,开发者按架构复杂度选择。