fix(vision-v2): 恢复后台prompt配置读取,用户自定义提示词生效 #2211

Merged
xiaoxia merged 1 commits from fix/vision-v2-db-prompt into develop 2026-10-05 22:30:45 +08:00
Owner

根因

#2200重写V2路径时,把 prompt_loader 调用链删了,system/user prompt 全部硬编码在 vlm_fast_json.py / vlm_fallback.py,用户在后台管理端配置 viral_video_prompt_templates 表 prompt_type=image_analysis 的自定义提示词完全没生效。

修复

  • 新增 vision/_prompt.py:复用 packages.application.viral_video.prompt_loader.get_template("image_analysis") 读后台配置,30秒TTL热加载
  • 判定策略:读到的 system_prompt 以默认XML模板开头("你是电商商品视觉分析师")视为内置默认 → 使用硬编码JSON schema;否则视为用户自定义 → 使用用户system_prompt,末尾追加JSON硬约束:"你必须只返回一个合法的JSON对象,不要输出任何其他文字、解释或markdown。"
  • user_prompt:用户模板存在就简单渲染(image_count=1/industry=通用/image_urls留空),不存在用硬编码默认
  • DB不可用/读取异常 → 静默fallback到硬编码JSON prompt,不阻断流程
  • fast路径(qwen3.8-flash)和pro路径(qwen3.7-plus)都接入

改动

  • 新文件:vision/_prompt.py(153行,resolve_fast_prompt/resolve_pro_prompt + 30s TTL缓存)
  • vlm_fast_json.py:删掉硬编码_FAST_SYSTEM/_FAST_USER常量,改为调用 _prompt.resolve_fast_prompt()
  • vlm_fallback.py:删掉硬编码_PRO_SYSTEM/_PRO_USER常量,改为调用 _prompt.resolve_pro_prompt()

本地冒烟:DB不可用时fallback默认JSON prompt正常;pro兜底portrait_prompt返回质量良好。

## 根因 #2200重写V2路径时,把 prompt_loader 调用链删了,system/user prompt 全部硬编码在 vlm_fast_json.py / vlm_fallback.py,用户在后台管理端配置 viral_video_prompt_templates 表 prompt_type=image_analysis 的自定义提示词完全没生效。 ## 修复 - 新增 vision/_prompt.py:复用 packages.application.viral_video.prompt_loader.get_template("image_analysis") 读后台配置,30秒TTL热加载 - 判定策略:读到的 system_prompt 以默认XML模板开头("你是电商商品视觉分析师")视为内置默认 → 使用硬编码JSON schema;否则视为用户自定义 → 使用用户system_prompt,末尾追加JSON硬约束:"你必须只返回一个合法的JSON对象,不要输出任何其他文字、解释或markdown。" - user_prompt:用户模板存在就简单渲染(image_count=1/industry=通用/image_urls留空),不存在用硬编码默认 - DB不可用/读取异常 → 静默fallback到硬编码JSON prompt,不阻断流程 - fast路径(qwen3.8-flash)和pro路径(qwen3.7-plus)都接入 ## 改动 - 新文件:vision/_prompt.py(153行,resolve_fast_prompt/resolve_pro_prompt + 30s TTL缓存) - vlm_fast_json.py:删掉硬编码_FAST_SYSTEM/_FAST_USER常量,改为调用 _prompt.resolve_fast_prompt() - vlm_fallback.py:删掉硬编码_PRO_SYSTEM/_PRO_USER常量,改为调用 _prompt.resolve_pro_prompt() 本地冒烟:DB不可用时fallback默认JSON prompt正常;pro兜底portrait_prompt返回质量良好。
xiaoxia added 1 commit 2026-10-05 22:29:52 +08:00
fix(vision-v2): 恢复后台prompt配置读取,修复用户自定义提示词不生效
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 48s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m7s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 2m14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m21s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m7s
AI Code Review / AI Code Review (pull_request) Successful in 6m57s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 11m26s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 11m33s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 14m6s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 15m2s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 37m14s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
35e7789c81
根因:#2200重写V2时把 prompt_loader 调用链删了,system/user prompt
全部硬编码在 vlm_fast_json.py / vlm_fallback.py,用户在后台管理端
配置 viral_video_prompt_templates 表 prompt_type='image_analysis' 的
自定义提示词完全没被读取。

修复:
- 新增 vision/_prompt.py,复用 packages.application.viral_video.prompt_loader
  读取后台 image_analysis 配置,30秒TTL热加载
- 判定策略:读到的system_prompt以默认XML模板开头('你是电商商品视觉分析师')
  视为内置默认→使用硬编码JSON schema;否则视为用户自定义→使用用户
  system_prompt并在末尾追加JSON硬约束'你必须只返回一个合法的JSON对象...'
- user_prompt同理:用户模板存在就渲染(image_count=1/industry=通用/image_urls留空),
  不存在用硬编码默认
- DB不可用/读取异常→静默fallback到硬编码JSON prompt,不阻断流程
- fast路径(qwen3.8-flash)和pro路径(qwen3.7-plus)都接入_resolve

本地冒烟:DB不可用时fallback到默认JSON prompt正常;pro兜底返回pp质量良好。

Refs: 用户反馈后台配置提示词无效
xiaoxia merged commit 0bf4f359a7 into develop 2026-10-05 22:30:45 +08:00

🗑️ 预览环境已清理

PR #2211 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #2211 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。

🚀 预览环境已部署

项目 详情
PR号 #2211
预览链接 https://pr-2211.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #2211 | | 预览链接 | [https://pr-2211.preview.xiaoxiajianji.com](https://pr-2211.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Sign in to join this conversation.