跳到主要内容
版本:Next

项目与上线

面试的最后一公里。项目讲不清、评估答不上、部署说不全,前面的八股都白背。这一篇覆盖:三个项目的定位、简历写法、三个安全边界、上线清单、高频追问。

三个项目对应三件事​

项目证明的能力一句话架构
RAG 知识库问答会查:检索质量与防编造文档 → 切分 → 向量库 → 混合检索 → 重排 → 带引用生成
多工具 ReAct Agent会做:让模型安全地干活工具注册 → 手写循环三步四道闸 → 危险操作 confirmed
单入口多智能体助手会编排:LangGraph 状态图Supervisor 路由 → 查订单/退款/售前子 Agent → checkpointer 记忆

三个项目是递进关系,面试时最好能说清"为什么从上一个演进到下一个"——单 RAG 答不了"帮我退这单",所以加工具;工具多了循环写成一团,所以上 LangGraph。有演进逻辑的项目 > 三个孤立 demo。

简历怎么写:写数字​

不写"熟悉 RAG、LangChain",写可验证的数字——面试官会顺着数字追问,所以每个数字都要能讲出测量方法:

  • 检索质量:Recall@4 从 0.62 提升到 0.85(怎么测的?构造 50 条问答对,人工标注应命中文档)
  • Agent 质量:任务成功率 92%(50 个标准任务跑批,成功 = 正确调用工具且给出正确结果)
  • 工程指标:P95 响应 < 3s、单次会话平均成本 ¥0.08、拦截死循环 100%(recursion_limit 触发计数)

每个数字后面挂一个"怎么测的",就是一道现成的加分追问。

三个安全边界(必讲)​

生产 Agent 与 demo 的分界线就是边界处理,面试主动讲出来:

  1. 超范围拒答:检索相似度低于阈值 / 问题超出工具能力 → 明确说"这超出我的能力范围",不硬答不编。
  2. 工具连续失败换策略:同一工具连续失败 N 次 → 不再重试,改走兜底路径(转人工、让用户换输入、明确告知暂不可用)。
  3. 死循环兜底:所有循环图配 recursion_limit + 重复检测,超限立刻终止并友好报错——宁可失败得体面,不可成功得昂贵。

上线清单​

① 核心逻辑抽纯函数
检索、改写、判断逻辑全部写成无副作用的纯函数 → 可单测、可离线评估
② FastAPI 包一层
POST /chat 主接口 + GET /health 健康检查(探活必备)
③ Docker 化
.env(API Key 等)通过环境变量注入,绝不打进镜像
④ 日志四要素
thread_id(定位会话)、意图(Supervisor 路由结果)、耗时、token 消耗
⑤ 评估集
30~50 条标准问答对,每次改 prompt/换模型后跑回归

评估集是上线的前置条件:没有 30~50 条评估集,每次改动都是盲改;有评估集,换模型、调 prompt 都变成"跑一遍看指标"的可验证动作。

高频追问与答法​

"讲一下你的 RAG 项目架构"​

按数据流讲,别按组件堆名词:"文档入库存 Redis 缓存 + 向量库;查询先走混合检索(BM25 + 向量)取 top-20,重排取 top-4;生成端限定只用资料并标引用;检索分数低于阈值直接拒答。" 然后主动抛一个数字(Recall@4),把追问引到你准备好的战场。

"怎么评估?用 LLM 当裁判有什么问题?"​

有评估集:检索看 Recall@k,答案看忠实度和相关性。LLM 当裁判(LLM-as-judge)的问题是:偏 own-position(偏长答案、偏自己风格的输出)、打分不稳定(同内容两次分不同)、有偏好偏差。所以裁判结果只能作参考,关键指标用人工标注校准,裁判分数要固定模型版本 + 固定 prompt 才可横向比较。

"多用户为什么会串话?"​

根因:会话状态放错位置。messages 存成全局变量/模块级变量 → 并发请求互相覆盖。修法:会话状态与 thread_id/用户 session 绑定(LangGraph 用 checkpointer + thread_id 隔离,自研用 Redis 按会话 key 存)。面试可加一句:"单机还可能用全局变量侥幸活着,一旦多进程/多副本部署必串。"

"你遇到的最大坑是什么?"​

选一个有排查过程的坑讲,结构:现象 → 怀疑 → 验证 → 根因 → 修复。推荐素材:

  • RAG 检索分数方向搞反(距离越小越相似,却取了最大分)→ 现象是"召回全是最不相关的",靠打印中间产物定位;
  • LangGraph 消息被吞(没挂 add_messages)→ 现象是多轮后模型"失忆",看 state 快照发现只剩最后一条;
  • 悬空 tool_calls 导致 400 → interrupt 恢复时忘了补 ToolMessage。

高频面试题速查​

问题答题要点
讲一下你的 RAG 项目架构?按数据流讲:入库→混合检索→重排→带引用生成→阈值拒答,末尾抛指标引追问
怎么评估?LLM 裁判有什么问题?Recall@k + 忠实度 + 人工校准;LLM 裁判偏长答案、打分不稳,只作参考
多用户为什么串话?会话状态放全局变量;按 thread_id/会话 key 隔离(checkpointer 或 Redis)
三个项目分别证明什么?会查(RAG)、会做(ReAct)、会编排(多智能体),有演进逻辑
什么时候算"可以上线"?失败可兜底(三个边界)+ 成本可观测(日志四要素)+ 改动可回归(评估集)