13. 面试总纲:简历映射与速背#
一句话结论:简历上每一句都能落到一个机制、一章和一组文件;背这一章,追问再翻对应章。
本章只做三件事:把简历说法映射到机制与章节、把各章速背卡收成一页、给压力题的 30 秒答法。
基准 HEAD 634f4ab(2026-09-22)。本章不评价简历里的数字,只标它对应哪套机制。
怎么用这本手册#
- 先背这一章:5 分钟自我介绍 + 30 张速背卡 + 压力题 10 道,够撑一轮完整面试。
- 被追细节就翻映射表:表里第 3 列是章号,第 4 列是文件,翻过去看那章的「机制怎么跑」。
- 问「为什么这么设计」翻该章「它解决什么问题」:四格是问题 → 坏法 → 修法 → 代价,代价那格一定要说。
- 问数字来源翻该章「数字与证据」:标 ✓ 的当场能说文件,标「仅口径 / 未验证」的先说清楚这点。
- 问「你踩过什么坑」翻该章「坑与易混点」:每章 ≤5 条,挑一条讲透比列五条强。
5 分钟自我介绍版#
① 做的是什么(约 40 秒) ShoppingX 是跨境电商购物 Agent:用户说一句「旅行三件套、预算 300、不要塑料」, 它自己拆意图、跨平台检索、比价、算关税运费,输出带选购理由的商品卡清单, 并把用户偏好记成可跨会话复用的长期事实。数据是 Kaggle 的多平台商品,约 150 万条。
② 架构:一环两进程(约 60 秒) 全仓只有一个 Agent,拿全部 19 个业务工具,要并行就在同一轮发多个工具调用,不派子 Agent。 多 Agent 我做过两代(同质 fork、Supervisor-Workers 读写切分),翻线上会话发现 TradeAgent 440 会话 0 次派发、SearchAgent 60 次派发全是单跳壳,就把整条派发机制删了。 部署是 API 与 worker 两个进程 + Redis Stream 队列 + MySQL,可以横着加副本。
③ 检索三段(约 50 秒)
召回、精排、精挑。召回是 BGE-M3 编码 + Qdrant dense 近邻 + payload filter,
精确需求(平台/价格/评分)当 filter 不当分;精排只有一处,在合流后的 item_picker 里
用 cross-encoder 判品类对不对;精挑是确定性加权求和,最多出 3 件。
整条链只有 planner 一次 LLM 调用,其余全可复现。
④ 记忆与控制面(约 70 秒)
记忆分两层:长期是一张事实表,key 就是身份、同 key 覆盖,每轮注入 tier-one 一批,
其余靠 recall_memories 按主题翻;短期是会话级 P_t,唯一写者是 planner。
「不许怎么跑」全写成钩子挂在 harness 上:6 个 hook 点、25 个钩子,
安全闸硬拒、效率闸连拒 2 次放行,失控防线是迭代 30 / 整轮 300 秒 / 结果截断 / 循环检测 / 三本检索账。
写边界靠三样:is_read_only 标记、PermissionEngine 按名放行不用 BYPASS、下单决议只走 HTTP。
⑤ 评测与训练(约 60 秒) 没有单一指标能评 Agent,所以每条 query 让 judge 先生成专属评分细则,分 P0 红线 / P1 规范 / P2 质量三档, 再跑「打分 → 捞 bad case → 改 prompt 或检索策略 → 重跑同一把尺子」。 训练侧做了两件:用 ESCI 人工标注微调 embedding 与 reranker;把 RL 限定在 planner 这一个单步任务, reward 靠把模型写的检索词真打进 Qdrant,不让 judge 噪声进训练回路。 reranker 离线涨了但没上线,planner 的 4B 也没接进线上——这两条我当复盘讲,不当成绩讲。
简历说法映射表#
项目一:ShoppingX#
| 简历原句(截短) | 对应机制一句话 | 章 | 关键文件 |
|---|---|---|---|
| 跨多平台交互式购物 Agent,Amazon / Shopee / Lazada / SHEIN | 商品库是 Qdrant 单 collection,platform 走 payload filter 分平台 | 01 / 04 | app/recall/qdrant_store.py、app/tools/item_search.py |
| 自动跨平台并行检索、比价、计算到手价 | 同轮多发 item_search;检索成功后 autopick 自动跑 price_compare + item_picker | 02 / 04 | app/harness/autopick.py、app/tools/price_compare.py、shipping_calc.py |
| 输出附带选购理由的商品卡片清单 | 终结工具 shopping_summary 的产出直接当最终答案,正文并进 final_text | 02 | app/tools/shopping_summary.py、app/agent/orchestrator.py |
| 技术栈 FastAPI · Qdrant · OpenSearch · Langfuse · AG-UI · WebSocket | API 与 worker 两进程;召回 Qdrant、品类知识库 OpenSearch 旁路;事件走 AG-UI + WebSocket;trace 进 Langfuse | 01 / 09 / 10 | app/api/server.py、app/worker.py、app/recall/kb_client.py、app/api/monitor.py |
| 技术栈 ms-swift · vLLM | 训练侧:ms-swift 跑 LoRA SFT/GRPO,vLLM 做采样与评测 | 11 / 12 | scripts/train/、scripts/train/gpu/ |
| 单模型主循环同轮批量发起工具调用实现跨平台 / 多槽位并行 | 工具标 is_concurrency_safe=True,框架 gather 同轮多条;platform= / slot= 区分 | 02 / 03 | app/agent/tool_registry.py、app/agent/agents.py |
| 三层失控防线(迭代上限、循环检测、结果截断与检索预算) | 迭代上限 30、整轮 300s、工具结果截 4000 token、LoopDetector 滑窗 6/阈值 4、三本互不透支的检索账 8 / 2 / 6 | 02 / 06 | app/agent/limits.py、app/harness/hooks/repetition.py、truncation.py、retrieval_budget.py |
| 会话级短期记忆锚定意图与偏好,抑制多轮语义漂移 | P_t 存 AgentState.middle_context["pt"],唯一写者 planner,当轮 item_picker 执行;换域清表 | 05 | app/memory/session_pt.py、app/tools/planner.py |
| 抽象 Agent 全生命周期 Hook Pipeline(session_start / pre_think / pre & post_tool_call / post_reflect / session_end) | 6 个 HOOK_POINTS 的注册表,25 个 @harness_hook 按 priority 升序跑,钩子只决策、适配器落地 | 06 | app/harness/middleware.py、adapter.py、app/harness/hooks/ |
| 统一管控结果截断、工具熔断、单步断言、漂移检测 | 截断在 truncation.py;依赖熔断分两处(Qdrant/OpenSearch 在 recall 侧、模型出口在网关);断言与漂移各一个 hook 文件 | 06 / 04 / 09 | hooks/validation.py、hooks/drift.py、app/recall/qdrant_store.py、app/agent/llm_breaker.py |
| 三类单步断言(Schema / Sequencing / Semantic) | 入参 schema 校验、工具先后次序校验、语义一致校验,三组判据都读已发生的事实 | 06 | app/harness/hooks/validation.py、hooks/sequencing.py |
| Silent Drift 每 3 轮识别目标遗忘 / 探索发散 / 偏好丢失 / 成本失控,分级纠正 | 漂移 hook 周期性比对当前轨迹与 planner 目标,命中给 nudge,不硬拒 | 06 | app/harness/hooks/drift.py |
| 四阶段状态机(规划→搜索→比较→总结)动态收缩可用工具子集 | 阶段机 phase_machine.py 已在 10526d1 删除,改成两个事实位 progress_marks / force_conclude + 预算制 | 06 | app/api/run_state.py、app/harness/hooks/budget.py |
| 通过 pre_tool_call Hook 拦截越权调用 | pre_tool_call 上的闸拒工具时抛 HookRejectSignal,由适配器落成拒绝 | 06 | app/harness/middleware.py、adapter.py |
| 保留工具定义与前缀缓存 | 不摘工具表:禁用一律在执行层回哨兵文案,工具表逐轮恒定 | 06 / 07 | app/harness/sentinels.py、app/harness/formatter.py |
| 每条 Query 动态生成专属评分细则,由 Judge 模型自动打分 | rubric 动态生成后按生成 prompt 全文 hash 缓存;P0 否决 / P1 扣 10 / P2 打 1-5 | 08 | app/eval/rubric.py、scripts/eval/run_rubric.py、data/eval/rubric_cache/ |
| 评分→定位 bad case→迭代 Prompt / 检索策略→再评测对照 | 固定 95 条种子集重跑同一把尺子;自动修只覆盖确定性可修的一类 | 08 | data/eval/queries.jsonl、app/eval/strategies.py |
| 接入 ESCI 人工标注(ASIN join 交集) | ESCI 靠 ASIN 与自建 138 万点商品库 join,产出训练与评测两套数据 | 11 | scripts/train/、data/eval/product_recall_report.json |
| ANN 难负例挖掘 + cross-encoder 假负闸 数据管线 | 用当时的召回模型挖 hard negative,再用 cross-encoder 按绝对阈值 0.5 闸掉疑似假负 | 11 | scripts/train/(提交 ae8adab) |
| BGE-M3 对比精调,R@100 与端到端评测 | 四轮 17 组对照,有效项是「同 query 多正例全展开」;端到端跑 Rubric A/B | 11 | data/eval/rubric_A_base_*.json / rubric_B_e15_*.json |
| reranker 分级 label × loss 函数 2×2 析因,ndcg@8 与跨语言迁移 | 2×2 析因定最优组合(分级 label + listwise CE);离线涨、线上未接(线上只消费判别不消费排序) | 11 | app/tools/item_picker.py、提交 9d82cc4 |
| Qwen3-4B LoRA 双通道热插拔(RL 失败一键回退) | SFT / RL 两个 LoRA 适配器分通道存放,切换即回退 | 12 | scripts/train/gpu/、var/train-logs/m23/output/ |
| SFT 冷启格式率、五轮 GRPO 后 reward | SFT 只修 schema 形态,GRPO 五轮取 r3(lr 2e-5、beta 0) | 12 | var/train-logs/m23/output/、提交 8735ab0 |
| 程序化四维 reward,检索词实打 Qdrant 验证命中 | reward 45% 来自把生成的检索词真打进 138 万点库看 top20 命中,judge 不进训练回路 | 12 | scripts/train/(S0-2 9b987ea) |
| 实测修复计分机制层 reward hacking;单变量对照证伪文档推荐学习率 | 逐维拆 reward 定位刷分路径;lr 按单变量对照扫,定位 LoRA-RL 的量级 | 12 | 提交 9b987ea、S3 训练日志 |
项目二:SREOps(另一个仓库,本手册未覆盖)#
下面 5 行不在本仓代码里,本手册没有对应章节。列出的「最近的可类比机制」只是面试时好串的对照,不是同一套实现。
| 简历原句(截短) | 本仓最近的可类比机制 | 章 |
|---|---|---|
| 分层自适应调查引擎:规则预处理 → Tier1 Runbook / Tier2 向量检索 / Tier3 ReAct Loop 递进 | 「能确定性算的不交给模型」同一思路:autopick 自动比价精挑、picker 确定性加权 | 02 / 04 |
| 假设驱动式调查:先生成 3-5 条根因假设再定向取证,达标即终止 | 终结判据写在机制里而不是提示词里(终结工具 + 看门狗 + 迭代上限) | 02 |
| Runbook 冷启动与自增长闭环:Tier3 经人工确认后提炼成结构化 Runbook | 评测飞轮的「bad case → 沉淀策略 → 再评测」,自动只收确定性可修的那一类 | 08 |
| LLM 修复操作安全治理:白名单结构化工具替代自由 shell;高风险人工审批 | 写边界三样:is_read_only 标记 + 按名 ALLOW 不用 BYPASS + 决议只走 HTTP | 03 |
| 事务化修复:预生成补偿操作、CAS 漂移检测、三级递进门禁 | 下单的幂等键(run_id + 顺序无关指纹)与「订单号撞了重分不覆盖」 | 03 |
专业技能段#
| 简历原句(截短) | 对应机制一句话 | 章 | 关键文件 |
|---|---|---|---|
| 熟悉 Skills、MCP 等扩展机制 | 7 份内置 skill:目录(name + description)常驻 system prompt,正文由模型调 Skill 按需读;MCP 工具按只读白名单挂载 | 14 / 03 | skills/、app/agent/tool_registry.py |
| 了解 RAG 全链路 | 商品侧 dense 召回 + cross-encoder 精排;品类知识库走 OpenSearch Hybrid(KNN 0.7 / BM25 0.3)旁路 | 04 | app/recall/、app/tools/category_insight.py |
| Agent Harness / Loop 架构设计 | 主循环交 AgentScope,「不许怎么跑」全在 harness 的 6 点 25 钩 | 02 / 06 | app/harness/ |
| embedding / reranker 对比精调 | ESCI join + hard negative 挖掘 + 假负闸;离线与端到端两套评测口径 | 11 | scripts/train/ |
| LLM 的 LoRA SFT + GRPO 全流程(数据构造、reward 设计与标定、离线 / 端到端评测) | 只训 planner 单步;reward 程序化、判据可复算;dev92 做选型尺子 | 12 | scripts/train/、var/train-logs/m23/ |
| 数据库:MySQL、索引、事务 | 起服形态闸拒绝 SQLite;配额预扣、thread 归属都靠条件 UPDATE 而不是进程内变量;17 条 Alembic 迁移 | 10 | app/db/holds.py、app/db/runs.py、migrations/versions/ |
| Redis:缓存、分布式锁、常见缓存问题 | 检索缓存 L2 在 Redis(正常 900s / 空结果 60s 挡穿透)+ singleflight 锁;队列走 Redis Stream;去重窗口 SET NX EX | 04 / 10 | app/recall/search_cache.py、app/api/server.py |
| JUC 并发编程 / Java 基础 | 本仓是 Python,对应处是异步并发的同类问题:同轮 batch 的原子性、占槽那段不能有 await | 03 / 10 | app/agent/orchestrator.py、app/db/holds.py |
30 张速背卡#
| # | hint | 展开一句 | 章 |
|---|---|---|---|
| 1 | 一环:单模型单环无子 Agent | 并行靠同轮多发 item_search,2026-09-16 按 440/60/0 删掉派发 | 01 |
| 2 | 两进程:API 入队 / worker 跑 loop | server.py 只准入与入队,worker.py 领任务调 run_agent | 01 |
| 3 | 三道跨进程闸 | run_holds 用户级并发 / QUEUE_MAX_DEPTH / WORKER_CONCURRENCY | 01 / 10 |
| 4 | 终结工具 6 个 + 1 个看入参 | TERMINAL_TOOLS 6 个;ask_user(closes_turn=True) 按入参算终结 | 02 |
| 5 | 普通轮 4 次模型调用 | planner 预置 → item_search → 自动比价精挑 → shopping_summary | 02 |
| 6 | 停不下来先软后硬 | 催 1 次 → 看门狗 45s 软 + 30s 硬 → max_iters 30 硬停 | 02 |
| 7 | 终结工具产出 = 最终答案 | 模型补的复述丢掉,工具正文并进 final_text(ddaf043) | 02 |
| 8 | research 是函数不是子 Agent | 固定三步无反馈环,次数上界 = len(targets) ≤3 | 02 |
| 9 | 440 / 60 / 0 | TradeAgent 440 会话 0 派发、SearchAgent 60 次全是单跳壳 | 03 |
| 10 | 删载体不删原则 | 派发机制整条删,写边界三样保证一样不少 | 03 |
| 11 | 三样保证 | is_read_only + 按名 ALLOW 不用 BYPASS + 决议只走 HTTP | 03 |
| 12 | 幂等键 = run_id + 顺序无关指纹 | 框架拿不到 tool_call_id,改用排过序的载荷 hash | 03 |
| 13 | 三段:召回 → 精排 → 精挑 | 召回只挂 dense,cross-encoder 只在 picker 跑一次,精挑封顶 3 件 | 04 |
| 14 | 精确需求当 filter,不当分 | 平台/价/评分走 payload filter,品牌/排除词走召回后确定性过滤 | 04 |
| 15 | 两级缓存 + 空结果 60s | L1 进程 + L2 Redis,只缓存「编码 + 召回」两步 | 04 |
| 16 | 错误分级 = 告诉模型别重试 | DependencyDown → metadata code=dependency_down → 贴「别重试」 | 04 |
| 17 | 长期 = 事实表,短期 = P_t | memory_facts 跨会话 / middle_context["pt"] 本次会话 | 05 |
| 18 | key 即身份,同 key 覆盖 | 改主意就用原 key 写新值,没有删除口给模型 | 05 |
| 19 | 记忆只经上下文生效 | 注入给模型 → 模型写进 item_search 入参;机制侧硬淘汰腿删了 | 05 |
| 20 | 注入 tier-one,工具翻旧账 | constraint 全进 + 最近补到 8 条;其余靠 recall_memories | 05 |
| 21 | 6 点 25 钩,按关切分 8 文件 | 钩子只决策,换模型 / 拒工具 / 写 state 都在 adapter.py | 06 |
| 22 | 安全闸硬拒,效率闸连拒 2 次放行 | ESCAPE_AFTER_REJECTS=2,安全闸不得声明 escape_key | 06 |
| 23 | 三本账:检索 8 / 站外 2 / 研究 6 | 互不透支,retrieval_budget.py | 06 |
| 24 | 不摘工具,回哨兵 | 工具表逐轮恒定保前缀缓存,禁用全在执行层回文案 | 06 |
| 25 | 三层压缩:标记 / 削工具 / LLM 摘要 | 粗活在前细活在后,超 trigger_ratio 0.8 才花 LLM | 07 |
| 26 | 命中率靠前缀不靠标记 | 每轮会变的一律放 system 之后 | 07 |
| 27 | 三档:P0 否决 / P1 扣 10 / P2 打 1-5 | P0 一条 fail 总分直接 0 | 08 |
| 28 | 先校尺子再改 Agent | q28 同一份输出三次采样 0 / 0 / 90 | 08 |
| 29 | 断路器只认「对面挂了」 | 429 不计、总超时不计、首 token 超时计且真掐 | 09 |
| 30 | 离线 +26%,端到端 0 | 排序腿涨了,线上三个消费点全是判别腿 | 11 |
备选两张(问到训练侧再加):「只训 planner 一个单步」(12)、「目录常驻正文按需」(14)。
压力题 10 道#
Q1. 为什么把多 Agent 删了?是不是没做出来?
两代都跑起来过(同质 fork、Supervisor-Workers 读写切)。删的依据是线上会话:TradeAgent 440 会话 0 次派发,
SearchAgent 60 次派发全是单跳壳(派出去只调一次 item_search 就回来)。载体删掉,写边界三样保证原样留下。→ 第 3 章
Q2. 写安全为什么不用 PermissionMode.BYPASS?
BYPASS 是整档关引擎,将来新加的真写工具会被一起悄悄放行。改成按工具名逐个 ALLOW,
放行范围写死在代码里看得见,漏登记的失效方向是「多问一次」而不是「悄悄下单」;
另有一条测试断言每个非只读工具都在放行集里。→ 第 3 章
Q3. reranker 离线 ndcg 涨了,端到端没涨,怎么说? 这是我做过最完整的「优化了错误目标」的复盘:线上 rerank 分数的三个消费点全是判别(这件是不是这个品类), 不消费排序;自训模型排序更好、判别更差,所以没上线,品类门继续用现成 v2-m3 + 阈值 0.20。→ 第 11 章
Q4. 断路器为什么不把 429 算失败? 429 是「我们发太快」,不是「对面挂了」——那是令牌桶的活。把它计进断路器会让自己的限流被放大成服务不可用。 同理总超时不计(可能是单条请求太长),首 token 超时计并且真掐。→ 第 9 章
Q5. worker 的 grace 为什么是 330 秒?
必须 ≥ 单轮墙钟上限 MAIN_AGENT_TIMEOUT_SEC 300,再留 30 秒收尾。
旧默认 120 比一轮还短,等于每次发布主动掐一批还在跑的任务。k8s 侧配 365 = preStop 5 + 330 + 余量 30。→ 第 10 章
Q6. 记忆为什么从偏好条目改成事实表?
旧结构要模型同时给对 polarity / category / domain / slug 四个字段,还要引用旧条目的 dedup_key 去重;
拼错一个字符就是两条互相打架的记录,还不报错,只是推荐变糊。改成 key 即身份、同 key 覆盖,
分类退成三个值只管注入优先级。代价是 key 由模型自拟可能分叉,靠 same_fact 的 bigram Jaccard 0.6 挡一道。→ 第 5 章
Q7. 四阶段状态机为什么删了?
它是「第二套状态机」:真实进度已经写在消息历史里,再维护一份就会和事实对不上,而且收缩工具子集会破坏前缀缓存。
改成读已发生事实的两个位(progress_marks / force_conclude)+ 预算制,禁用一律在执行层回哨兵、不摘工具。→ 第 6 章
Q8. 前缀缓存怎么保住的?
命中率来自「前缀字节逐轮不变」,不是来自打不打 cache_control 标记。
所以:system 段钉死、标记恒 1 个、工具表不动;每轮会变的(记忆、会话约束、历史)一律放 system 之后当注入消息。
2026-07 那次注入块塞进前缀,命中率从 67.5% 掉到 31.6%,之后加了三遍取中位的命中率门禁盯着。→ 第 7 章
Q9. planner 训完线上没用,那这段训练算什么?
算一次完整的 RL 工程流程 + 一次诚实的负结论。分是涨的(dev92 reward 0.790 → 0.813),
但立项要治的域漂移没治好反而退步(domains_f1 0.775 → 0.654)。线上 planner 按同一套 dev92 尺子选型,
换成 API 模型 qwen3.8-flash。价值在 reward 设计:45% 靠真打 Qdrant,judge 噪声不进训练回路。→ 第 12 章
Q10. 单环怎么并行?不是退化成串行了吗?
并行在同一轮:模型一次回复里发多条 item_search(platform= 或 slot=),工具标了 is_concurrency_safe=True,
框架 gather 执行。真 LLM 验收里套装轮同轮 3~5 条、0 次派发。
子 Agent 给的是「独立上下文」,不是并行度——而我的场景恰恰需要候选在同一个上下文里合流比价。→ 第 2 / 3 章
数字速查#
只收各章「数字与证据」里标 ✓ 或「旧版核对过」的。简历里的数字不在此表,被问到直接翻对应章。
| 数字 | 指什么 | 章 |
|---|---|---|
| 19 / 11 / 8 | 业务工具数 / 只读 / 非只读(= 放行表条目数) | 01 / 03 |
| 6 | TERMINAL_TOOLS 个数(另加 ask_user(closes_turn=True)) | 02 |
| 30 / 300s | 主 loop 迭代上限 / 整轮墙钟上限 | 02 |
| 45 / 30s | 看门狗软催 / 硬停宽限 | 02 |
| 8 / 2 / 6 | 检索总量 / web_search 任务配额 / research 搜索配额 | 02 / 06 |
| 4000 token | 单条工具结果截断线 | 06 |
| 6 / 4 | LoopDetector 滑窗次数 / 同一工具出现次数阈值 | 06 |
| 6 / 25 | harness hook 点数 / 钩子数(曾 37 → 30 → 23) | 06 |
| 2 | 效率闸连拒几次后放行(ESCAPE_AFTER_REJECTS) | 06 |
| $0.50 | 单任务成本上限(token_budget.py:99) | 06 |
| 440 / 60 / 0 | 删派发依据:会话数 / 派发数 / 真实用户定点调查次数 | 01 / 03 |
| 481 会话 0 次 | 真实用户拆出 target_refs 的次数 | 03 |
| 30 分钟 | 下单确认卡有效期 | 03 |
30 / min(top_k,10) | 单平台召回池 / 多平台每平台取数 | 04 |
PICK_RERANK_K=15 | 每批送 cross-encoder 的上限 | 04 |
| 900s / 60s | 检索缓存正常 TTL / 空结果 TTL | 04 / 09 |
| 3 次 / 30s / 5s | Qdrant 断路器阈值 / 恢复 / 查询超时 | 04 |
| 0.7 / 0.3 | 品类知识库 Hybrid 的 KNN / BM25 权重 | 04 |
| 8 / 64 / 200 | 每轮注入事实上限 / key 字符上限 / value 字符上限 | 05 |
| 3 / 20 / 0.6 | 回合后抽取一轮最多落几条 / recall_memories 回几条 / same_fact 阈值 | 05 |
| 0.8 | 框架压缩触发比例 ContextConfig.trigger_ratio | 07 |
| 24000 / 6 | PRUNE_TOOL_RESULTS_TOKENS / PRUNE_KEEP_RECENT | 07 |
| 1024 / 4 | 缓存最小写入阈值 / 单请求标记上限(实际恒 1) | 07 |
| 0.674 / 0.12 / 3 遍 | 缓存命中率门禁基线中位 / 容差 / 遍数 | 07 / 08 |
| 67.5% → 31.6% → 78.1% | 2026-07 注入块塌方与修正统计口径后的命中率 | 07 |
| 95 条 / 30 桶 | Rubric 种子集规模 | 08 |
| 10 / 70 | P1 每条扣分 / 高分轨迹门槛 | 08 |
| 0 / 0 / 90 | q28 同一份输出三次采样(尺子会抖的证据) | 08 |
| 175.8 / 9561.3 / 2293.8 ms | item_search / planner / shopping_summary p50(07-09 旧基线) | 09 |
| 83.2 → 39.7 → 17.5s | 两轮延迟减法(round2 / round3,round3 为 q_backpack 中位) | 09 |
| 5 次 / 30s / 15s | 模型断路器阈值 / 恢复 / 首 token 预算 | 09 |
| 0.99 / 3.0s | SLO 目标线:run 成功率 / 首事件 p95 | 09 |
| 3 / 200 / 4 | MAX_CONCURRENT_RUNS / QUEUE_MAX_DEPTH / WORKER_CONCURRENCY | 10 |
| 330 = 300 + 30 | WORKER_GRACE_SECONDS(k8s 侧 365) | 10 |
| 900s | HOLD_TTL_SEC / THREAD_STALE_RUN_SEC(kill -9 后自然失效) | 10 |
| 2.0 美元 / 1000 | DAILY_QUOTA_USD / CREDITS_PER_USD(= 2000 credit/天) | 10 |
| 12.67 万 / 29.7 万 | ESCI 与商品库交集:ASIN 数 / 标注数 | 11 |
| R@100 .4434 → .4992(+12.6%) | embedding 正例全展开的离线收益 | 11 |
| 50.37 → 58.03;P0 11 → 7 | M21 端到端 A/B(共同跑通 27 条均分) | 11 |
| +26.0% / +21.6% | reranker r3 的英文 / 中文 ndcg@8(离线,未上线) | 11 |
| 38.5% / 88.6% | 品类门标定:误杀率 / 挡住率(现成 v2-m3 + 0.20) | 04 / 11 |
| 63.04% → 100% | planner SFT 的 dev92 格式正确率 | 12 |
| 0.790 → 0.813 | 五轮 GRPO 后 dev92 reward(r3,lr 2e-5、beta 0) | 12 |
| 13/13、0/5 | skill 触发率正例 / 负例误触发 | 08 / 14 |
面试前一天清单#
- 背熟 5 分钟自我介绍五段,掐表说一遍,超 5 分钟就砍第 5 段的训练细节。
- 30 张速背卡只过 hint 列,卡住的那几张翻回对应章的「速背卡」再看一遍。
- 压力题 10 道各说一遍 30 秒答法,重点练 Q3 / Q9 这两条负结论——先说结论再说为什么不上线。
- 每章「坑与易混点」扫一遍,挑 3 条能讲透的,准备回答「你踩过什么坑」。
- 准备一条代价话术:每个决策都能说出代价,是这套手册里最容易加分的部分。
- 确认能当场说出三个文件位置:
app/agent/tool_registry.py、app/harness/middleware.py、app/memory/facts.py。 - 简历上的数字自己先默读一遍,被问到就按简历口径答,细节翻本章映射表找章号。