当前位置: 首页 > news >正文

AI应用开发面试题精讲(三):工程化与性能优化高频15问

AI应用开发面试题精讲(三):工程化与性能优化高频15问

文章目录

  • AI应用开发面试题精讲(三):工程化与性能优化高频15问
    • 前言
    • 一、Token与成本优化
      • 1. Token成本怎么预估?怎么优化?
      • 2. 语义缓存是什么?怎么实现?
      • 3. 模型路由怎么做?有什么策略?
    • 二、可靠性设计
      • 4. 大模型调用怎么做超时和重试?
      • 5. 限流和熔断怎么做?
      • 6. 大模型输出校验怎么做?格式不对怎么处理?
    • 三、流式输出与用户体验
      • 7. SSE流式输出的实现原理?
      • 8. 流式输出和结构化输出怎么兼容?
    • 四、高并发与监控
      • 9. AI应用的并发控制怎么做?
      • 10. AI应用需要监控哪些指标?和传统应用有什么区别?
      • 11. Prompt版本管理怎么做?
    • 五、上线与运维
      • 12. 大模型应用怎么做灰度发布?
      • 13. AI应用的上线前检查清单有哪些?
      • 14. 线上问题怎么排查?大模型输出不稳定怎么定位?
      • 15. 从Demo到上线,最大的Gap是什么?
    • 总结

前言

AI应用从Demo到生产,工程化是最大的门槛。面试官最爱问的不是"你会不会用大模型",而是"你的系统怎么扛住1000 QPS"“Token成本怎么控制”“大模型超时了怎么办”。这篇整理了工程化与性能优化最高频的15道面试题。


一、Token与成本优化

1. Token成本怎么预估?怎么优化?

参考答案

成本构成:输入Token + 输出Token,输出通常比输入贵2-3倍。

预估方法

  • 统计每个请求的平均输入/输出Token数
  • 乘以调用量和单价
  • 留20%余量(重试、改写等额外消耗)

优化手段

  1. Prompt压缩:去掉冗余描述,精简系统Prompt
  2. 上下文裁剪:只保留和当前问题相关的历史对话
  3. 缓存:语义缓存命中直接返回,不走大模型
  4. 模型路由:简单问题用小模型,复杂问题才用大模型
  5. 批量请求:多个请求合并为一个batch,降低单条成本

面试加分点:提到"成本监控比成本优化更重要"——先建立Token消耗的监控和告警,才知道该优化哪里。


2. 语义缓存是什么?怎么实现?

参考答案

语义缓存是:新query和缓存中某个query语义相似时,直接返回缓存结果,不调用大模型。

实现方式

  1. 把缓存query的Embedding存入向量库
  2. 新query来了,先在缓存向量库中检索
  3. 如果相似度超过阈值(如0.95),直接返回缓存答案
  4. 如果没有命中,走正常流程,结果存入缓存

注意事项

  • 缓存要有TTL,过期的要清理
  • 相似度阈值要调——太高命中率低,太低可能返回错误答案
  • 对时效性敏感的query不适合缓存(如"今天天气怎么样")
  • 缓存要有容量上限,用LRU淘汰

3. 模型路由怎么做?有什么策略?

参考答案

模型路由是根据请求特征,选择不同级别的模型处理。

路由策略

  1. 按复杂度路由:简单FAQ用小模型,复杂推理用大模型
  2. 按场景路由:客服对话用小模型,技术分析用大模型
  3. 按用户路由:免费用户用小模型,付费用户用大模型
  4. 按延迟要求路由:实时场景用快模型,离线任务用慢模型

实现方式

  • 用一个轻量分类器(甚至规则)判断query复杂度
  • 复杂度低→小模型,复杂度高→大模型
  • 大模型超时或失败→降级到小模型

面试加分点:提到"路由本身就是A/B测试"——路由策略要持续监控各路径的效果和成本,动态调整。


二、可靠性设计

4. 大模型调用怎么做超时和重试?

参考答案

超时设置

  • 连接超时:5-10秒(连不上就快速失败)
  • 读取超时:30-120秒(根据最大输出长度估算)
  • 流式输出:首Token超时10秒,整体超时按输出长度估算

重试策略

  • 指数退避:第1次等1秒,第2次等2秒,第3次等4秒
  • 最大重试3次,超过就降级
  • 只对可重试错误重试(网络超时、5xx),不对4xx重试
  • 重试时要换请求ID,避免服务端去重导致不重试

面试加分点:提到"重试要有抖动(jitter)"——多个请求同时重试会造成惊群效应,加随机抖动可以错开。


5. 限流和熔断怎么做?

参考答案

限流

  • 令牌桶/漏桶算法控制请求速率
  • 按用户/API Key分别限流
  • 区分优先级:付费用户配额高,免费用户配额低

熔断

  • 错误率超过阈值(如50%)→ 熔断,直接返回降级响应
  • 熔断后每隔一段时间放一个请求试探(半开状态)
  • 成功则恢复,失败则继续熔断

降级策略

  • 大模型不可用→返回缓存的相似答案
  • 向量库不可用→降级为关键词检索
  • 重排器超时→跳过重排,直接用向量检索结果
  • 原则:保证核心功能可用,非核心功能可以降级

6. 大模型输出校验怎么做?格式不对怎么处理?

参考答案

校验层次

  1. 格式校验:JSON是否合法、必填字段有没有、类型对不对
  2. 内容校验:内容是否在允许范围内、有没有敏感信息、有没有幻觉
  3. 业务校验:数值是否合理、逻辑是否自洽、引用是否存在

格式不对的处理

  1. 修复重试:把错误信息附加到Prompt末尾,让模型修正
  2. 多次采样:生成3次,取第一个通过校验的
  3. 降级解析:尝试正则提取关键信息
  4. 人工兜底:高价值场景转人工处理

实践建议:修复重试最多2次,超过就降级。不要无限重试——如果模型连续输出错误格式,可能是Prompt有问题。


三、流式输出与用户体验

7. SSE流式输出的实现原理?

参考答案

SSE(Server-Sent Events)是单向长连接,服务端持续推送数据。

流程

  1. 前端发起SSE连接
  2. 后端调用大模型流式API,每收到一个Token就推送给前端
  3. 前端逐字渲染
  4. 大模型输出结束,后端关闭SSE连接

关键实现点

  • 后端要做心跳保活,防止连接超时断开
  • 前端要处理中断(用户主动停止)
  • 错误处理:连接断开后的重连逻辑
  • 前端渲染:用requestAnimationFrame逐字渲染,不要每收到一个Token就更新DOM

8. 流式输出和结构化输出怎么兼容?

参考答案

这是个真实痛点——结构化输出(如JSON)需要完整内容才能解析,但流式输出是逐字返回的。

解决方案

  1. 流式返回文本,最后返回完整JSON:流式阶段展示思考过程,最终给出结构化结果
  2. 增量JSON解析:用流式JSON解析器,部分JSON也能提取已完成的字段
  3. 分两步调用:第一次流式生成内容,第二次格式化为JSON
  4. 约定分隔符:流式输出中用特殊标记区分"思考过程"和"最终结果"

实践建议:方案1最稳妥——用户看到打字机效果(思考过程),最后收到一个干净的JSON。体验和工程都兼顾。


四、高并发与监控

9. AI应用的并发控制怎么做?

参考答案

并发挑战

  • 大模型API有并发限制(如同时最多10个请求)
  • GPU推理资源有限
  • 长请求会占用连接很久

控制手段

  1. 请求队列:所有请求进队列,消费者按限速消费
  2. 连接池:复用HTTP连接,减少建连开销
  3. 信号量:限制同时调用大模型的请求数
  4. 优先级队列:VIP用户优先,离线任务后置
  5. 背压:队列满了直接拒绝,返回"系统繁忙"

面试加分点:提到"排队不是坏事"——合理排队可以提升整体吞吐量,避免雪崩。


10. AI应用需要监控哪些指标?和传统应用有什么区别?

参考答案

传统应用监控:CPU、内存、QPS、响应时间、错误率

AI应用额外监控

  1. Token消耗:每请求/每用户/每API的Token用量
  2. 模型调用:调用次数、延迟分布(P50/P95/P99)、错误率
  3. 质量指标:输出格式合规率、拒答率、用户反馈率
  4. 成本指标:每请求成本、每用户成本、日/月总成本
  5. 缓存指标:命中率、缓存大小
  6. 安全指标:Prompt注入拦截次数、敏感内容过滤次数

关键告警

  • Token消耗突增(可能被滥用或Prompt泄露)
  • 错误率升高(模型服务不稳定)
  • 响应延迟突增(排队过长或模型变慢)
  • 缓存命中率骤降(可能知识库更新了)

11. Prompt版本管理怎么做?

参考答案

问题:Prompt散落在代码里,改一个字可能影响所有效果,但没有版本管理就无法回滚。

管理方案

  1. Prompt外置:Prompt模板存在数据库/配置中心,不在代码里硬编码
  2. 版本管理:每次修改存新版本,标注修改原因和预期效果
  3. 灰度发布:新Prompt先放5%流量,对比效果
  4. A/B测试:新旧Prompt同时跑,用评估集对比
  5. 回滚机制:出问题秒级回滚到上一版本

实践建议:Prompt即代码——用Git管理Prompt模板,Code Review后再上线。


五、上线与运维

12. 大模型应用怎么做灰度发布?

参考答案

灰度策略

  1. 按用户灰度:先1%用户,观察指标,逐步扩大到100%
  2. 按场景灰度:先在低风险场景上线,再扩展到核心场景
  3. 按流量灰度:随机5%流量走新版本

监控指标

  • 功能指标:成功率、格式合规率
  • 质量指标:用户满意度、人工抽查准确率
  • 性能指标:延迟、超时率
  • 成本指标:Token消耗对比

回滚条件

  • 错误率超过阈值
  • 用户投诉率升高
  • 质量评分下降
  • 回滚要快——灰度期间旧版本不删,随时可切回

13. AI应用的上线前检查清单有哪些?

参考答案

功能检查

  • 核心流程跑通,边界case有处理
  • 输出格式校验覆盖率100%
  • 流式输出正常,中断可恢复

性能检查

  • P95延迟达标
  • 并发压测通过
  • 缓存命中率达标

安全检查

  • Prompt注入防御已部署
  • 敏感内容过滤已开启
  • 用户输入有长度限制
  • 工具调用有权限控制

运维检查

  • 监控告警已配置
  • 降级兜底已实现
  • 日志链路追踪已接入
  • 成本预算已设置

文档检查

  • 系统架构图已更新
  • 应急预案已编写
  • oncall排班已安排

14. 线上问题怎么排查?大模型输出不稳定怎么定位?

参考答案

排查步骤

  1. 复现问题:拿到用户原始query、时间、userId
  2. 查看链路日志:从请求入口到模型调用的全链路trace
  3. 检查Prompt:是否被修改?上下文是否有问题?
  4. 检查检索:召回的文档对不对?排序有没有问题?
  5. 检查模型:同一Prompt同一输入,多次调用结果是否一致?
  6. 检查配置:Temperature、Top-P等参数是否被改动?

常见原因

  • Temperature过高导致输出不稳定
  • 上下文被截断导致信息丢失
  • 检索结果变化(知识库更新)导致答案变化
  • 模型服务端更新导致行为变化

15. 从Demo到上线,最大的Gap是什么?

参考答案

Demo和生产的10个差距

维度Demo生产
输入固定测试case用户各种奇葩输入
错误处理出错了重来出错了要兜底
延迟几秒能接受P95要达标
成本不考虑要控制
并发单请求高并发
监控没有必须
安全不考虑必须
一致性不在乎同一问题不能差异太大
可维护性一个脚本团队协作
文档不需要必须

面试金句:Demo证明"能做",生产证明"能稳定做"。面试官看重的是后者。


总结

工程化面试的核心是"你踩过坑吗"。每道题不要只答概念,要能说出"我们遇到过什么问题、怎么发现的、怎么解决的"。有真实踩坑经验的候选人和只会背概念的,面试官一问就区分出来了。

http://www.cnnetsun.cn/news/2959260.html

相关文章:

  • iCloud照片批量下载终极指南:3种模式高效备份你的珍贵回忆
  • 电机控制死区失真校正:原理、状态机与嵌入式实现详解
  • 飞思卡尔TWRPI-ROTARY旋转触摸板:电容传感原理与嵌入式HMI实战
  • 深入解析MSC8102PFC:多核DSP硬件架构与VoIP网关设计精髓
  • 使用GmSSL解析国密P7B文件提取加密私钥完整指南
  • 打工人如何稳定使用AI情绪支持工具
  • BurpSuite 2025.1新功能实战:Intruder自动暂停与Collaborator CSV导出
  • Akagi麻将AI助手:Rust技术栈实现的实时分析与自定义AI集成指南
  • 嵌入式RTC与中断控制:从MPC801寄存器解析到低功耗定时系统设计
  • 专知智库:容度原理如何将传统公司“OPC化”——从层级组织到自指系统
  • 大模型学习指南:收藏!小白程序员必备的系统工程能力提升秘籍
  • 从零到一:在Linux系统中将Minio配置为Systemd守护进程
  • 【计算机毕业设计案例】基于 Spring Boot 的商超应急资源调度管理系统的设计与实现 基于 Spring Boot 的大型商场安全隐患与预案管理系统(程序+文档+讲解+定制)
  • Claude Code Skills 完全指南:从入门到实战(附PPT生成示例)
  • 让 Codex 桌面版流畅调用国内大模型:codex-cn-bridge 实战配置指南
  • 5个关键步骤:用Pyfa彻底改变你的EVE Online飞船配置体验
  • 电机控制核心算法解析:从矢量控制解耦到BLDC无传感器换相
  • AI编程24-代码审查太耗时?AI辅助半天搞定3天工作量,识别85%潜在问题
  • Windows系统文件TextShaping.dll丢失找不到问题解决
  • MPC8240嵌入式处理器内部仲裁与错误处理机制深度解析
  • IT内幕16:微软中国薪资福利揭秘:为什么被称为“养老院”?
  • 如何选择适合制造企业的AI智能体类型
  • P1010RDB-PB硬件设计解析:从参考板到自主开发的嵌入式系统实践
  • 【避坑指南】Vivado 18.3 从下载到激活:一份面向FPGA/ZYNQ新手的完整安装图解
  • Betamax:HTTP 请求模拟工具,一次录制永久回放
  • 硬件队列管理器(QMan)核心机制:出队、缓存预取与无锁编程实践
  • 腾讯会议同传实测避坑指南
  • SmartDSP OS硬件抽象层与DMA驱动设计详解
  • APK-Installer:Windows平台安卓应用安装的3分钟终极解决方案
  • MPC857T IDMA原理与配置:从缓冲区描述符到Fly-By模式实战