1. 面试背景与核心考察点
这场快手AI Agent开发实习生的二面面试,聚焦于大模型应用开发中的两个核心领域:RAG(检索增强生成)系统和AI Agent(智能体)设计。与一面侧重传统后端开发能力不同,二面更关注候选人在AI工程实践中的深度思考能力。
面试官明显在考察三个维度的能力:
- 对RAG系统全链路的理解(从数据构建到效果评估)
- 面对复杂问题时结构化拆解的思维能力
- 将学术概念落地为工程实现的转化能力
从实际面试过程来看,90%的时间都围绕RAG优化和Agent设计展开,完全跳出了传统算法题的范畴,更贴近真实工作场景。这种面试风格反映了行业趋势——大模型开发岗位越来越注重工程落地能力而非纯理论研究。
2. RAG评测体系构建详解
2.1 评测维度的分层设计
一个完整的RAG系统需要从三个层面进行评估:
检索层(Retrieval)评估指标:
- Recall@K:衡量系统在前K个结果中召回相关文档的能力。在客服场景下,我们更关注Recall@3,因为用户通常不会浏览超过3个结果
- MRR(平均倒数排名):计算第一个相关文档排名的倒数均值。例如相关文档分别排第2、第1、第3位,则MRR = (1/2 + 1/1 + 1/3)/3 ≈ 0.61
- 响应延迟:从查询到返回结果的P95耗时,直接影响用户体验
生成层(Generation)评估指标:
- 忠实度(Faithfulness):使用基于规则+NLI模型的双重校验。例如检查生成答案中的实体是否全部来源于检索文档
- 有用性评分:采用5点Likert量表(1=完全没用,5=完全解决),需要至少3名标注者取中位数
- 幻觉率:统计答案中出现文档中不存在信息的比例
系统层(System)监控指标:
- 错误率:包括API调用失败、超时等异常情况
- 成本消耗:按token数计算的模型调用成本
- 降级比例:触发fallback机制的比例
2.2 数据集构建的工程实践
构建高质量的评测数据集需要考虑以下要素:
查询-文档对构建:
- 从生产环境采集真实用户查询(需脱敏处理)
- 对每个查询,由领域专家标注3-5个相关文档
- 加入难负例(semantically similar but irrelevant documents)
查询-答案对标注规范:
- 答案必须可验证:每个事实陈述都需标注来源文档
- 控制长度:保持在50-150个token之间
- 避免主观表述:使用确定性的语言风格
多轮对话数据模拟:
python复制# 示例对话场景
dialogue = [
{"role": "user", "content": "如何开通直播权限?"},
{"role": "agent", "content": "请进入设置-创作者中心...", "sources": ["doc123"]},
{"role": "user", "content": "没找到创作者中心选项"},
# 期望agent能理解这是上下文延续
]
数据构建的关键挑战在于长尾查询的覆盖。我们采用主动学习策略:
- 监控线上低置信度查询
- 聚类相似查询模式
- 针对性补充标注数据
3. RAG系统优化方法论
3.1 三层优化框架
数据层优化:
- 查询理解:使用小模型进行意图分类(如咨询类vs操作类)
- 文档预处理:对技术文档自动生成FAQ式摘要
- 负采样策略:在训练时混合随机负例和难负例(比例建议7:3)
检索层优化:
- 混合检索权重动态调整算法:
python复制def dynamic_weight(query):
if is_technical(query):
return {'bm25': 0.7, 'vector': 0.3}
else:
return {'bm25': 0.4, 'vector': 0.6}
- 多粒度索引策略:
- 粗粒度:完整文档(用于概览)
- 中粒度:段落级(默认检索单元)
- 细粒度:句子级(用于精确匹配)
生成层优化:
- 结构化prompt模板:
code复制你是一位专业的客服助手,请严格根据以下信息回答问题:
[来源1] {doc1_text}
[来源2] {doc2_text}
问题:{query}
要求:
1. 答案不超过3句话
2. 若信息不足请回答"无法确定"
3. 不要添加任何解释
3.2 性能优化实战技巧
向量检索加速方案:
- 使用量化技术:将float32向量转为int8,减少75%内存占用
- 分区索引:按文档类型建立独立索引空间
- 近似搜索:调整HNSW参数(ef_search=200, ef_construction=400)
生成阶段优化:
- 上下文压缩算法:
python复制def compress_context(docs, query):
# 使用sentence-transformers计算相似度
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
query_embedding = model.encode(query)
doc_embeddings = model.encode([d['text'] for d in docs])
# 取top-3最相关句子
similarities = cosine_similarity(
[query_embedding],
doc_embeddings
)[0]
top_indices = np.argsort(similarities)[-3:]
return [docs[i]['text'] for i in top_indices]
- 流式输出实现:使用OpenAI的stream参数或Llama.cpp的partial response
4. Agent智能体设计进阶
4.1 记忆系统实现细节
短期记忆存储结构:
json复制{
"session_id": "abc123",
"context": [
{"role": "user", "content": "如何退款"},
{"role": "agent", "content": "请进入订单页面..."}
],
"slots": {
"intent": "refund",
"product_type": "virtual_goods"
},
"expire_at": "2023-12-31T23:59:59"
}
长期记忆检索流程:
- 将当前对话总结为embedding
- 在向量库中搜索相似历史对话(cosine相似度>0.85)
- 从结构化数据库提取相关用户画像数据
- 将相关信息注入当前prompt上下文
4.2 工具调用实现模式
工具注册规范:
python复制class RefundTool:
name = "check_refund_status"
description = "查询订单退款进度"
@validate_input
def __call__(self, order_id: str):
# 调用内部API
response = internal_api.get(
f"/orders/{order_id}/refund"
)
return {
"status": response.status,
"amount": response.amount
}
工具调用决策流程:
- LLM生成工具调用请求(JSON格式)
- 校验工具参数合法性
- 执行工具并捕获异常
- 将结果格式化后返回LLM
- 记录调用日志用于后续分析
5. 全排列算法深度解析
5.1 标准实现与优化
基础回溯算法存在优化空间:
python复制def permute(nums):
res = []
n = len(nums)
def backtrack(first=0):
if first == n:
res.append(nums[:])
return
for i in range(first, n):
# 减少交换次数
nums[first], nums[i] = nums[i], nums[first]
backtrack(first + 1)
nums[first], nums[i] = nums[i], nums[first]
backtrack()
return res
时间复杂度分析:
- 对于n个元素,共有n!种排列
- 每次复制数组需要O(n)时间
- 总时间复杂度为O(n! * n)
5.2 处理重复元素的工业级方案
生产环境需要考虑以下边界情况:
- 输入为空列表
- 包含None等特殊值
- 大规模数据时的内存限制
增强版实现:
python复制def permute_unique(nums):
res = []
nums.sort() # 关键预处理
def backtrack(used, path):
if len(path) == len(nums):
res.append(path[:])
return
for i in range(len(nums)):
if used[i] or (i > 0 and nums[i] == nums[i-1] and not used[i-1]):
continue
used[i] = True
path.append(nums[i])
backtrack(used, path)
path.pop()
used[i] = False
backtrack([False]*len(nums), [])
return res
算法选择建议:
- 当n<8时:使用回溯法
- 当8≤n≤12:考虑Heap's algorithm
- 当n>12:使用迭代器模式避免内存爆炸
6. 面试准备建议
6.1 技术深度准备清单
RAG系统必知概念:
- 嵌入模型选择(对比ADA-002 vs bge-small)
- 重排序(Re-rank)模型原理
- 上下文窗口管理策略
- 幻觉检测技术
Agent设计核心模式:
- ReAct框架实现
- 工具使用编排
- 记忆持久化方案
- 错误恢复机制
6.2 项目阐述结构
采用STAR-L变形框架:
- Situation:项目背景(2句话)
- Task:你的具体职责
- Action:关键技术决策(3-5个亮点)
- Result:量化指标提升
- Learning:获得的经验教训
示例回答结构:
"在XX项目中,我负责优化RAG的召回阶段。发现主要痛点是长尾查询召回率低。通过引入多粒度索引和动态权重调整,使Recall@3从0.65提升到0.82。关键学习是:在语义搜索中,精确匹配仍然重要。"
6.3 前沿技术跟踪建议
值得关注的论文方向:
- 自适应RAG(Self-RAG)
- 小模型与大模型协同
- 检索质量自动评估
- 多模态Agent系统
工业界开源项目:
- LlamaIndex最新特性
- LangChain Expression Language
- DSPy编程范式
- 各云厂商的AI Agent服务
