面向西安高校考研生的「院校/专业定制型复试英语口语AI导师」
zenEnglish 是一个基于AI技术的考研复试英语口语练习平台,专注于西安高校的本地化服务。通过模拟真实导师面试场景,帮助考生在短时间内提升复试英语口语表现。
- 院校/专业深度定制:针对西交、西工大、西电、西外等西安高校的专业题库
- 导师风格数字孪生:模拟学术深挖型、实践导向型、友好交流型、刻板高压型等导师风格
- 多维度评分:发音、流利度、词汇多样性、语法准确性、院校匹配度
- 压力渐进式训练:温和/正常/高压三种模式
- 实时语音交互:基于Whisper ASR和Edge-TTS的流畅对话体验
zenEnglish/
├── backend/ # 后端服务
│ ├── services/ # 业务微服务
│ │ ├── user-service/ # 用户服务 (8001)
│ │ ├── question-service/ # 题库服务 (8002)
│ │ ├── practice-service/ # 练习服务 (8003)
│ │ ├── scoring-service/ # 评分服务 (8004)
│ │ ├── report-service/ # 报告服务 (8005)
│ │ ├── payment-service/ # 支付服务 (8006)
│ │ ├── notification-service/ # 通知服务 (8007)
│ │ ├── statistics-service/ # 统计服务 (8008)
│ │ └── subscription-service/ # 订阅服务 (8009)
│ └── ai-services/ # AI服务
│ ├── asr-service/ # 语音识别服务 (9001)
│ ├── tts-service/ # 语音合成服务 (9002)
│ ├── llm-service/ # 大语言模型服务 (9003)
│ ├── agent-orchestrator/ # Agent编排服务 (9004)
│ ├── scoring-engine/ # 评分引擎 (9005)
│ └── error-correction/ # 纠错引擎 (9006)
├── common/ # 共享代码
│ ├── models/ # 数据模型
│ ├── schemas/ # Pydantic schemas
│ ├── utils/ # 工具函数
│ ├── config/ # 配置管理
│ ├── db/ # 数据库工具
│ ├── cache/ # 缓存工具
│ └── mq/ # 消息队列工具
├── tests/ # 测试代码
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ ├── e2e/ # 端到端测试
│ └── fixtures/ # 测试fixtures
├── frontend/ # 前端代码
│ ├── miniprogram/ # 微信小程序
│ ├── web/ # H5 Web
│ └── admin/ # 管理后台
├── deploy/ # 部署配置
│ ├── docker/ # Docker配置
│ ├── k8s/ # Kubernetes配置
│ └── nginx/ # Nginx配置
├── docs/ # 文档
│ └── api/ # API文档
├── scripts/ # 脚本工具
├── PRD.md # 产品需求文档
├── HLD.md # 高阶设计文档
├── LLD.md # 低层设计文档
├── pyproject.toml # 项目配置
├── pytest.ini # 测试配置
└── .env.example # 环境变量示例
- 框架: FastAPI 0.104+
- ORM: SQLAlchemy 2.0+
- 数据库: MySQL 8.0, MongoDB 6.0, Redis 7.0
- 消息队列: RabbitMQ 3.12+
- 异步任务: Celery 5.3+
- ASR: Whisper / Faster-Whisper
- LLM: Qwen2.5 / DeepSeek
- Agent编排: LangChain + LangGraph
- TTS: VITS / Edge-TTS
- 向量数据库: Milvus 2.3+
- 框架: uni-app + Vue 3
- 状态管理: Pinia
- UI组件: Vant 4.0+
- Python 3.12+
- MySQL 8.0+
- MongoDB 6.0+
- Redis 7.0+
- RabbitMQ 3.12+
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 安装依赖
pip install -e ".[dev]"# 复制环境变量模板
cp .env.example .env
# 编辑.env文件,填入实际配置
vim .env# 运行数据库迁移
alembic upgrade head
# 初始化测试数据
python scripts/init_data.py# 启动用户服务
uvicorn backend.services.user_service.main:app --reload --host 0.0.0.0 --port 8001
# 启动题库服务
uvicorn backend.services.question_service.main:app --reload --host 0.0.0.0 --port 8002
# 启动练习服务
uvicorn backend.services.practice_service.main:app --reload --host 0.0.0.0 --port 8003
# 启动评分服务
uvicorn backend.services.scoring_service.main:app --reload --host 0.0.0.0 --port 8004
# 启动ASR服务
uvicorn backend.ai_services.asr_service.main:app --reload --host 0.0.0.0 --port 9001
# 启动TTS服务
uvicorn backend.ai_services.tts_service.main:app --reload --host 0.0.0.0 --port 9002
# 启动LLM服务
uvicorn backend.ai_services.llm_service.main:app --reload --host 0.0.0.0 --port 9003# 运行所有测试
pytest
# 运行单元测试
pytest -m unit
# 运行集成测试
pytest -m integration
# 运行测试并生成覆盖率报告
pytest --cov=. --cov-report=html
# 查看覆盖率报告
open htmlcov/index.html本项目采用测试驱动开发(TDD)模式:
- 编写测试:先编写测试用例,描述期望的行为
- 运行测试:运行测试,确认测试失败(Red)
- 编写代码:编写最少量的代码使测试通过(Green)
- 重构:优化代码,保持测试通过(Refactor)
- 重复:重复上述过程
# 1. 编写测试 (tests/unit/test_user_service.py)
def test_create_user():
user_data = {
"openid": "test_openid",
"nickname": "Test User"
}
user = await user_service.create_user(user_data)
assert user.id is not None
assert user.openid == "test_openid"
# 2. 运行测试 (失败)
pytest tests/unit/test_user_service.py::test_create_user
# 3. 编写代码 (backend/services/user_service/service.py)
async def create_user(user_data: dict) -> User:
user = User(**user_data)
db.add(user)
await db.commit()
await db.refresh(user)
return user
# 4. 运行测试 (通过)
pytest tests/unit/test_user_service.py::test_create_user
# 5. 重构优化 /\
/E2E\ 端到端测试 (10%)
/------\
/Integration\ 集成测试 (30%)
/------------\
/ Unit Tests \ 单元测试 (60%)
/----------------\
- 单元测试: 测试单个函数/方法,使用mock隔离依赖
- 集成测试: 测试多个模块协作,使用真实数据库/缓存
- 端到端测试: 测试完整用户流程,使用真实服务
# 运行特定类型的测试
pytest -m unit # 单元测试
pytest -m integration # 集成测试
pytest -m e2e # 端到端测试
pytest -m "not slow" # 排除慢速测试
pytest -m requires_db # 需要数据库的测试
pytest -m requires_redis # 需要Redis的测试# 使用Black格式化代码
black .
# 使用isort整理导入
isort .# 使用Ruff检查代码
ruff check .
# 使用Mypy进行类型检查
mypy .feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具相关
MIT License
- Email: dev@zenenglish.com
- Website: https://zenenglish.com