本文面向 3年左右Python后端 / 初级AI Engineer候选人 ,覆盖高频技术题 + 工程实战题 + 架构设计题。
不只给答案,更给面试官想听的点。
一、Python 基础与工程能力(必考)
Q1:Python 的 GIL 是什么?对 AI 工程有什么影响?
答:
-
**GIL(Global Interpreter Lock)** 是 CPython 的全局锁,同一时刻只允许一个线程执行 Python 字节码。
-
对 CPU 密集型任务(训练、推理) :GIL 会限制多线程并行,必须用 多进程(multiprocessing) 或 **C 扩展(PyTorch 底层)** 绕过。
-
对 IO 密集型任务(LLM API 调用):GIL 影响很小,因为 IO 等待时会释放 GIL。
-
AI工程启示:
-
LLM 推理用 vLLM / TensorRT,底层是 C++,不受 GIL 限制
-
FastAPI 用 async + uvloop,适合高并发 IO
-
批量推理用 多进程 Worker
-
✅ 面试官想听:你知道 GIL 的边界,不会被"Python 不能并发"吓住。
Q2:async / await 在 AI 服务中有什么用?
答:
-
LLM 调用是 IO 密集型(网络等待)
-
使用
async def+httpx.AsyncClient可以:-
单进程支撑成百上千并发请求
-
避免线程切换开销
-
-
在 FastAPI 中:
@app.post("/chat") async def chat(): async with httpx.AsyncClient() as client: resp = await client.post(url, json=payload) return resp.json()
✅ 加分点:提到 streaming(SSE / WebSocket)必须用 async。
Q3:FastAPI 为什么适合做 AI 服务?
答:
| 特性 | 原因 |
|---|---|
| async 原生 | 高并发 LLM 调用 |
| Pydantic | 强类型输入输出 |
| 自动文档 | Swagger / OpenAPI |
| 依赖注入 | 模型、缓存、配置管理 |
| 中间件 | Token 限流、Trace |
✅ 面试官想听:你会用框架特性解决 AI 工程问题,而不是"只是会用 FastAPI"。
二、RAG 核心技术(面试核心区)
Q4:什么是 RAG?为什么不用直接微调?
答:
-
RAG(Retrieval-Augmented Generation):
用户问题 → 检索相关知识 → 拼接 Prompt → LLM 生成 -
为什么不用微调:
维度 RAG 微调 知识更新 实时 需重新训练 成本 低 高 可解释性 有来源 黑盒 幻觉 可控 仍存在
✅ 加分:提到 Hybrid Search(向量 + 关键词)。
Q5:Chunk Size 怎么选?太大或太小会怎样?
答:
-
太小:
-
丢失上下文
-
召回片段不完整
-
-
太大:
-
噪声多
-
超过 context window
-
-
经验值:
-
通用文档:512 ~ 1024 tokens
-
代码:256 ~ 512 tokens
-
-
工程做法:
-
用 RAGAS 评估不同 chunk 效果
-
支持多种 chunk 策略并存
-
✅ 面试官想听:你不是拍脑袋,而是有评估方法。
Q6:为什么要用 Re-rank?
答:
-
向量检索是 粗排,可能语义相似但无关
-
Re-rank 用 Cross-Encoder 做精细打分
-
流程:
Vector DB → Top-K → Re-rank → Final-N -
代价:Re-rank 慢,只在最后阶段用
✅ 加分:提到 bge-reranker。
Q7:RAG 如何防止幻觉?
答:
-
检索阶段:
-
提高召回准确率
-
设置相似度阈值
-
-
生成阶段:
-
Prompt 明确要求"不知道就说不知道"
-
限制上下文来源
-
-
输出阶段:
-
引用来源(Citation)
-
Guardrails 校验
-
✅ 面试官想听:你有系统性防幻觉意识。
三、Prompt 工程与模型调用
Q8:Temperature 和 Top-p 有什么区别?
答:
| 参数 | 作用 |
|---|---|
| Temperature | 随机性(0=确定性) |
| Top-p | 核采样(只保留累积概率前p的词) |
-
代码 / SQL:temperature = 0
-
创意写作:temperature = 0.7~0.9
-
生产系统:固定 temperature,避免不可复现
✅ 加分:提到 seed 固定。
Q9:Function Calling 和 Tool Use 是什么?
答:
-
LLM 不直接执行动作
-
只输出 结构化调用意图
-
后端执行真实逻辑
{
"name": "query_order",
"arguments": {"order_id": "123"}
}
✅ 面试官想听:你理解 LLM 是"大脑",后端是"手脚"。
四、Agent 与工作流
Q10:Agent 和传统 if-else 有什么区别?
答:
| 维度 | Agent | if-else |
|---|---|---|
| 决策 | LLM 动态 | 静态 |
| 扩展性 | 高 | 低 |
| 可解释性 | 中 | 高 |
| 成本 | 高 | 低 |
-
Agent 适合:
-
多步骤
-
不确定性高
-
-
if-else 适合:
-
明确规则
-
高可靠
-
✅ 加分:提到 Human-in-the-loop。
Q11:LangGraph 解决了什么问题?
答:
-
普通 Chain 是线性
-
Agent 需要:
-
循环
-
条件分支
-
状态共享
-
-
LangGraph 提供:
-
StateGraph
-
Node / Edge
-
Checkpoint(断点续跑)
-
✅ 面试官想听:你做过复杂 Agent,不是只会 chain.invoke()。
五、性能与工程化
Q12:vLLM 为什么快?
答:
-
PagedAttention:KV Cache 分页管理
-
Continuous Batching:不等请求结束就批处理
-
KV Cache 复用:多轮对话共享历史
✅ 加分:对比 HuggingFace Transformers 慢的原因。
Q13:如何评估 RAG 系统?
答:
| 指标 | 说明 |
|---|---|
| Context Recall | 检索是否完整 |
| Faithfulness | 是否忠实原文 |
| Answer Relevance | 回答是否相关 |
| Latency | 响应时间 |
| Token Cost | 成本 |
工具:RAGAS、DeepEval、LangSmith
✅ 面试官想听:你用数据说话,不是凭感觉。
Q14:AI 服务怎么做限流和降级?
答:
-
限流:
-
API Key 粒度
-
IP 粒度
-
Token 配额
-
-
降级:
-
超时返回缓存
-
复杂问题降级规则
-
高峰期关闭非核心功能
-
✅ 加分:提到 Redis + Lua 限流脚本。
六、架构设计题(压轴)
Q15:设计一个企业级 RAG 系统
答(标准架构):
┌──────────┐
│ Client │
└────┬─────┘
│
┌────▼──────────┐
│ API Gateway │
│ Auth / Limit │
└────┬──────────┘
│
┌────▼──────────┐
│ RAG Service │
│ · Retriever │
│ · Rerank │
│ · Generator │
└────┬──────────┘
│
┌────▼──────────┐
│ Vector DB │
│ Qdrant │
└────┬──────────┘
│
┌────▼──────────┐
│ Object Store │
│ MinIO/S3 │
└──────────────┘
关键点:
-
异步检索
-
流式输出
-
来源可追溯
-
可观测(LangSmith)
✅ 面试官想听:你不是只会写 Demo,而是能设计可扩展系统。
七、反问面试官的问题(加分项)
| 问题 | 目的 |
|---|---|
| 现在 RAG 的主要痛点是什么? | 展示关心业务 |
| 模型是自建还是 API? | 判断技术栈 |
| 有评测体系吗? | 显示工程成熟度 |
| 服务 SLA 是多少? | 体现责任心 |
八、总结:面试官到底在考什么?
| 考察维度 | 核心 |
|---|---|
| Python 工程 | 并发、性能、代码质量 |
| AI 原理 | 不要求推导,但要懂机制 |
| RAG | 检索、评估、防幻觉 |
| Agent | 工作流、状态、工具 |
| 架构 | 可扩展、可观测、可降级 |
✅ 一句话总结:
AI Engineer = Python 后端 + 模型工程 + 系统工程 + 一点点 AI 直觉