Skip to content

三面综合:系统设计与综合素养(15题) ​

考察重点:系统设计能力、项目全局视角、技术判断力、协作与软实力 答题要求:端到端分层架构思维,能从需求分析推到上线运维全链路 系统设计题建议答题时间:15-20分钟(白板画图 + 分层讲解) 行为面建议答题时间:3-5分钟/题


一、系统设计场景题 ​

1. 设计企业内部知识库问答 Agent,支持文档上传、多轮问答、工具查业务数据库,画出分层架构。 ​

分档:三面综合

高分答题思路:

分层架构图:

┌─────────────────────────────────────────────────────┐
│                    接入层                             │
│  Web UI │ API Gateway │ WebSocket(SSE) │ 权限认证    │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                   Agent 编排层                        │
│  ┌─────────┐  ┌──────────┐  ┌──────────────────┐    │
│  │ 路由器   │→│ 意图识别  │→│ Agent 调度器      │    │
│  │         │  │          │  │ (状态机/Plan-Solve)│   │
│  └─────────┘  └──────────┘  └────────┬─────────┘    │
│                                       │              │
│              ┌────────────────────────┼────────┐    │
│              ▼                        ▼        ▼    │
│  ┌──────────────┐    ┌──────────────┐ ┌────────┐  │
│  │ 知识库 Agent  │    │ 数据库 Agent  │ │闲聊Agent│  │
│  │ (RAG 检索)   │    │ (Text2SQL)   │ │        │  │
│  └──────┬───────┘    └──────┬───────┘ └────────┘  │
└─────────┼───────────────────┼─────────────────────┘
          │                   │
┌─────────▼───────────────────▼─────────────────────┐
│                    工具层                            │
│  ┌──────────┐ ┌────────┐ ┌────────┐ ┌──────────┐  │
│  │向量检索   │ │SQL执行 │ │文档解析│ │摘要生成   │  │
│  │(Milvus)  │ │(MySQL) │ │(PDF等) │ │(LLM)     │  │
│  └──────────┘ └────────┘ └────────┘ └──────────┘  │
└─────────────────────────────────────────────────────┘
          │
┌─────────▼─────────────────────────────────────────┐
│                    数据层                            │
│  ┌──────────┐ ┌────────┐ ┌────────┐ ┌──────────┐  │
│  │向量数据库  │ │业务DB  │ │文档存储 │ │对话历史   │  │
│  │(Milvus)  │ │(MySQL)│ │(MinIO) │ │(Redis)   │  │
│  └──────────┘ └────────┘ └────────┘ └──────────┘  │
└─────────────────────────────────────────────────────┘

关键设计要点:

  1. 文档上传与索引流程:

    • 上传 → 文档解析(PDF/Word/Markdown)→ 文本分块(Chunk,512 token/块,128 token 重叠)
    • 分块 → Embedding(BGE/M3E)→ 存入 Milvus
    • 元数据存储:文档名/目录/更新时间/权限标签
  2. 多轮问答流程:

    • User Query → 意图识别(知识问答 vs 数据查询 vs 闲聊)
    • 知识问答 → RAG 检索 → 上下文拼装 → LLM 生成
    • 数据查询 → Text2SQL → 执行 SQL → 结果格式化 → LLM 生成
    • 多轮记忆:Redis 存会话历史,最近 5 轮 + 关键信息留存
  3. 权限设计:

    • 文档级权限:上传时标记部门/角色可见范围
    • 查询时过滤:向量检索加权限 filter,只返回有权限的文档块
    • SQL 查询:基于角色的数据行级权限
  4. 高可用设计:

    • Agent 编排层无状态,水平扩展
    • LLM 推理服务独立部署,支持多模型热切换
    • 文档索引异步处理,上传后 30s 内可检索

面试官追问点准备:

  • "文档更新后如何同步向量索引?" → 增量索引:监听文档变更事件,异步重新 Embedding 更新对应 chunk
  • "如何处理多格式文档?" → 统一解析层:PDF 用 PyMuPDF,Word 用 python-docx,统一输出纯文本 + 结构标记
  • "Text2SQL 准确率怎么保证?" → Schema 感知(注入表结构注释)+ SQL 校验层(语法检查 + 安全校验)+ 执行前预览

2. 开发代码解释 Agent,支持执行 Python 代码、文件读写、沙箱隔离,怎么保障安全? ​

分档:三面综合

高分答题思路:

架构设计:

┌─────────────────────────────────────────┐
│            代码解释 Agent                │
│  ┌───────────┐  ┌─────────────────┐    │
│  │ 理解意图   │→│ 生成代码 + 解释   │    │
│  └───────────┘  └────────┬────────┘    │
│                          │             │
│                 ┌────────▼────────┐    │
│                 │  代码安全审查    │    │
│                 │  (AST 分析)     │    │
│                 └────────┬────────┘    │
└──────────────────────────┼─────────────┘
                           │
┌──────────────────────────▼─────────────┐
│            沙箱执行环境                  │
│  ┌─────────────────────────────────┐   │
│  │  Docker 容器 (只读根文件系统)     │   │
│  │  - 无网络访问                    │   │
│  │  - CPU/内存限制 (2C4G)          │   │
│  │  - 执行超时 30s                  │   │
│  │  - 临时文件系统 tmpfs            │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘

安全保障五层防线:

层级措施防御目标
L1 代码审查AST 分析,禁止 import os/subprocess/socket 等防止系统调用
L2 资源限制Docker --memory=4g --cpus=2 --pids-limit=100防止资源耗尽
L3 网络隔离Docker --network=none防止数据外泄/网络攻击
L4 文件隔离只读根文件系统 + tmpfs 临时目录防止文件篡改
L5 执行控制超时 30s kill + 输出截断 10KB防止死循环/输出爆炸

代码安全审查实现:

python
import ast

FORBIDDEN_MODULES = {"os", "subprocess", "socket", "shutil", 
                     "ctypes", "multiprocessing", "threading"}

def check_code_safety(code: str) -> tuple[bool, str]:
    try:
        tree = ast.parse(code)
    except SyntaxError as e:
        return False, f"语法错误: {e}"
    
    for node in ast.walk(tree):
        # 检查 import
        if isinstance(node, ast.Import):
            for alias in node.names:
                if alias.name.split('.')[0] in FORBIDDEN_MODULES:
                    return False, f"禁止导入模块: {alias.name}"
        # 检查函数调用中的 eval/exec
        if isinstance(node, ast.Call):
            if isinstance(node.func, ast.Name) and node.func.id in ("eval", "exec", "compile"):
                return False, f"禁止使用 {node.func.id}()"
        # 检查 open 调用的模式
        if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) and node.func.id == "open":
            # 只允许只读模式
            ...
    
    return True, "安全检查通过"

文件读写安全:

  • 工作目录限制在 /workspace/(tmpfs 挂载)
  • 文件大小限制:单文件 < 10MB,总量 < 100MB
  • 文件类型白名单:txt/csv/json/py/xlsx 等
  • 敏感文件检测:上传文件不含密钥/密码模式

加分点: "除了静态 AST 审查,我们还加了运行时监控——用 strace 追踪容器的 syscall 调用,如果出现 fork/exec/connect 等异常 syscall 直接 kill 进程。这是第二道防线,防止 AST 绕过(比如通过 importlib 动态导入)。"


3. 多租户客服 Agent 平台,租户独立知识库、独立 prompt、权限隔离,架构如何拆分? ​

分档:三面综合

高分答题思路:

架构设计:

┌──────────────────────────────────────────────────┐
│                   接入层                          │
│  租户识别 → 权限校验 → 请求路由                    │
└──────────────────────┬───────────────────────────┘
                       │
┌──────────────────────▼───────────────────────────┐
│              租户配置中心                          │
│  ┌────────────┐ ┌───────────┐ ┌──────────────┐  │
│  │ 知识库配置  │ │Prompt 模板│ │ 工具权限配置  │  │
│  │ (collection│ │ (tenant_id│ │ (tool_white- │  │
│  │  per tenant│ │  → prompt)│ │  list)       │  │
│  └────────────┘ └───────────┘ └──────────────┘  │
└──────────────────────┬───────────────────────────┘
                       │
┌──────────────────────▼───────────────────────────┐
│              Agent 执行层(无状态)                │
│  按租户配置动态加载:                               │
│  - Prompt 模板                                    │
│  - 可用工具列表                                    │
│  - 知识库 collection                              │
│  - 模型配置(租户可选不同模型)                     │
└──────────────────────┬───────────────────────────┘
                       │
┌──────────────────────▼───────────────────────────┐
│              共享基础设施                          │
│  ┌──────────┐ ┌────────┐ ┌────────┐ ┌────────┐  │
│  │Milvus    │ │MySQL   │ │Redis   │ │LLM集群 │  │
│  │(多集合)  │ │(租户隔离│ │(租户命名│ │(多模型 │  │
│  │          │ │ 表/Schema│ │ 空间)  │ │ 路由)  │  │
│  └──────────┘ └────────┘ └────────┘ └────────┘  │
└──────────────────────────────────────────────────┘

隔离方案选择:

隔离层级方案隔离度成本适用场景
知识库Milvus 多 Collection高低推荐
Prompt配置表按 tenant_id 隔离高低推荐
对话历史Redis key 前缀 + TTL高低推荐
业务数据MySQL 多 Schema 或行级权限高中看数据量
模型大租户独立模型实例最高高大客户
计算K8s 命名空间隔离最高高合规要求

关键设计决策:

  • 共享 Agent 执行层:无状态设计,按租户配置动态加载,不为每个租户跑独立实例
  • 共享 LLM 集群:多租户共享,按租户配额限流(令牌桶 + 优先级队列)
  • 独立知识库:每个租户独立的 Milvus Collection,权限严格隔离
  • 独立 Prompt:配置中心管理,支持版本控制和 A/B 测试

租户配额管理:

  • QPS 限流:免费 10 QPS,标准 50 QPS,企业 200 QPS
  • Token 配额:月度 token 限额,超额降级到更小模型
  • 存储配额:知识库容量限制,按套餐分级

加分点: "最大的设计挑战不是隔离,而是'共享 vs 独立'的平衡。共享层做得太多,一个租户的 Badcase 影响所有租户;独立层做得太多,成本爆炸。我们的原则是:数据层必须隔离,计算层尽量共享,模型层看付费级别。"


4. 做一个离线批量数据处理 Agent,支持上万条任务并行调度、失败重试、进度监控。 ​

分档:三面综合

高分答题思路:

架构设计:

┌──────────────────────────────────────────┐
│            任务提交层                      │
│  批量任务定义 (DAG) → 任务拆分 → 入队      │
└────────────────┬─────────────────────────┘
                 │
┌────────────────▼─────────────────────────┐
│            调度层 (Temporal/Celery)        │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐  │
│  │ 任务队列  │ │ 优先级   │ │ 依赖编排  │  │
│  │ (Redis)  │ │ 调度器   │ │ (DAG)    │  │
│  └──────────┘ └──────────┘ └──────────┘  │
└────────────────┬─────────────────────────┘
                 │
┌────────────────▼─────────────────────────┐
│            Worker 集群 (K8s)              │
│  Worker×N (自动伸缩)                      │
│  每个 Worker:                              │
│  1. 拉取任务                               │
│  2. Agent 执行 (LLM 调用 + 工具调用)       │
│  3. 结果写入存储                           │
│  4. 上报状态                               │
└────────────────┬─────────────────────────┘
                 │
┌────────────────▼─────────────────────────┐
│            存储与监控层                    │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐  │
│  │ 结果存储  │ │ 失败队列  │ │ 监控面板  │  │
│  │ (S3/DB)  │ │ (死信队列)│ │ (Grafana)│  │
│  └──────────┘ └──────────┘ └──────────┘  │
└──────────────────────────────────────────┘

关键设计要点:

  1. 任务拆分策略

    • 大任务拆成子任务(每批 100 条),子任务可并行
    • DAG 描述任务间依赖关系
    • 幂等设计:每个子任务有唯一 ID,重试不会产生重复结果
  2. 并行调度

    • Worker 数量根据队列深度自动伸缩(K8s HPA)
    • 每个 Worker 并发处理 5-10 个子任务(asyncio 协程)
    • LLM 调用用连续批处理(Continuous Batching)提升吞吐
  3. 失败重试

    • 自动重试 3 次,指数退避(1s → 2s → 4s)
    • 重试失败 → 进入死信队列 → 人工介入
    • 部分失败不阻塞整体:失败任务标记,成功任务正常推进
  4. 进度监控

    • 实时进度:已完成/总数、成功率、平均耗时、预计剩余时间
    • 异常告警:成功率 < 90%、单任务耗时 > 5min、队列堆积 > 1000
    • 断点续跑:任务状态持久化,中断后从上次位置恢复
  5. 资源控制

    • LLM API 限流感知:Worker 根据剩余配额动态调整并发数
    • 内存控制:大文件流式处理,不一次性加载
    • 超时保护:单任务最长 5min,超时 kill

加分点: "我们用 Temporal 做调度引擎——它的优势是 workflow 状态持久化 + 内置重试/超时/补偿。对于万级任务,关键是控制 LLM API 的并发——不是 Worker 越多越好,而是要匹配 API rate limit。我们做了令牌桶限流器,Worker 先拿令牌再调 LLM,避免 429。"


5. 设计 Agent 运维后台:可视化状态流、Badcase 检索、Prompt 在线调试、评测报表。 ​

分档:三面综合

高分答题思路:

功能模块设计:

┌──────────────────────────────────────────────────┐
│                  Agent 运维后台                     │
├──────────┬──────────┬──────────┬─────────────────┤
│  状态流   │ Badcase  │ Prompt   │  评测报表        │
│  可视化   │ 检索     │ 调试     │                 │
├──────────┼──────────┼──────────┼─────────────────┤
│ • 实时    │ • 关键词  │ • 在线    │ • 每日/周报     │
│   状态机  │   搜索   │   编辑    │ • 趋势图        │
│   展示    │ • 条件   │   Prompt │ • 分维度统计    │
│ • 节点    │   筛选   │ • 实时    │ • Badcase      │
│   耗时    │ • 语义   │   预览    │   分布分析     │
│   热力图  │   搜索   │   输出    │ • 模型对比     │
│ • 执行    │ • Badcase│ • A/B    │ • 工具调用      │
│   轨迹    │   聚类   │   测试    │   统计         │
│   回放    │ • 根因   │ • 版本    │ • 灰度对比     │
│          │   标注   │   管理    │                │
└──────────┴──────────┴──────────┴─────────────────┘

各模块核心功能:

1. 可视化状态流

  • 实时展示当前请求的状态机流转路径
  • 每个节点显示:耗时、成功率、token 消耗
  • 异常节点高亮(超时/失败/重试)
  • 点击节点可展开详细输入输出
  • 支持 trace 回放:选中历史请求,逐步回放执行轨迹

2. Badcase 检索

  • 多维筛选:时间范围 × 意图 × 工具 × 错误类型 × 用户反馈
  • 全文搜索:对用户 query 和 Agent 回复做全文检索
  • 语义搜索:输入问题描述,Embedding 检索相似 Badcase
  • Badcase 聚类:自动按根因聚类,展示 Top N 问题类别
  • 根因标注:支持人工标注根因类型,沉淀到知识库

3. Prompt 在线调试

  • 左侧编辑器写 Prompt,右侧实时预览 LLM 输出
  • 支持变量注入:从测试集选取样本数据填充 Prompt 变量
  • A/B 对比:左右两列对比新旧 Prompt 的输出差异
  • 版本管理:每次保存自动生成版本号,支持回滚
  • 批量测试:一键跑评测集,输出准确率/格式合规率等指标

4. 评测报表

  • 核心指标趋势图:意图准确率、工具调用准确率、任务完成率(日/周/月)
  • 分维度统计:按意图/工具/用户群体/模型版本交叉分析
  • 灰度对比:新版本 vs 旧版本的指标对比,支持统计显著性检验
  • Badcase 分布:饼图/柱状图展示各根因类型占比
  • 自动报告:每日自动生成评测报告推送到飞书/钉钉

技术选型:

  • 前端:React + Ant Design + D3.js(状态流图)/ ECharts(报表)
  • 后端:FastAPI + PostgreSQL(持久化)+ Elasticsearch(日志检索)+ ClickHouse(指标统计)
  • 实时推送:WebSocket 推送状态更新

加分点: "运维后台的核心价值不只是'看到问题',而是'缩短从问题发现到修复的闭环'。我们做了'一键创建调试任务':在 Badcase 详情页直接点击 → 自动填充上下文到 Prompt 调试器 → 调试完成后一键发布灰度。整个'发现→定位→修复→验证'闭环从 2 天缩短到 2 小时。"


二、项目管理与行为面 ​

6. 项目中最大技术难点是什么?完整讲清问题、你的方案、收益数据。 ​

分档:三面综合

高分答题思路(STAR 框架):

答题模板:S (Situation):项目背景 + 面临的挑战 T (Task):我的职责和目标 A (Action):具体做了什么(技术方案 + 决策过程) R (Result):量化收益 + 业务影响

示例答题框架:

S - 背景: "我们的 Agent 平台上线后,工具调用准确率只有 72%,导致 28% 的用户请求无法正确完成。核心问题是 LLM 在 15+ 工具中选择正确的工具时准确率不稳定。"

T - 任务: "我的目标是:在 2 个月内将工具调用准确率提升到 90%+,同时不增加单次推理延迟。"

A - 方案(展示技术深度和决策过程):

  1. 根因分析:分析了 500 个 Badcase,发现 60% 的错误来自工具描述不清晰,30% 来自上下文过长导致工具列表被截断
  2. 方案设计:
    • L1:重写工具描述(结构化 + 举例),准确率 +8%
    • L2:工具分层路由(先分类再选工具),减少每次选择的工具数,准确率 +6%
    • L3:工具选择置信度阈值 + 反问用户兜底,准确率 +5%
  3. 取舍:L2 增加了一次轻量分类调用(+30ms),但整体准确率提升显著,延迟在可接受范围

R - 收益:

  • 工具调用准确率:72% → 91%(+19pp)
  • 用户任务完成率:75% → 88%(+13pp)
  • 单次推理延迟:仅增加 30ms(< 5% 影响)
  • 工具相关投诉量下降 65%

加分点: 主动提到"这个方案不是完美的——L2 的分层路由增加了系统复杂度,后续如果工具数量继续增长到 30+,可能需要引入工具向量检索。我们提前预留了这个扩展点。"


7. 跨团队需求排期冲突,业务方强压工期,你如何协调平衡? ​

分档:三面综合

高分答题思路:

核心原则:用数据说话,给选择题而非判断题

处理流程:

  1. 明确约束

    • 业务方要什么?什么时候要?为什么急?
    • 技术方需要多少时间?瓶颈在哪里?
  2. 拆分优先级

    • P0 核心路径:必须做,不能砍
    • P1 重要功能:可以做但可以简化
    • P2 优化项:可以延后
  3. 给出选项(而非说"不行")

    • 方案A:按原计划全量交付,时间 X(推荐)
    • 方案B:P0+P1 精简版先上,P2 延后,时间 Y(折中)
    • 方案C:P0 最小可用版本先上,时间 Z(最快但功能少)
    • 每个方案列出:交付内容、时间、风险、质量影响
  4. 数据支撑

    • 如果赶工导致测试不足,线上 Badcase 率预计 +X%
    • 如果先上精简版,用户覆盖率 Y%,满足核心需求
  5. 达成共识后落地

    • 书面确认方案和排期
    • 每周同步进度,提前预警
    • 上线后复盘,沉淀经验

关键原则: "不要说'来不及做不了',要说'如果要在 X 时间上线,可以做 A/B/C 三个方案,建议选 B,因为...'。给业务方决策权,但用专业判断引导。"


8. 项目技术方案存在两种路线,团队分歧大,你怎么推动统一选型? ​

分档:三面综合

高分答题思路:

处理流程:

  1. 理清分歧本质

    • 是技术层面的分歧(性能 vs 灵活性)?
    • 还是经验偏好(熟悉 A vs 熟悉 B)?
    • 还是风险承受能力差异(求稳 vs 求新)?
  2. 建立评估框架(对齐标准)

    • 列出评估维度:开发成本、性能、可维护性、扩展性、团队学习成本、风险
    • 每个维度打分(1-5 分),两方案对比
    • 权重按业务阶段调整(初期重速度,稳定期重可维护性)
  3. 数据验证(用事实说话)

    • 关键维度做 POC 验证(如性能:跑 benchmark)
    • 对比已有案例(其他公司/团队用 A 和 B 的经验)
    • 如果可能,AB 测试线上效果
  4. 决策机制

    • 评估表对齐后,组织技术评审会
    • 邀请架构师/技术负责人参与,不只是开发团队
    • 如果仍然分歧,按"谁负责谁决策"原则,但需说明理由
    • 记录决策文档,明确 trade-off 和后续可调整方案
  5. 落地后保障

    • 设定 checkpoint:上线 1 个月后评估是否需要调整
    • 如果选了 A,保留 B 方案的关键设计文档,降低后续切换成本

加分点: "我的经验是:80% 的技术选型分歧不是技术问题,而是信息不对称——A 方案的支持者不了解 B 的优势,反之亦然。所以第一步是让双方互相'上课',把对方方案的优点和自己的痛点摆出来。对齐信息后,分歧通常就缩小了。"


9. 项目上线后出现线上 P0 故障,完整复盘流程和整改措施。 ​

分档:三面综合

高分答题思路:

故障处理流程(5 步法):

  1. 应急响应(发现 → 止血)

    • 发现方式:监控告警 / 用户反馈
    • 第一动作:评估影响范围,决定是否回滚
    • 止血优先于定位:先恢复服务,再查根因
    • 通报机制:拉群同步现状,每 15 分钟更新一次
  2. 根因定位(止血 → 定位)

    • 查看变更记录:最近发布了什么?
    • 分层排查:接入层 → Agent 层 → 工具层 → 模型层 → 数据层
    • 利用 trace_id 快速定位故障环节
    • 如果是 LLM 输出异常 → 查 Prompt 变更 / 模型版本更新
  3. 修复验证

    • 修复方案 code review
    • 在测试环境验证
    • 灰度发布(先 5% → 20% → 100%)
    • 确认指标恢复正常
  4. 复盘总结(事后 48 小时内)

    • 时间线:发现时间 → 响应时间 → 止血时间 → 完全恢复时间
    • 根因分析:5 Why 追问,找到根本原因而非表面原因
    • 影响评估:影响用户数、影响时长、业务损失
    • 整改措施:短期(补监控/加告警)+ 中期(加防护/改流程)+ 长期(架构优化)
  5. 整改落地跟踪

    • 每项整改措施指定负责人和 deadline
    • 周会跟踪进度直到全部完成
    • 整改完成后回归验证

复盘文档模板:

## 故障复盘:[故障标题]
### 时间线
- 14:00 告警触发
- 14:05 确认 P0 故障,拉群
- 14:10 决定回滚
- 14:15 回滚完成,服务恢复
- 14:30 根因定位
### 根因
[5 Why 分析]
### 影响
- 影响用户数:X
- 影响时长:15 分钟
- 业务影响:Y
### 整改措施
| 措施 | 类型 | 负责人 | Deadline | 状态 |
|------|------|--------|----------|------|
| 增加工具输出 Schema 校验 | 短期 | XXX | 2024-XX | 完成 |
| Prompt 变更增加自动化测试 | 中期 | XXX | 2024-XX | 进行中 |
| Agent 层增加熔断机制 | 长期 | XXX | 2024-XX | 待启动 |

关键原则: "复盘不是追责,是改进。文化上要鼓励'暴露问题'而非'隐藏问题'。每次故障都是改进系统的机会——如果同样的故障发生两次,说明第一次复盘没做到位。"


10. 你对 Agent 领域未来技术路线怎么看?长期技术成长规划。 ​

分档:三面综合

高分答题思路:

Agent 技术趋势判断(3 个方向):

  1. Agent 自主性提升

    • 从"工具调用器"到"自主决策者":Agent 能自己规划、执行、反思、调整
    • 关键突破点:长程推理能力(Long-horizon Planning)、自我评估能力
    • 时间线:2-3 年内,在特定领域(代码/数据分析)实现较高自主性
  2. 多 Agent 协作成熟化

    • 从简单的 Master-Worker 到复杂的 Agent 社会:角色分工、协商、竞争
    • 关键突破点:Agent 间通信协议标准化、协作效率优化
    • 挑战:多 Agent 系统的可控性和可预测性
  3. Agent 工程化标准化

    • 从"每个团队自研"到"标准化的 Agent 开发框架/平台"
    • 类比 Web 开发演进:从 CGI 到 Flask 到 K8s
    • 关键方向:Agent 可观测性标准、评测标准、安全标准

个人成长规划(展示目标感):

  • 短期(1-2年):深耕 Agent 工程化——评测体系、可观测性、多 Agent 编排,成为团队 Agent 方向核心骨干
  • 中期(3-5年):拓展技术广度——从 Agent 延伸到 LLM 训练/推理优化/多模态,能独立负责 AI Agent 产品线
  • 长期:技术影响力——参与 Agent 行业标准制定,或在大厂推动一个有影响力的 Agent 平台落地

关键原则: "回答这个问题要展示两点:一是对领域有真实理解(不是泛泛而谈'AI是未来'),二是个人规划与应聘岗位有契合度。避免说'我想创业'——大厂面试官想听的是你能在团队内成长。"


11. 过往项目中,你主动推动了哪些技术优化落地,带来量化收益? ​

分档:三面综合

高分答题思路(举 2-3 个具体例子):

示例框架:

优化一:工具调用准确率提升

  • 发现:通过 Badcase 分析发现工具描述不清晰导致误调用
  • 推动:主动重写 15 个工具的描述(结构化 + 示例),增加分层路由
  • 收益:准确率 72% → 91%,工具相关投诉下降 65%
  • 关键:不是等分配任务,是主动发现问题并推动解决

优化二:推理成本优化

  • 发现:所有请求都用大模型,简单请求浪费资源
  • 推动:设计分级路由——简单请求走小模型,复杂请求走大模型
  • 收益:月度 API 成本降低 40%,平均延迟降低 35%
  • 关键:从业务数据中发现优化空间,而不是纯技术角度

优化三:评测体系从 0 到 1

  • 发现:团队没有系统化评测,每次上线靠人工抽检
  • 推动:搭建自动化评测平台(数据集 + 自动指标 + 报表)
  • 收益:评测覆盖率从 20% 提升到 95%,上线周期从 2 周缩短到 3 天
  • 关键:识别到基础设施缺失并主动补齐

关键原则: "主动推动 = 不是被分配的 + 有量化收益 + 可复现的方法论。每个例子都要说清'怎么发现的'、'怎么推动的'(遇到什么阻力如何克服)、'收益是什么'。"


12. 为什么选择腾讯做 Agent 方向,对比其他大厂 AI 团队你的考量? ​

分档:三面综合

高分答题思路:

回答框架:行业认知 + 公司优势 + 个人匹配

  1. 行业认知

    • Agent 是 LLM 从"对话工具"到"生产力工具"的关键桥梁
    • 2024-2025 年是 Agent 工程化的关键窗口期
    • 大厂优势:场景丰富、数据量大、工程能力强、用户基数大
  2. 腾讯的优势(结合具体业务线)

    • 场景优势:微信/企业微信/腾讯云/腾讯文档等丰富的 Agent 落地场景
    • 混元大模型:自研大模型 + 开源生态,Agent 有底层模型支持
    • 技术积累:在 NLP/对话/推荐领域有深厚积累
    • 用户规模:月活十亿级产品,Agent 优化的边际收益巨大
  3. 个人匹配

    • 我的 Agent 工程经验(评测体系/工具调用优化/多 Agent 编排)与腾讯 Agent 平台建设需求匹配
    • 我关注 Agent 工程化/可观测性/评测,这是腾讯大规模 Agent 落地需要解决的痛点
    • 希望在大规模场景验证自己的技术方案
  4. 对比其他大厂(展示你做过调研,但不要贬低)

    • 阿里:电商/云场景强,Agent 偏向商业化
    • 字节:推荐/内容场景强,Agent 偏向 C 端交互
    • 百度:文心大模型 + 搜索场景
    • 腾讯:社交 + 办公 + 云,Agent 落地场景最多元

关键原则: "不要泛泛地说'腾讯技术好',要具体到业务线和场景。最好能提到腾讯最近在 Agent 方面的具体动作(如混元 Agent 平台、腾讯智能体开发平台等),展示你真的做过功课。"


13. 你理想的 AI Agent 团队是什么样,不能接受什么工作模式? ​

分档:三面综合

高分答题思路:

理想团队的 4 个维度:

  1. 技术文化

    • 数据驱动决策,而非拍脑袋
    • 鼓励技术探索和创新,有容错空间
    • 重视工程质量(评测/监控/文档),不只是"能跑就行"
  2. 团队协作

    • 清晰的职责边界 + 开放的沟通氛围
    • 技术 PM 懂技术,能做合理排期
    • 跨团队协作有流程保障,不是纯靠"刷脸"
  3. 成长环境

    • 有技术大佬可以学习
    • 技术分享常态化
    • 支持参加学术会议/发表论文
  4. 业务场景

    • 有真实的、大规模的落地场景
    • 技术和业务有正向循环:技术驱动业务 → 业务反哺数据 → 数据提升技术

不能接受的工作模式(说实话但不要极端):

  • ❌ 纯执行机器:只接需求不思考,没有技术决策参与权
  • ❌ 无度量驱动:效果好不好全凭感觉,没有评测体系
  • ❌ 技术债务不还:永远在赶新需求,不回头优化
  • ❌ 信息孤岛:团队间不共享知识,重复造轮子

关键原则: "不能接受的事项要合理,不要显得偏激。核心表达'我想要一个专业、高效、有成长空间的环境',而不是在列一堆抱怨。"


三、腾讯二面深度追问 ​

14. 线上 Agent 接口 QPS、平均 RT、99 分位延迟,怎么压测优化到目标指标? ​

分档:三面综合

高分答题思路:

性能指标定义:

  • QPS:每秒处理的 Agent 请求数
  • 平均 RT:从请求到响应的平均耗时
  • P99 延迟:99% 的请求在多少 ms 内完成

压测方案:

  1. 基准压测

    • 工具:Locust / wrk / 自研压测平台
    • 场景:按线上流量分布构造压测数据(不同意图比例)
    • 递增加压:10 → 50 → 100 → 200 QPS,观察拐点
  2. 瓶颈定位

    • 分层耗时分析:路由 → 意图识别 → 工具调用 → LLM 生成
    • 通常瓶颈在 LLM 调用(占总 RT 的 60-80%)
    • 工具调用如果是外部 API,也可能成为瓶颈
  3. 优化手段(按效果排序)

手段效果实施难度
流式输出首字延迟降低 50%+低
Prompt 精简RT 降低 20-30%低
模型分级路由简单请求 RT 降低 60%中
结果缓存缓存命中 RT 降低 90%中
并行工具调用多工具场景 RT 降低 40%中
KV Cache 复用推理 RT 降低 20%高(需 vLLM)
模型量化RT 降低 30-50%高
  1. P99 优化重点
    • P99 高通常是因为尾部延迟(长尾请求)
    • 长尾原因:上下文过长、工具超时、模型偶发慢响应
    • 解决:超时熔断 + 降级返回 + 请求超时控制

目标指标参考:

  • 简单对话:QPS 200+,平均 RT < 500ms,P99 < 1.5s
  • 工具调用:QPS 50+,平均 RT < 2s,P99 < 5s
  • 复杂推理:QPS 20+,平均 RT < 5s,P99 < 10s

数据佐证模板: "我们优化前 P99 是 12s,通过 Prompt 精简(-2s)+ 模型分级路由(-4s)+ 流式输出(首字-3s)+ 超时降级(P99-2s),最终 P99 降到 4s 以内。最大收益来自模型分级路由——70% 的简单请求走了小模型。"


15. 接入第三方 LLM API 存在限流、不稳定,你的降级、缓存方案是什么? ​

分档:三面综合

高分答题思路:

多层级容灾方案:

请求 → [限流检查] → [缓存检查] → 主模型 → 备选模型 → 降级模型 → 规则回复
         │              │           │          │           │
         ▼              ▼           ▼          ▼           ▼
      令牌桶         结果缓存     OpenAI    Azure     自部署
      限流           语义缓存     GPT-4     GPT-4     7B模型

1. 限流管理

  • 令牌桶限流:按 API 的 RPM/TPM 限制配置令牌桶
  • 多 Key 轮询:多个 API Key 轮流使用,提升总 QPS 上限
  • 请求排队:超限请求进入队列,不直接拒绝(等待 < 3s)

2. 缓存策略

  • 精确缓存:完全相同的 Prompt → 缓存结果(TTL 5min)
  • 语义缓存:Embedding 相似度 > 0.95 → 复用结果(需校验)
  • 前缀缓存:相同 System Prompt → KV Cache 复用(vLLM Prefix Caching)
  • 缓存命中率:典型 10-20%,高峰期可缓解 15% 的流量

3. 降级链

  • L1 主模型:OpenAI GPT-4(效果最好)
  • L2 备选模型:Azure GPT-4(不同通道,避免同时故障)
  • L3 降级模型:自部署 7B/13B 模型(延迟低但效果差)
  • L4 规则回复:预设回复模板 + 推荐引导

4. 自动切换逻辑

python
async def call_llm_with_fallback(prompt: str):
    models = [
        ("openai-gpt4", timeout=10, max_retries=2),
        ("azure-gpt4", timeout=10, max_retries=2),
        ("local-7b", timeout=5, max_retries=1),
    ]
    for model, timeout, retries in models:
        try:
            return await call_with_retry(model, prompt, timeout, retries)
        except (RateLimitError, TimeoutError, ServiceUnavailableError):
            continue
    
    # 所有模型都失败 → 降级
    return {
        "reply": "抱歉,系统繁忙,请稍后重试。",
        "suggestion": get_faq_suggestion(prompt)  # 规则推荐
    }

5. 熔断恢复

  • 熔断时间窗口:30s(避免频繁切换)
  • 半开探测:30s 后放 10% 流量探测恢复
  • 全量恢复:探测成功率 > 95% → 全量切回

加分点: "缓存策略中最有价值的是'前缀缓存'——因为所有请求共享同一个 System Prompt(~1K token),前缀缓存可以节省 30% 的推理计算。语义缓存要谨慎,我们早期有 case 是语义相似但意图不同导致返回错误结果,后来加了'语义缓存 + LLM 二次校验'才安全。"


16. 多 Agent 之间上下文传递存在信息丢失,你做了哪些兜底方案? ​

分档:三面综合(深度追问)

高分答题思路:

信息丢失的 4 种类型:

类型原因兜底方案
摘要丢失上下文过长做摘要时遗漏关键信息关键信息结构化提取,不进入摘要而是单独存储
序列化丢失对象 → JSON → 反序列化时丢失类型信息用 Pydantic Schema 严格约束序列化/反序列化
路由丢失信息传递给错误的 Agent路由时附带 metadata(意图标签 + 实体列表),接收方校验
累积丢失多次传递后信息逐渐衰减每 N 步做一次"信息完整性校验",补全丢失的关键字段

兜底机制设计:

  1. 结构化上下文传递
python
class AgentContext(BaseModel):
    """所有 Agent 间传递的上下文必须符合此 Schema"""
    task_id: str                    # 任务 ID
    user_query: str                 # 原始用户问题(不丢失)
    key_entities: list[Entity]      # 关键实体
    decisions: list[Decision]       # 已确认的决策
    tool_results: list[ToolResult]  # 工具调用结果摘要
    constraints: list[str]          # 约束条件
    confidence: float               # 当前上下文完整度评估
  1. 关键信息保护

    • 原始用户 Query 永远不被摘要/截断,完整传递
    • 关键决策(如用户明确选择)标记为 protected: true,不可被覆盖
    • 上下文中标记 must_have 字段,接收方校验是否齐全
  2. 完整性校验

    • 每个 SubAgent 接收上下文后,先做完整性校验
    • 校验失败 → 向 Master 报告缺失字段 → Master 补充或决定降级处理
    • 示例:if not context.key_entities: request_more_context()
  3. 上下文版本管理

    • 每次传递生成新的 context version
    • 保留历史版本,支持回溯到任意节点
    • 如果最终结果异常,可以回溯检查哪一步丢失了信息

数据佐证模板: "我们早期多 Agent 传递用自然语言摘要,信息丢失率约 15%。改为结构化 Schema + 完整性校验后,丢失率降到 2% 以下。关键是'原始 Query 不碰'+'关键字段 protected'——这两条规则解决了 80% 的问题。"


17. 如果让你重构当前 Agent 项目架构,你会改掉哪些设计缺陷? ​

分档:三面综合(深度追问)

高分答题思路:

答题策略: 展示反思能力但不否定原有设计——每个"缺陷"都要说明"当时的约束"和"现在为什么需要改"。

典型重构方向(选 3-4 个展开):

  1. 工具调用从"同步"改为"异步+流式"

    • 原设计:所有工具同步调用,Agent 等待结果
    • 问题:慢工具拖累整体延迟
    • 重构:工具调用异步化 + 流式返回中间状态
    • 收益:用户感知延迟降低 40%
  2. 上下文管理从"固定窗口"改为"动态管理"

    • 原设计:固定保留最近 5 轮
    • 问题:重要信息在第 6 轮被丢弃
    • 重构:基于信息重要性的动态保留 + 关键信息池
    • 收益:多轮任务完成率 +8%
  3. 评测从"人工抽检"改为"自动+人工"

    • 原设计:上线前人工抽检 50 条
    • 问题:覆盖率低,Badcase 发现滞后
    • 重构:自动化评测 1000+ 条 + LLM-as-Judge + 人工抽检异常 case
    • 收益:Badcase 发现时间从 3 天 → 1 小时
  4. Agent 编排从"硬编码流程"改为"配置化编排"

    • 原设计:流程写死在代码里
    • 问题:每次调整流程需要改代码发版
    • 重构:流程配置化(YAML/JSON 描述 DAG),运行时加载
    • 收益:流程调整从 2 天 → 30 分钟
  5. 监控从"结果埋点"改为"全链路追踪"

    • 原设计:只记录最终输出
    • 问题:Badcase 无法定位是哪个环节的问题
    • 重构:trace_id 贯穿全链路,每环节记录输入/输出/耗时
    • 收益:Badcase 定位时间从 30min → 3min

关键原则: "重构方案要分优先级——不是所有缺陷都需要立刻改。我的原则是:影响线上稳定性的最先改,影响开发效率的其次改,'锦上添花'的排后面。同时要考虑重构风险——每个改动都要有回滚方案。"


答题策略总结 ​

要点说明
系统设计先画架构图,再逐层讲,每层说清"为什么这样设计"
白板能力练习手画架构图,面试时 5 分钟内画出核心分层
STAR 框架行为面用 Situation-Task-Action-Result 结构化回答
量化意识每个优化都要有数据支撑(提升 X%、降低 Y ms)
反思能力主动谈设计缺陷和重构方向,展示持续学习的心态
业务理解技术方案要回到业务价值——"这个优化对用户/业务意味着什么"
提问环节准备 2-3 个有深度的问题反问面试官,展示你的思考