catalog/repos/aia-11-hn-mib--mib-mockinterviewaibot.md

581 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI模拟面试平台
`面试准备` `AI面试` `简历分析` `FastAPI` `Python` `向量数据库` `LLM`
# Elios AI 面试服务
**一个AI驱动的模拟面试平台通过个性化简历分析、自适应问题生成和实时答案评估帮助候选人备战技术面试。**
[![Python](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
---
## 📖 概述
Elios AI 面试服务利用**大型语言模型LLM**和**向量数据库**,提供智能化、个性化的模拟面试体验。该平台分析候选人简历,生成相关问题,实时评估答案,并提供全面反馈,帮助候选人提升面试表现。
### 核心功能
- **🎯 简历分析**:从简历中提取技能、经验和教育背景
- **🤖 自适应问题**:利用基于向量的范例检索生成个性化面试问题
- **📊 实时评估**:多维度答案评估与即时反馈
- **💬 语音与文字支持**:通过文字聊天或语音进行面试(语音功能规划中)
- **📈 综合报告**:详细的表现分析与可执行的改进建议
- **🔄 可替换AI提供商**:轻松集成 OpenAI、Claude 或 Llama
### 技术栈
- **后端**Python 3.11+、FastAPI、Pydantic
- **数据库**PostgreSQLNeon、SQLAlchemy 2.0(异步)
- **AI/ML**OpenAI GPT-4、Pinecone 向量数据库
- **架构**:整洁架构(六边形/端口与适配器)
- **测试**pytest、pytest-asyncio
- **代码质量**ruff、black、mypy
### 主要流程
#### 1. 准备阶段(扫描简历并生成主题)
```mermaid
sequenceDiagram
actor Candidate as 候选人
participant ChatUI as 聊天界面 / 前端
participant CVAnalyzer as 📄 简历分析组件
participant VectorDB as 🧠 向量数据库
participant AIEngine as 🤖 AI面试引擎
Candidate->>ChatUI: 上传简历文件
ChatUI->>CVAnalyzer: 发送简历进行分析
CVAnalyzer->>VectorDB: 生成并存储简历嵌入向量
VectorDB-->>CVAnalyzer: 确认嵌入向量已存储
CVAnalyzer-->>ChatUI: 返回提取的技能和建议主题
ChatUI-->>Candidate: 显示准备摘要
ChatUI->>AIEngine: 通知就绪状态(技能、主题)
AIEngine-->>ChatUI: 已确认
```
#### 2. 面试阶段(实时问答)
```mermaid
sequenceDiagram
actor Candidate as 候选人
participant ChatUI as 聊天界面 / 前端
participant AIEngine as 🤖 AI面试引擎
participant VectorDB as 🧠 向量数据库
participant QBank as 📚 题库服务
participant STT as 🎤 语音转文字
participant TTS as 🗣️ 文字转语音
participant Analytics as 📊 分析与反馈服务
%% --- 开始面试 ---
Candidate->>ChatUI: 开始面试
ChatUI->>AIEngine: 请求第一个问题
AIEngine->>VectorDB: 查询相似问题嵌入向量(基于简历主题)
VectorDB-->>AIEngine: 返回候选问题
AIEngine->>QBank: 获取选定问题
QBank-->>AIEngine: 返回问题详情
AIEngine-->>ChatUI: 发送问题文本
ChatUI-->>TTS: 将问题文本转为语音
TTS-->>Candidate: 播放AI语音问题
%% --- 候选人作答 ---
Candidate->>STT: 口头作答
STT-->>AIEngine: 发送转录文本
AIEngine->>VectorDB: 比较答案嵌入向量并评估质量
VectorDB-->>AIEngine: 返回相似度和语义评分
AIEngine->>Analytics: 发送答案评估(评分、情感、推理)
Analytics-->>AIEngine: 已确认
alt 还有更多问题
AIEngine->>VectorDB: 检索下一个合适的问题
VectorDB-->>AIEngine: 返回下一个候选问题
AIEngine-->>ChatUI: 发送下一个问题
ChatUI-->>TTS: 转为语音并播放
TTS-->>Candidate: 播放下一个问题
else 面试结束
AIEngine-->>ChatUI: 通知面试结束
end
```
#### 3. 最终阶段(评估与报告)
```mermaid
sequenceDiagram
actor Candidate as 候选人
participant ChatUI as 聊天界面 / 前端
participant AIEngine as 🤖 AI面试引擎
participant Analytics as 📊 分析与反馈服务
AIEngine->>Analytics: 发送最终面试摘要(评分、指标、转录)
Analytics->>Analytics: 汇总结果并生成报告
Analytics-->>AIEngine: 已确认
AIEngine-->>ChatUI: 通知面试完成
ChatUI->>Analytics: 请求最终反馈报告
Analytics-->>ChatUI: 返回详细反馈和改进建议
ChatUI-->>Candidate: 显示表现摘要和洞察
```
---
## 🏗️ 架构
本项目遵循**整洁架构**(六边形/端口与适配器):领域层(纯业务逻辑)→ 应用层(用例)→ 适配器层(外部服务)→ 基础设施层(配置、依赖注入)。
📚 **[完整架构详情 →](docs/system-architecture.md)**
---
## 🚀 快速开始
### ⚡ 5分钟配置
**只想快速运行?** 复制并粘贴以下命令:
```bash
# 配置环境并安装依赖
python -m venv venv && venv\Scripts\activate && pip install -e ".[dev]"
# 配置并运行数据库迁移
cp .env.example .env.local && alembic upgrade head
# 启动服务器
python -m src.main
```
然后访问:**http://localhost:8000/docs**
⚠️ **注意**:完整功能需要先编辑 `.env.local` 填入您的 API 密钥。
---
### 📋 详细安装说明
#### 前提条件
- Python 3.11 或更高版本
- pipPython 包管理器)
- PostgreSQL 数据库(或 Neon 账户)
- OpenAI API 密钥
- Pinecone API 密钥
#### 安装步骤
1. **克隆仓库**
```bash
git clone https://github.com/elios/elios-ai-service.git
cd EliosAIService
```
2. **创建虚拟环境**
```bash
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
```
3. **安装依赖**
```bash
pip install -e ".[dev]"
```
4. **配置环境变量**
```bash
cp .env.example .env.local
```
编辑 `.env.local` 填入您的凭据:
```env
# 数据库
DATABASE_URL=postgresql://user:password@host:5432/elios_interviews
# LLM 提供商
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_MODEL=gpt-4
# 向量数据库
VECTOR_DB_PROVIDER=pinecone
PINECONE_API_KEY=your-pinecone-api-key
PINECONE_INDEX_NAME=elios-questions
```
5. **运行数据库迁移**
```bash
alembic upgrade head
```
6. **验证数据库设置**
```bash
python scripts/verify_db.py
```
7. **启动服务器**
```bash
python -m src.main
```
服务器运行于http://localhost:8000
API 文档http://localhost:8000/docs
---
## 📖 文档
### 用户文档
- **[项目概述与PDR](docs/project-overview-pdr.md)** - 产品需求、功能和路线图
- **[数据库配置指南](DATABASE_SETUP.md)** - 全面的数据库配置说明
- **[环境配置指南](ENV_SETUP.md)** - 环境配置最佳实践
### 开发者文档
- **[系统架构](docs/system-architecture.md)** - 详细架构文档
- **[代码库摘要](docs/codebase-summary.md)** - 项目结构和技术栈
- **[代码规范](docs/code-standards.md)** - 编码约定和最佳实践
- **[CLAUDE.md](CLAUDE.md)** - AI助手开发指南
---
## 🧪 开发
### 用于测试的模拟适配器
**模拟适配器**在无需 API 费用或网络延迟的情况下模拟外部服务,在开发环境中默认启用。
**可用模拟**共6个
- `MockLLMAdapter` - 模拟 OpenAI/LLM 响应
- `MockVectorSearchAdapter` - 内存向量搜索
- `MockSTTAdapter` - 模拟语音转文字
- `MockTTSAdapter` - 模拟文字转语音
- `MockCVAnalyzerAdapter` - 基于文件名的简历解析
- `MockAnalyticsAdapter` - 内存性能跟踪
**配置**
```env
# .env.local
USE_MOCK_ADAPTERS=true # 使用模拟(默认,测试速度快)
USE_MOCK_ADAPTERS=false # 使用真实服务需要API密钥
```
**优势**
- 测试速度提升10倍约5秒 vs 约30秒
- 开发期间无 API 费用
- 无网络依赖
- 确定性测试结果
**注意**数据库仓库PostgreSQL故意不使用模拟——数据完整性测试使用真实数据库。
### 运行测试
```bash
# 运行所有测试(默认启用模拟)
pytest
# 带覆盖率运行
pytest --cov=src --cov-report=html
# 运行特定类型的测试
pytest tests/unit/ # 仅单元测试
pytest tests/integration/ # 仅集成测试
pytest tests/e2e/ # 仅端到端测试
# 使用真实适配器测试需要API密钥
USE_MOCK_ADAPTERS=false pytest
```
### 代码质量
```bash
# 格式化代码
black src/
# 代码检查
ruff check src/
ruff check --fix src/ # 自动修复问题
# 类型检查
mypy src/
# 运行所有检查
black src/ && ruff check src/ && mypy src/
```
### 数据库操作
```bash
# 创建新迁移
alembic revision --autogenerate -m "描述"
# 应用迁移
alembic upgrade head
# 回滚一个迁移
alembic downgrade -1
# 查看迁移历史
alembic history
# 验证数据库
python scripts/verify_db.py
```
---
## 🎯 使用示例
### 1. 创建候选人
```python
import httpx
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:8000/api/candidates",
json={
"name": "张三",
"email": "zhangsan@example.com"
}
)
candidate = response.json()
print(f"已创建候选人:{candidate['id']}")
```
### 2. 上传并分析简历
```python
async with httpx.AsyncClient() as client:
with open("resume.pdf", "rb") as cv_file:
response = await client.post(
"http://localhost:8000/api/cv/upload",
files={"file": cv_file},
data={"candidate_id": candidate['id']}
)
cv_analysis = response.json()
print(f"发现的技能:{cv_analysis['skills']}")
```
### 3. 开始面试
```python
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:8000/api/interviews",
json={
"candidate_id": candidate['id'],
"cv_analysis_id": cv_analysis['id']
}
)
interview = response.json()
print(f"面试准备就绪,共 {len(interview['question_ids'])} 道题目")
```
### 4. 提交答案
```python
async with httpx.AsyncClient() as client:
response = await client.post(
f"http://localhost:8000/api/interviews/{interview['id']}/answers",
json={
"question_id": interview['question_ids'][0],
"answer_text": "我的答案..."
}
)
evaluation = response.json()
print(f"得分:{evaluation['score']}/100")
print(f"反馈:{evaluation['feedback']}")
```
---
## 📦 项目结构
```
EliosAIService/
├── src/
│ ├── domain/ # 核心业务逻辑8个模型13个端口
│ ├── application/ # 用例共8个
│ ├── adapters/ # 外部服务实现20+
│ └── infrastructure/ # 配置、依赖注入、数据库
├── alembic/ # 数据库迁移
├── docs/ # 文档
└── tests/ # 测试套件
```
📚 **[完整结构 →](docs/codebase-summary.md)**
---
## 🔧 配置
配置通过环境变量管理,优先级如下:
1. `.env.local`(最高优先级,已加入 .gitignore
2. `.env`(可提交,作为模板)
3. 系统环境变量
4. Pydantic 默认值
### 主要配置项
- **应用**:名称、版本、环境
- **LLM 提供商**OpenAI、Claude 或 Llama 配置
- **向量数据库**Pinecone、Weaviate 或 ChromaDB 设置
- **PostgreSQL**:数据库连接和凭据
- **语音服务**Azure STT、Edge TTS规划中
- **面试设置**:问题数量、评分、超时
详细配置指南请参阅 [ENV_SETUP.md](ENV_SETUP.md)。
---
## 🤝 贡献
我们欢迎贡献!请参阅我们的贡献指南(即将发布)。
### 开发工作流
1. Fork 本仓库
2. 创建功能分支(`git checkout -b feature/amazing-feature`
3. 按照我们的[代码规范](docs/code-standards.md)进行修改
4. 运行测试和质量检查
5. 使用[约定式提交](https://www.conventionalcommits.org/)格式提交
6. 推送到您的分支(`git push origin feature/amazing-feature`
7. 提交 Pull Request
### 提交信息格式
```
<类型>(<范围>): <主题>
示例:
feat(domain): 添加带状态管理的面试聚合根
fix(persistence): 处理答案映射器中的 NULL 元数据
docs: 更新简历上传端点的API文档
```
---
## 🗺️ 路线图
### 第一阶段基础v0.1.0 - v0.2.1- 已完成 ✅
- ✅ 领域模型8个实体和端口13个接口
- ✅ PostgreSQL 持久化层7个仓库
- ✅ OpenAI 和 Azure OpenAI LLM 适配器
- ✅ Pinecone 和 ChromaDB 向量适配器
- ✅ Azure 语音服务STT/TTS
- ✅ 数据库迁移
- ✅ REST API 实现5个端点
- ✅ WebSocket 实时协议
- ✅ 领域驱动状态管理
- ✅ 带追问的上下文感知评估
- ✅ 会话编排器(状态机)
### 第二阶段核心功能v0.2.0 - v0.5.0
- ⏳ 语音面试支持
- ⏳ 高级问题生成
- ⏳ 面试分析
- ⏳ 性能基准测试
- ⏳ 前端集成
### 第三阶段智能增强v0.6.0 - v0.8.0
- ⏳ 多LLM支持Claude、Llama
- ⏳ 行为问题分析
- ⏳ 性格洞察
- ⏳ 技能差距分析
### 第四阶段规模化与完善v0.9.0 - v1.0.0
- ⏳ 多语言支持
- ⏳ 团队/组织功能
- ⏳ 移动应用支持
- ⏳ 生产环境部署
详细路线图请参阅[项目概述与PDR](docs/project-overview-pdr.md)。
---
## 📊 当前状态
**版本**0.2.1(基础 + 自适应面试 + 会话编排)
**已实现**
- ✅ 整洁架构结构
- ✅ 领域模型8个实体包括 Evaluation、ErrorCodes
- ✅ 仓库端口13个接口包括 EvaluationRepositoryPort
- ✅ PostgreSQL 持久化7个仓库
- ✅ OpenAI 和 Azure OpenAI LLM 适配器
- ✅ Pinecone 和 ChromaDB 向量适配器
- ✅ Azure 语音服务STT/TTS 适配器)
- ✅ 带 Alembic 的异步 SQLAlchemy 2.0
- ✅ 配置管理
- ✅ 依赖注入容器
- ✅ 用例共8个AnalyzeCV、PlanInterview、ProcessAnswerAdaptive、FollowUpDecision、CombineEvaluation、GenerateSummary、CompleteInterview、GetNextQuestion
- ✅ REST API5个面试端点+ WebSocket 协议
- ✅ 领域驱动状态管理(面试状态机)
- ✅ 带追问的上下文感知评估
- ✅ 会话编排器WebSocket 的状态机模式)
- ✅ 综合面试摘要生成
**进行中**
- 🔄 简历处理适配器spaCy、PyPDF2
- 🔄 测试覆盖率扩展核心功能85%+
**计划中**
- ⏳ 认证与授权
- ⏳ 速率限制
- ⏳ Docker 部署
- ⏳ 生产环境优化
---
## 🛡️ 安全
- API 密钥存储在环境变量中(从不提交)
- 通过参数化查询防止 SQL 注入
- 使用 Pydantic 进行输入验证
- 强制 HTTPS生产环境
- 静态数据加密Neon 内置)
- GDPR 合规性考虑
安全漏洞请报告至security@elios.ai
---
## 📄 许可证
本项目采用 MIT 许可证,详情请参阅 [LICENSE](LICENSE) 文件。
---
## 🙏 致谢
- **OpenAI** 提供 GPT-4 和 Embeddings API
- **Pinecone** 提供向量数据库
- **FastAPI** 提供优秀的 Web 框架
- **Neon** 提供无服务器 PostgreSQL
- **Pydantic** 提供数据验证
- **SQLAlchemy** 提供 ORM
---
## 📞 联系方式
- **网站**https://elios.ai
- **邮箱**contact@elios.ai
- **问题反馈**[GitHub Issues](https://github.com/elios/elios-ai-service/issues)
- **讨论**[GitHub Discussions](https://github.com/elios/elios-ai-service/discussions)
---
## ⭐ 支持
如果您觉得这个项目有帮助,请考虑在 GitHub 上给它点个星!这有助于更多人发现该项目,也激励我们持续开发。
---
**以整洁架构原则构建,倾注心血 ❤️**