🧠 图解记忆: 先确认输入输出和边界,再画接口与数据流、写最小主链路,最后用超时、重试、回退和测试体现工程深度。
💡 答案要点
AI 应用工程师白板题的特点:
| 传统 SDE 白板题 | AI 应用工程师白板题 |
|---|---|
| 链表/树/图 | LLM 调用 / Prompt 设计 |
| 算法复杂度 | RAG 流程设计 / Agent 架构 |
| 手工实现 | 用 API 或框架组合 |
| 一次性写对 | 边想边调 + 分析 tradeoff |
高频题型:
题1:实现一个 LLM 包装器(类设计)
"请设计一个 LLM 调用类,支持:
- 自动重试(指数退避)
- 超时处理
- 流式输出
- 回退策略(GPT-4 失败 → DeepSeek V4-Flash)"参考答案框架:
python
class LLMClient:
def __init__(self, providers: list, fallback_order: list):
self.providers = providers
self.fallback_order = fallback_order
async def generate(self, prompt, stream=False, timeout=30):
for provider in self.fallback_order:
try:
return await self._call_with_timeout(provider, prompt, stream, timeout)
except Exception as e:
continue
raise AllProvidersFailedError()
async def _call_with_timeout(self, provider, prompt, stream, timeout):
# 实现超时控制
pass题2:设计一个 RAG 检索流程
"请设计一个 RAG 系统,包含:
- 文档切分
- 向量嵌入
- 检索
- 重排
- 生成"参考答案框架:
python
def rag_pipeline(query: str, top_k: int = 5):
# 1. 查询改写
rewritten_query = query_rewrite(query)
# 2. 向量检索
query_emb = embedding_model.encode(rewritten_query)
initial_results = vector_db.search(query_emb, k=top_k*2)
# 3. 重排
reranked = cross_encoder.rerank(query, initial_results, top_k)
# 4. 生成
context = format_context(reranked)
answer = llm.generate(f"上下文:{context}\n问题:{query}")
return answer题3:设计一个 Agent 循环
"请用 ReAct 模式实现一个 Agent,支持:
- Thought/Action/Observation 循环
- 最大循环次数限制
- 工具调用"准备策略:
| 步骤 | 内容 |
|---|---|
| 1 | 刷完 LLM API 调用题(OpenAI SDK / LangChain) |
| 2 | 默写 RAG 流程(从 chunk 到 answer) |
| 3 | 实现一个最小化 Agent(ReAct Loop) |
| 4 | 练习 Tradeoff 分析(为什么选这个方案) |
面试话术:
"AI 应用的白板题和传统 SDE 不一样,重点不是算法复杂度,而是系统设计和 API 组合能力。我会先确认需求边界(要不要流式?要不要缓存?),然后画架构图,再写核心代码,最后分析 tradeoff。边想边说是关键,不要等想完美了才开始写。"
