个人开源项目 | LangGraph + Milvus RAG + 语音面试
面向求职训练与校园招聘,支持多轮追问、多维度评分、语音交互
关键词:
- 🤖 多Agent协作:InterviewAgent(面试官)+ SqlAgent(数据助手)双Agent架构
- 🔍 RAG题库检索:Milvus 双路混合检索(BM25稀疏 + COSINE密集),RRF融合排序
- 🗣️ 语音面试:faster-whisper STT + edge-tts TTS,支持实时语音交互
- 📊 多维度评分:专业能力 / 项目经验 / 行为表达 三维度自动评分
- 🔧 SQL Agent:自然语言查询招聘数据,自动生成SQL执行
- 💾 跨会话记忆:上下文压缩 + 会话恢复,面试进度不丢失
- 🌐 双端架构:候选人端(面试大厅)+ 管理后台(企业/岗位/题库管理)
| 组件 | 技术 | 用途 |
|---|---|---|
| Web框架 | FastAPI + Uvicorn | 异步API + WebSocket |
| Agent框架 | LangGraph (ReAct) | 多Agent编排与工具调用 |
| LLM | GLM-4 / DeepSeek | 面试对话、评分生成 |
| 向量化 | 智谱 text-embedding-v4 | 题库检索 |
| 向量库 | Milvus | 双路混合检索(BM25+COSINE) |
| 数据库 | MySQL 8.0 | 业务数据持久化 |
| STT | faster-whisper (base) | 本地语音识别 |
| TTS | edge-tts | Microsoft 免费语音合成 |
| 前端 | Vue 3 + Vite + Element Plus | 面试大厅界面 |
- Python 3.11+
- Docker + Docker Compose(用于 MySQL/Milvus)
- GLM-4 API Key 或 DeepSeek API Key
# 1. 克隆项目
git clone https://github.com/CW5201/TalentAgent.git
cd TalentAgent
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填入 API Key 和数据库配置
# 3. 启动依赖服务
docker-compose up -d
# 4. 安装依赖并启动
pip install -r requirements.txt
python -m server.main- 面试大厅: http://localhost:8080/webui/
- 管理后台: http://localhost:8080/admin/
- API文档: http://localhost:8080/docs
上传简历 → 选择岗位 → 开始面试
│
├─【开场】欢迎语 + 流程介绍
├─【环节1】自我介绍(1题)
├─【环节2】项目深挖(20%,结合简历提问)
├─【环节3】专业能力(65%,Milvus题库检索出题)
├─【环节4】行为面试(15%,软技能考察)
├─【环节5】反问环节(1题)
└─【评分】多维度评分报告生成
TalentAgent/
├── server/ # 后端核心
│ ├── agent/ # Agent 实现
│ │ ├── base_agent.py # 基类:ReAct模式、消息管理、流式输出
│ │ ├── interview_agent.py # 面试Agent
│ │ └── sql_agent.py # SQL Agent
│ ├── api/ # API 层(FastAPI路由)
│ ├── dao/ # 数据访问层(MySQL + Milvus)
│ ├── service/ # 业务逻辑层
│ ├── utils/ # 工具模块(语音管道、LLM封装)
│ └── main.py # FastAPI应用入口
│
├── webui/ # 前端(Vue 3 + Vite)
├── scripts/ # 数据同步脚本
├── eval/ # 评测模块
└── src/ # 设计文档(架构、UML、测试用例)
class BaseAgent:
"""通用Agent基类,封装ReAct模式"""
def _get_tools(self) -> list: ... # 子类实现工具列表
def _build_system_prompt_content(self) -> str: ... # 子类实现Prompt
async def chat_stream(self, msg: str): ... # 流式对话# BM25稀疏 + COSINE密集 → RRF融合排序
result = milvus.hybrid_search(
reqs=[dense_req, sparse_req],
ranker=RRFRanker(k=100),
)音频流 → WebSocket → Whisper STT → Agent处理 → TTS → 音频流返回
- Python 3.11+
- Node.js 18+
- MySQL 8.0
- Milvus 2.x
pip install -r requirements.txt
uvicorn server.main:app --host 0.0.0.0 --port 8080cd webui/webui
npm install
npm run dev欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/xxx) - 提交更改
- 打开 Pull Request
Q: 面试时提示"该岗位尚未配置AI面试官"怎么办? A: 请联系管理员在后台配置Agent参数。
Q: 语音面试没有声音怎么办? A: 请检查浏览器麦克风权限设置,确保允许使用麦克风。
MIT License
如果对你有帮助,请给个 ⭐ Star!