大模型应用系统怎么设计?

Q: 设计一个企业知识库问答系统,你会怎么做?

A: 我会拆成 5 层:

  • 接入层:用户认证、请求限流、会话管理。
  • 知识层:文档解析、切分、embedding、向量库、权限 metadata。
  • 检索层:query rewrite、hybrid search、rerank、权限过滤。
  • 生成层:prompt 拼接、LLM 调用、引用来源、格式控制。
  • 观测层:日志、trace、反馈、评估集、成本统计。

回答模板:

我会先保证知识进入模型前是干净、可检索、带权限的;再保证生成阶段 grounded in evidence;最后通过 trace 和评估集持续优化。

成本怎么控制?

Q: 大模型应用成本太高怎么办?

A:

  • 缓存相同 query 或相同检索结果。
  • 小模型做分类、改写、初筛,大模型做复杂生成。
  • 控制 topK 和上下文长度。
  • 对工具结果和文档片段做摘要压缩。
  • 批量 embedding,异步处理文档入库。
  • 设置最大 Agent 步数和超时。
  • 对高频问题沉淀 FAQ 或规则答案。

面试表达:

成本主要来自 token、模型调用次数、embedding、rerank 和工具调用。优化时要先通过日志知道钱花在哪里。

缓存怎么做?

Q: 大模型应用里哪些地方可以缓存?

A:

  • Embedding cache:同一文本不重复向量化。
  • Retrieval cache:相同或相似 query 的检索结果。
  • LLM response cache:确定性强的问题可以缓存答案。
  • Tool result cache:外部工具结果短时间复用。
  • Prompt fragment cache:固定系统提示和模板复用。

注意:

涉及权限和实时数据时,缓存 key 必须包含 user、tenant、权限范围和数据版本,否则可能返回越权或过期答案。

效果怎么评估?

Q: 你怎么判断大模型应用是真的成功,而不是表面跑通?

A: 不能只看 demo。要看离线评估和线上指标。

离线:

  • 检索命中率。
  • 答案准确率。
  • 引用正确率。
  • 幻觉率。
  • 格式通过率。
  • bad case 回归集。

线上:

  • 用户采纳率。
  • 点赞/点踩。
  • 平均延迟。
  • token 成本。
  • fallback rate。
  • 人工介入率。

关键句:

表面成功是链路能跑通,真实成功是答案可靠、成本可控、问题可定位、业务指标有改善。

没有解释信息怎么办?

Q: 如果模型给了答案但没有解释依据,怎么处理?

A:

  • 要求输出 citation 或 evidence。
  • 把检索证据和最终结论分开生成。
  • 对答案做 verifier 检查。
  • 如果证据不足,返回不确定而不是编造。
  • 必要时调用外部工具补充事实。

面试表达:

对企业应用来说,答案可解释性很重要。没有证据的正确答案也很难被信任。

单 Agent 还是多 Agent?

Q: 一个复杂任务应该做成单 Agent 还是多 Agent?

A: 先从单 Agent 开始,只有任务复杂到需要明确职责隔离时再拆多 Agent。

适合单 Agent:

  • 流程短。
  • 工具少。
  • 状态简单。
  • 延迟要求高。

适合多 Agent:

  • 任务可拆成规划、检索、执行、校验。
  • 不同子任务需要不同模型或工具。
  • 需要并行处理。
  • 需要独立评估每个步骤。

面试回答:

多 Agent 不一定更好。它会增加通信成本、状态同步和调试难度。工程上我会先做清晰的 workflow,再判断哪些节点值得 Agent 化。

高并发和稳定性

Q: 大模型应用高并发怎么扛?

A:

  • API 层限流和鉴权。
  • 长任务放进消息队列。
  • Worker 异步执行 Agent steps。
  • 模型调用设置超时和重试。
  • 工具服务做隔离和熔断。
  • 对 session state 做持久化。
  • 用 trace 系统观察每一步耗时。

追问:

Q: 怎么避免 Agent 死循环?

A: 设置最大步数、最大 token、最大运行时间、重复动作检测、任务完成判断和人工 fallback。

常见踩坑

Q: 大模型应用落地有哪些坑?

A:

  • 只做 demo,不做权限、日志和评估。
  • prompt 写死,后续无法版本管理。
  • RAG 没有 citation,无法解释答案。
  • 忽略缓存中的权限问题。
  • 所有任务都用最贵模型。
  • Agent 没有终止条件。
  • 失败 case 无法复现。