智能知识系统 - 综合优化行动计划 V2
⚠️ **归档文档 — 数据已过时**
本报告为历史快照存档。当前版本 **v1.3.0-dev**,232 测试通过。
👉 最新工程状态请参阅 **[ENGINEERING_ALIGNMENT.md](ENGINEERING_ALIGNMENT.md)**
制定日期: 2026-03-25 基于审查: 代码规范符合性审查 V2、工程流程对齐审查 V2 目标: 对齐工程流程、项目规则和开发计划
执行摘要
审查结果汇总
| 审查类别 | 评分 | 状态 | 主要问题 |
|---|---|---|---|
| 代码规范符合性 | 85/100 | 良好 | 安全细节、类型注解、测试覆盖 |
| 工程流程对齐 | 61/100 | 需改进 | Git仓库、测试配置、开发文档 |
| 综合评分 | 73/100 | 需改进 | 见行动项 |
关键发现
🔴 阻塞性问题 (P0): 1. 项目未初始化 Git 仓库 - 无版本控制 2. CORS/JWT 密钥配置存在安全风险 3. 测试覆盖率路径配置错误
🟡 高优先级 (P1):
1. 测试覆盖率不足 (核心模块未测试)
2. 错误响应格式不统一
3. 缺少开发文档 /docs/dev.md
4. CI/CD 部分检查失败继续执行
一、问题优先级矩阵
| 优先级 | 问题 | 影响 | 紧急度 | 预计工作量 |
|---|---|---|---|---|
| P0 | Git 仓库未初始化 | 阻断协作 | 高 | 30分钟 |
| P0 | CORS 配置安全风险 | 安全漏洞 | 高 | 1小时 |
| P0 | JWT 密钥临时生成 | 安全漏洞 | 高 | 1小时 |
| P1 | 测试路径配置错误 | 无法生成报告 | 中 | 15分钟 |
| P1 | 日志敏感信息泄露 | 安全风险 | 中 | 1小时 |
| P1 | HTML 转义不完整 | XSS 风险 | 中 | 30分钟 |
| P1 | 缺少开发文档 | 开发体验 | 中 | 2小时 |
| P2 | 测试覆盖率不足 | 质量保证 | 低 | 1周 |
| P2 | 错误响应格式不统一 | API 规范 | 低 | 2小时 |
| P2 | 类型注解不精确 | 代码质量 | 低 | 4小时 |
二、分阶段行动计划
阶段 0: 紧急修复 (1天内完成)
0.1 初始化 Git 仓库 (30分钟)
cd /home/ai/zhineng-knowledge-system
git init
git add .
git commit -m "feat: 初始化智能知识系统项目
- 后端服务 (FastAPI + PostgreSQL + Redis)
- 前端界面 (HTML + CSS + JS)
- Docker 部署配置
- 测试框架
- CI/CD 配置
- 完整文档体系
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>"
git branch -M main
git checkout -b develop
0.2 安全配置修复 (2小时)
文件: backend/main.py
# CORS 配置加强
def get_allowed_origins() -> List[str]:
"""获取允许的跨域来源"""
origins_str = os.getenv("ALLOWED_ORIGINS", "")
if not origins_str:
if os.getenv("ENVIRONMENT") == "production":
logger.error("ALLOWED_ORIGINS must be set in production")
raise ConfigError("ALLOWED_ORIGINS required in production")
return ["http://localhost:3000", "http://localhost:8008"]
return [o.strip() for o in origins_str.split(",") if o.strip()]
# 添加安全响应头
@app.middleware("http")
async def add_security_headers(request: Request, call_next):
response = await call_next(request)
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["X-Frame-Options"] = "DENY"
response.headers["X-XSS-Protection"] = "1; mode=block"
if os.getenv("ENVIRONMENT") == "production":
response.headers["Strict-Transport-Security"] = "max-age=31536000"
return response
文件: backend/auth/jwt.py
def __post_init__(self):
if self.private_key_pem is None or self.public_key_pem is None:
if os.getenv("ENVIRONMENT") == "production":
raise ValueError(
"RSA密钥对在生产环境必须通过环境变量提供。"
"请设置 JWT_PRIVATE_KEY 和 JWT_PUBLIC_KEY 环境变量。"
)
logger.warning(
"未提供RSA密钥对,生成临时密钥对(仅限开发环境)。"
"重启后所有令牌将失效。"
)
private_key, public_key = self._generate_rsa_key_pair()
self.private_key_pem = private_key
self.public_key_pem = public_key
0.3 测试配置修复 (15分钟)
文件: pytest.ini
[pytest]
testpaths = tests
python_files = test_*.py
python_classes = Test*
python_functions = test_*
addopts =
-v
--strict-markers
--tb=short
--cov=backend
--cov-report=html
--cov-report=term-missing
asyncio_mode = auto
文件: .github/workflows/ci.yml
阶段 1: 基础设施完善 (1周内完成)
1.1 创建开发文档 (2小时)
文件: /home/ai/zhineng-knowledge-system/docs/DEV.md
# 智能知识系统 - 开发指南
## 目录
- [开发环境搭建](#开发环境搭建)
- [项目结构](#项目结构)
- [开发流程](#开发流程)
- [调试指南](#调试指南)
- [测试指南](#测试指南)
- [常见问题](#常见问题)
## 开发环境搭建
### 前置要求
- Python 3.12+
- Docker 24.0+
- Docker Compose 2.20+
- Node.js 20+ (可选,用于前端开发)
### 本地开发启动
\`\`\`bash
# 1. 克隆项目
git clone <repository-url>
cd zhineng-knowledge-system
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置必要的环境变量
# 3. 启动依赖服务
docker-compose up -d postgres redis
# 4. 安装 Python 依赖
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r backend/requirements.txt
# 5. 运行测试
pytest tests/ -v
# 6. 启动开发服务器
cd backend
python main.py
\`\`\`
## 项目结构
\`\`\`
zhineng-knowledge-system/
├── backend/ # 后端服务
│ ├── main.py # FastAPI 主入口
│ ├── config.py # 配置管理
│ ├── models.py # 数据模型
│ ├── api/ # API 路由
│ ├── services/ # 业务服务
│ │ ├── retrieval/ # 检索服务
│ │ └── reasoning/ # 推理服务
│ ├── auth/ # 认证授权
│ ├── cache/ # 缓存管理
│ └── monitoring/ # 监控指标
├── frontend/ # 前端文件
├── tests/ # 测试代码
│ ├── conftest.py
│ ├── test_api.py
│ └── test_retrieval.py
├── docs/ # 文档
├── deploy/ # 部署脚本
├── docker-compose.yml # 容器编排
└── .github/workflows/ # CI/CD 配置
\`\`\`
## 开发流程
### 分支策略
\`\`\`
main (生产)
├── develop (开发)
│ ├── feature/xxx (功能分支)
│ └── fix/xxx (修复分支)
\`\`\`
### 提交规范
\`\`\`
<type>(<scope>): <subject>
type: feat | fix | docs | style | refactor | test | chore
scope: 影响的模块
subject: 简短描述
示例:
feat(retrieval): 添加向量检索API
fix(auth): 修复JWT过期验证
\`\`\`
### 开发前检查
- [ ] 从 develop 创建功能分支
- [ ] 确认本地环境正常
- [ ] 拉取最新代码
### 提交前检查
- [ ] 代码格式化: `isort backend/ --profile black && black backend/`
- [ ] 代码检查: `flake8 backend/ --max-line-length=100`
- [ ] 测试通过: `pytest tests/ -v`
- [ ] 更新相关文档
## 调试指南
### 启用调试日志
\`\`\`bash
export LOG_LEVEL=DEBUG
python backend/main.py
\`\`\`
### 常用调试端点
- GET `/health` - 健康检查
- GET `/api/v1/stats` - 系统统计
- GET `/docs` - API 文档
## 测试指南
### 运行测试
\`\`\`bash
# 全部测试
pytest tests/ -v
# 单个测试文件
pytest tests/test_api.py -v
# 带覆盖率
pytest tests/ --cov=backend --cov-report=html
# 查看覆盖率报告
open htmlcov/index.html
\`\`\`
## 常见问题
### Q: 数据库连接失败?
A: 检查 Docker 容器状态: `docker ps`,确认 postgres 容器健康
### Q: 测试失败?
A: 确保依赖服务运行: `docker-compose up -d`
### Q: 端口冲突?
A: 修改 docker-compose.yml 中的端口映射
\`\`\`
---
#### 1.2 修复 CI/CD 配置 (30分钟)
**文件**: `.github/workflows/ci.yml`
```yaml
# 移除失败继续执行
- name: 类型检查 (mypy)
run: |
pip install mypy
mypy services/web_app/backend/ --ignore-missing-imports
# 移除: continue-on-error: true
- name: 运行集成测试
run: |
pytest tests/integration/ -v
# 移除: continue-on-error: true
1.3 创建测试目录结构 (30分钟)
mkdir -p tests/integration
mkdir -p tests/performance
mkdir -p tests/unit
touch tests/integration/__init__.py
touch tests/performance/__init__.py
touch tests/unit/__init__.py
阶段 2: 代码质量提升 (2周内完成)
2.1 错误处理统一化 (2小时)
文件: backend/main.py
from fastapi.responses import JSONResponse
class APIError(Exception):
"""API 错误基类"""
def __init__(self, code: str, message: str, details: dict = None):
self.code = code
self.message = message
self.details = details or {}
@app.exception_handler(APIError)
async def api_error_handler(request: Request, exc: APIError):
return JSONResponse(
status_code=400,
content={
"status": "error",
"error": {
"code": exc.code,
"message": exc.message,
"details": exc.details
}
}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
logger.error(f"Unhandled exception: {exc}", exc_info=True)
return JSONResponse(
status_code=500,
content={
"status": "error",
"error": {
"code": "INTERNAL_ERROR",
"message": "内部服务器错误"
}
}
)
2.2 敏感数据过滤 (1小时)
文件: backend/main.py (添加到启动部分)
import re
import logging
class SensitiveDataFilter(logging.Filter):
"""过滤日志中的敏感数据"""
PATTERNS = [
(r'Bearer\s+[A-Za-z0-9\-._~+/]+=*', 'Bearer ***'),
(r'api_key["\']?\s*[:=]\s*["\']?[A-Za-z0-9]+', 'api_key=***'),
(r'token["\']?\s*[:=]\s*["\']?[A-Za-z0-9]+', 'token=***'),
(r'password["\']?\s*[:=]\s*["\']?[^"\']+', 'password=***'),
]
def filter(self, record):
message = record.getMessage()
for pattern, replacement in self.PATTERNS:
message = re.sub(pattern, replacement, message, flags=re.IGNORECASE)
record.msg = message
record.args = ()
return True
# 应用过滤器
logging.getLogger().addFilter(SensitiveDataFilter())
2.3 测试覆盖率提升 (1周)
新增测试文件:
# tests/unit/test_auth.py
"""认证模块单元测试"""
# tests/unit/test_cache.py
"""缓存模块单元测试"""
# tests/integration/test_database.py
"""数据库集成测试"""
# tests/integration/test_redis.py
"""Redis 集成测试"""
# tests/performance/test_load.py
"""负载测试"""
阶段 3: 架构优化 (1个月内完成)
3.1 配置管理重构 (4小时)
文件: backend/config.py
from typing import Optional
from dataclasses import dataclass
from functools import lru_cache
class ConfigError(Exception):
"""配置错误"""
@dataclass(frozen=True)
class DatabaseConfig:
url: str
pool_size: int = 10
max_overflow: int = 20
@dataclass(frozen=True)
class RedisConfig:
url: str
max_connections: int = 50
@dataclass(frozen=True)
class Config:
database: DatabaseConfig
redis: RedisConfig
jwt_secret_key: str
debug: bool = False
@lru_cache()
def get_config() -> Config:
"""获取配置(单例,延迟加载)"""
database_url = os.getenv("DATABASE_URL")
if not database_url:
raise ConfigError("DATABASE_URL is required")
redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0")
jwt_secret = os.getenv("JWT_SECRET_KEY")
if not jwt_secret:
if os.getenv("ENVIRONMENT") == "production":
raise ConfigError("JWT_SECRET_KEY is required in production")
jwt_secret = "dev-secret-key-change-in-production"
return Config(
database=DatabaseConfig(url=database_url),
redis=RedisConfig(url=redis_url),
jwt_secret_key=jwt_secret,
debug=os.getenv("DEBUG", "false").lower() == "true"
)
3.2 类型注解规范化 (4小时)
# 使用 TypedDict 替代 Dict[str, Any]
from typing import TypedDict
class SearchResult(TypedDict):
id: int
title: str
content: str
category: str
score: float
class ChatRequest(BaseModel):
question: str = Field(..., min_length=1, max_length=500)
session_id: Optional[str] = None
domain: Optional[str] = Field(None, pattern="^(气功|中医|儒家)$")
三、验收标准
阶段 0 完成标准
- [ ] Git 仓库已初始化,main 和 develop 分支已创建
- [ ] 安全配置修复: CORS、JWT 密钥
- [ ] 测试覆盖率路径配置正确
- [ ] 所有测试能够运行
阶段 1 完成标准
- [ ] 开发文档
/docs/dev.md已创建 - [ ] CI/CD 配置修复完成
- [ ] 测试目录结构完整
- [ ] CI/CD 流水线通过
阶段 2 完成标准
- [ ] 错误响应格式统一
- [ ] 敏感数据过滤生效
- [ ] 核心模块测试覆盖率 > 70%
阶段 3 完成标准
- [ ] 配置管理重构完成
- [ ] 类型注解规范
- [ ] 代码质量检查全部通过
四、风险与缓解
| 风险 | 概率 | 影响 | 缓解方案 |
|---|---|---|---|
| Git 仓库初始化影响现有部署 | 低 | 中 | 先备份,在测试环境验证 |
| 安全配置变更导致功能异常 | 中 | 高 | 灰度发布,充分测试 |
| 测试覆盖率提升工作量 | 中 | 低 | 分阶段实施,优先核心模块 |
五、时间表
| 阶段 | 任务 | 预计工时 | 完成日期 |
|---|---|---|---|
| 阶段 0 | 紧急修复 | 4小时 | 2026-03-25 |
| 阶段 1 | 基础设施 | 8小时 | 2026-03-27 |
| 阶段 2 | 质量提升 | 40小时 | 2026-04-10 |
| 阶段 3 | 架构优化 | 40小时 | 2026-04-24 |
六、总结
本优化行动计划基于两份详细的审查报告,识别了 10 个关键问题,按优先级分为 P0 (3个)、P1 (5个)、P2 (2个)。
关键行动项: 1. 立即: 初始化 Git 仓库 2. 今天: 修复安全配置 3. 本周: 完善测试配置和文档 4. 本月: 提升代码质量和覆盖率
预期成果: - 建立规范的版本控制流程 - 消除关键安全风险 - 测试覆盖率 > 70% - 工程流程符合度 > 85%
报告生成: Claude Code Opus 4.6 基于审查: CODE_COMPLIANCE_REPORT_V2.md, PROCESS_ALIGNMENT_REPORT_V2.md 下次审查: 完成阶段 0 后