项目与上线
面试的最后一公里。项目讲不清、评估答不上、部署说不全,前面的八股都白背。这一篇覆盖:三个项目的定位、简历写法、三个安全边界、上线清单、高频追问。
三个项目对应三件事
| 项目 | 证明的能力 | 一句话架构 |
|---|---|---|
| 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 的分界线就是边界处理,面试主动讲出来:
- 超范围拒答:检索相似度低于阈值 / 问题超出工具能力 → 明确说"这超出我的能力范围",不硬答不编。
- 工具连续失败换策略:同一工具连续失败 N 次 → 不再重试,改走兜底路径(转人工、让用户换输入、明确告知暂不可用)。
- 死循环兜底:所有循环图配
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)、会编排(多智能体),有演进逻辑 |
| 什么时候算"可以上线"? | 失败可兜底(三个边界)+ 成本可观测(日志四要素)+ 改动可回归(评估集) |