RAG与Agent面试题集
Q1: RAG的完整流程?
答:
离线(索引):
文档加载 → 文本清洗 → 语义切分 → 向量化 → 存入向量数据库
在线(查询):
用户Query → Query向量化 → 向量检索 → 重排序
→ Prompt组装(Query+Context) → LLM生成 → 返回答案Q2: 文档切分策略对比?
| 策略 | 优点 | 缺点 |
|---|---|---|
| 固定大小 | 简单 | 可能切断语义 |
| 语义切分(按段落/句子) | 保持语义完整 | 实现复杂 |
| 重叠切分 | 保持连续性 | 冗余存储 |
| 递归切分 | 灵活 | 需调参 |
推荐:递归切分(RecursiveCharacterTextSplitter)+ 语义边界
Q3: 如何优化检索质量?
- 混合检索:向量相似度 + BM25关键词
- 查询改写:对用户query做扩展或重写
- 重排序:用Cross-Encoder对初筛结果重新评分
- 元数据过滤:基于文档标签/时间等过滤
- HyDE:先生成假设答案,用假设答案检索
Q4: RAG评估指标?
| 指标 | 含义 |
|---|---|
| Recall@K | 前K个结果中包含正确答案的比例 |
| MRR | 第一个正确答案排名的倒数均值 |
| NDCG | 考虑排名的检索质量 |
| RAGAS | 端到端RAG评估(忠实度/相关性) |
Q5: ReAct vs CoT vs ToT?
- CoT:Think step by step,纯推理不行动
- ReAct:Think → Act → Observe,推理+行动交替
- ToT:探索多条推理路径,适合复杂规划问题
实际Agent开发中ReAct是最常用的范式。
Q6: Agent的架构设计?
Agent = LLM + Planning + Memory + Tools
Planning:
- 任务分解
- 步骤规划
- 反思/调整
Memory:
- 短期记忆:对话上下文
- 长期记忆:向量数据库存储
- 工作记忆:当前任务状态
Tools:
- MCP协议
- Function Calling
- API集成Q7: 如何解决Agent的幻觉?
- 可靠工具:用确定性工具而非LLM推理
- 验证机制:让Agent验证自己的输出
- 约束输出:结构化输出格式
- 检索增强:基于真实文档
- 人机协作:关键决策需人类确认
Q8: Multi-Agent协作模式?
| 模式 | 描述 |
|---|---|
| 顺序 | Agent A → Agent B → Agent C |
| 层级 | Manager Agent分配任务 |
| 辩论 | 多个Agent讨论达成共识 |
| 并行 | 不同Agent独立完成子任务 |
LangGraph是实现复杂Agent工作流的主要框架。