基于字节三件套(Hertz + Eino)构建的 AI 模拟面试系统。支持语音/文本双模态交互,多阶段面试流程由 Agent 或 Workflow 驱动。
| 组件 | 版本 | 用途 | 模式 |
|---|---|---|---|
| Go | 1.25+ | 后端运行时 | 必须 |
| Node.js | 18+ | 前端构建 | 必须 |
| PostgreSQL | 16+ | 业务数据持久化 | 必须 |
| Redis | 7+ | 会话状态、缓存 | 必须 |
| MinIO / S3 | — | 简历、音频文件存储 | 必须 |
| RabbitMQ | 3.13+ | 面试完成事件、报告生成 | 必须 |
| Milvus | 2.4+ | 题库向量检索 | RAG 模式 |
| Elasticsearch | 8.13+ | 题库关键词/标签检索 | RAG 模式 |
| Ollama | 可选 | 本地 LLM / Embedding | 可选 |
OpenAI · Qwen(千问)· Doubao(豆包)· Claude · DeepSeek · Gemini
Qwen 同时提供 ASR(语音识别)和 TTS(语音合成)能力,推荐优先配置。
| 库 | 用途 |
|---|---|
cloudwego/hertz |
HTTP / WebSocket 框架 |
cloudwego/eino |
Agent / Workflow 编排(ADK) |
gorm.io/gorm |
ORM |
redis/go-redis/v9 |
Redis 客户端 |
milvus-io/milvus-sdk-go/v2 |
向量数据库客户端 |
rabbitmq/amqp091-go |
消息队列 |
golang-jwt/jwt/v5 |
JWT 认证 |
React 19 · Vite · TypeScript · Zustand · Monaco Editor · Recharts
cp .env.example .env
# 编辑 .env,至少填写一个 LLM 提供商的 API Key系统提供两种启动模式,按机器配置选择:
出题由 LLM 直接生成,不依赖向量检索。只启动 Postgres、Redis、MinIO、RabbitMQ。
bash start-wiki.sh启用 Milvus + Elasticsearch 向量/关键词检索题库。首次启动需拉取较大镜像。
bash start-rag.sh使用 RAG 模式前需先采集 wiki 知识库:
bash collect-wiki.sh --limit 5 # 先小批量验证 bash collect-wiki.sh # 全量导入
docker compose --profile ollama up -d ollamacd frontend && npm install && npm run dev开发服务器运行在 http://localhost:5173。
用户 (语音/文本)
│
▼
┌──────────────────────────────────────────────┐
│ Hertz Gateway (:8080) │
│ JWT 认证 → 限流 → WebSocket / HTTP 路由 │
└──────────────────┬───────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Interview Service │
│ SessionManager 管理面试状态 (Redis) │
└──────────────────┬───────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Eino Interview Graph │
│ │
│ 模式 ① Workflow 驱动(WORKFLOW_ENABLED=1) │
│ StageRouter → 阶段Agent → StageManager │
│ → TransitionNode(状态机裁决) │
│ │
│ 模式 ② Agent 驱动 │
│ Supervisor 统一调度子 Agent │
└──────┬───────────┬───────────┬───────────────┘
│ │ │
▼ ▼ ▼
┌────────┐ ┌─────────┐ ┌────────┐
│ASR/TTS │ │RAG 检索 │ │ 题库 │
│ (Qwen) │ │Milvus+ES│ │(PgSQL) │
└────────┘ └─────────┘ └────────┘
面试阶段流转: intro → questioning → algorithm → closing → end
- 用户通过 WebSocket 发送语音或文本
- SessionManager 从 Redis 加载面试状态(阶段、历史、上下文)
- Interview Graph 按当前阶段路由到对应 Agent
- Agent 调用工具:ASR 转写、RAG 检索题库、TTS 合成语音
- StageManager 评估是否切换阶段,状态机执行转换
- 面试结束后 MQ 触发 ReportWorker 生成评估报告
- Email:kele3325@gmail.com
- 微信群:扫码加入交流群
