Skip to content
🔗 分享本题
查看我的学习进度 →

公开面经常见题型(公司、职级与轮次未经逐题核验)

面试官开场问题:

"自我介绍 + 挑一个你认为最有技术含量的 AI 项目详细讲"

腾讯 Q1:如何讲清一个做过的 RAG 项目及优化手段?

RAG项目从业务问题基线实验指标到业务结果的面试证据链图解

🧠 图解记忆: 讲 RAG 不背组件,要讲问题、实验、指标、取舍与业务结果的证据链,只用能证明的数据。

💡 答案要点

回答框架(STAR法则):

S(背景):我负责的短剧平台有530万用户,日活80万,用户经常问"这个短剧在哪看""更新到第几集了"等问题。
T(任务):需要构建一个能精准回答用户问题的知识库系统。
A(行动):我设计了四层优化:
  1. 文档解析层:用 PDF.plumber 解析短剧介绍,用 OCR 处理截图
  2. 语义分块层:按剧情/演员/更新时间三维度切分,每块512 tokens
  3. 检索层:HNSW 索引 + BM25 混合检索,RRF 融合排序
  4. 生成层:加 "请基于以下资料回答,不要编造" 约束 prompt
R(结果):用户问题准确率从 65% 提升到 89%,日均减少客服 30% 工作量。

追问1:分块大小怎么选的?

"我测过 256/512/1024 三个档,512 效果最好。太小(如256)切断了上下文,相关性下降;太大(如1024)引入了太多噪声。Context Cliff 的阈值是 2500 tokens,我控制在 512 是因为用户问题通常简短,512 的块既能覆盖完整语义,又不会超过阈值。"

追问2:检索用了什么向量模型?Embedding 怎么调优的?

"用的是 BGE-large-zh,1536 维。调优方法:1)用锚点文本构建难负例;2)温度从 0.01→0.05 逐步调;3)用 MRL 训练加速。最后在测试集上 Recall@10 从 78% 提升到 91%。"

腾讯 Q2:多 Agent 系统中如何通信?遇到冲突怎么办?

多Agent中心调度与A2A通信以及资源结果状态冲突治理图解

🧠 图解记忆: 先统一消息与状态,再按资源、结果、数据三类冲突分别治理;本质仍是分布式一致性问题。

💡 答案要点

两种通信模式:

python
# 模式1:中心调度(简单场景)
class CentralScheduler:
    def route(self, task):
        if "搜索" in task:
            return SearchAgent().handle(task)
        elif "生成" in task:
            return WriterAgent().handle(task)

# 模式2:P2P 通信(复杂场景,如 A2A 协议)
class Agent:
    def __init__(self, name):
        self.name = name
        self.inbox = []  # 消息队列
    
    def send(self, receiver, message):
        # 通过消息队列或 HTTP 发送
        message_queue.put({
            "from": self.name,
            "to": receiver,
            "content": message,
            "type": "request"
        })
    
    def receive(self):
        # 接收其他 Agent 的消息
        return self.inbox.pop()

冲突处理策略:

冲突类型解决方案代码
工具调用冲突(两个 Agent 调用同一资源)互斥锁 + 任务队列mutex.lock()
结果冲突(两个 Agent 输出不一致)仲裁 Agent 投票judge_agent.decide()
状态冲突(数据不一致)乐观锁 + 重试version=1, update if version==1

面试话术:

"我的多 Agent 通信用 A2A 协议,Agent 之间通过标准化消息格式通信。冲突处理分三种:资源冲突用互斥锁,输出冲突用仲裁 Agent 投票,状态冲突用乐观锁。我在订单系统用过这个,InventoryAgent 和 PaymentAgent 同时修改库存,通过消息队列串行化,完美解决了并发冲突。"

腾讯 Q3:线上 RAG 响应很慢,如何系统排查?

RAG总延迟拆分检索排队TTFT和解码并按证据排查图解

🧠 图解记忆: 先把总延迟拆成检索、排队、首 Token 和解码,再按 Trace 证据优化最慢的一段。

💡 答案要点

排查思路(从外到内):

第一步:确认是 RAG 的哪一步慢?
    ├── 检索慢 → 向量数据库问题
    ├── 生成慢 → LLM 推理问题
    └── 整体都慢 → 网络/系统问题

第二步:逐层定位

排查工具和方法:

python
# 1. 打点计时
import time
start = time.time()
docs = vector_db.search(query_emb, k=10)
检索耗时 = time.time() - start

start = time.time()
answer = llm.generate(prompt)
生成耗时 = time.time() - start

# 2. 查看 vLLM 监控
# vLLM 自带 Prometheus metrics
# 关键指标:
#   - engine_load_percent: GPU 利用率
#   - time_to_first_token: 首 Token 延迟
#   - time_per_output_token: Token 间延迟

# 3. 查看向量数据库慢查询
# Milvus: 
#   db.config().getMetric().SlowQuery
# Pinecone:
#   index.describe_stats() 查看延迟分布

常见原因和解决方案:

原因症状解决
HNSW ef 参数太小召回率低增大 ef=200→500
向量维度太高检索慢用 PCA 降维
LLM GPU 利用率低生成慢检查 batch_size
网络带宽瓶颈跨服务通信慢优化序列化
KV Cache 不命中延迟抖动增大 cache 容量

面试话术:

"我的排查顺序是:打点确定慢在哪一步(检索还是生成)→ 看监控判断是 GPU 卡脖子还是内存瓶颈 → 最后看具体指标。生产环境我会在 RAG 链路每个节点打日志,延迟超过 500ms 自动告警。有一次排查发现是 Embedding 服务内存泄漏导致 GC 频繁,定位到修了内存管理代码后,P99 从 2s 降到 300ms。"

腾讯AI面试高频追问

追问1:vLLM 的 PagedAttention 和 SGLang 的 RadixAttention 有什么区别?

"PagedAttention 是 vLLM 的分页显存管理,每个请求的 KV Cache 按需分配,显存利用率高。RadixAttention 是 SGLang 的基数树管理,能跨请求复用相同前缀(比如 System Prompt)。对于多轮对话,SGLang 省 40-50% 显存;对于单轮问答,vLLM 性能更稳定。"

追问2:如果用户问了一个需要多跳推理的问题(比如"苹果公司CEO和谷歌CEO谁更关注环保"),你的 RAG 怎么处理?

"单级 RAG 做不到,需要:1)Query Decomposition 把问题分解成两个子问题;2)分别检索苹果CEO环保措施 和 谷歌CEO环保措施;3)最后聚合对比。如果涉及更复杂的关系,我会用 GraphRAG 构建知识图谱,通过实体关系路径找到关联信息。"

追问3:你们怎么做 RAG 的效果评估?有没有自动化的流程?

示例表达(仅在能用本人经历或可复现实验佐证时使用): "我们用 RAGAS 四指标:Faithfulness、Answer Relevancy、Context Recall、Context Precision。每周跑一次评估,用 500 道题覆盖 5 个场景。Pipeline 是:代码变更 → 触发评估 → P80 阈值判断 → 通过才允许上线。评估结果和上次对比,下降超过 5% 自动告警。"