feat: add multi-image vision analysis
This commit is contained in:
+37
@@ -1913,3 +1913,40 @@
|
||||
- 多图上游调用必须扩展既有 Provider 和 T-613 共享生成 core;图片 URL 必须复用现有 SSRF 防护,失败复用计费层幂等退点。
|
||||
- 本任务不包含流式、异步 vision task、OCR 专用接口或结构化 JSON 输出;OCR、商品识别和图片对比先通过 prompt 表达。
|
||||
- 验证:`./init.ps1` 通过,Python 3.12.3,依赖已满足,`manage.py check` 0 issues;任务登记完成后继续执行文档 diff 检查。
|
||||
|
||||
## 2026-07-16 开工:T-619 多张图片理解并返回文字
|
||||
|
||||
- 状态:DOING。
|
||||
- 基线:执行 `./init.ps1` 通过,Python 3.12.3,依赖已满足,`manage.py check` 0 issues。
|
||||
- 范围:按 `docs/06-tasks.md` 新增独立 `vision` 操作、多图理解同步接口、Provider 多图支持、固定单次计费、目录展示和输入资源限制;不改旧标题、生图和异步生图契约。
|
||||
- 工作区说明:开工时存在用户侧 `.gitignore` 修改、已跟踪测试脚本 / 提示词删除和临时截图,均不属于 T-619,不恢复、不覆盖、不纳入本任务。
|
||||
|
||||
## 2026-07-16 实施:T-619 多张图片理解并返回文字
|
||||
|
||||
- 状态:DONE。
|
||||
- 代码变更:
|
||||
- `ModelAlias.OperationType`、`CallRecord.OperationType` 与 `PricingRule` 可选操作新增 `vision`,生成并应用 `ai.0005` / `billing.0008` 迁移。
|
||||
- `apps.ai.aliases` 把能力要求统一为集合;`vision` 模型和 Provider 必须同时支持 `text`、`vision`,图片生成 / 编辑专用 Provider 不可误接。
|
||||
- Provider 协议新增 `analyze_images()` 与 `MultimodalImage`;Chat Completions、Gemini 按请求顺序发送多张图片并解析完整文字结果。
|
||||
- 新增 `POST /api/v1/analyze/images`,支持有序 URL/Base64 混合图片;prompt 审核先于图片读取,URL 复用现有 SSRF 防护;数量、单图和总大小受三个 `VISION_*` 环境变量限制。
|
||||
- 多图理解复用 T-613 生成核心和 billing 预扣 / 成功确认 / 幂等退款;每次请求按 `vision + alias` 默认价固定扣一次,调用记录只保留最多 500 字文字摘要,不保存输入图片或 provider raw。
|
||||
- `GET /api/v1/models` 与 portal 可用模型页支持展示能力匹配的 active `vision` 别名,并返回 / 显示 `requires_image=true` 与计费状态。
|
||||
- 文档变更:同步 `README.md`、`docs/00-ai-start-here.md`、`02-requirements.md`、`04-architecture.md`、`06-tasks.md`、`api.md`、`current-state.md`、`env.md`、`routes.md` 与 `.env.example`;T-619 标记为 DONE。
|
||||
- 验证:
|
||||
- `./init.ps1` 开工和收尾均通过;收尾为 Python 3.12.3、依赖已满足、Django system check 0 issues。
|
||||
- `py -3.12 -m py_compile ...`:T-619 相关 Python 文件通过。
|
||||
- `py -3.12 manage.py migrate --noinput`:通过,已应用 `ai.0005` 与 `billing.0008`。
|
||||
- `py -3.12 manage.py check`:通过,0 issues;`py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
|
||||
- Provider 专项:10 tests OK;T-619 API / 别名 / 目录专项:13 tests OK;旧标题 / 生图关键回归:5 tests OK。
|
||||
- `apps.ai.tests + ModelsCatalogApiTests + GenerateApiTests + portal 模型页` 扩展回归:84 tests OK。
|
||||
- `apps.users.tests + apps.billing.tests + apps.moderation.tests` 分组回归:46 tests OK。
|
||||
- 完整单命令回归运行 604 秒后达到执行器超时,未取得最终结果;随后 `apps.api.tests` 全量 88 条测试重试两次,均在测试库初始化阶段因远程 MySQL `43.128.3.240` 握手超时中断,未进入断言。同期 TCP 3306 探测可达,按环境稳定性问题记录,不把该两次运行记为通过。
|
||||
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
||||
- 生产启用提醒:部署代码并执行 migrate 后,需在 admin 配置同时具有 `text`、`vision` 能力的 active `AiModel`、`vision-standard` active 默认别名和 `operation_type=vision` 的默认 `PricingRule`;本任务不写入真实模型、URL、密钥或价格。
|
||||
- 工作区说明:用户侧 `.gitignore` 修改、`xiaxiuxiu.py` / `图生图提示词.txt` 删除及 `.tmp-t609-layout.png` 未跟踪文件保持原状,未作为 T-619 内容处理。
|
||||
- 数据库恢复后的补充验证:
|
||||
- 新增 `GenerateApiTests.test_analyze_images_supports_single_image_with_explicit_alias`,补齐单图 + 指定别名成功矩阵;单独运行 1 test OK。
|
||||
- API 鉴权 / 余额 / 模型目录 / 客户端版本分组:28 tests OK。
|
||||
- API 充值回调 / 下单状态分组:13 tests OK。
|
||||
- `apps.portal.tests` 全量:39 tests OK。
|
||||
- 结合此前 `GenerateApiTests` 整类 47 tests OK 与新增单测,当前 API 89 条测试均有通过证据;所有应用已通过拆分方式完成完整回归。完整单命令超时仍作为远程 MySQL / 执行器稳定性现象保留,不再构成测试覆盖缺口。
|
||||
|
||||
Reference in New Issue
Block a user