跳转至

智能知识系统 - 综合优化行动计划 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

# 修改测试覆盖率路径
--cov=services/web_app/backend  # 替换原来的 --cov=backend


阶段 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 后