AI应用开发面试题精讲(五):踩坑复盘与实战经验高频15问

AI应用开发面试题精讲(五):踩坑复盘与实战经验高频15问

文章目录

  • AI应用开发面试题精讲(五):踩坑复盘与实战经验高频15问
    • 前言
    • 一、RAG踩坑
      • [1. 切分不合理导致召回差,怎么排查和解决?](#1. 切分不合理导致召回差,怎么排查和解决?)
      • [2. 检索Top-K设置不合理,怎么调?](#2. 检索Top-K设置不合理,怎么调?)
      • [3. 知识库更新了但RAG还是返回旧答案,为什么?](#3. 知识库更新了但RAG还是返回旧答案,为什么?)
    • 二、大模型输出问题
      • [4. 大模型输出JSON格式不稳定,怎么处理?](#4. 大模型输出JSON格式不稳定,怎么处理?)
      • [5. 同一个问题,大模型每次回答都不一样,怎么办?](#5. 同一个问题,大模型每次回答都不一样,怎么办?)
      • [6. 大模型输出截断(生成到一半停了),怎么处理?](#6. 大模型输出截断(生成到一半停了),怎么处理?)
    • 三、Prompt工程踩坑
      • [7. Prompt越来越长,成本飙升,怎么控制?](#7. Prompt越来越长,成本飙升,怎么控制?)
      • [8. Few-Shot例子选择不当导致效果变差](#8. Few-Shot例子选择不当导致效果变差)
    • 四、成本与性能踩坑
      • [9. Token成本突然飙升,怎么排查?](#9. Token成本突然飙升,怎么排查?)
      • [10. 缓存命中率低,怎么优化?](#10. 缓存命中率低,怎么优化?)
    • 五、Demo到上线
      • [11. Demo效果好但上线后效果差,最大的原因是什么?](#11. Demo效果好但上线后效果差,最大的原因是什么?)
      • [12. AI应用怎么做测试?传统测试方法够用吗?](#12. AI应用怎么做测试?传统测试方法够用吗?)
      • [13. 线上没有监控,出了问题怎么定位?](#13. 线上没有监控,出了问题怎么定位?)
      • [14. 用户反馈说"回答不对",怎么收集和处理?](#14. 用户反馈说"回答不对",怎么收集和处理?)
      • [15. AI应用上线后怎么持续优化?](#15. AI应用上线后怎么持续优化?)
    • 总结

前言

这道面试题最区分人:"你踩过什么坑?"背概念谁都会,但真正做过项目的人,能说出具体的问题现象、排查过程和解决方案。这篇整理了AI应用开发中最真实的15个踩坑场景。


一、RAG踩坑

1. 切分不合理导致召回差,怎么排查和解决?

参考答案

问题现象:RAG系统上线后,用户反馈"明明文档里有答案,但系统答不出来"或"答非所问"。

排查步骤

  1. 拿到bad case的query,手动检索知识库,看正确答案在哪个Chunk里
  2. 检查这个Chunk的切分边界是否合理------关键信息是否被切到两个Chunk里
  3. 检查Chunk大小------是否太大导致检索精度低,或太小导致上下文不足
  4. 检查Embedding------这个Chunk和query的相似度排名,是否在Top-K之外

常见原因和解决

  • 固定长度切分把一个完整概念切成了两半 → 改用递归切分或按结构切分
  • Chunk太大(>1000 Token)→ 缩小到500-800 Token
  • 没有重叠窗口 → 加50-100 Token重叠
  • FAQ类文档按长度切分破坏了问答结构 → 按问答对切分

2. 检索Top-K设置不合理,怎么调?

参考答案

问题现象:Top-K太少漏掉正确答案,太多引入噪音导致模型被干扰。

调优方法

  1. 先评估召回率:用测试集统计不同Top-K下正确答案的召回率
  2. 看召回率曲线:Top-K从3到5到10到20,召回率提升的边际效应
  3. 配合重排器:召回Top-20-50,重排后取Top-5

经验值

  • 精确问答(FAQ):Top-3-5,不需要重排
  • 开放问答(知识库):Top-5-10 + 重排
  • 宽泛问题("介绍一下X"):Top-10-20 + 重排

坑点:Top-K不是越大越好。某次把Top-K从5调到20,准确率反而下降------因为20个Chunk里有15个不相关,模型被噪音干扰了。加重排器后解决。


3. 知识库更新了但RAG还是返回旧答案,为什么?

参考答案

问题现象:文档已更新,但RAG系统还在返回基于旧文档的答案。

常见原因

  1. 向量库没更新:文档改了但没触发重新Embedding和索引
  2. 缓存没清:语义缓存命中了旧答案
  3. CDN缓存:如果文档通过CDN分发,CDN缓存未刷新
  4. 增量索引失败:增量更新流程有bug,新文档没入库

解决和预防

  • 建立文档更新→索引更新的自动化流水线
  • 文档更新时主动清除相关缓存
  • 向量库中每条数据带版本号和更新时间
  • 定期做全量重建对齐,防止增量累积偏差
  • 监控知识库更新后N小时内的查询质量

二、大模型输出问题

4. 大模型输出JSON格式不稳定,怎么处理?

参考答案

问题现象:Prompt里要求输出JSON,但模型偶尔输出带多余文字、字段缺失、嵌套错误。

原因分析

  • Prompt描述不够明确
  • Temperature过高
  • JSON结构太复杂(嵌套超过3层)
  • 模型本身对结构化输出的支持不够好

解决方案

  1. 用Function Calling:比Prompt描述格式更可靠
  2. Prompt优化:给一个最小JSON示例,比文字描述有效
  3. 降低Temperature:0-0.3,减少格式变异
  4. 输出校验+修复重试:解析失败时把错误信息附在Prompt后面让模型修正
  5. 降级解析:用正则从非标准JSON中提取关键字段
  6. 多次采样取优:生成3次取第一个通过校验的

预防措施:上线前用1000条测试case验证格式合规率,低于99%不上线。


5. 同一个问题,大模型每次回答都不一样,怎么办?

参考答案

问题现象:同一query多次调用,答案内容、格式、准确度差异很大。

原因分析

  • Temperature过高
  • 上下文拼接不稳定(历史对话裁剪逻辑有问题)
  • 检索结果不稳定(向量库更新或并发写入导致排序变化)
  • 模型服务端更新

解决步骤

  1. 先固定Temperature=0,看是否还不一致
  2. 固定检索结果(关闭增量索引,用快照),看是否稳定
  3. 检查Prompt是否有随机性(如"随机选一个角度回答")
  4. 如果以上都排除了还不一致,可能是模型服务端问题

实践建议:生产环境关键场景Temperature设0-0.3,需要多样性时用0.5-0.7,不要超过1.0。


6. 大模型输出截断(生成到一半停了),怎么处理?

参考答案

原因分析

  1. max_tokens设置太小:输出长度限制不够
  2. 上下文窗口不够:输入太长,留给输出的空间不够
  3. Stop sequence误触发:输出中碰巧包含了stop词
  4. API超时:生成时间太长被服务端断开

解决方案

  1. 合理设置max_tokens,根据任务类型预留足够空间
  2. 精简输入Prompt,给输出留足窗口
  3. 检查stop sequence是否过于宽泛
  4. 用流式输出避免超时------流式连接不容易被断开
  5. 截断检测:输出末尾不是正常结束符(如句号、```)时,自动续写

三、Prompt工程踩坑

7. Prompt越来越长,成本飙升,怎么控制?

参考答案

问题现象:系统Prompt从最初的500 Token膨胀到3000 Token,每次调用都在烧钱。

常见原因

  • 不断往系统Prompt里加规则、加约束、加例子
  • Few-Shot例子越加越多
  • 上下文历史越拼越长

控制手段

  1. 定期审计Prompt:去掉冗余规则、合并相似约束
  2. 动态Few-Shot:不固定所有例子,按query类型选2-3个最相关的
  3. 上下文裁剪:只保留最近N轮+摘要,不堆全量历史
  4. Prompt分层:系统Prompt(固定)+ 场景Prompt(动态)+ 用户输入
  5. Token监控:按场景设置Token预算,超预算告警

8. Few-Shot例子选择不当导致效果变差

参考答案

问题现象:加了Few-Shot例子后,效果不升反降。

常见问题

  • 例子和当前query不相关,误导模型
  • 例子之间有矛盾,模型不知道该学哪个
  • 例子格式不统一,模型学到了不一致的输出模式
  • 例子太多,占用了大量上下文空间

解决方法

  1. 动态选择例子:用向量检索选和当前query最相似的case作为Few-Shot
  2. 例子去重:确保例子之间有差异性
  3. 格式统一:所有例子严格遵循同一格式
  4. 控制数量:2-3个例子通常就够,不要超过5个
  5. 定期更新例子库:发现bad case后加入例子库,好case保留

四、成本与性能踩坑

9. Token成本突然飙升,怎么排查?

参考答案

排查步骤

  1. 看监控:是哪个API/哪个用户/哪个场景的Token突增?
  2. 看输入Token占比:如果是输入Token突增,可能是上下文没裁剪好
  3. 看重试次数:是否因为错误率升高导致大量重试
  4. 看缓存命中率:缓存是否失效导致全量走模型
  5. 看是否有异常调用:是否有用户在刷接口

常见原因

  • 对话历史没做裁剪,越聊越长
  • RAG召回太多文档塞进上下文
  • 缓存策略改了导致命中率骤降
  • 某个用户大量调用(可能在爬数据)
  • Prompt被改了变长了

10. 缓存命中率低,怎么优化?

参考答案

问题现象:上了语义缓存,但命中率只有5%,没起到降本作用。

排查和优化

  1. 看相似度阈值:太高(0.99)几乎命中不了,太低(0.85)可能返回错误答案。建议从0.95开始调
  2. 看query分布:如果用户query非常分散(每个都不一样),缓存本来就不太有效
  3. 看缓存TTL:TTL太短,热点还没形成就过期了
  4. 看缓存大小:容量太小,LRU淘汰太快

优化策略

  • 对FAQ类高频问题,可以预填充缓存
  • 对时效性不敏感的场景,TTL设长一些(24小时+)
  • 分场景设不同阈值------FAQ场景设高阈值,通用问答设中阈值
  • 监控缓存命中后的用户反馈,确保没有"答非所问"

五、Demo到上线

11. Demo效果好但上线后效果差,最大的原因是什么?

参考答案

核心原因:Demo的测试数据太干净,生产数据太脏。

具体差异

  1. 输入质量:Demo用标准问题,生产中用户提问各种各样、表述不清、有错别字
  2. 知识库差异:Demo用精选文档,生产的知识库有大量低质量、过时、重复文档
  3. 并发压力:Demo单请求,生产高并发导致排队、超时、降级
  4. 用户预期:Demo你自己测,知道边界在哪;生产用户会问各种边界问题
  5. 数据漂移:Demo用的模型版本和生产可能不同

解决方法

  • 上线前用真实用户数据做测试(从客服日志里挖)
  • 做"红队测试"------专门找人尝试问各种刁钻问题
  • 灰度发布,先放5%流量观察
  • 建立"bad case收集→分析→修复"的闭环

12. AI应用怎么做测试?传统测试方法够用吗?

参考答案

传统测试不够:传统测试是"给定输入,期望确定输出",AI应用输出非确定。

AI测试方法

  1. 评估集测试:人工标注100-500个case(query+期望答案要点),每次发版跑一遍
  2. LLM自动评估:用另一个大模型评估输出质量(打分1-5)
  3. 对抗测试:Prompt注入、越界输入、极端长度
  4. A/B测试:线上对比新旧版本
  5. 混沌测试:模拟模型超时、向量库故障等异常场景

关键指标

  • 格式合规率 > 99%
  • 准确率(人工评估)> 90%
  • 拒答率 < 5%(该答的不拒)
  • 幻觉率 < 3%

13. 线上没有监控,出了问题怎么定位?

参考答案

这就是一个坑------没有监控的AI系统就像盲飞。

紧急定位

  1. 先看大模型API的调用日志(请求量、错误率、延迟)
  2. 看应用服务器日志,搜error/timeout关键词
  3. 找几个出问题的case,手动复现
  4. 检查最近是否有变更(Prompt修改、模型升级、数据更新)

亡羊补牢

  • 立刻加:Token消耗监控、错误率监控、延迟监控
  • 尽快加:链路追踪(每个请求的完整调用链)、质量监控(采样人工check)
  • 逐步加:用户反馈收集、自动评估流水线

面试金句:没有监控的AI系统不应该上线。监控的成本远低于线上事故的损失。


14. 用户反馈说"回答不对",怎么收集和处理?

参考答案

收集渠道

  1. 显性反馈:点赞/踩、反馈按钮、投诉
  2. 隐性反馈:用户重试、重新提问、放弃使用
  3. 主动收集:定期抽样回访、用户问卷

处理流程

  1. 分类:是检索问题、生成问题、还是用户预期问题
  2. 归因:检索没召回→优化切分/检索策略;召回了但答错→优化Prompt/模型
  3. 修复:bad case加入评估集,修复后回归测试
  4. 反馈:告诉用户"问题已修复"------这很重要,用户觉得反馈有价值才会继续反馈

15. AI应用上线后怎么持续优化?

参考答案

优化闭环

  1. 收集:bad case + 用户反馈 + 监控告警
  2. 分析:归类原因(检索/生成/Prompt/模型/数据)
  3. 优化:针对性改进
  4. 验证:评估集回归测试 + 灰度发布
  5. 上线:全量发布 + 持续监控
  6. 回到1

优化优先级

  1. 先修P0(线上故障、安全问题)
  2. 再修P1(高频bad case、成本问题)
  3. 最后做P2(体验优化、长尾case)

关键原则:每次优化只改一个变量,不要一次改切分策略+换模型+改Prompt------出问题都不知道是哪个导致的。


总结

踩坑复盘题考察的是真实经验。面试官想听的是"我遇到了什么问题→我怎么排查的→我怎么解决的→我学到了什么"。如果你只说概念不说故事,面试官会觉得你没做过。最好的准备方式是:把你的项目经历写成"踩坑日志",每个坑记录清楚问题、原因、方案和教训。