Intervista++(MCP面试助理)
自适应、情境感知的模拟面试平台,利用Gemini(谷歌)、LangGraph ReAct Agent、ElevenLabs语音和MongoDB。
特性
- 聚合候选人背景:GitHub、简历(PDF或Notion)、招聘信息抓取、精心策划的面试信息。
- 动态LangGraph ReAct代理(Gemini)生成和调整技术+行为问题。
- 语音交互:ElevenLabs TTS(人物角色)+Scribe STT。
- 反馈引擎评分技术正确,STAR结构清晰。
- 通过MongoDB Atlas实现持久化;可选的雪花摄入存根。
- FastAPI服务器为外部工具公开MCP风格的端点。
- 准备好进行Vultr部署(下一步添加容器化+infraIaC)。
架构概述
client ⇄ FastAPI (server.py)
├─ context_aggregator.py (GitHub, resume, job, intel)
├─ ai_engine.py (LangGraph ReAct + Gemini)
├─ voice_interface.py (ElevenLabs)
├─ feedback.py (scoring)
└─ database.py (MongoDB / Snowflake stub)端点
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /start_session | 构建上下文并返回初始问题 |
| POST | /subit_audio | 转录、分析答案、反馈、下一个问题 |
| GET | /GET_feedback/{session_id} | 检索所有反馈块 |
| GET | /GET_analytics/{candidate_id} | 候选人的基本分析 |
| POST | /start_coding_challenge | (Stub)提供编码挑战沙盒 |
| GET | /health | 健康探测 |
环境变量
GOOGLE_API_KEY=your_google_genai_key
XI_API_KEY=your_elevenlabs_key
XI_VOICE_ID=Rachel # or voice ID slug
MONGODB_URI=mongodb+srv://...
MONGODB_DB=intervista
SNOWFLAKE_ACCOUNT=... (optional)
SNOWFLAKE_USER=...
SNOWFLAKE_PASSWORD=...安装并运行
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn server:app --host 0.0.0.0 --port 8000 --reload示例流程
- 带有候选人+角色元数据的POST/start_session。
- 接收会话id+初始问题。
- 用户记录答案→ 客户端将base64音频发送到/submit_audio。
- 服务器返回成绩单、结构化代理分析、反馈、跟进问题。
- 重复直到会话结束;获取分析和反馈。
LangGraph重新动作注释
- 工具:get_context,estimate_thazard。
- 代理提示强制JSON输出;回退启发式解析列表/对象。
- 使用其他工具(例如“search_code”、“system_design_reference”)进行扩展,以获得更丰富的面试内容。
缩放/下一步
- 添加Redis或Postgres进行会话状态缓存。
- 实现生产级简历解析器(例如,文本分类、通过嵌入进行技能提取)。
- 引入沙盒容器编排(Vultr上的Docker+Firecracker微虚拟机)。
- 添加结构化日志记录(OpenTetry)和跟踪。
- 执行Snowflake批处理ETL作业(APScheduler每晚运行)。
- 添加身份验证和速率限制。
- 扩展分析(每个答案的延迟、技能差距热图)。
MCP集成
此FastAPI应用程序现在在以下位置公开JSON-RPC WebSocket端点 /mcp 实现最小MCP适配器。
WebSocket端点
ws://:8000/mcp
支持的方法
tools/list→ 返回工具目录tools/call→ 按名称和参数调用工具
工具
| 名称 | 目的 |
|---|---|
| start_session | 构建上下文并返回会话_id+初始问题 |
| submit_audio | 转录音频、分析答案、返回反馈 |
| get_feedback | 列出会话的反馈块 |
| get_analytics | 候选人分析摘要 |
| speak | 文本转语音(base64音频) |
JSON-RPC请求示例
列出工具:
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }开始会话:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "start_session",
"arguments": {
"candidate_id": "cand_123",
"role": "Backend Engineer",
"company": "Acme",
"github_user": "octocat",
"years_experience": 4
}
}
}提交音频:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "submit_audio",
"arguments": {
"session_id": "
", "audio_base64": ""
}
}
}客户端草图(Python)
import asyncio, websockets, json, base64
async def main():
async with websockets.connect("ws://localhost:8000/mcp") as ws:
await ws.send(json.dumps({"jsonrpc":"2.0","id":1,"method":"tools/list"}))
print(await ws.recv())
start = {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"start_session","arguments":{"candidate_id":"c1","role":"ML Engineer","company":"Acme","years_experience":3}}}
await ws.send(json.dumps(start))
print(await ws.recv())
asyncio.run(main())此适配器可以扩展以支持流令牌、取消和更丰富的MCP规范功能。
免责声明
该框架包括启发式解析和简化评分以供演示;生产使用应加强安全性、验证和错误处理。
许可证
MIT(根据需要调整)
