基于 LangChain/LangGraph + LlamaIndex 构建的工程级多 Agent 协作系统,支持上传简历与岗位 JD 后全自动完成面试准备、模拟面试、实时评估与复习规划;系统涵盖多 Agent DAG 编排、RAG 多路召回、MCP 协 议集成、双引擎记忆系统与动态难度调节,以 Python Web 服务部署于 Linux 服务器,支持摄像头、语音输入与文字 多模态交互。
概要
上传简历 + 输入岗位 JD → AI 自动做一场完整的模拟面试 → 打分 → 出报告 → 制定复习计划 InterviewAgent 是一个**的 AI Agent 应用,集成了当前 AI 工程领域最主流的技术范式: - 🤖 :8 个专职 Agent,LangGraph 编排 - 🔍 :向量 + BM25 双路,不是简单调向量库 - 🧠 :Redis 短期 + MySQL 长期,跨会话记住你的薄弱点 - 🎚️ :三级难度状态机,模拟真实面试官策略 - 🧩 :有状态多轮交互能力模块,可插拔扩展 - 🔌 :标准协议接入外部工具 - 🎬 :Web 界面 + 摄像头 + STT + TTS 语音交互 通过 框架编排 DAG 协作,每个 Agent 有独立的 Prompt 策略和工具集。 - :语义向量检索 + 关键词倒排检索,互补覆盖 - :Reciprocal Rank Fusion 算法融合两路结果 - :大模型对候选结果重新排序,保证最终质量 - 管理整个检索管线 📄 核心文件:rag/retrievers/hybrid_retriever.py - :短期记忆,管理当前对话上下文,O(1) 读写 - :长期记忆,持久化用户画像与历史数据,支持复杂查询 - :统一数据访问层 LangGraph StateGraph 编排,节点间通过共享 State 传递数据
README
📖 目录
🌟 项目简介
InterviewAgent 是一个完整工程级的 AI Agent 应用,集成了当前 AI 工程领域最主流的技术范式:
- 🤖 多 Agent DAG 协作:8 个专职 Agent,LangGraph 编排
- 🔍 RAG 多路召回 + LLM Rerank:向量 + BM25 双路,不是简单调向量库
- 🧠 Agent 记忆系统:Redis 短期 + MySQL 长期,跨会话记住你的薄弱点
- 🎚️ 动态难度调节:三级难度状态机,模拟真实面试官策略
- 🧩 Skill 技能系统:有状态多轮交互能力模块,可插拔扩展
- 🔌 MCP 协议集成:标准协议接入外部工具
- 🎬 完整工程交付:Web 界面 + 摄像头 + STT + TTS 语音交互
✨ 八大核心技术亮点
🤖 1 · 多 Agent DAG 协作编排
不是一个 Prompt 走天下,而是 8 个 Agent 各司其职:
| Agent | 职责 |
|---|---|
IntentRouter |
意图识别与路由分发 |
JDAnalyzer |
解析 JD,提取技术栈与职级要求 |
ResumeAnalyzer |
简历匹配分析,识别候选人优劣势 |
QuestionPlanner |
基于 JD + 简历规划题目分布 |
Interviewer |
主持多轮面试,动态追问深挖 |
Evaluator |
逐题打分,生成评估报告 |
StudyPlanner |
制定个性化复习计划 |
ChatAgent |
处理闲聊与引导性对话 |
通过 LangChain + LangGraph 框架编排 DAG 协作,每个 Agent 有独立的 Prompt 策略和工具集。
📄 核心文件:
orchestration/graph.py
🔍 2 · RAG 多路召回 + LLM Rerank
用户问题
│
├─► 向量检索(Weaviate)─────┐
│ ├─► RRF 融合去重 ─► LLM 精排 ─► Top-K 结果
└─► BM25 关键词检索 ─────────┘
- 双路并行:语义向量检索 + 关键词倒排检索,互补覆盖
- RRF 融合:Reciprocal Rank Fusion 算法融合两路结果
- LLM 精排:大模型对候选结果重新排序,保证最终质量
- LlamaIndex 管理整个检索管线
📄 核心文件:
rag/retrievers/hybrid_retriever.py
📊 3 · RAG 质量评估体系
做 RAG 不做评估等于闭着眼开车。项目实现了三维评估:
| 维度 | 说明 |
|---|---|
| Faithfulness(忠实性) | 生成内容是否忠于检索到的上下文 |
| Relevance(相关性) | 检索结果与问题的相关程度 |
| Completeness(完整性) | 答案是否覆盖问题的关键要点 |
配套 TopK 调优实验脚本,用数据量化 RAG 管线表现,持续优化。
📄 核心文件:
rag/evaluator/rag_evaluator.py
🧠 4 · Agent 记忆系统
当前会话 ──► Redis 短期记忆 ──► 上下文滑动窗口,实时管理对话轮次
│
└──► MySQL 长期记忆 ──► 用户画像、薄弱点标签、历史面试记录
↑
下次面试时自动加载,针对薄弱点重点考察
- Redis:短期记忆,管理当前对话上下文,O(1) 读写
- MySQL:长期记忆,持久化用户画像与历史数据,支持复杂查询
- SQLAlchemy ORM:统一数据访问层
📄 核心文件:
memory/memory_manager.py
🎚️ 5 · 动态难度调节
基于**有限状态机(FSM)**实现三级难度自动调节:
连续答对 N 题 连续答对 N 题
[Easy] ──────────────► [Medium] ──────────────► [Hard]
◄────────────── ◄──────────────
连续答错 N 题 连续答错 N 题
模拟真实面试官的提问策略,让难度与候选人水平动态匹配。
📄 核心文件:
orchestration/difficulty_fsm.py
🧩 6 · Skill 技能系统
区别于无状态的 Tool 调用,Skill 是有状态的多轮交互能力模块:
| Skill | 功能 |
|---|---|
QuizSkill |
快速知识点测验,逐题追踪答题状态 |
ExplainSkill |
知识点深度讲解,支持追问 |
ProjectHighlightSkill |
挖掘候选人项目亮点,引导表述 STAR 法则 |
TechCompareSkill |
技术方案对比分析,考察深度理解 |
所有 Skill 通过 Skill Registry 统一注册管理,支持插拔扩展。
📄 核心文件:
skills/skill_registry.py
🔌 7 · MCP 协议集成
通过 Model Context Protocol(MCP) 标准协议接入外部工具:
Agent ──► MCP Client ──► MCP Server(Stdio / SSE)
│
┌─────────┴─────────┐
│ │
GitHub 工具 Web 抓取工具
(分析开源项目) (获取技术文档)
掌握下一代 AI 工具集成标准,工具即插即用。
📄 核心文件:
mcp/mcp_client.py
🎬 8 · 完整工程化交付
生产级 Web 应用交付,支持完整的多模态交互:
浏览器
├─ 摄像头视频流 ──► WebRTC
├─ 麦克风音频 ──► faster-whisper ──► 文字(STT)
└─ LLM 输出 ──► CosyVoice ──► 语音播报(TTS)
📄 核心文件:
audio/stt.py·audio/tts.py
🏗️ 三层架构
┌──────────────────────────────────────────────────────────────┐
│ 用户交互层 │
│ 💻 CLI(typer) 🔌 WebSocket 🌐 REST API 🖥️ Web 前端 │
│ 摄像头输入 · 语音输入 · 文本输入 │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ Agent 编排层 │
│ │
│ IntentRouter → JDAnalyzer → ResumeAnalyzer │
│ → QuestionPlanner → Interviewer │
│ → Evaluator → StudyPlanner → ChatAgent │
│ │
│ ┌──────────────┬──────────────┬─────────────────┐ │
│ │ Skill 技能系统 │ Memory 记忆系统 │ Difficulty FSM │ │
│ │ 4 个有状态模块 │ Redis + MySQL │ 三级难度状态机 │ │
│ └──────────────┴──────────────┴─────────────────┘ │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ 基础能力层 │
│ │
│ 🤖 通义千问 LLM 🔢 text-embedding-v3 │
│ 🗄️ Weaviate 向量库 🔤 BM25 关键词检索 │
│ 🔧 MCP 工具接入 💾 Redis + MySQL 双引擎存储 │
└──────────────────────────────────────────────────────────────┘
🔄 面试流程 DAG
LangGraph StateGraph 编排,节点间通过共享 State 传递数据
START
│
▼
[route] ── 意图路由 ──────────────────────────────────────────┐
│ │
├─ input_jd ──────► [jd_analyze] ──────────────────► END │
├─ chat ───────────► [chat] ────────────────────────► END │
├─ use_skill ──────► [skill_dispatch] ──────────────► END │
├─ answer_question ► [evaluate_one] ──┐ │
│ │ │
└─ start_interview │ │
│ │ │
▼ │ │
[load_memory] │ │
│ │ │
▼ ▼ │
[rag_retrieve] ──────────────► [ask] ◄───────────────────┘
│ │ ▲
▼ │ │ 循环:下一题
[plan_questions] │ │
▼ │
[generate_report]
│
▼
[study_plan]
│
▼
[save_memory]
│
▼
END
完整面试六步流程
1️⃣ JD 解析 2️⃣ 简历匹配 3️⃣ RAG 检索
提取技术栈/职级 → 分析优劣势 → 题库双路召回
│
▼
4️⃣ 智能出题 5️⃣ 多轮面试 6️⃣ 评估报告
规划题目分布 → 实时追问深挖 → 打分 + 复习计划
📂 项目结构
interview-agent/
│
├── agents/ # 🤖 核心 Agent 层(面试智能决策系统)
│ ├── __init__.py
│ ├── base_agent.py # Agent 基类,定义统一接口与LLM调用能力
│ ├── chat_agent.py # 闲聊/降级对话 Agent
│ ├── evaluator.py ⭐ # 答案评分与面试表现评估 Agent
│ ├── intent_router.py ⭐ # 用户意图识别与路由分发
│ ├── interviewer.py ⭐ # 面试主控 Agent(出题+追问)
│ ├── jd_analyzer.py ⭐ # JD解析(技术栈/职级提取)
│ ├── question_planner.py ⭐ # 面试题生成与分布规划
│ ├── resume_analyzer.py ⭐ # 简历解析与能力画像构建
│ └── study_planner.py ⭐ # 面试后学习计划生成
│
├── api/ # 🌐 Web API 服务层(FastAPI)
│ ├── __init__.py
│ ├── main.py ⭐ # FastAPI 入口与应用初始化
│ ├── middleware.py # 请求中间件(日志/鉴权等)
│ ├── schemas.py # API 数据结构(Pydantic)
│ └── routers/
│ ├── __init__.py
│ ├── health.py # 健康检查接口
│ ├── interview.py ⭐ # 面试流程核心 API
│ ├── upload.py ⭐ # 简历/JD 上传接口
│ └── websocket.py ⭐ # 实时面试 WebSocket 通信
│
├── audio/ # 🎧 语音系统(STT/TTS)
│ ├── __init__.py
│ ├── audio_manager.py # 音频流统一管理器
│ ├── stt.py ⭐ # 语音转文字(Whisper)
│ └── tts.py ⭐ # 文字转语音(语音播报)
│
├── cli/ # 💻 命令行工具
│ ├── __init__.py
│ └── main.py ⭐ # CLI 启动入口(本地面试模式)
│
├── config/ # ⚙️ 配置中心
│ ├── __init__.py
│ ├── logging.py # 日志配置
│ └── settings.py ⭐ # 全局配置(LLM/DB/RAG等)
│
├── frontend/ # 🌐 前端界面
│ ├── index.html ⭐ # 面试 Web UI 页面
│ └── static/
│ ├── css/
│ │ └── style.css # 页面样式
│ └── js/
│ └── main.js ⭐ # 前端交互逻辑(WebSocket等)
│
├── mcp/ # 🔌 MCP 工具协议层
│ ├── __init__.py
│ ├── mcp_client.py ⭐ # MCP 客户端(工具调用入口)
│ └── tools/
│ ├── __init__.py
│ ├── github_tool.py ⭐ # GitHub API 工具(项目分析)
│ └── web_scraper.py # 网页抓取工具
│
├── memory/ # 🧠 记忆系统(短期+长期)
│ ├── __init__.py
│ ├── long_term.py ⭐ # 长期记忆(MySQL用户画像)
│ ├── memory_manager.py ⭐ # 记忆统一管理器
│ ├── models.py # 数据库ORM模型
│ └── short_term.py ⭐ # 短期记忆(Redis上下文)
│
├── orchestration/ # 🧩 DAG编排与状态机
│ ├── __init__.py
│ ├── difficulty_fsm.py ⭐ # 面试难度状态机(Easy/Medium/Hard)
│ ├── edges.py # DAG边定义(流程流转规则)
│ ├── graph.py ⭐ # LangGraph 主流程图
│ ├── nodes.py ⭐ # DAG节点实现(各阶段执行逻辑)
│ └── state.py ⭐ # 全局状态结构定义
│
├── rag/ # 🔍 RAG 检索增强系统
│ ├── __init__.py
│ ├── indexer.py ⭐ # 文档索引构建(向量+BM25)
│ ├── query_engine.py ⭐ # RAG查询入口
│ ├── reranker.py ⭐ # LLM重排序模块
│ ├── evaluator/
│ │ ├── __init__.py
│ │ ├── metrics.py # 评估指标定义
│ │ ├── rag_evaluator.py ⭐ # RAG效果评估系统
│ │ └── topk_experiment.py # TopK参数实验
│ └── retrievers/
│ ├── __init__.py
│ ├── bm25_retriever.py ⭐ # 关键词检索
│ ├── hybrid_retriever.py ⭐ # 混合检索(BM25+向量)
│ └── vector_retriever.py ⭐ # 向量语义检索
│
├── scripts/ # 🛠️ 工具脚本
│ ├── build_index.py # 构建RAG索引
│ ├── check_env.py ⭐ # 环境检测脚本
│ ├── init_db.py # 数据库初始化
│ └── start_services.sh # 服务启动脚本
│
├── skills/ # 🧩 Skill 插件系统
│ ├── __init__.py
│ ├── base_skill.py # Skill基类
│ ├── compare_skill.py # 技术对比Skill
│ ├── project_skill.py # 项目分析Skill
│ ├── quiz_skill.py ⭐ # 问答测验Skill(有状态)
│ ├── skill_registry.py # Skill注册中心
│ └── teach_skill.py # 教学模式Skill
│
├── tests/ # 🧪 测试模块
│ ├── test_agents.py # Agent测试
│ ├── test_api.py # API测试
│ ├── test_memory.py # Memory测试
│ └── test_rag.py # RAG测试
│
├── .env.example # 环境变量模板
├── .gitignore # Git忽略配置
├── alembic.ini # 数据库迁移配置
├── pyproject.toml # Python项目配置
├── README.md ⭐ # 项目说明文档
├── requirements.txt # 生产依赖
└── requirements-dev.txt # 开发依赖
⚙️ 环境准备
前置依赖
| 依赖 | 版本要求 | 用途 | 验证命令 |
|---|---|---|---|
| Python | 3.10+(推荐 3.11/3.12) | 运行环境 | python --version |
| MySQL | 8.0+ | 用户画像、面试记录、长期记忆 | mysql --version |
| Redis | 6.0+ | 短期记忆(会话上下文) | redis-cli ping |
| Weaviate | 最新版 | 向量数据库,RAG 向量索引 | curl http://localhost:8080/v1/.well-known/ready |
| DashScope API Key | — | 通义千问 LLM + Embedding | — |
| GitHub Token | 可选 | MCP GitHub 工具 | — |
| FFmpeg | 可选 | 音视频格式转换(STT/TTS) | ffmpeg -version |
安装各依赖
配置文件 .env
cp .env.example .env
vim .env
# ── 必须填写 ──────────────────────────────────────────
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxx # 通义千问 API Key
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=interview_agent
MYSQL_PASSWORD=your_password_here # MySQL 密码
MYSQL_DATABASE=interview_agent
REDIS_HOST=localhost
REDIS_PORT=6379
WEAVIATE_HOST=localhost
WEAVIATE_PORT=8080
# ── 可选 ──────────────────────────────────────────────
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxx # GitHub Token(MCP 用)
知识库数据准备
将面试题库和技术文档放置在 rag/knowledge_base/ 目录下:
rag/knowledge_base/
├── questions/
│ ├── python.md # Python 面试题库
│ ├── system_design.md # 系统设计题库
│ ├── algorithm.md # 算法题库
│ └── behavior.md # 行为面试题库
└── knowledge/
├── python_deep.md # Python 深度知识
└── distributed.md # 分布式系统
💡 支持
.md/.txt/.json/tech_stack、difficulty等 meta 数据
🚀 快速启动
Step 1 · 克隆项目
git clone
cd interview-agent
Step 2 · 创建虚拟环境并安装依赖
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Step 3 · 配置环境变量
cp .env.example .env
vim .env # 填入 DASHSCOPE_API_KEY、MYSQL_PASSWORD 等
Step 4 · 启动依赖服务
# 终端 1:确保 MySQL 运行
sudo systemctl start mysql
# 终端 2:确保 Redis 运行
sudo systemctl start redis
# 终端 3:启动 Weaviate
./weaviate --host 0.0.0.0 --port 8080 --scheme http
Step 5 · 环境检查
python scripts/check_env.py
预期输出:
✅ Python 版本 3.11.x
✅ 必要依赖 全部已安装
✅ .env 文件 已配置
✅ MySQL 连接 localhost:3306
✅ Redis 连接 localhost:6379 (PONG)
✅ Weaviate 连接 localhost:8080
✅ DashScope API 可用
Step 6 · 初始化数据库 & 构建 RAG 索引
# 初始化 MySQL 数据表
python scripts/init_db.py
# 构建向量索引(确保知识库文件已放置)
python scripts/build_index.py
Step 7 · 启动应用
CLI 模式(适合快速体验)
python -m cli.main interview --jd "岗位职责:
1、基于大模型技术 (如Qwen、DeepSeek、GPT、Kimi等),主导Agent、 RAG (RetrievalAugmented Generation) 及知识库系统的架构设计与开发,构建包含Planning、Memory、Tool Use、Reflection等能力的Agent系统,推动Al产品在复杂业务场景中的高效落地
2、负责大模型Agent的全流程工作,包括但不限于数据处理、模型训练/微调(SFTLoRA等)、效果评估(oftine/online evaI)、优化和部署,形成数据闭环持续迭代能力
3、集成和部署A模型服务APl,设计高并发、低延迟的推理服务架构(如基于vLLM等推理引擎),确保系统的高性能、高可用性和可扩展性
4、持续关注LLM及Agent方向的最新进展(如Multi-Agent、Tool Calling、复杂工作流编排等),结合业务场景提出优化方案并推动落地" --resume ./resume.pdf --total 10
–
Web 模式(完整功能,含语音 + 摄像头)
python cli/main.py serve --host 0.0.0.0 --port 8000
# 本机访问:http://localhost:8000
# 远程访问:http://:8000
# 如需远程访问,开放防火墙:sudo ufw allow 8000
一键启动(自动拉起所有服务)
chmod +x scripts/start_services.sh
./scripts/start_services.sh
📖 API 文档
启动 Web 模式后,访问 FastAPI 自动生成的 Swagger 文档:
http://:8000/docs
主要接口
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/interview/start |
启动一场面试 |
POST |
/api/interview/chat |
发送消息,获取面试官回复 |
GET |
/api/interview/report/{session_id} |
获取面试评估报告 |
WS |
/api/ws/chat |
WebSocket 实时双向通信 |
示例:启动面试
curl -X POST http://localhost:8000/api/interview/start \
-H "Content-Type: application/json" \
-d '{
"jd": "招聘 Python 后端工程师,5 年经验,熟悉 FastAPI/MySQL/Redis",
"resume": "...(简历文本)..."
}'
🛠️ 核心技术栈
| 分类 | 技术 | 用途 |
|---|---|---|
| Agent 框架 | LangGraph · LangChain | Multi-Agent DAG 编排 |
| RAG 框架 | LlamaIndex | 检索管线管理 |
| LLM / Embedding | 通义千问(DashScope) | qwen-max 推理 + text-embedding-v3 |
| 向量数据库 | Weaviate | 语义检索存储 |
| 关键词检索 | BM25 | 倒排索引关键词召回 |
| 短期记忆 | Redis | 会话上下文缓存 |
| 长期记忆 | MySQL · SQLAlchemy | 用户画像 & 历史持久化 |
| Web 框架 | FastAPI | REST API + WebSocket |
| 语音识别 | faster-whisper | STT 语音转文字 |
| 语音合成 | CosyVoice | TTS 文字转语音 |
| 工具协议 | MCP | 外部工具标准接入 |
| RAG 评估 | RAGAS | 三维质量评估 |
| CLI | typer | 命令行界面 |
Star History
代码部分由AI生成。
欢迎贡献代码,提出问题和建议。如果你发现了bug或者有新的功能想法,请提交一个Issue让我知道。你也可以通过Fork项目并提交Pull Request来贡献代码。 如果你喜欢这个项目,欢迎给它一个星星⭐,这是对我最大的支持!
如果你觉得我的开源项目对你有帮助,可以赞助我一杯咖啡嘛,十分感谢!!!
📝 License
MIT © 2026 InterviewAgent
インストール
This server does not publish a one-line install command.
Open the repository installation guide