生产级 Agent 面试 11 问:从 ReAct 背诵到工程落地的差距
原文链接:面试官皱眉:”让你负责一个生产级 Agent,你会怎么设计?”
作者:沉默王二
项目:PaiCLI-Python(MIT,Python)
概念谁都会背,但能把概念落成生产环境里跑得起来的工程细节,这才是面试官真正想听到的。
01 多模式 Agent 的 Harness
PaiCLI 支持三种运行模式——ReAct 主循环、Plan-and-Execute、Multi-Agent 多角色协作。三种模式共用一套基础设施:
- 工具注册表
- 记忆系统
- 安全审批
- 审计日志
核心挑战:同一操作在不同模式下行为一致。比如文件写入在 ReAct 和 Multi-Agent 模式下都要弹审批;ReAct 模式存下的用户偏好切到 Plan 模式也要能读到。这就是 Harness——模式可换,底座不动。
02 Map-Reduce 上下文压缩
压缩策略分三步:
| 步骤 | 操作 | 细节 |
|---|---|---|
| 切片 | 旧消息每 5 条一组 | - |
| Map 摘要 | 每片独立生成摘要 | 保留需求意图、操作结果、决策结论 |
| Reduce 合并 | 多片合并为整体摘要 | 单片 ≤200 字,合并 ≤300 字 |
压缩完成后清空旧消息,摘要写回对话历史,最近 3 轮完整对话原样保留。模型下一轮看到的是「摘要 + 最近几轮」。
03 三层防丢保护
压缩必然丢失信息,没有无损压缩这回事。
| 层 | 机制 | 说明 |
|---|---|---|
| 第一层 | 事实提取 | 压缩前把跨会话稳定事实(交易金额、用户偏好)存入长期记忆,不参与压缩 |
| 第二层 | 摘要指令 | 压缩 prompt 明确要求保留需求意图、操作结果、决策结论、技术细节 |
| 第三层 | 近期缓冲 | 最近几轮完整对话原样保留,不压缩 |
04 时间衰减记忆
用户一个月前说喜欢吃辣,一周前又说不能吃辣,怎么判断?
- 两条记忆都存,不强行合并、不强行删除
- 检索时按时间衰减打分,越新权重越高
- PaiCLI 衰减曲线:24 小时从满分衰减到半分
- 旧记录不删——万一「不能吃辣」是临时状态,过两周恢复了?
关键决策:PaiCLI 没用向量数据库存记忆。几百上千条事实信息用关键词匹配就够——毫秒级、可解释、可调试。向量数据库适合 RAG 知识库(几十 G 文档)。
05 记忆更新策略
| 步骤 | 说明 |
|---|---|
| 语义检索 | 找旧记录 |
| 删除旧向量 | - |
| 重新 embedding | 新内容向量化 |
| 写回 | 加乐观锁/时间戳防冲突 |
06 重要信息的定义
「跨会话仍然成立、未来复用仍有价值的稳定事实」
三层过滤:
| 过滤层 | 规则 | 示例 |
|---|---|---|
| 排除临时任务 | 开头含”用户想””帮我””创建””删除””本次任务” | “帮我写个脚本” |
| 排除推测 | 含”可能””应该””猜测””推测” | “可能是 bug” |
| 保留持久信号 | 含”偏好””习惯””项目””仓库””配置””版本””技术栈””约定””规则” | “项目用 pytest” |
07 指数退避重试
| 重试 | 等待时间 |
|---|---|
| 第 1 次 | 500ms |
| 第 2 次 | 1s |
| 第 3 次 | 2s |
| 上限 | 30s |
每次 +20% 随机抖动,避免惊群效应。可重试:408/429/5xx、网络异常、流式中断。不可重试:SSL 错误、JSON 解析错误、线程中断。服务端返回 Retry-After 头时取较大值。
08 Token 消耗排查
三个高发原因:
- 工具输出太长 — 一次 shell 输出几万字符塞进上下文
- 压缩触发太晚 — 默认 90% 才触发,调低到 80%
- 上下文膨胀 — 同一信息反复检索注入,去重不到位
09 Skill 渐进式披露
不用的 Skill 不进上下文,用到的时候再展开。
| 阶段 | 操作 |
|---|---|
| 启动时 | 名称 + 一句话描述注入 system prompt(单条 ≤500 字符,最多 20 个) |
| 按需加载 | 模型主动调用 load_skill 加载完整指引 |
| 注入缓冲 | 写入缓冲区,下一轮自动拼到用户消息前(最多保留 3 个,LRU 淘汰) |
20 个 Skill × 2000 token = 40K token 常驻 vs 按需只加载 1-2 个。
10 智能客服 Agent 四层架构
1 | 意图识别 → 知识检索(RAG) → 工具执行 → 兜底升级(转人工) |
关键设计:
- 准确性:chunk 512-1024 token + 20% 重叠 + Reranker 二次排序
- 延迟:流式输出 + 高频问题缓存
- 安全性:防提示词注入(工具返回不可信数据)、敏感信息脱敏
- 兜底:连续两轮无效回答或用户要求 → 立即转人工
11 大促流量尖刺五道防线
| 防线 | 机制 |
|---|---|
| ① 请求队列异步化 | 消息队列解耦,前端秒级返回”处理中” |
| ② 模型分层 | 简单问题走小模型/规则引擎,复杂问题才走大模型 |
| ③ 热点缓存 | 高频问题预生成答案缓存(支持手动失效) |
| ④ 限流保护 | 每用户每分钟请求数上限 |
| ⑤ 熔断降级 | LLM 延迟/错误率超阈值 → 模板答案或转人工 |
核心启示:以前面试考 CRUD 和中间件参数,现在考的是上下文怎么压缩、记忆怎么管、Token 怎么省、流量来了怎么扛。Agent 工程化才刚刚起步,谁先把坑踩过一遍,谁就有了别人没有的底气。
- 标题: 生产级 Agent 面试 11 问:从 ReAct 背诵到工程落地的差距
- 作者: lxiol
- 创建于 : 2026-07-27 13:00:00
- 更新于 : 2026-07-27 12:03:32
- 链接: https://blog.lxiol.cn/2026/07/27/生产级Agent面试11问-从ReAct背诵到工程落地/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。