Spring AI 核心

共 26 题
#

1. ChatMemory(InMemory/JDBC/Redis)会话记忆

A InMemoryChatMemory,因为其读写最快
B 只能使用 RedisChatMemory,数据库无法存储记忆
C JdbcChatMemory,将历史消息持久化到数据库实现跨实例共享 ✓ 正确答案
D 任何实现均可,因为 ChatMemory 与存储无关
#

2. Spring AI 与 Spring Boot 3.5+ 的 spring-ai-starter-* 自动化配置

A 需要开发者手动编写大量工厂代码逐一创建
B 依赖 Spring Boot 自动配置机制,根据配置自动装配 ChatModel/EmbeddingModel Bean ✓ 正确答案
C starter 与 Spring Boot 自动配置完全无关
D Bean 由模型提供商远程创建并注入容器
#

3. @SystemMessage 与 userPrompt 模板

A 二者只能二选一,不能同时出现
B @SystemMessage 用来注入用户消息,@UserMessage 用来设置系统提示
C @SystemMessage 设置模型角色,@UserMessage 模板注入用户任务,二者组合构造完整对话 ✓ 正确答案
D @SystemMessage 不支持任何占位符变量
#

4. @Tool/@ToolParam 的函数声明

A @ToolParam 用于声明方法本身是一个工具
B @Tool 自动生成工具 Schema,@ToolParam 描述参数,模型据此生成调用并回调方法 ✓ 正确答案
C 工具调用结果不会交回给模型参与后续生成
D @Tool 标注的方法返回值类型必须是 String
#

5. Advisors 体系(SimpleLoggerAdvisor/MessageChatMemoryAdvisor)

A 一个请求只能配置一个 Advisor,无法组成链
B MessageChatMemoryAdvisor 注入/回写历史消息,SimpleLoggerAdvisor 记录请求响应,二者可组成链协同 ✓ 正确答案
C Advisor 会绕过 ChatModel 直接返回结果
D SimpleLoggerAdvisor 负责管理会话记忆
#

6. ChatClient 流式响应(Flux<ChatResponse>)的背压与取消传播(onCancel/onError)

A 让模型一次返回全部结果,无需分块
B 把阻塞调用包装成异步,不涉及速率控制
C 让下游按需拉取元素,避免生产过快导致内存溢出 ✓ 正确答案
D 让调用方忽略错误继续接收数据
#

7. ChatClient 与 ChatModel 的职责拆分

A ChatModel 负责用户界面渲染,ChatClient 负责网络传输
B 二者职责完全相同,可互相替代
C ChatClient 是面向业务的高层门面,ChatModel 是底层模型调用抽象 ✓ 正确答案
D ChatClient 负责底层与模型提供商的协议交互,ChatModel 负责高层 DSL 编排
#

8. ChatClient 的 stream() 与 call() 在虚拟线程下的执行模型差异

A call() 是异步非阻塞的,调用后立即返回结果
B 阻塞等待响应时虚拟线程被挂起,不占用平台线程,可承载高并发 ✓ 正确答案
C 虚拟线程下 call() 必须每次新建平台线程
D call() 与 stream() 的执行模型完全相同
#

9. ChatMemory 的 WindowChatMemory 与 TokenWindowChatMemory 的裁剪策略对比

A 两者都只保留第一条消息
B WindowChatMemory 按条数裁剪,TokenWindowChatMemory 按 token 上限裁剪 ✓ 正确答案
C TokenWindowChatMemory 按字节数而非 token 计数
D 两者都按消息条数裁剪
#

10. ChatMemory 的窗口裁剪与 token 上限协同(滑动窗口/TokenCountChatMemoryAdvisor)

A 只保留最新一条消息,其余全部丢弃
B 自动放大模型上下文窗口到任意大小
C 无限增加 token 预算以保证上下文完整
D 从最早的旧消息开始裁剪,直到总 token 量回落到预算阈值内 ✓ 正确答案
#

11. ChatResponse/Generation/Message 的响应结构

A UserMessage 中的系统指令
B 模型的权重参数
C Generation 内部持有的 Message(如 AssistantMessage) ✓ 正确答案
D ChatMemory 中保存的全部历史
#

12. PromptTemplate 注入用户输入时的转义与模板安全(防止 prompt injection)

A 对用户输入做转义或标记为不可信数据,并与系统指令隔离 ✓ 正确答案
B 直接原样拼接用户输入,无需任何处理
C 只依赖模型自我纠错,不做任何工程防护
D 完全禁止用户输入参与任何提示词构建
#

13. Spring AI 2.0(按官方文档)的核心抽象(ChatClient/ChatModel/EmbeddingModel)的工程价值

A 强制业务代码依赖具体模型实现类
B 让每种模型都只能使用私有 API,无法替换
C 完全禁止工具调用与记忆等工程能力
D 屏蔽不同模型提供商差异,业务面向统一接口编程并可切换模型 ✓ 正确答案
#

14. Spring AI 的 @Prompt/@StructuredPrompt 在提示词模板化的工程应用

A 禁止模型返回任何结构化数据
B 只能用于图片生成的提示词
C 让模型只输出自由文本,再由人工阅读
D 把模型输出约束为符合 Java 类型的结构化对象,减少手写解析 ✓ 正确答案
#

15. Spring AI 的 ChatMemory(对话记忆)在多轮对话与 Session 管理的协作

A 把记忆写入模型的权重中
B 让所有用户共享同一份对话历史
C 按会话隔离历史记忆,注入该会话上下文并回写新消息,避免串扰 ✓ 正确答案
D 丢弃所有历史,只保留当前一句话
#

16. Spring AI 的 EmbeddingModel 在向量数据库(Qdrant/PgVector)集成的应用

A 两者都只存储原始文本,不做向量化
B 向量数据库负责把文本编码为向量,EmbeddingModel 负责存储
C EmbeddingModel 把文本编码为向量,向量数据库存储并做相似度检索 ✓ 正确答案
D EmbeddingModel 直接返回文档原文,无需向量化
#

17. Spring AI 的 MessageType/Role/Media

A 定义模型的角色设定
B 记录对话的 token 用量
C 承载图片、音频等多模态内容,附加到 UserMessage 中 ✓ 正确答案
D 管理会话记忆的存储位置
#

18. Spring AI 的 Message(SystemMessage/UserMessage/AssistantMessage)的对话结构

A AssistantMessage,用于回答
B UserMessage,用于提问
C ToolResponseMessage,用于返回工具结果
D SystemMessage,用于设定角色与行为准则 ✓ 正确答案
#

19. Spring AI 的 Observability(Micrometer 指标/Trace 集成)在 LLM 应用监控的工程价值

A 量化 token 用量、延迟与错误率,支撑成本归因与质量治理 ✓ 正确答案
B 替代业务代码中的全部日志
C 自动扩容模型服务器
D 直接修改模型权重以提升准确率
#

20. Spring AI 的 Tool Calling(Function Calling)在 LLM 与外部系统集成的工程价值

A 结果只写日志,不参与生成
B 直接丢弃,模型无法感知结果
C 以 ToolResponseMessage 形式回传给模型,供其继续生成回答 ✓ 正确答案
D 结果写入模型权重永久固化
#

21. StructuredOutputValidationAdvisor 的结构化输出校验

A 直接丢弃整个请求,不重试
B 将失败信息回传模型并要求重试,超限后兜底 ✓ 正确答案
C 忽略校验结果继续使用非法数据
D 抛出异常并终止 JVM
#

22. ToolCallbackResolver 如何按名称/类型解析工具回调,多 Agent 场景下如何隔离工具注册表

A 每个 Agent 维护独立工具注册表,仅暴露自己可用的工具 ✓ 正确答案
B 所有 Agent 共享同一个全局工具注册表
C 让工具名称在全局必须唯一且无隔离
D 禁止 Agent 调用任何工具
#

23. ToolCallingAdvisor 在 2.0 的演进

A 完全移除工具调用功能
B 让工具调用不再支持结果回传
C 将工具调用抽象为 Advisor 链中的可插拔能力,便于定制与协同 ✓ 正确答案
D 把工具调用逻辑硬编码在主流程中
#

24. ToolSearchToolCallingAdvisor 的工具检索

A 工具过多时按语义检索相关工具,只把候选 Schema 交给模型 ✓ 正确答案
B 让所有工具每次都被完整发送给模型
C 把工具结果永久缓存
D 禁止模型调用任何工具
#

25. VectorStore 的抽象(OpenSearch/Milvus/PGVector)

A 强制应用依赖某个具体向量数据库
B 让向量数据库直接生成文本
C 屏蔽不同向量库差异,面向统一接口编程,便于切换与测试 ✓ 正确答案
D 禁止向量检索,只做文本存储
#

26. spring-ai-mcp-annotations 模块

A 只支持图片工具,不支持文本
B 用注解声明式地把 Java 方法注册为 MCP 工具,自动生成 Schema 减少样板代码 ✓ 正确答案
C 强制手写 MCP 二进制报文
D 移除工具调用能力