跳转至

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