# 智能自动模型系统升级开发文档 > 版本: v2.0 > 日期: 2025-01-31 > 参考: Lovart.ai 设计智能体架构、MagicQuill (CVPR 2025)、PromptEnhancer (腾讯混元) --- ## 🎯 核心定位 **本系统主要应用于图片编辑场景,不是文生图。** ``` ┌─────────────────────────────────────────────────────────────────┐ │ 业务场景优先级 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ⭐⭐⭐ 图片编辑 (核心) │ │ - 抠图/去背景 │ │ - 换背景(纯色/场景) │ │ - 图片增强/变清晰 │ │ - 图像拓展 (Outpainting) │ │ - 局部修改 (Inpainting) │ │ - 风格迁移 │ │ │ │ ⭐⭐ 图片理解 (辅助) │ │ - 图片内容分析 │ │ - 对象识别 │ │ │ │ ⭐ 图片/视频生成 (辅助) │ │ - 基于参考图生成 │ │ - 图生视频 │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 一、项目概述 ### 1.1 现状分析 当前自动模型功能采用**基于关键词的规则匹配**方式: ```typescript // 当前实现 - app/(chat)/api/chat/route.ts const videoKeywords = /(视频|video|动画|sora|动起来...)/i; const imageEditKeywords = /(修图|P图|去背景|抠图...)/i; const imageGenKeywords = /(画|绘制|生成图片|海报...)/i; if (videoKeywords.test(textContent)) { bestModel = allModels.find(m => m.model.displayName.includes("视频")); } ``` **存在的问题:** - ❌ 规则硬编码,扩展性差 - ❌ 无法理解复杂/模糊的用户意图 - ❌ 提示词质量完全依赖用户 - ❌ 无法学习用户偏好 - ❌ 不支持多轮对话细化 ### 1.2 核心应用场景:图片编辑 **我们的主要业务是图片编辑,不是文生图。** 主要场景包括: | 场景 | 描述 | 对应模型能力 | |-----|------|-------------| | **抠图/去背景** | 去除图片背景,保留主体 | image_edit + vision | | **换背景** | 替换为新背景(纯色/场景) | image_edit | | **图片增强** | 变清晰、降噪、提升质量 | image_edit | | **图像拓展** | Outpainting,扩展画布边界 | image_edit | | **局部修改** | Inpainting,修改特定区域 | image_edit + vision | | **尺寸调整** | 裁剪、缩放、调整比例 | resize (工具) | | **角度调整** | 旋转、翻转、透视变换 | angle_edit (工具) | | **风格迁移** | 改变图片风格(卡通化等) | image_edit | | **图片理解** | 分析图片内容、识别对象 | vision | | **生图辅助** | 基于参考图生成新图 | image_gen | ### 1.3 升级目标 参考 Lovart.ai 的设计智能体架构,构建**基于 LLM 的智能图片编辑系统**: ``` ┌─────────────────────────────────────────────────────────────────┐ │ 智能自动模型系统 v2.0 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 用户输入 ──▶ Qwen3 多模态分析 ──▶ 智能模型路由 ──▶ 生成模型 │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ 意图识别 + 语义分解 最优模型选择 提示词优化执行 │ │ (8个设计维度分析) (多因素评分) (专业级提示词) │ │ │ │ │ │ │ └──────────┬───────┘ │ │ │ ▼ ▼ │ │ 用户偏好学习系统 ◀──── 反馈迭代优化 │ │ (贝叶斯优化/记忆) │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` **核心升级:** - ✅ 使用 Qwen3 进行智能意图分析 - ✅ 自动优化/扩写用户提示词 - ✅ 基于多因素评分的模型路由 - ✅ 用户偏好学习与记忆 - ✅ 支持多轮对话细化 --- ## 1.3 当前已配置的模型清单 ### 模型提供商 (AiProvider) | 名称 | 类型 (providerType) | API 地址 | 用途 | |-----|---------------------|----------|------| | 阿里云 | `alibaba` | dashscope.aliyuncs.com | 对话模型 | | 千问生图 | `alibaba-image` | dashscope.aliyuncs.com | 阿里图片生成 | | Gemini中转 | `gemini` | grsai.dakka.com.cn | Gemini 图片生成 | | 既梦模型 | `volcano-vision` | ark.cn-beijing.volces.com | 火山图片生成 | | 火山引擎视频 | `volcano-video` | ark.cn-beijing.volces.com | 视频生成 | | 千问视频 | `qianwen-video` | dashscope.aliyuncs.com | 阿里视频生成 | | 千问本地模型 | `local` | 156.225.27.52:8001 | 本地部署 | | 环科API | `openai` | api.huandutech.com | OpenAI 兼容 | ### 已启用的模型 (AiModel) | 显示名称 | modelId | 提供商类型 | 能力 | 配置 | |---------|---------|-----------|------|------| | **千问3「对话模型」** | qwen3-vl-plus | alibaba | 对话 | 默认模型 | | **既梦4.5「生图模型」** | doubao-seedream-4-5-251128 | volcano-vision | 图片生成 | 火山既梦 | | **VIDEO「视频模型」** | volcano-video-master | volcano-video | 视频生成 | 支持多模式 | | **GTP1.5「生图模型」** | gpt-image-1.5 | gemini | 视觉理解 | Gemini 中转 | | **香蕉PRO「生图模型」** | nano-banana-pro | gemini | 视觉+图片生成 | 最大2张图 | | **灵魂4.5「生图模型」** | qwen-image-edit-max-2026-01-16 | alibaba-image | 视觉+图片生成 | 支持提示词扩展 | | **SeedancePro** | doubao-seedance-1-0-pro-250528 | volcano-video | 视频生成 | 专业版,1080p | | **SeedanceProFast** | doubao-seedance-1-0-pro-fast-251015 | volcano-video | 视频生成 | 快速版 | | **SeedanceLiteI2V** | doubao-seedance-1-0-lite-i2v-250428 | volcano-video | 视频生成 | 图生视频轻量版 | | **SeedanceLiteT2V** | doubao-seedance-1-0-lite-t2v-250428 | volcano-video | 视频生成 | 文生视频轻量版 | ### 模型能力矩阵 ``` ┌────────────────────────────────────────────────────────────────────────────┐ │ 模型能力矩阵 │ ├────────────────────┬─────────┬─────────┬─────────┬─────────┬──────────────┤ │ 模型 │ 对话 │ 视觉理解 │ 图片生成 │ 视频生成 │ 图片编辑 │ ├────────────────────┼─────────┼─────────┼─────────┼─────────┼──────────────┤ │ 千问3 (VL) │ ✅ │ ✅ │ ❌ │ ❌ │ ❌ │ │ 既梦4.5 │ ❌ │ ❌ │ ✅ │ ❌ │ ❌ │ │ GTP1.5 │ ❌ │ ✅ │ ❌ │ ❌ │ ❌ │ │ 香蕉PRO │ ❌ │ ✅ │ ✅ │ ❌ │ ✅ │ │ 灵魂4.5 │ ❌ │ ✅ │ ✅ │ ❌ │ ✅ │ │ VIDEO │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │ │ SeedancePro │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │ │ SeedanceProFast │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │ │ SeedanceLiteI2V │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │ │ SeedanceLiteT2V │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ │ └────────────────────┴─────────┴─────────┴─────────┴─────────┴──────────────┘ 注:千问3 使用的是 qwen3-vl-plus 模型,VL = Vision-Language,是阿里云的多模态模型, 既支持纯文本对话,也支持图片理解分析。 ``` ### 智能路由映射策略 (图片编辑优先) 根据用户意图,智能路由到最佳模型: | 意图 | 优先级 | 首选模型 | 备选模型 | 路由逻辑 | |-----|-------|---------|---------|---------| | **图片编辑** | ⭐⭐⭐ | 灵魂4.5 | 香蕉PRO | 核心业务,supportsVision + supportsImageGen | | **视觉理解** | ⭐⭐ | 千问3 (VL) | GTP1.5 | 千问3成本更低,效果也好 | | **图片生成** | ⭐⭐ | 灵魂4.5 | 香蕉PRO / 既梦4.5 | 支持提示词扩展优先 | | **视频生成** | ⭐ | VIDEO (Master) | SeedancePro | 自动选择子模型 | | **图生视频** | ⭐ | SeedanceLiteI2V | SeedancePro | 有图片输入 | | **普通对话** | - | 千问3 (VL) | - | 默认对话模型 | ### 图片编辑子意图路由 | 子意图 | 最佳模型 | 原因 | |-------|---------|------| | remove_background | 灵魂4.5 / 香蕉PRO | 支持精准抠图 | | replace_background | 灵魂4.5 | 支持场景生成 | | enhance | 灵魂4.5 / 既梦4.5 | 高质量增强 | | extend (outpainting) | 灵魂4.5 | 支持画布扩展 | | inpaint | 灵魂4.5 / 香蕉PRO | 精准局部编辑 | | style_transfer | 香蕉PRO / 灵魂4.5 | 风格迁移能力 | | resize/crop | 工具处理 | 不需要AI模型 | | color_adjust | 工具处理 | 不需要AI模型 | **重要说明:** - **图片编辑是核心业务**,优先保证编辑类意图的识别准确性 - **灵魂4.5 (alibaba-image)** 是图片编辑的首选,支持提示词扩展 - **千问3 (VL)** 用于图片理解分析,成本低效果好 - **resize/crop/color_adjust** 等简单操作由前端工具直接处理,不需要调用 AI 模型 --- ## 二、聊天对话框中的图片编辑流程设计 ### 2.1 当前系统数据流分析 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ 当前系统数据流 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ 用户在对话框中 │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ MultimodalInput │───▶│ Chat 组件 │───▶│ sendMessage() │ │ │ │ (前端组件) │ │ 状态管理 │ │ 发送消息 │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ 用户输入: │ │ │ │ - 图片附件 (attachments) │ │ │ │ - 文字描述 (input) │ │ │ │ - 选择的模型 (selectedModelId) ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ POST /api/chat │ │ │ │ │ (route.ts) │ │ │ │ └─────────────────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ Auto Mode 检测 │ │ │ │ │ (关键词匹配) │ │ │ │ └─────────────────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ 路由到对应模型 │ │ │ │ │ - gemini-image │ │ │ │ │ - alibaba-image │ │ │ │ │ - volcano-vision │ │ │ │ └─────────────────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────────────┐ │ │ │ │ 模型生成结果 │ │ │ │ │ 返回 Markdown 图片 │ │ │ │ └─────────────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Messages 组件渲染结果 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### 2.2 升级后的智能图片编辑流程 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ 智能图片编辑升级流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ 用户在对话框中输入 │ │ ┌──────────────────────────────────────┐ │ │ │ 📸 上传图片 │ │ │ │ 💬 "帮我把背景换成白色" │ │ │ │ 📤 发送 │ │ │ └──────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Phase 1: 智能意图分析器 (Smart Analyzer) │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ 使用 Qwen3 VL 分析: │ │ │ │ │ │ - 检测用户意图: replace_background │ │ │ │ │ │ - 分析图片内容: 产品图,背景杂乱 │ │ │ │ │ │ - 置信度: 0.95 │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Phase 2: 提示词优化器 (Prompt Optimizer) │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ 用户原始: "帮我把背景换成白色" │ │ │ │ │ │ ▼ │ │ │ │ │ │ 优化后: "将图片背景替换为纯白色(#FFFFFF),保留产品主体, │ │ │ │ │ │ 保持自然阴影效果,边缘处理平滑自然" │ │ │ │ │ │ │ │ │ │ │ │ 负面提示: "模糊边缘,残留背景,阴影不自然,过曝" │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Phase 3: 智能模型路由器 (Model Router) │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ 意图: replace_background │ │ │ │ │ │ 推荐模型: alibaba-image (灵魂4.5) │ │ │ │ │ │ 原因: 支持高质量背景替换,提示词扩展能力强 │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Phase 4: 执行图片编辑 │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ 调用 alibaba-image API: │ │ │ │ │ │ - 输入图片: 用户上传的原图 │ │ │ │ │ │ - 优化后提示词: "将图片背景替换为纯白色..." │ │ │ │ │ │ - 负面提示词: "模糊边缘..." │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ 返回结果到对话框 │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ 🤖 助手回复: │ │ │ │ │ │ "已将背景替换为白色,保留了产品的自然阴影效果。" │ │ │ │ │ │ │ │ │ │ │ │ [编辑后的图片] │ │ │ │ │ │ │ │ │ │ │ │ 💡 提示: 如需调整,可以说"阴影深一点"或"边缘更清晰" │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### 2.3 关键代码位置说明 #### 前端代码 | 文件 | 作用 | 需要修改的内容 | |-----|------|---------------| | `components/multimodal-input.tsx` | 用户输入组件 | 无需大改,已支持图片+文字发送 | | `components/chat.tsx` | 聊天状态管理 | 添加意图分析结果展示(可选) | | `components/messages.tsx` | 消息渲染 | 无需修改,已支持图片渲染 | #### 后端代码 | 文件 | 作用 | 需要修改的内容 | |-----|------|---------------| | `app/(chat)/api/chat/route.ts` | 聊天API入口 | **核心修改点** - 集成智能分析器和路由器 | | `lib/ai/smart-analyzer.ts` | 智能意图分析器 | **新建** - Qwen3 意图分析 | | `lib/ai/prompt-optimizer.ts` | 提示词优化器 | **新建** - 提示词增强 | | `lib/ai/model-router.ts` | 模型路由器 | **新建** - 智能模型选择 | ### 2.4 详细实现方案 #### 2.4.1 修改 route.ts 的 Auto Mode 逻辑 **当前代码** (route.ts 第 334-422 行): ```typescript // ========== Auto Mode Logic ========== if (finalModelId === "auto") { console.log("[Auto Mode] Detecting intent..."); // 使用关键词匹配... const videoKeywords = /视频|video.../; const imageEditKeywords = /修图|P图.../; // ... } ``` **升级后代码**: ```typescript // ========== Smart Auto Mode Logic ========== if (finalModelId === "auto") { console.log("[Smart Auto Mode] Starting intelligent analysis..."); // 1. 调用智能分析器 const { analyzeIntent } = await import("@/lib/ai/smart-analyzer"); const analysisResult = await analyzeIntent({ text: textContent, hasImage, imageUrls: extractImageUrls(lastUserMessage), }); console.log("[Smart Auto Mode] Analysis result:", analysisResult); // 2. 如果是图片编辑类意图,优化提示词 if (analysisResult.intent.startsWith("image_edit")) { const { optimizePrompt } = await import("@/lib/ai/prompt-optimizer"); const optimizedResult = await optimizePrompt({ originalPrompt: textContent, intent: analysisResult.intent, subIntent: analysisResult.subIntent, }); // 替换用户消息中的文本为优化后的提示词 message.parts = message.parts.map(part => { if (part.type === "text") { return { ...part, text: optimizedResult.optimizedPrompt }; } return part; }); console.log("[Smart Auto Mode] Prompt optimized:", optimizedResult.optimizedPrompt); } // 3. 路由到最佳模型 const { routeToModel } = await import("@/lib/ai/model-router"); const selectedModel = await routeToModel({ intent: analysisResult.intent, subIntent: analysisResult.subIntent, hasImage, }); finalModelId = selectedModel.id; console.log(`[Smart Auto Mode] ✅ Routed to: ${selectedModel.displayName}`); } ``` #### 2.4.2 新建 smart-analyzer.ts ```typescript // lib/ai/smart-analyzer.ts import { getLanguageModelById } from "./dynamic-provider"; import { getEnabledAiModelsWithProvider } from "@/lib/db/queries"; export interface AnalysisResult { intent: string; // 主意图: image_edit, vision, image_gen, video_gen, chat subIntent?: string; // 子意图: remove_background, replace_background, enhance 等 confidence: number; // 置信度 0-1 optimizedPrompt?: string; // 优化后的提示词(可选) negativePrompt?: string; // 负面提示词(可选) suggestedModel?: string; // 推荐模型ID } const ANALYZER_SYSTEM_PROMPT = `你是图片编辑意图分析专家。分析用户输入,返回JSON格式结果。 ## 图片编辑子意图(核心,优先识别) - remove_background: 抠图、去背景、透明背景 - replace_background: 换背景、改背景、白底、场景替换 - enhance: 变清晰、高清、锐化、降噪、提升质量 - extend: 扩展、拓展、outpainting - inpaint: 去除XX、消除、擦掉、修改局部 - style_transfer: 风格化、卡通化、动漫风 - resize: 缩放、裁剪、调整尺寸 - color_adjust: 调色、调整颜色、亮度、对比度 ## 输出格式(严格JSON) { "intent": "image_edit", "subIntent": "replace_background", "confidence": 0.95, "optimizedPrompt": "将图片背景替换为纯白色(#FFFFFF),保留产品主体完整,保持自然阴影,边缘处理平滑自然", "negativePrompt": "模糊边缘,残留背景,阴影不自然,过曝,变形" }`; export async function analyzeIntent(params: { text: string; hasImage: boolean; imageUrls?: string[]; }): Promise { const { text, hasImage, imageUrls } = params; // 获取千问3 VL 模型用于分析 const allModels = await getEnabledAiModelsWithProvider(); const qwenModel = allModels.find(m => m.provider.type === "alibaba" && m.model.supportsVision ); if (!qwenModel) { // 回退到关键词匹配 return fallbackKeywordAnalysis(text, hasImage); } const model = await getLanguageModelById(qwenModel.model.id); if (!model) { return fallbackKeywordAnalysis(text, hasImage); } try { // 构建消息 const messages = [ { role: "system", content: ANALYZER_SYSTEM_PROMPT }, { role: "user", content: hasImage ? `用户上传了图片,请求: "${text}"` : `用户请求(无图片): "${text}"` } ]; // 调用千问3分析 const response = await model.doGenerate({ messages, temperature: 0.1, // 低温度保证稳定输出 }); // 解析JSON响应 const jsonMatch = response.text.match(/\{[\s\S]*\}/); if (jsonMatch) { return JSON.parse(jsonMatch[0]); } } catch (error) { console.error("[Smart Analyzer] Error:", error); } return fallbackKeywordAnalysis(text, hasImage); } // 回退方案:关键词匹配 function fallbackKeywordAnalysis(text: string, hasImage: boolean): AnalysisResult { const lowerText = text.toLowerCase(); // 图片编辑关键词 if (hasImage) { if (/抠图|去背景|透明/.test(lowerText)) { return { intent: "image_edit", subIntent: "remove_background", confidence: 0.9 }; } if (/换背景|白底|改背景/.test(lowerText)) { return { intent: "image_edit", subIntent: "replace_background", confidence: 0.9 }; } if (/变清晰|高清|锐化|降噪/.test(lowerText)) { return { intent: "image_edit", subIntent: "enhance", confidence: 0.9 }; } // ... 其他子意图 // 有图但意图不明确 → 视觉理解 if (/看|识别|分析|描述|这是什么/.test(lowerText)) { return { intent: "vision", confidence: 0.8 }; } // 有图但无明确意图 → 默认为编辑 return { intent: "image_edit", confidence: 0.5 }; } // 无图 → 生成或对话 if (/画|绘制|生成图/.test(lowerText)) { return { intent: "image_gen", confidence: 0.8 }; } return { intent: "chat", confidence: 0.7 }; } ``` #### 2.4.3 新建 prompt-optimizer.ts ```typescript // lib/ai/prompt-optimizer.ts export interface OptimizeResult { originalPrompt: string; optimizedPrompt: string; negativePrompt: string; } // 图片编辑子意图的提示词模板 const EDIT_TEMPLATES: Record = { remove_background: { template: "去除图片背景,保留主体{subject},输出透明背景,边缘处理平滑自然,保留细节", negative: "残留背景,毛边,边缘模糊,主体不完整" }, replace_background: { template: "将图片背景替换为{background},保持主体完整,光影自然协调,边缘过渡平滑", negative: "残留原背景,边缘不自然,光影不协调,透视错误" }, enhance: { template: "提升图片整体清晰度和质量,保持自然色彩,去除噪点,增强细节", negative: "过度锐化,色彩失真,噪点,伪影" }, extend: { template: "向{direction}方向扩展图片{amount},保持原有风格和色调一致,光影过渡自然", negative: "风格不一致,明显接缝,透视错误" }, inpaint: { template: "去除/修改图片中的{target},用周围环境自然填充,保持整体风格一致", negative: "明显修复痕迹,风格不一致,内容错误" }, style_transfer: { template: "将图片转换为{style}风格,保持主体可识别性,色彩风格协调", negative: "主体变形,特征丢失,风格不统一" } }; export async function optimizePrompt(params: { originalPrompt: string; intent: string; subIntent?: string; }): Promise { const { originalPrompt, intent, subIntent } = params; // 只对图片编辑类意图进行优化 if (intent !== "image_edit" || !subIntent) { return { originalPrompt, optimizedPrompt: originalPrompt, negativePrompt: "" }; } const template = EDIT_TEMPLATES[subIntent]; if (!template) { return { originalPrompt, optimizedPrompt: originalPrompt, negativePrompt: "模糊,低质量,变形" }; } // 从用户输入中提取关键信息填充模板 let optimizedPrompt = template.template; // 提取背景描述(换背景场景) if (subIntent === "replace_background") { const bgMatch = originalPrompt.match(/(?:换成|改成|替换为|变成)(.+?)(?:背景|$)/); const background = bgMatch ? bgMatch[1].trim() : "纯白色"; optimizedPrompt = optimizedPrompt.replace("{background}", background); } // 提取扩展方向和数量(扩展场景) if (subIntent === "extend") { const dirMatch = originalPrompt.match(/向?(上|下|左|右)/); const direction = dirMatch ? dirMatch[1] : "四周"; const amountMatch = originalPrompt.match(/(\d+%?)/); const amount = amountMatch ? amountMatch[1] : "50%"; optimizedPrompt = optimizedPrompt .replace("{direction}", direction) .replace("{amount}", amount); } // 提取目标对象(局部修改场景) if (subIntent === "inpaint") { const targetMatch = originalPrompt.match(/(?:去除|消除|擦掉|删除)(.+?)(?:,|。|$)/); const target = targetMatch ? targetMatch[1].trim() : "指定区域"; optimizedPrompt = optimizedPrompt.replace("{target}", target); } // 提取风格(风格迁移场景) if (subIntent === "style_transfer") { const styleMatch = originalPrompt.match(/(?:转换为|变成|改成)(.+?)(?:风格|$)/); const style = styleMatch ? styleMatch[1].trim() : "卡通"; optimizedPrompt = optimizedPrompt.replace("{style}", style); } return { originalPrompt, optimizedPrompt: `${optimizedPrompt}。用户原始要求:${originalPrompt}`, negativePrompt: template.negative }; } ``` #### 2.4.4 新建 model-router.ts ```typescript // lib/ai/model-router.ts import { getEnabledAiModelsWithProvider } from "@/lib/db/queries"; export interface RouteResult { id: string; displayName: string; providerType: string; reason: string; } // 意图到模型的映射配置 const INTENT_MODEL_MAP: Record = { // 图片编辑:优先 alibaba-image "image_edit": { providerTypes: ["alibaba-image", "gemini"], requireVision: true, requireImageGen: true }, // 视觉理解:优先千问3 VL(成本低) "vision": { providerTypes: ["alibaba", "gemini"], requireVision: true }, // 图片生成 "image_gen": { providerTypes: ["alibaba-image", "gemini", "volcano-vision"], requireImageGen: true }, // 视频生成 "video_gen": { providerTypes: ["volcano-video", "qianwen-video"] }, // 普通对话 "chat": { providerTypes: ["alibaba", "openai"] } }; export async function routeToModel(params: { intent: string; subIntent?: string; hasImage: boolean; }): Promise { const { intent, subIntent, hasImage } = params; // 获取所有可用模型 const allModels = await getEnabledAiModelsWithProvider(); // 获取意图对应的模型配置 const config = INTENT_MODEL_MAP[intent] || INTENT_MODEL_MAP["chat"]; // 按优先级查找匹配的模型 for (const providerType of config.providerTypes) { const candidates = allModels.filter(m => { // 匹配 provider 类型 if (m.provider.type !== providerType) return false; // 检查能力要求 if (config.requireVision && !m.model.supportsVision) return false; if (config.requireImageGen && !m.model.supportsImageGen) return false; // 排除子模型(只选主模型) if (m.model.isSubModel) return false; return true; }); if (candidates.length > 0) { // 优先选择默认模型 const defaultModel = candidates.find(c => c.model.isDefault); const selected = defaultModel || candidates[0]; return { id: selected.model.id, displayName: selected.model.displayName, providerType: selected.provider.type, reason: `意图 ${intent}${subIntent ? `/${subIntent}` : ''} → ${selected.model.displayName}` }; } } // 兜底:返回任意可用模型 const fallback = allModels.find(m => !m.model.isSubModel) || allModels[0]; return { id: fallback.model.id, displayName: fallback.model.displayName, providerType: fallback.provider.type, reason: "fallback" }; } ``` ### 2.5 用户体验流程 ``` ┌────────────────────────────────────────────────────────────────────┐ │ 用户交互流程 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ 1️⃣ 用户选择模型: │ │ ┌─────────────────────┐ │ │ │ ✨ 智能自动 (Auto) │ ← 默认选项,推荐使用 │ │ │ 灵魂4.5 (图片编辑) │ │ │ │ 香蕉PRO │ │ │ │ 千问3 VL │ │ │ └─────────────────────┘ │ │ │ │ 2️⃣ 用户上传图片 + 输入文字: │ │ ┌─────────────────────────────────────────┐ │ │ │ [📸 产品图.jpg] │ │ │ │ │ │ │ │ 帮我把背景换成白色 _______________ 📤 │ │ │ └─────────────────────────────────────────┘ │ │ │ │ 3️⃣ 系统处理(后台透明执行): │ │ ┌─────────────────────────────────────────┐ │ │ │ 🔍 分析意图: replace_background (95%) │ │ │ │ ✨ 优化提示词... │ │ │ │ 🚀 路由到: 灵魂4.5 │ │ │ │ ⏳ 生成中... │ │ │ └─────────────────────────────────────────┘ │ │ │ │ 4️⃣ 返回结果: │ │ ┌─────────────────────────────────────────┐ │ │ │ 🤖 助手: │ │ │ │ │ │ │ │ 已将背景替换为白色。 │ │ │ │ │ │ │ │ [编辑后的图片预览] │ │ │ │ │ │ │ │ 📥 下载原图 🔄 重新生成 │ │ │ └─────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ ``` --- ## 三、技术架构 ### 2.1 整体架构图 ``` ┌──────────────────────────────────────────────────────────────────────────┐ │ 客户端层 │ ├──────────────────────────────────────────────────────────────────────────┤ │ MultimodalInput ──▶ 选择"智能自动"模型 ──▶ 发送消息 │ └──────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ API 网关层 │ ├──────────────────────────────────────────────────────────────────────────┤ │ /api/chat/route.ts │ │ │ │ │ ├─▶ 检测 modelId === "auto" │ │ │ │ │ └─▶ 调用智能分析服务 ────────────────────────────────────────┐ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ ▼ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ 智能分析服务层 (新增) │ ├──────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 意图分析模块 │ │ 提示词优化模块 │ │ 模型路由模块 │ │ │ │ │ │ │ │ │ │ │ │ - 意图分类 │ │ - 维度分解 │ │ - 多因素评分 │ │ │ │ - 置信度评估 │ │ - 专业词汇注入 │ │ - 能力匹配 │ │ │ │ - 澄清问题生成 │ │ - 质量关键词 │ │ - 负载均衡 │ │ │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ │ │ │ │ └────────────────────┼────────────────────┘ │ │ ▼ │ │ ┌─────────────────────┐ │ │ │ Qwen3 多模态模型 │ │ │ │ (qwen3-turbo) │ │ │ └─────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ 生成模型执行层 │ ├──────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Gemini 2.0 │ │ 阿里万象 │ │ 火山视频 │ │ Qwen-VL │ │ │ │ Flash │ │ 图片生成 │ │ 生成模型 │ │ 多模态 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ 用户偏好学习层 (新增) │ ├──────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 反馈收集 │ │ 偏好分析 │ │ 上下文记忆 │ │ │ │ │ │ │ │ │ │ │ │ - 显式反馈 │ │ - 风格偏好 │ │ - 历史提示词 │ │ │ │ - 隐式反馈 │ │ - 色彩偏好 │ │ - 常用风格 │ │ │ │ - 重新生成统计 │ │ - 质量偏好 │ │ - 决策点追踪 │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ ``` ### 2.2 核心模块设计 #### 2.2.1 意图分析模块 **输入:** - 用户文本输入 - 是否有图片附件 - 对话历史 (上下文) **输出:** ```typescript interface IntentAnalysis { // 意图类型 intent: "image_gen" | "image_edit" | "video_gen" | "vision" | "chat"; // 意图置信度 (0-1) confidence: number; // 子意图 (更细粒度) subIntent?: string; // 如 "remove_background", "enhance_quality", "style_transfer" // 是否需要澄清 needsClarification: boolean; // 澄清问题 (如果需要) clarifyingQuestions?: string[]; } ``` #### 2.2.2 提示词优化模块 **设计维度分解 (参考 Lovart 的 12 维度):** | 维度 | 英文 | 描述 | 示例 | |-----|------|------|------| | 主体 | subject | 画面的主要对象 | "一只橘色的猫" | | 动作 | action | 主体的姿态或行为 | "慵懒地躺着" | | 风格 | style | 艺术风格 | "写实摄影风格" | | 光影 | lighting | 光照效果 | "柔和的自然光" | | 构图 | composition | 画面构图 | "中景特写" | | 色彩 | color | 色彩方案 | "暖色调" | | 氛围 | mood | 情绪氛围 | "温馨舒适" | | 质量 | quality | 质量关键词 | "8K, 高细节" | **输出:** ```typescript interface PromptOptimization { // 维度分解 dimensions: { subject: string; action: string; style: string; lighting: string; composition: string; color: string; mood: string; quality: string; }; // 维度权重 (重要程度) weights: Record; // 优化后的完整提示词 optimizedPrompt: string; // 负面提示词 (需要避免的) negativePrompt?: string; } ``` #### 2.2.3 模型路由模块 **多因素评分算法:** ```typescript interface ModelScore { modelId: string; scores: { intentMatch: number; // 意图匹配度 (0-50) styleMatch: number; // 风格匹配度 (0-20) qualityMatch: number; // 质量能力匹配 (0-15) costEfficiency: number; // 成本效益 (0-10) loadBalance: number; // 负载均衡 (0-5) }; totalScore: number; } ``` --- ## 三、实现计划 ### Phase 1: 核心功能 (MVP) **目标:** 实现 Qwen3 意图分析 + 提示词优化 **新增文件:** ``` lib/ ├── ai/ │ ├── smart-analyzer.ts # 智能分析核心逻辑 │ ├── prompt-optimizer.ts # 提示词优化器 │ └── model-router.ts # 模型路由器 │ app/ ├── api/ │ └── smart-analyze/ │ └── route.ts # 智能分析 API ``` **修改文件:** ``` app/(chat)/api/chat/route.ts # 集成智能分析 ``` #### 3.1.1 智能分析器 (`lib/ai/smart-analyzer.ts`) ```typescript import { createOpenAI } from "@ai-sdk/openai"; import { generateText } from "ai"; // Qwen3 客户端配置 const qwen = createOpenAI({ baseURL: process.env.QWEN_API_BASE_URL, apiKey: process.env.QWEN_API_KEY, }); // 系统提示词 - 针对当前系统模型配置优化 const ANALYZER_SYSTEM_PROMPT = `你是一个专业的 AI 设计助手,负责分析用户意图并优化提示词。 ## 你的任务 1. 分析用户输入的意图类型 2. 将模糊描述分解为 8 个专业设计维度 3. 生成优化后的高质量提示词 4. 推荐最适合的生成模型 ## 当前系统可用的模型 | 模型名称 | 类型 | 能力 | 适用场景 | |---------|------|------|---------| | 千问3 (VL) | alibaba | 对话+视觉理解 | 普通对话、看图问答、图片分析 | | 灵魂4.5 | alibaba-image | 图片生成+编辑 | 高质量图片生成,支持提示词扩展 | | 香蕉PRO | gemini | 图片生成+视觉 | 图片生成、图片编辑 | | 既梦4.5 | volcano-vision | 图片生成 | 快速图片生成 | | GTP1.5 | gemini | 视觉理解 | 图片分析、识别 | | VIDEO | volcano-video | 视频生成 | 文生视频、图生视频 | 注意:千问3 使用的是 qwen3-vl-plus 多模态模型,VL = Vision-Language,既支持文本对话也支持图片理解。 ## 意图类型定义(图片编辑为主) ### 核心意图:图片编辑 (image_edit) - 最高优先级 用户上传了图片,并希望对其进行编辑修改。 | 子意图 | 触发词 | 说明 | |-------|-------|------| | remove_background | 抠图、去背景、去背、扣图、透明背景 | 去除背景保留主体 | | replace_background | 换背景、改背景、背景换成、场景替换 | 替换为新背景 | | enhance | 变清晰、高清、锐化、降噪、提升质量、修复 | 图片增强 | | extend | 扩展、拓展、延伸、outpainting、扩图 | 图像边界拓展 | | inpaint | 去除XX、消除、擦掉、修改XX部分、局部修改 | 局部区域修改 | | style_transfer | 风格化、卡通化、动漫风、油画风、改风格 | 风格迁移 | | resize | 缩放、放大、缩小、调整尺寸、裁剪 | 尺寸调整 | | color_adjust | 调色、调整颜色、亮度、对比度、饱和度 | 颜色调整 | 推荐模型:alibaba-image(灵魂4.5)或 gemini(香蕉PRO) ### 辅助意图:图片理解 (vision) 用户上传了图片,想要理解/分析其内容(不涉及编辑)。 触发词:看、识别、分析、描述、这是什么、有什么、tell me、what is this 推荐模型:alibaba(千问3 VL,成本低效果好) ### 辅助意图:图片生成 (image_gen) 用户想要生成新图片(无需上传图片,或基于参考图生成)。 触发词:画、绘制、生成图片、创建、设计 推荐模型:alibaba-image(灵魂4.5) ### 辅助意图:视频生成 (video_gen) 用户想要将图片转为视频或生成视频。 触发词:视频、动画、动起来、让它动 推荐模型:volcano-video ### 默认意图:对话 (chat) 普通文字对话,不涉及图像处理。 推荐模型:alibaba(千问3 VL) ## 提示词优化公式 ### 图片编辑场景(核心) 针对不同编辑子意图,优化提示词的重点不同: | 子意图 | 提示词重点 | 示例优化 | |-------|----------|---------| | remove_background | 描述主体特征 | "保留产品主体,去除所有背景,输出透明PNG" | | replace_background | 描述新背景细节 | "将背景替换为白色纯色背景,保持产品阴影" | | enhance | 描述增强程度和方向 | "提升图片清晰度,保持自然色彩,去除噪点" | | extend | 描述扩展方向和内容 | "向右扩展50%,保持原有风格和光影一致性" | | inpaint | 精确描述修改区域 | "去除图片右上角的水印,用周围纹理自然填充" | | style_transfer | 描述目标风格 | "将照片转换为吉卜力动画风格,保持人物特征" | ### 图片生成场景(辅助) [主体 Subject] + [动作 Action] + [风格 Style] + [光影 Lighting] + [构图 Composition] + [色彩 Color] + [氛围 Mood] + [质量 Quality] ## 输出格式 (严格 JSON) { "intent": "image_gen", "confidence": 0.95, "subIntent": "product_design", "needsClarification": false, "dimensions": { "subject": "主体描述", "action": "动作/姿态", "style": "艺术风格", "lighting": "光影效果", "composition": "构图方式", "color": "色彩方案", "mood": "情绪氛围", "quality": "质量关键词" }, "optimizedPrompt": "完整优化后的中文提示词(100-200字)", "negativePrompt": "需要避免的元素(如:模糊、低质量、变形等)", "suggestedModel": "alibaba-image", "clarifyingQuestions": [] } ## 优化原则 1. 保持用户原始意图不变 2. 补充缺失的专业描述(光影、构图、氛围等) 3. 添加适当的质量关键词(高清、细节丰富、专业级等) 4. 使用中文输出 5. 提示词长度控制在 100-200 字 6. 对于 chat/vision 意图,optimizedPrompt 保持用户原始输入即可 ## 特殊场景处理(图片编辑优先) 1. **用户上传了图片 + 编辑类关键词** → image_edit(最高优先级) 2. **用户上传了图片 + 无明确意图** → 返回澄清问题,询问需要什么编辑 3. **用户上传了图片 + 理解类关键词** → vision(千问3 VL) 4. **用户上传了图片 + 生成视频关键词** → video_gen(火山视频) 5. **用户无图片 + 生成类关键词** → image_gen(灵魂4.5) 6. **用户无图片 + 编辑类关键词** → needsClarification: true,提示"请上传图片" ## 澄清问题示例 当意图不明确时,返回以下澄清问题: - "您想对这张图片做什么处理?(抠图/换背景/变清晰/其他)" - "请描述您希望达到的效果" - "需要我帮您去除背景吗?还是有其他编辑需求?"`; export interface SmartAnalysisResult { intent: "image_gen" | "image_edit" | "video_gen" | "vision" | "chat"; confidence: number; subIntent?: string; needsClarification: boolean; dimensions: { subject: string; action: string; style: string; lighting: string; composition: string; color: string; mood: string; quality: string; }; optimizedPrompt: string; negativePrompt?: string; suggestedModel: string; clarifyingQuestions?: string[]; } export async function analyzeAndOptimize( userInput: string, hasImage: boolean, chatHistory?: { role: string; content: string }[] ): Promise { const contextInfo = hasImage ? "(用户上传了图片)" : ""; const { text } = await generateText({ model: qwen("qwen3-turbo"), system: ANALYZER_SYSTEM_PROMPT, messages: [ ...(chatHistory || []), { role: "user", content: `${contextInfo}\n用户输入: ${userInput}` } ], }); try { return JSON.parse(text); } catch (error) { // 解析失败时返回默认值 console.error("[SmartAnalyzer] JSON parse error:", error); return { intent: hasImage ? "vision" : "chat", confidence: 0.5, needsClarification: false, dimensions: { subject: userInput, action: "", style: "", lighting: "", composition: "", color: "", mood: "", quality: "", }, optimizedPrompt: userInput, suggestedModel: "qwen-vl", }; } } ``` #### 3.1.2 模型路由器 (`lib/ai/model-router.ts`) ```typescript import { getEnabledAiModelsWithProvider } from "@/lib/db/queries"; interface ModelWithProvider { model: { id: string; displayName: string; modelId: string; supportsImageGen: boolean; supportsVision: boolean; isDefault: boolean; }; provider: { type: string; // alibaba, gemini, volcano-vision, volcano-video, alibaba-image, etc. }; } /** * 基于当前系统已配置的模型,智能路由映射 * * 当前模型清单: * - 千问3 (alibaba): 对话模型 * - 既梦4.5 (volcano-vision): 图片生成 * - GTP1.5 (gemini): 视觉理解 * - 香蕉PRO (gemini): 视觉+图片生成 * - 灵魂4.5 (alibaba-image): 视觉+图片生成+提示词扩展 * - VIDEO/Seedance* (volcano-video): 视频生成 */ const INTENT_PROVIDER_MAP: Record = { // 图片生成:优先选择 alibaba-image (灵魂4.5,支持提示词扩展) "image_gen": { providers: ["alibaba-image", "gemini", "volcano-vision"], requireImageGen: true }, // 图片编辑:需要视觉能力 + 图片生成 "image_edit": { providers: ["alibaba-image", "gemini"], requireVision: true, requireImageGen: true }, // 视频生成:火山视频模型 "video_gen": { providers: ["volcano-video", "qianwen-video"] }, // 视觉理解:优先千问3 VL(成本低、效果好),然后是 gemini "vision": { providers: ["alibaba", "gemini", "alibaba-image"], requireVision: true }, // 普通对话:阿里云千问3 VL(也支持视觉) "chat": { providers: ["alibaba", "openai", "local"] }, }; // 特殊模型 ID 映射(用于精确匹配) const SPECIAL_MODEL_ROUTING: Record = { // 图生视频场景:优先使用 SeedanceLiteI2V "video_gen_with_image": "doubao-seedance-1-0-lite-i2v-250428", // 纯文生视频场景:使用 SeedanceLiteT2V(成本低) "video_gen_text_only": "doubao-seedance-1-0-lite-t2v-250428", // 高质量视频:使用 SeedancePro "video_gen_high_quality": "doubao-seedance-1-0-pro-250528", // 快速视频:使用 SeedanceProFast "video_gen_fast": "doubao-seedance-1-0-pro-fast-251015", }; export async function routeToOptimalModel( analysis: { intent: string; subIntent?: string; suggestedModel?: string; }, hasImage: boolean = false, availableModels?: ModelWithProvider[] ): Promise { const models = availableModels || await getEnabledAiModelsWithProvider(); // 1. 特殊场景精确路由 if (analysis.intent === "video_gen") { if (hasImage) { const i2vModel = models.find(m => m.model.modelId === SPECIAL_MODEL_ROUTING["video_gen_with_image"]); if (i2vModel) { console.log("[ModelRouter] 🎬 图生视频 → SeedanceLiteI2V"); return i2vModel.model.id; } } else { // 文生视频使用轻量版(成本低) const t2vModel = models.find(m => m.model.modelId === SPECIAL_MODEL_ROUTING["video_gen_text_only"]); if (t2vModel) { console.log("[ModelRouter] 🎬 文生视频 → SeedanceLiteT2V"); return t2vModel.model.id; } } } // 2. 获取意图对应的路由规则 const routingRule = INTENT_PROVIDER_MAP[analysis.intent] || INTENT_PROVIDER_MAP["chat"]; // 3. 多因素评分算法 const scoredModels = models.map(({ model, provider }) => { let score = 0; // 3.1 提供商类型匹配 (最高 50 分) const providerIndex = routingRule.providers.indexOf(provider.type); if (providerIndex !== -1) { score += 50 - providerIndex * 10; // 越靠前分数越高 } // 3.2 能力匹配 (最高 30 分) if (routingRule.requireVision && model.supportsVision) { score += 20; } if (routingRule.requireImageGen && model.supportsImageGen) { score += 20; } // 3.3 默认模型加分 (10 分) if (model.isDefault) { score += 10; } // 3.4 特殊加分:alibaba-image 支持提示词扩展 if (analysis.intent === "image_gen" && provider.type === "alibaba-image") { score += 15; // 因为支持 supportsPromptExtend } return { model, provider, score }; }); // 4. 过滤掉不满足必要条件的模型 const filteredModels = scoredModels.filter(({ model }) => { if (routingRule.requireVision && !model.supportsVision) return false; if (routingRule.requireImageGen && !model.supportsImageGen) return false; return true; }); // 5. 按分数排序,返回最高分模型 const sortedModels = (filteredModels.length > 0 ? filteredModels : scoredModels) .sort((a, b) => b.score - a.score); console.log("[ModelRouter] Scores:", sortedModels.slice(0, 5).map(s => `${s.model.displayName}(${s.provider.type}): ${s.score}` ).join(", ")); const selectedModel = sortedModels[0]?.model; console.log(`[ModelRouter] ✅ Selected: ${selectedModel?.displayName} (${selectedModel?.id})`); return selectedModel?.id || models[0]?.model.id; } ``` #### 3.1.3 修改 Chat API (`app/(chat)/api/chat/route.ts`) ```typescript // 在 Auto Mode Logic 部分替换为: import { analyzeAndOptimize } from "@/lib/ai/smart-analyzer"; import { routeToOptimalModel } from "@/lib/ai/model-router"; // ========== Smart Auto Mode Logic ========== if (finalModelId === "auto") { console.log("[Smart Auto Mode] Starting intelligent analysis..."); // 获取用户最后一条消息 const lastUserMessage = messages.findLast((m) => m.role === "user"); if (!lastUserMessage) { return new ChatSDKError("bad_request:api", "No user message found").toResponse(); } // 提取文本和图片信息 const textContent = lastUserMessage.parts .filter((p) => p.type === "text") .map((p) => p.text) .join(" "); const hasImage = lastUserMessage.parts.some( (p) => p.type === "file" || p.type === "image" || p.type === "image_url" ); // 1. 调用 Qwen3 进行智能分析 const analysis = await analyzeAndOptimize(textContent, hasImage); console.log("[Smart Auto Mode] Analysis result:", analysis); // 2. 智能模型路由 const allModels = await getEnabledAiModelsWithProvider(); finalModelId = await routeToOptimalModel(analysis, allModels); console.log(`[Smart Auto Mode] ✅ Selected model: ${finalModelId}`); // 3. 如果是图片生成意图,使用优化后的提示词 if (analysis.intent === "image_gen" && analysis.optimizedPrompt) { console.log("[Smart Auto Mode] Using optimized prompt:", analysis.optimizedPrompt); // 替换用户消息中的文本为优化后的提示词 // TODO: 实现提示词替换逻辑 } } // ========== End Smart Auto Mode Logic ========== ``` --- ### Phase 2: 提示词替换与展示 **目标:** 将优化后的提示词应用到生成流程,并向用户展示优化过程 **修改:** 1. 在消息流中插入"提示词优化"提示 2. 显示原始提示词 vs 优化后提示词 3. 用户可以选择使用原始或优化版本 --- ### Phase 3: 用户偏好学习 **目标:** 基于用户反馈学习偏好,提升满意度 **新增数据库表:** ```sql CREATE TABLE user_preferences ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id), preference_type VARCHAR(50) NOT NULL, -- style, color, quality, etc. preference_value TEXT NOT NULL, weight DECIMAL(3,2) DEFAULT 1.0, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE generation_feedback ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id), message_id UUID NOT NULL, original_prompt TEXT NOT NULL, optimized_prompt TEXT, model_used VARCHAR(100), feedback_type VARCHAR(20), -- positive, negative, regenerate feedback_text TEXT, created_at TIMESTAMP DEFAULT NOW() ); ``` --- ### Phase 4: 多轮对话细化 **目标:** 支持"更亮一点"、"换个风格"等模糊指令 **实现思路:** 1. 检测是否是对上一次生成的修改请求 2. 解析修改意图(颜色/构图/风格/光影等) 3. 基于上下文生成新的优化提示词 4. 保持主体不变,只调整指定维度 --- ### Phase 5: 上下文记忆 **目标:** 跨会话保持风格一致性 **实现思路:** 1. 提取用户常用的风格/色彩/质量偏好 2. 在新会话中自动应用历史偏好 3. 支持用户主动保存"风格预设" --- ## 四、API 设计 ### 4.1 智能分析 API **Endpoint:** `POST /api/smart-analyze` **Request:** ```json { "userInput": "帮我画一只可爱的猫咪", "hasImage": false, "chatHistory": [ { "role": "user", "content": "你好" }, { "role": "assistant", "content": "你好!有什么可以帮助你的?" } ] } ``` **Response:** ```json { "intent": "image_gen", "confidence": 0.95, "dimensions": { "subject": "一只可爱的猫咪,毛茸茸的橘色小猫", "action": "蜷缩着身体,眼睛半眯", "style": "写实摄影风格,柔焦效果", "lighting": "温暖的自然光,侧光照明", "composition": "近景特写,浅景深", "color": "暖色调,橘色和米白色为主", "mood": "温馨、慵懒、治愈", "quality": "8K高清,细腻毛发质感,专业宠物摄影" }, "optimizedPrompt": "一只可爱的橘色小猫咪,毛茸茸的,蜷缩着身体眼睛半眯,写实摄影风格配合柔焦效果,温暖的自然侧光照明,近景特写浅景深构图,暖色调以橘色和米白色为主,营造温馨慵懒治愈的氛围,8K高清画质,细腻毛发质感,专业宠物摄影品质", "negativePrompt": "模糊,低质量,变形,多余的肢体", "suggestedModel": "alibaba-image" } ``` --- ## 五、配置项 ### 5.1 环境变量 ```env # Qwen3 API 配置 (用于智能分析) QWEN_API_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 QWEN_API_KEY=your-qwen-api-key # 智能分析功能开关 SMART_AUTO_ENABLED=true # 提示词优化最大长度 PROMPT_OPTIMIZATION_MAX_LENGTH=200 ``` ### 5.2 管理后台配置 在"网站设置"中新增: | 配置项 | 类型 | 默认值 | 说明 | |-------|------|--------|------| | enableSmartAuto | boolean | true | 是否启用智能自动模式 | | showPromptOptimization | boolean | true | 是否向用户展示优化过程 | | allowUserOverride | boolean | true | 是否允许用户使用原始提示词 | | optimizationModel | string | qwen3-turbo | 用于分析的模型 | --- ## 六、性能与成本考虑 ### 6.1 延迟优化 | 阶段 | 预估延迟 | 优化策略 | |-----|---------|---------| | Qwen3 分析 | 500-1000ms | 使用 qwen3-turbo,流式响应 | | 模型路由 | <50ms | 内存缓存模型列表 | | 提示词优化 | 已包含在分析中 | - | | 总额外延迟 | ~1s | 可接受范围 | ### 6.2 成本估算 | 调用类型 | 单次成本 | 日均调用 | 日成本 | |---------|---------|---------|--------| | Qwen3-turbo | ¥0.001/1K tokens | 1000次 | ¥1-2 | | 总月成本 | - | - | ¥30-60 | --- ## 七、测试计划 ### 7.1 单元测试 ```typescript // __tests__/smart-analyzer.test.ts describe("SmartAnalyzer", () => { test("should detect image_gen intent", async () => { const result = await analyzeAndOptimize("画一只猫", false); expect(result.intent).toBe("image_gen"); expect(result.confidence).toBeGreaterThan(0.8); }); test("should detect image_edit intent with image", async () => { const result = await analyzeAndOptimize("帮我去掉背景", true); expect(result.intent).toBe("image_edit"); }); test("should optimize prompt with all dimensions", async () => { const result = await analyzeAndOptimize("画一只猫", false); expect(result.dimensions.subject).toBeTruthy(); expect(result.optimizedPrompt.length).toBeGreaterThan(50); }); }); ``` ### 7.2 集成测试 1. 完整流程测试:用户输入 → 分析 → 路由 → 生成 2. 各种意图类型覆盖测试 3. 边界情况测试(空输入、超长输入、乱码等) --- ## 八、里程碑 | 阶段 | 内容 | 预计时间 | 交付物 | |-----|------|---------|--------| | Phase 1 | 核心功能 MVP | 2-3 天 | 智能分析 + 模型路由 | | Phase 2 | 提示词展示 | 1 天 | UI 优化展示 | | Phase 3 | 偏好学习 | 2-3 天 | 数据库 + 学习算法 | | Phase 4 | 多轮细化 | 2 天 | 对话细化功能 | | Phase 5 | 上下文记忆 | 2 天 | 跨会话一致性 | | **总计** | | **9-11 天** | | --- ## 九、风险与应对 | 风险 | 影响 | 应对措施 | |-----|------|---------| | Qwen API 不稳定 | 功能不可用 | 降级到规则匹配 | | 分析结果不准确 | 用户体验差 | 允许用户覆盖 | | 提示词优化过度 | 偏离用户意图 | 保留原始提示词选项 | | 成本超预算 | 财务压力 | 设置调用频率限制 | --- ## 十、参考资料 ### 核心参考 1. [Lovart.ai 官方文档](https://www.lovart.ai/features) - 世界首个 AI 设计智能体平台 2. [LLMRouter 开源库](https://github.com/ulab-uiuc/LLMRouter) - 16+ 种路由算法,支持 KNN/SVM/MLP/BERT 等 3. [Qwen-Agent 官方文档](https://qwenlm.github.io/Qwen-Agent/en/guide/) - 千问代理框架,内置 `image_gen` 工具 4. [Maestro: Self-Improving T2I Generation](https://arxiv.org/html/2509.10704v1) - Google 自进化图像生成系统 5. [PromptSculptor: Multi-Agent Prompt Optimization](https://arxiv.org/html/2509.12446v1) - EMNLP 2025 多代理提示词优化 ### 路由算法 6. [Router-R1](https://ulab-uiuc.github.io/Router-R1/) - NeurIPS 2025,强化学习多轮路由 - 支持 "think" + "route" 交替决策 - 成本-性能权衡优化 - 零样本泛化到新模型 ### 提示词优化 7. [PromptEnhancer (腾讯混元)](https://hunyuan-promptenhancer.github.io/) - Chain-of-Thought 提示词重写 - 开源代码: [GitHub](https://github.com/Hunyuan-PromptEnhancer/PromptEnhancer) - 基于 24 个关键点的 AlignEvaluator 奖励模型 - 解决属性绑定、否定、组合关系等问题 8. [Stable Diffusion 3.5 Prompt Guide](https://stability.ai/learning-hub/stable-diffusion-3-5-prompt-guide) - 官方提示词指南 ### 最佳实践 9. [提示词公式](https://uchaaaa.medium.com/the-most-effective-way-to-prompt-the-best-designs-on-midjourney-d6c63e9a3f06): ``` [Medium] + [Style/Composition] + [Subject] + [Action] + [Scene] + [Lighting] + [Color] ``` 10. [Qwen-Agent 工具调用](https://github.com/QwenLM/Qwen-Agent/blob/main/docs/tool.md) - 内置工具和自定义工具注册 --- ## 附录 A: 提示词优化示例 ### 示例 1: 简单描述 **用户输入:** "画一只猫" **分析结果:** ```json { "intent": "image_gen", "confidence": 0.98, "dimensions": { "subject": "一只可爱的猫咪", "action": "安静地坐着", "style": "写实摄影风格", "lighting": "柔和的自然光", "composition": "中景构图", "color": "自然色调", "mood": "温馨平和", "quality": "高清,细节丰富" }, "optimizedPrompt": "一只可爱的猫咪,毛发柔顺光亮,安静地坐着凝视镜头,写实摄影风格,柔和的自然光照明,中景构图突出主体,自然和谐的色调,营造温馨平和的氛围,高清画质,毛发细节丰富,专业宠物摄影" } ``` ### 示例 2: 产品设计 **用户输入:** "设计一个简约风格的台灯" **分析结果:** ```json { "intent": "image_gen", "confidence": 0.95, "subIntent": "product_design", "dimensions": { "subject": "一盏简约风格的现代台灯", "action": "静置展示", "style": "北欧极简工业设计风格", "lighting": "产品摄影棚灯光,柔和均匀", "composition": "45度角产品展示图", "color": "白色/木色/黑色", "mood": "简洁高端现代", "quality": "产品级渲染,材质真实" }, "optimizedPrompt": "一盏简约现代风格的台灯产品设计图,北欧极简工业设计语言,圆润流畅的造型线条,白色灯罩搭配原木底座,产品摄影棚专业灯光布置,45度角展示产品全貌,简洁高端的现代气质,产品级3D渲染品质,材质纹理真实细腻,适合电商展示" } ``` --- ## 附录 B: 从参考资料中提取的关键技术 ### B.1 PromptSculptor 四代理架构 来源: EMNLP 2025 PromptSculptor 将提示词优化分解为 **4 个专业化代理**: ``` ┌─────────────────────────────────────────────────────────────────┐ │ PromptSculptor 架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 用户模糊提示 ──▶ Agent 1: 意图推断 ──▶ Agent 2: 场景丰富 │ │ │ │ │ │ ▼ ▼ │ │ 推断隐含语境 补充背景细节 │ │ (Chain-of-Thought) │ │ │ │ │ │ └──────────┬───────────┘ │ │ ▼ │ │ Agent 3: 自我评估 ──▶ Agent 4: 反馈调优 │ │ │ │ │ │ ▼ ▼ │ │ 与原始意图对齐 用户反馈迭代 │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` **可借鉴点:** - Chain-of-Thought 推理隐含语境 - 自我评估确保不偏离用户意图 - 支持用户反馈迭代 ### B.2 Maestro 自进化系统 来源: Google Research Maestro 使用 **自我批评 + 自我进化** 机制: | 组件 | 功能 | 实现方式 | |-----|------|---------| | Critic Agents | 识别图像弱点 | MLLM 专业化评估 | | Verifier Agent | 整合编辑信号 | 保持用户意图 | | MLLM-as-a-Judge | 头对头比较 | 选择更好的版本 | | Prompt Evolution | 迭代优化提示词 | 丢弃问题输出 | **可借鉴点:** - 多个 MLLM Agent 协作评估 - 生成多个版本进行比较 - 保持用户意图的验证机制 ### B.3 Router-R1 强化学习路由 来源: NeurIPS 2025 Router-R1 创新点: 1. **顺序决策过程**: 路由不是一次性的,而是多轮交互 2. **Think + Route 交替**: - `think`: 内部推理,分析任务 - `route`: 选择模型,获取响应 3. **成本奖励**: 在 RL 训练中加入成本惩罚,平衡性能和花费 4. **零样本泛化**: 仅需模型描述(定价、延迟、示例性能)即可集成新模型 **可借鉴点:** - 可以在我们的系统中加入成本感知路由 - 支持动态添加新模型而无需重新训练 ### B.4 PromptEnhancer 24 关键点 来源: 腾讯混元 PromptEnhancer 基于 **24 个常见 T2I 失败模式** 训练奖励模型: | 类别 | 关键点示例 | |-----|----------| | 属性绑定 | 颜色/材质是否正确附加到对象 | | 对象计数 | 数量是否准确 | | 空间关系 | 左右/上下/前后位置是否正确 | | 否定处理 | "没有XX" 是否被正确理解 | | 风格一致性 | 整体风格是否统一 | | 细节完整性 | 重要元素是否缺失 | **可借鉴点:** - 可以用这些关键点来评估生成质量 - 反馈循环中使用这些标准 ### B.5 Qwen-Agent 内置工具 来源: Qwen-Agent 官方文档 Qwen-Agent 已内置以下工具: | 工具名 | 功能 | |-------|------| | `image_gen` | 图片生成 | | `code_interpreter` | 执行 Python 代码 | | `web_search` | 网页搜索 | | `web_extractor` | 网页内容提取 | | `image_search` | 图片搜索 | | `image_zoom_in_tool` | 图片局部放大 | **可借鉴点:** - 可以直接使用 Qwen-Agent 框架实现工具调用 - 支持 MCP (Model Context Protocol) 集成外部工具 ### B.6 LLMRouter 16+ 路由算法 来源: LLMRouter 开源库 可选的路由算法: | 类型 | 算法 | 特点 | |-----|------|------| | 基础 | KNN, SVM, MLP | 快速,适合简单场景 | | 进阶 | Matrix Factorization, Elo Rating | 考虑模型能力差异 | | 深度 | BERT-based, CausalLM | 理解语义,更准确 | | 多轮 | Router-R1, KNN Multi-Round | 支持复杂任务 | | 个性化 | GMT Router | 学习用户偏好 | **可借鉴点:** - 初期可以使用 KNN/MLP 快速实现 - 后期可以升级到 BERT-based 或个性化路由 --- ## 附录 C: 图片编辑提示词模板库(核心) ### C.1 抠图/去背景模板 ``` # 基础抠图 去除图片背景,保留主体{subject}, 输出透明背景PNG格式, 边缘处理:平滑自然,保留细节(如发丝、毛发) # 产品抠图 精准抠出产品主体, 保留产品阴影和反光效果, 边缘清晰锐利,无毛边 # 人物抠图 保留人物完整轮廓, 特别注意发丝和衣服边缘的细节处理, 皮肤边缘自然过渡 ``` ### C.2 换背景模板 ``` # 纯色背景 将背景替换为{color}纯色背景, 保持主体阴影自然, 光影与主体协调一致 # 场景背景 将背景替换为{scene}场景, 场景风格:{style}, 光照方向与主体一致, 透视关系自然合理 # 渐变背景 背景设为从{color1}到{color2}的渐变, 渐变方向:{direction}, 主体与背景融合自然 ``` ### C.3 图片增强模板 ``` # 通用增强 提升图片整体清晰度和质量, 保持自然色彩,不过度锐化, 去除噪点,优化细节 # 产品图增强 增强产品细节和材质表现, 优化光影效果, 提升质感和专业度 # 人像增强 优化面部细节,保持自然肤色, 增强眼神光, 适度美化但不失真 ``` ### C.4 图像拓展 (Outpainting) 模板 ``` # 方向扩展 向{direction}方向扩展图片{percentage}%, 保持原有风格和色调一致, 光影过渡自然,无明显接缝 # 全方向扩展 等比例扩展画布至{ratio}尺寸, 扩展区域内容与原图风格协调, 保持透视和景深一致性 ``` ### C.5 局部修改 (Inpainting) 模板 ``` # 去除对象 去除图片中的{object}, 用周围环境自然填充, 保持整体风格一致 # 替换对象 将图片中的{old_object}替换为{new_object}, 新对象风格与画面协调, 光影和透视关系正确 # 修复瑕疵 修复图片中的{defect}(如水印/污点/破损), 自然填充,看不出修复痕迹 ``` ### C.6 风格迁移模板 ``` # 艺术风格 将照片转换为{style}艺术风格, 保持主体可识别性, 色彩风格:{color_style} # 动漫/卡通风格 转换为{anime_style}动漫风格, 保留人物特征和表情, 线条清晰,色彩鲜明 ``` ### C.7 图片生成模板(辅助) ``` # 通用生成 [主体] {subject},[动作] {action}, [风格] {style}风格, [光影] {lighting}, [构图] {composition}, [色彩] {color}色调, [氛围] {mood}氛围, [质量] 高清,细节丰富 # 产品图生成 产品:{product_name}, 展示角度:{angle}, 背景:{background}, 灯光:产品摄影棚专业布光, 质量:产品级渲染,材质真实 ``` ### C.8 负面提示词模板 ``` # 通用负面 模糊,低质量,变形,水印,噪点, 过曝,欠曝,不自然的颜色,比例失调 # 人物负面 多余肢体,变形的脸,不对称, 不自然的表情,僵硬的姿势 # 产品负面 材质失真,光影错误,比例错误, 背景杂乱,细节丢失 ``` --- *文档结束*