跳转至

Project Review Backlog (2026-02-26)

用途:记录本次项目扫描发现的问题,作为后续回顾和修复清单。

P0 安全与可用性

  1. 明文 API Key 出现在仓库脚本中(高风险泄露)。
  2. 文件:test_siliconflow.sh
  3. 位置:第 4 行
  4. 建议:立刻移除明文密钥,改为读取环境变量;并轮换已暴露 Key。

  5. 标书解析接口缺少鉴权,存在滥用风险。

  6. 文件:app/routes/tender/parser.py
  7. 位置:router = APIRouter()/{tender_id}/documents/parse
  8. 建议:加上 Depends(get_current_user),并校验当前用户对目标标书的访问权限。

  9. 任务取消失败分支会触发运行时参数错误。

  10. 文件:app/routes/tasks.py
  11. 位置:return fail(..., code=404)
  12. 关联:app/schemas/response.pyfail()code 参数
  13. 建议:统一返回 biz_code,或扩展 fail() 签名并统一改造调用方。

P1 业务正确性

  1. 图库创建未写入 user_id,与模型约束不一致。
  2. 文件:app/services/image/gallery_service.py
  3. 关联模型:app/models/image_gallery.py
  4. 建议:创建时显式写入当前用户 ID,并对查询/更新/删除增加用户隔离条件。

  5. 上下文组装字段名与模型不一致,人员/设备章节可能报错。

  6. 文件:app/services/context_assembler.py
  7. 典型字段:count_str/count_val/item_name/requirements
  8. 关联模型字段:count_desc/count(人员),name/quantity_desc/specifications(设备)
  9. 建议:统一字段命名并补一组单元测试覆盖章节生成路径。

  10. 知识库目录服务使用了不存在字段 knowledge_base_id

  11. 文件:app/services/knowledge/directory_service.py
  12. 关联模型:app/models/knowledge.py(字段为 knowledge_id
  13. 建议:统一改为 knowledge_id,并回归验证目录 CRUD。

  14. 知识库目录路由被注释,接口未实际暴露。

  15. 文件:app/routes/knowledge/__init__.py
  16. 建议:按产品需求决定启用或删除死代码,避免“以为可用、实际不可用”。

  17. 解析并发取消逻辑将 coroutine 当 Task 操作。

  18. 文件:app/services/ingestion/
  19. 建议:asyncio.create_task(...) 后再管理 Task;或仅依赖外层 cancel 信号,不手动遍历 coroutine。

  20. 兜底创建 Tender 时缺少必填 title,存在失败路径。

  21. 文件:app/services/tender_service.py
  22. 关联模型:app/models/tenders/core.py
  23. 建议:补默认标题策略,或在创建前保证标题来源必定存在。

P2 工程化与维护性

  1. 自动化测试覆盖不足(当前 pytest 无测试用例执行)。
  2. 建议:先补最小回归集:鉴权、解析、任务取消、图库创建、章节生成。

  3. 缺少数据库迁移体系。

  4. 建议:引入 Alembic,避免模型变更仅靠 create_all 导致线上演进风险。

  5. README 信息过少,不利于新同学接入。

  6. 建议:补启动步骤、环境变量说明、核心 API 调用顺序、常见故障排查。

建议的后续修复顺序

  1. 先修 P0(安全与必炸路径)。
  2. 再修 P1(核心业务正确性与多租户隔离)。
  3. 最后补 P2(测试、迁移、文档)。