# 1. 结构化输出的 schema 校验、类型守卫与错误回退 A 只要模型支持 Structured Output,输出就一定合法 B 应通过 schema 约束生成并做运行时校验,失败时重试或降级,不能静默进入业务逻辑 ✓ 正确答案 C 类型守卫可以替代所有运行时校验 D 流式场景无法做部分校验
# 2. 工具调用的参数(参数表单)、审批、执行中(进度)、结果与失败状态 A 高风险工具调用无需用户确认 B 工具参数模型生成后不能修改 C 应覆盖参数表单、人工审批、执行进度、结果与失败重试的完整状态流,并记录审计日志 ✓ 正确答案 D 工具执行失败不需要向用户展示原因
# 3. Token-by-token incremental render 与 React Suspense/useDeferredValue 的工程价值 A useDeferredValue 可把流式增量标记为低优先级更新,Suspense 适合消息级等待但粒度不够细 ✓ 正确答案 B useDeferredValue 会让高优先级交互被流式渲染阻塞 C Suspense 专为逐 token 渲染设计 D React 无法处理高频状态更新
# 4. 消息渲染(Markdown/MDX/Code Highlight) A AI 生成的 MDX 可以直接执行其中的 JSX 代码 B 代码块不需要考虑流式性能 C shiki 与 highlight.js 语法高亮质量完全相同 D 消息默认用 Markdown 安全渲染,MDX 需组件白名单约束,代码高亮按内容量分档异步处理 ✓ 正确答案
# 5. 分支对话(多轮回复)与编辑重试的 UI 状态如何设计,重试的幂等与一致性怎么保证? A 重试时直接把新回复追加到消息列表末尾 B 编辑重试后旧回复应该被删除无法查看 C 分支对话用消息树建模,重试分配唯一 requestId 覆盖原槽位,后续消息级联失效并绑定版本 ✓ 正确答案 D 重试不需要考虑幂等与计费问题
# 6. 多轮对话与引用来源 UI、Sources 溯源与原文跳转 A 引用来源只需展示一个链接即可 B 模型输出没有来源时无需任何标注 C 应用锚点标注引用,来源卡片展示元数据与原文片段并支持安全跳转,且需标明所属轮次 ✓ 正确答案 D 引用链接不需要做协议校验
# 7. Vercel AI SDK 的 useChat Hook 在流式响应与 React 19 use() Hook 协作的现代工程价值 A use() 可以替代 useChat 的全部功能 B Suspense 与流式更新互斥 C use() 可以在循环中调用 D use() 负责声明式等待数据就绪(配合 Suspense),useChat 负责流式增量更新,二者分工协作 ✓ 正确答案
# 8. AI 消息的 Token 计数(tiktoken 客户端)与上下文窗口截断策略 A 所有模型使用同一套 tokenizer,计数结果相同 B 输入框无需显示用量信息 C 截断策略就是简单删除最旧消息,无需其他处理 D 应使用与目标模型匹配的编码器计数,发送前预检并按"系统提示与最近消息优先、旧消息摘要压缩"的优先级截断 ✓ 正确答案
# 9. AI 消息的乐观更新(Streaming in progress) A 发送后立即创建占位消息显示生成中,增量填充占位,并用 pending/streaming/completed/stopped/error 状态机管理 ✓ 正确答案 B 用户消息应等流式响应完成后再上屏 C 占位消息取消后应整体删除 D 乐观更新不需要稳定消息 id
# 10. 大模型输出的 Markdown 解析(react-markdown、stream-markdown) A stream-markdown 跟踪解析状态做增量合并与未闭合块容错,react-markdown 负责最终完整渲染 ✓ 正确答案 B stream-markdown 与 react-markdown 功能完全相同 C 流式解析每次增量都必须重新解析全文 D 代码块未闭合时可以直接丢弃内容
# 11. AI 思考过程(Chain-of-Thought)的折叠面板与用户交互的现代工程 A 思考过程应与最终答案混在一起直接展示 B 思考过程必须一直展开显示 C 思考过程用折叠面板展示,与最终答案分离存储,后续轮次默认不回传思考内容 ✓ 正确答案 D 思考内容可以直接粘贴回输入框使用
# 12. Tool Calls / Function Calling 的中间状态(搜索中、调工具中、生成中) A 工具调用期间不需要展示任何状态 B 应按思考/搜索/调用/生成划分阶段,用状态指示器与任务列表聚合多工具进度,失败可重试 ✓ 正确答案 C 多工具只能串行执行 D 工具调用状态与消息渲染无关
# 13. 上下文长度超限的本地截断与提示工程(Prompt Trimming) A 达到阈值后应直接放弃发送请求 B 应按重要性分级裁剪:系统提示保留,工具定义与旧历史消息可压缩,并告知用户裁剪情况 ✓ 正确答案 C 裁剪只针对用户最新输入 D 裁剪后不需要记录任何元数据
# 14. AI 消息列表的虚拟滚动(@tanstack/virtual)与无限对话历史的现代工程价值 A 虚拟滚动会渲染全部消息,只是隐藏滚动条 B 虚拟滚动只渲染可视区条目,支持无限历史加载与位置保持,流式消息需动态测量高度并配合条件自动滚动 ✓ 正确答案 C 虚拟滚动与自动滚动完全冲突,无法共存 D 消息高度固定时不需要动态测量
# 15. AI 流式响应的 AbortController 与 React 19 Action 的取消协作 A 取消时应 abort 旧请求并配合 action 的 isPending 驱动 UI,卸载时在 cleanup 中取消,AbortError 不按错误上报 ✓ 正确答案 B abort() 后错误应按普通网络错误上报 C 组件卸载后无需取消请求 D React 19 Action 无法感知异步流程
# 16. LLM 流式响应(SSE)与 useChat Hook 在 React Suspense for Data Fetching 的协作 A 流式消息应整体包进 Suspense 边界等待全部完成 B useChat 内部使用不可变快照,无法感知流式更新 C Suspense 挂起期间流式数据也能自动渲染 D Suspense 边界应放在首屏加载与历史恢复,流式增量由 useChat 的响应式状态渲染,两者分层协作 ✓ 正确答案
# 17. AI 聊天的输入建议(suggestion chips) A 建议应在流式生成过程中频繁弹出 B 建议内容可以随意生成,无需过滤 C 建议可来自模板或基于上下文动态生成,点击即发送,需控制数量、去重并在无进行中任务时展示 ✓ 正确答案 D 建议会强制打断用户输入
# 18. ChatGPT 风格聊天的 Markdown 渲染(含代码高亮、LaTeX、表格) A 数学公式可以随意渲染,无需安全配置 B 用 remark-gfm 支持表格、remark-math/rehype-katex 渲染公式、自定义组件做代码高亮,并注意 KaTeX 安全选项 ✓ 正确答案 C 表格宽度超过容器时不需要处理 D 代码高亮必须在流式过程中实时全量执行
# 19. AI 流式响应的自动滚动(Auto-scroll)与用户已向下滚动不强制滚到底的工程价值 A 用户接近底部时才自动跟随,向上阅读则暂停并显示"回到底部"按钮,尊重用户阅读意图 ✓ 正确答案 B 新内容到达时无论如何都应强制滚到底部 C 自动滚动与用户滚动无关 D 虚拟列表下无需处理滚动时序
# 20. 多模态输入(图片、文件、语音)在 AI 聊天界面的工程价值与边界 A 多模态输入提升信息密度,但需做类型/大小/配额校验、图片压缩、语音转写可编辑与隐私最小化 ✓ 正确答案 B 图片上传不需要任何校验与压缩 C 语音输入识别后不可编辑 D 敏感截图可以直接上传
# 21. 调用 LanguageModel.availability() 后,前端如何对不可用、需要下载和可立即使用三类结果分流,并处理探测结果在权限、磁盘空间或浏览器更新后发生变化的竞态 A 探测一次结果就永久有效 B 模型更新后旧会话仍可继续使用 C 下载失败时无需处理 D 应按三态分流处理并管理下载流程,同时因权限/磁盘/更新会导致结果变化,需在关键操作前重新探测并以状态机驱动降级 ✓ 正确答案
# 22. Gemini Nano 约 1.5GB 的模型由浏览器管理而不是普通 PWA CacheStorage 资源时,PWA 应如何区分应用缓存与模型缓存,展示下载进度,并在离线、配额不足和存储被回收时恢复 A 模型应作为普通资源放进 CacheStorage 由 PWA 管理 B 下载进度无需持久化,刷新后重新开始 C 模型由浏览器托管,PWA 需区分应用缓存与模型缓存,持久化下载进度,并处理配额不足与存储回收后的重新下载 ✓ 正确答案 D 存储被回收后无需恢复
# 23. 多个 PWA 标签页同时触发 Gemini Nano 下载或模型升级时,如何协调下载状态、取消与重试,避免重复 UI 和并发初始化,并保证旧会话在模型版本切换后可安全失效 A 应用 BroadcastChannel 广播与 IDB 记录做单一事实源,避免重复下载与并发初始化,并以版本号使旧会话安全失效 ✓ 正确答案 B 每个标签页独立下载,互不影响 C 取消操作只需在发起标签页处理 D 模型升级后旧会话可以直接继续使用