Files
KOSHM-Pig 447062446a feat(api): 新增图片问答、意图分类与任务管理功能
- 新增 SocialImageAgentService 支持朋友圈/聊天截图解析,提供图片线索提取与图谱问答建议
- 扩展 LLMService 支持多模型配置(意图分类、图片模型)与流式响应,增加思考模式控制
- 新增 /intent/classify 端点用于轻量意图分类(问答/导入/混合)以节省 token
- 新增 /tasks/{taskId} 与 /tasks/{taskId}/retry 端点用于流式任务状态查询与重试
- 前端 Dashboard 扩展人物详情显示(年龄标签、出生日期、别名、关系置信度等)
- 前端导入流程增加任务 ID 追踪与质量回放信息展示
2026-03-25 00:28:22 +08:00
..

开发规范

项目结构规范

project / ├── src / 程序源码文件目录 │ ├── config / 配置目录 │ │ ├── swagger.js swagger 配置文件 │ │ └── logger.js 日志配置文件 │ │ │ ├── controllers / 控制器目录 │ │ ├── *.controller.js 控制器文件 │ │ └── index.js 控制器索引文件 │ │ │ ├── models / 模型目录 │ │ ├── *.model.js 模型文件 │ │ └── index.js 模型索引文件 │ │ │ ├── routes / 路由目录 │ │ ├── *.route.js 路由文件 │ │ └── index.js 路由索引文件 │ │ │ ├── services / 服务目录 │ │ ├── *.service.js 服务文件 │ │ └── index.js 服务索引文件 │ └── server.js 服务器入口文件 │
├── docs / 用于存储AI提示文档 │ └── *.md 文档文件 │ ├── .env 环境变量配置文件 ├── package.json 项目依赖配置文件 ├── .gitignore git 忽略文件配置 ├── package-lock.json 项目依赖锁文件 └── README.md 项目说明文档

controllers、models、routes 规范

  • 每个目录下的文件都要符合命名规范
    • 控制器文件:*.controller.js
    • 模型文件:*.model.js
    • 路由文件:*.route.js

并统一由index.js导出

  • controllers/index.js
  • models/index.js
  • routes/index.js

swagger 规范

  • 每个路由文件都要包含路由的详细信息,包括请求方法、路径、参数、响应等。
  • 路由文件的注释要符合 swagger 规范,使用 jsdoc 格式。
  • 每个模型文件都要包含模型的详细信息,包括属性、类型、是否必填等。
  • 模型文件的注释要符合 swagger 规范,使用 jsdoc 格式。

运行与脚本

  • 开发启动:npm run dev
  • 普通启动:npm run start
  • 文档入口:/api-docs

环境变量规范

  • 使用 dotenv 加载 .env(入口:src/server.js
  • 变量约定:
    • PORT:服务监听端口,默认 3000
    • APPLICATION_URL:对外服务基址,用于 Swagger servers(未设置回退为 http://localhost:${PORT}
    • LOG_LEVEL:日志级别,默认 info(可选 error|warn|info|debug
  • 安全要求:不记录/提交敏感信息,.gitignore 已忽略 .envlogs/

日志规范

  • 日志库:winston(配置:src/config/logger.js
  • 级别:errorwarninfodebug
  • 输出:
    • 控制台(彩色,便于开发)
    • 文件:logs/app.log(综合)、logs/error.log(错误)
  • 请求日志:在 src/server.js 统一中间件记录 method path status 耗时,错误 >=500error>=400warn
  • 全局错误处理:src/server.js 捕获未处理异常并输出结构化错误,响应 500
  • 规范:避免日志中出现令牌、密钥、密码等敏感信息

swagger-jsdoc 配置与注释规范

  • 配置位置:src/config/swagger.jscreateSwaggerSpec(serverUrl)
  • 扫描范围:apis: ['src/**/*.js']
  • 路由注释:放在 src/routes/*.route.js,使用 @openapi JSDoc 块定义路径、方法、请求参数与响应
  • 模型注释:可使用 components/schemas 定义结构体并在路由注释中引用
  • 文档 UIswagger-ui-express 挂载于 /api-docs

分层规范

  • 路由(routes)只负责参数解析与转发,不直接书写异步业务逻辑
  • 控制器(controllers)承载业务流程编排,必要时调用 services
  • 服务(services)聚合外部 API、内部模块调用保持可测试性
  • 模型(models)声明数据结构(如后续有数据库或 DTO 定义)
  • 统一导出:各层使用 index.js 聚合导出,便于维护与扫描

参考实现

  • 路由聚合:src/routes/index.js
  • 根路由与注释:src/routes/root.route.js
  • 控制器:src/controllers/root.controller.js
  • Swagger 配置:src/config/swagger.js
  • 日志配置:src/config/logger.js
  • 入口挂载:src/server.js

异步编程规范

  • 所有异步操作都要使用 async/awaitPromise 处理,避免回调地狱
  • 控制器中调用服务时,要确保服务返回 Promise,并在控制器中 await 其结果
  • 服务中调用外部 API 或数据库操作时,要确保返回 Promise,并在服务中 await 其结果
  • 路由中处理异步操作时,要确保捕获异常并返回结构化错误响应
  • 必须使用try...catch捕获异步操作中的异常避免未处理异常导致服务崩溃