本文档面向Agent开发岗位面试,系统介绍项目架构设计和技术亮点
AI Interview Agent 是一个基于 Multi-Agent架构 的智能面试系统,模拟真实技术面试场景,提供:
| 指标 | 数值 |
|---|---|
| 代码行数 | 15,000+ |
| Agent数量 | 3个核心Agent + 1个流程控制器 |
| 推荐算法 | 4种(RAG + 混合推荐) |
| 向量维度 | 384维 |
| 评估维度 | 8个维度 |
┌─────────────────────────────────────────────────────────────────────────┐
│ 前端层 (UniApp) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ 面试页面 │ │ 报告页面 │ │ 学习页面 │ │ 资源推荐页 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ API网关层 (FastAPI) │
│ JWT认证 / 限流 / 请求路由 │
└─────────────────────────────────────────────────────────────────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ RESTful API │ │ WebSocket服务 │ │ 定时任务服务 │
│ (面试管理/评估) │ │ (实时面试通信) │ │ (模型训练/清理) │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
└────────────────────────┼────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Agent核心层 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Multi-Agent System │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Interviewer │ │ Evaluator │ │ Coach │ │ │
│ │ │ Agent │ │ Agent │ │ Agent │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ │ │ │ │ │ │
│ │ └──────────────────┼──────────────────┘ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ Flow Controller │ │ │
│ │ │ (流程编排引擎) │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ 推荐系统 │ │ LLM服务 │ │ 数据存储 │
│ ├─ RAG推荐 │ │ ├─ 通义千问 │ │ ├─ PostgreSQL │
│ ├─ 混合推荐 │ │ ├─ 多模态处理 │ │ ├─ Milvus向量库 │
│ ├─ 规则推荐 │ │ └─ 流式响应 │ │ └─ Redis缓存 │
│ └─ 协同过滤 │ │ │ │ │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
| 层级 | 技术选型 | 用途 |
|---|---|---|
| 框架 | FastAPI | 异步API |
| Agent框架 | 自研(参考CrewAI) | 多Agent协作 |
| LLM | 通义千问 (qwen-plus) | 对话/评估/推荐 |
| 向量数据库 | Milvus | 语义检索 |
| 关系数据库 | PostgreSQL | 业务数据 |
| 缓存 | Redis | 会话/缓存 |
| 消息队列 | Celery | 异步任务 |
| 模块 | 技术 | 说明 |
|---|---|---|
| Embedding | sentence-transformers (paraphrase-multilingual-MiniLM-L12-v2) | 384维向量 |
| 相似度计算 | 余弦相似度 | 向量检索 |
| 推荐算法 | 混合推荐(规则+内容+协同+RAG) | 多路召回 |
| 评估维度 | 8维度评分 | 专业知识/技能匹配/表达/逻辑/抗压/性格/动机/价值观 |
为什么选择自研而非直接用CrewAI/LangChain?
核心抽象:
# BaseAgent - 所有Agent的基类
class BaseAgent(ABC):
def __init__(self, role, goal, backstory, llm_config):
self.role = role # 角色名称
self.goal = goal # 目标
self.backstory = backstory # 背景故事
@abstractmethod
async def execute(self, task, context) -> AgentOutput:
"""执行任务"""
pass
支持复杂的面试流程控制:
class InterviewFlow(Flow):
@start()
async def self_introduction(self, context):
"""自我介绍阶段"""
return "请做个自我介绍"
@listen(self_introduction)
async def technical_round(self, prev_result, context):
"""技术问答阶段"""
return "技术问题..."
@router(technical_round)
async def adaptive_next(self, prev_result, context):
"""自适应路由"""
if context.get_sync("level") == "expert":
return "system_design"
return "basic_coding"
支持的模式:
@start() - 流程起点@listen(step) - 顺序执行@router(step) - 条件分支@parallel([steps]) - 并行执行用户请求
│
├──→ 规则推荐 (50%权重) ──┐
│ │
├──→ 内容推荐 (30%权重) ──┼──→ 融合排序 ──→ 多样性重排 ──→ 结果
│ │
└──→ 协同过滤 (20%权重) ──┘
四种推荐方式:
| 方式 | 原理 | 适用场景 |
|---|---|---|
| RAG推荐 | 向量检索 + LLM生成推荐理由 | 面试后个性化推荐 |
| 规则推荐 | 基于评估薄弱点匹配标签 | 冷启动 |
| 内容推荐 | 基于Embedding相似度 | 有历史行为 |
| 协同过滤 | 基于用户行为相似度 | 用户量足够 |
WebSocket连接中,多个Agent并行工作:
# 候选人回答后,并行执行评估和追问生成
results = await asyncio.gather(
self._evaluate_answer(answer), # 评估员Agent
self._generate_follow_up(answer), # 面试官Agent
return_exceptions=True,
)
fastapi/
├── app/
│ ├── agents/ # Agent核心层
│ │ ├── base.py # Agent基类
│ │ ├── interviewer.py # 面试官Agent
│ │ ├── evaluator.py # 评估员Agent
│ │ ├── coach.py # 学习顾问Agent
│ │ ├── flow.py # 流程编排引擎
│ │ ├── interview_flow.py # 面试流程定义
│ │ ├── task.py # 任务定义
│ │ ├── prompts/ # Prompt模板
│ │ └── config/ # Agent配置(YAML)
│ │
│ ├── recommenders/ # 推荐系统
│ │ ├── base.py # 推荐器基类
│ │ ├── rag_recommender.py # RAG推荐
│ │ ├── hybrid.py # 混合推荐
│ │ ├── content_based.py # 内容推荐
│ │ ├── collaborative_filtering.py # 协同过滤
│ │ ├── rule_based.py # 规则推荐
│ │ └── embedding_service.py # 向量化服务
│ │
│ ├── websockets/ # WebSocket服务
│ │ ├── interview_crew.py # Crew模式面试
│ │ ├── interview_realtime.py # 实时面试
│ │ ├── manager.py # 连接管理
│ │ └── protocol.py # 消息协议
│ │
│ ├── core/ # 基础设施
│ │ ├── milvus_client.py # 向量数据库
│ │ ├── embedding.py # Embedding服务
│ │ ├── prompts.py # Prompt模板
│ │ └── constants.py # 常量配置
│ │
│ └── services/ # 业务服务
│ ├── interview_crew_service.py
│ ├── recommendation_service.py
│ └── qwen3_omni_http_service.py
│
├── tests/ # 测试
│ ├── unit/ # 单元测试
│ ├── test_recommenders/ # 推荐器测试
│ └── benchmark/ # 性能测试
│
└── docs/
└── technical/ # 技术文档
“我开发了一个AI面试Agent系统,核心是一个Multi-Agent架构,包含面试官、评估员、学习顾问三个Agent。系统采用自研的Agent框架(参考CrewAI),支持流程编排,可以处理复杂的面试流程。在推荐模块,我实现了RAG+混合推荐,结合向量检索和LLM生成个性化推荐理由。技术栈主要是FastAPI + 通义千问 + Milvus向量库。”
Q: 为什么要自研Agent框架,而不是直接用CrewAI?
“主要是为了学习和轻量化。自研框架让我深入理解了Agent的核心原理:角色定义、任务分配、上下文管理。而且我们的场景相对垂直,自研框架更轻量,代码量只有CrewAI的1/10,但核心能力都具备。”
Q: 流程编排引擎是怎么设计的?
“我参考了CrewAI的Flow设计,使用装饰器模式定义流程。支持
@start标记起点,@listen顺序执行,@router条件分支,@parallel并行执行。底层是一个DAG执行器,自动处理依赖关系。”
Q: 推荐系统有哪些创新点?
“我们采用多路召回+融合排序的架构。针对面试场景,设计了两种推荐:
- RAG推荐:面试后基于评估结果做向量检索,LLM生成推荐理由
- 混合推荐:日常学习资源推荐,融合规则、内容、协同三种策略”
如果你是小白,建议按以下顺序学习:
agents/base.pyagents/flow.pyrecommenders/rag_recommender.pycore/milvus_client.pywebsockets/interview_crew.py下一篇:Agent系统设计详解