这是《LLM 应用开发 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 本章整理 LLM 应用开发常见面试题,重点给出工程判断和追问方向,而不是背模板答案。
30.1 LLM 与传统软件的区别
问题:LLM 应用和传统 Web 应用最大的区别是什么?
回答要点:
- 行为概率化,输出需要 schema 和业务校验;
- 质量依赖数据、Prompt、模型和检索组合;
- 测试从精确断言转向评测集和指标;
- 成本单位是 token;
- 失败可能表现为“看起来正确”;
- 安全多了注入、幻觉和泄露;
- 变更需要灰度和回归。
追问:如何设计一个不可靠组件之上的可靠系统?
30.2 RAG 设计
问题:如何设计生产级 RAG?
回答框架:
数据:解析、切块、元数据、权限、版本
检索:向量、关键词、过滤、融合
排序:rerank、多样性、token 预算
生成:引用、拒答、输出约束
治理:评测、缓存、观测、回滚
关键点:
- 权限过滤必须在检索阶段;
- 引用必须服务端校验;
- 资料不足要拒答;
- 精确数据走数据库或 API;
- 索引切换可回滚。
30.3 切块与向量
问题:chunk 越大越好吗?
回答:不是。太大导致语义稀释和上下文浪费,太小导致上下文不完整。应按文档结构切块,为表格和 FAQ 设置专用规则,并通过 Recall@K 和端到端答案质量评估。
可补充父子块方案:小块召回,父块补上下文。
30.4 混合检索
问题:为什么需要混合检索?
回答:
- 向量适合语义相似;
- BM25 适合错误码、型号、版本号;
- 数据库适合精确 ID;
- RRF 只用排名融合,避免分数不可比;
- rerank 统一精排。
30.5 幻觉治理
问题:如何降低幻觉?
回答:
- 明确回答边界;
- 提供相关且最新的资料;
- Prompt 允许不知道;
- 关键结论要求引用;
- 引用和事实由服务端校验;
- 数值由程序计算;
- 高风险转人工;
- 坏案例进入回归。
不要说“可以完全消除幻觉”。
30.6 Function Calling
问题:工具调用的安全边界在哪里?
回答:
- 模型只提出调用请求;
- 服务端校验 schema、业务和权限;
- 工具使用最小凭证;
- 高危动作人工审批;
- 调用记录审计;
- 写操作幂等;
- 错误不暴露内部细节。
30.7 Agent 控制
问题:Agent 如何避免失控?
回答:
- 目标和成功条件明确;
- 工具白名单;
- 最大轮数、token、金额和时间;
- 重复调用检测;
- 停止条件;
- 检查点恢复;
- 完整 trace;
- 高风险动作审批。
30.8 安全问题
问题:Prompt 注入如何防?
回答:
- 外部内容标记为数据;
- 指令和资料隔离;
- 权限由服务端控制;
- 工具范围最小化;
- 输出过滤;
- 高危操作确认;
- 注入用例自动回归。
强调 Prompt 只是降低风险,不是安全边界。
30.9 评测问题
问题:上线前如何评估质量?
回答:
- 组件指标:Recall、NDCG、工具选择率;
- 端到端指标:正确性、忠实度、引用准确率;
- 安全指标:注入、越权、敏感信息;
- 工程指标:延迟、错误率、成本;
- 在线指标:解决率、转人工、反馈;
- 人工抽检校准模型评分。
30.10 成本优化
问题:模型调用成本太高怎么办?
回答:
- 统计成本分布;
- 减少无效上下文;
- 限制输出;
- 增加规则缓存和语义缓存;
- 模型分级路由;
- 控制重试;
- Agent 预算;
- 用质量指标验证优化。
30.11 场景题
问题:客服系统答案经常引用旧政策,怎么排查?
回答:
- 找 trace,确认候选 chunk;
- 检查索引是否存在新旧版本;
- 检查 effective_time 和 status;
- 检查文档同步任务;
- 检查 rerank 新鲜度策略;
- 补齐时间过滤;
- 把案例加入回归集。
30.12 系统设计
问题:设计一个企业文档问答平台。
回答结构:
- 需求和范围;
- 数据接入和解析;
- 权限和租户;
- 检索和重排;
- 生成和引用;
- 评测和安全;
- 缓存与成本;
- 可观测和发布;
- 容量和演进。
本章小结
面试中的关键是展示工程判断:不只说用 RAG 或 Agent,而是讲清边界、风险、指标、权限、成本和回滚。能主动提出追问和验证方法,比背概念更有说服力。
思考题
- 如何向面试官解释“不能完全消除幻觉”?
- 生产 RAG 的权限过滤应放在哪里?
- Agent 的预算和停止条件有哪些?
- 模型评分如何证明可信?
- 系统设计题应按什么顺序展开?