本文面向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 直觉