新增智能自动模式功能: - smart-analyzer.ts: 智能意图分析器,识别抠图/换背景/增强等8种子意图 - prompt-optimizer.ts: 提示词优化器,将简单输入转为专业提示词 - model-router.ts: 智能模型路由器,根据意图选择最佳模型 - 修改route.ts集成新模块,替换原有关键词匹配逻辑 Co-authored-by: Cursor <cursoragent@cursor.com>
86 KiB
智能自动模型系统升级开发文档
版本: v2.0 日期: 2025-01-31 参考: Lovart.ai 设计智能体架构、MagicQuill (CVPR 2025)、PromptEnhancer (腾讯混元)
🎯 核心定位
本系统主要应用于图片编辑场景,不是文生图。
┌─────────────────────────────────────────────────────────────────┐
│ 业务场景优先级 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ⭐⭐⭐ 图片编辑 (核心) │
│ - 抠图/去背景 │
│ - 换背景(纯色/场景) │
│ - 图片增强/变清晰 │
│ - 图像拓展 (Outpainting) │
│ - 局部修改 (Inpainting) │
│ - 风格迁移 │
│ │
│ ⭐⭐ 图片理解 (辅助) │
│ - 图片内容分析 │
│ - 对象识别 │
│ │
│ ⭐ 图片/视频生成 (辅助) │
│ - 基于参考图生成 │
│ - 图生视频 │
│ │
└─────────────────────────────────────────────────────────────────┘
一、项目概述
1.1 现状分析
当前自动模型功能采用基于关键词的规则匹配方式:
// 当前实现 - 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 行):
// ========== Auto Mode Logic ==========
if (finalModelId === "auto") {
console.log("[Auto Mode] Detecting intent...");
// 使用关键词匹配...
const videoKeywords = /视频|video.../;
const imageEditKeywords = /修图|P图.../;
// ...
}
升级后代码:
// ========== 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
// 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<AnalysisResult> {
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
// lib/ai/prompt-optimizer.ts
export interface OptimizeResult {
originalPrompt: string;
optimizedPrompt: string;
negativePrompt: string;
}
// 图片编辑子意图的提示词模板
const EDIT_TEMPLATES: Record<string, { template: string; negative: string }> = {
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<OptimizeResult> {
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
// 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<string, {
providerTypes: string[]; // 按优先级排序
requireVision?: boolean;
requireImageGen?: boolean;
}> = {
// 图片编辑:优先 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<RouteResult> {
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 意图分析模块
输入:
- 用户文本输入
- 是否有图片附件
- 对话历史 (上下文)
输出:
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, 高细节" |
输出:
interface PromptOptimization {
// 维度分解
dimensions: {
subject: string;
action: string;
style: string;
lighting: string;
composition: string;
color: string;
mood: string;
quality: string;
};
// 维度权重 (重要程度)
weights: Record<string, number>;
// 优化后的完整提示词
optimizedPrompt: string;
// 负面提示词 (需要避免的)
negativePrompt?: string;
}
2.2.3 模型路由模块
多因素评分算法:
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)
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<SmartAnalysisResult> {
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)
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<string, {
providers: string[]; // 按优先级排序的提供商类型
requireVision?: boolean; // 是否需要视觉能力
requireImageGen?: boolean; // 是否需要图片生成能力
}> = {
// 图片生成:优先选择 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<string, string> = {
// 图生视频场景:优先使用 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<string> {
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)
// 在 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: 提示词替换与展示
目标: 将优化后的提示词应用到生成流程,并向用户展示优化过程
修改:
- 在消息流中插入"提示词优化"提示
- 显示原始提示词 vs 优化后提示词
- 用户可以选择使用原始或优化版本
Phase 3: 用户偏好学习
目标: 基于用户反馈学习偏好,提升满意度
新增数据库表:
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: 多轮对话细化
目标: 支持"更亮一点"、"换个风格"等模糊指令
实现思路:
- 检测是否是对上一次生成的修改请求
- 解析修改意图(颜色/构图/风格/光影等)
- 基于上下文生成新的优化提示词
- 保持主体不变,只调整指定维度
Phase 5: 上下文记忆
目标: 跨会话保持风格一致性
实现思路:
- 提取用户常用的风格/色彩/质量偏好
- 在新会话中自动应用历史偏好
- 支持用户主动保存"风格预设"
四、API 设计
4.1 智能分析 API
Endpoint: POST /api/smart-analyze
Request:
{
"userInput": "帮我画一只可爱的猫咪",
"hasImage": false,
"chatHistory": [
{ "role": "user", "content": "你好" },
{ "role": "assistant", "content": "你好!有什么可以帮助你的?" }
]
}
Response:
{
"intent": "image_gen",
"confidence": 0.95,
"dimensions": {
"subject": "一只可爱的猫咪,毛茸茸的橘色小猫",
"action": "蜷缩着身体,眼睛半眯",
"style": "写实摄影风格,柔焦效果",
"lighting": "温暖的自然光,侧光照明",
"composition": "近景特写,浅景深",
"color": "暖色调,橘色和米白色为主",
"mood": "温馨、慵懒、治愈",
"quality": "8K高清,细腻毛发质感,专业宠物摄影"
},
"optimizedPrompt": "一只可爱的橘色小猫咪,毛茸茸的,蜷缩着身体眼睛半眯,写实摄影风格配合柔焦效果,温暖的自然侧光照明,近景特写浅景深构图,暖色调以橘色和米白色为主,营造温馨慵懒治愈的氛围,8K高清画质,细腻毛发质感,专业宠物摄影品质",
"negativePrompt": "模糊,低质量,变形,多余的肢体",
"suggestedModel": "alibaba-image"
}
五、配置项
5.1 环境变量
# 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 单元测试
// __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 集成测试
- 完整流程测试:用户输入 → 分析 → 路由 → 生成
- 各种意图类型覆盖测试
- 边界情况测试(空输入、超长输入、乱码等)
八、里程碑
| 阶段 | 内容 | 预计时间 | 交付物 |
|---|---|---|---|
| Phase 1 | 核心功能 MVP | 2-3 天 | 智能分析 + 模型路由 |
| Phase 2 | 提示词展示 | 1 天 | UI 优化展示 |
| Phase 3 | 偏好学习 | 2-3 天 | 数据库 + 学习算法 |
| Phase 4 | 多轮细化 | 2 天 | 对话细化功能 |
| Phase 5 | 上下文记忆 | 2 天 | 跨会话一致性 |
| 总计 | 9-11 天 |
九、风险与应对
| 风险 | 影响 | 应对措施 |
|---|---|---|
| Qwen API 不稳定 | 功能不可用 | 降级到规则匹配 |
| 分析结果不准确 | 用户体验差 | 允许用户覆盖 |
| 提示词优化过度 | 偏离用户意图 | 保留原始提示词选项 |
| 成本超预算 | 财务压力 | 设置调用频率限制 |
十、参考资料
核心参考
- Lovart.ai 官方文档 - 世界首个 AI 设计智能体平台
- LLMRouter 开源库 - 16+ 种路由算法,支持 KNN/SVM/MLP/BERT 等
- Qwen-Agent 官方文档 - 千问代理框架,内置
image_gen工具 - Maestro: Self-Improving T2I Generation - Google 自进化图像生成系统
- PromptSculptor: Multi-Agent Prompt Optimization - EMNLP 2025 多代理提示词优化
路由算法
- Router-R1 - NeurIPS 2025,强化学习多轮路由
- 支持 "think" + "route" 交替决策
- 成本-性能权衡优化
- 零样本泛化到新模型
提示词优化
-
PromptEnhancer (腾讯混元) - Chain-of-Thought 提示词重写
- 开源代码: GitHub
- 基于 24 个关键点的 AlignEvaluator 奖励模型
- 解决属性绑定、否定、组合关系等问题
-
Stable Diffusion 3.5 Prompt Guide - 官方提示词指南
最佳实践
-
[Medium] + [Style/Composition] + [Subject] + [Action] + [Scene] + [Lighting] + [Color] -
Qwen-Agent 工具调用 - 内置工具和自定义工具注册
附录 A: 提示词优化示例
示例 1: 简单描述
用户输入: "画一只猫"
分析结果:
{
"intent": "image_gen",
"confidence": 0.98,
"dimensions": {
"subject": "一只可爱的猫咪",
"action": "安静地坐着",
"style": "写实摄影风格",
"lighting": "柔和的自然光",
"composition": "中景构图",
"color": "自然色调",
"mood": "温馨平和",
"quality": "高清,细节丰富"
},
"optimizedPrompt": "一只可爱的猫咪,毛发柔顺光亮,安静地坐着凝视镜头,写实摄影风格,柔和的自然光照明,中景构图突出主体,自然和谐的色调,营造温馨平和的氛围,高清画质,毛发细节丰富,专业宠物摄影"
}
示例 2: 产品设计
用户输入: "设计一个简约风格的台灯"
分析结果:
{
"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 创新点:
- 顺序决策过程: 路由不是一次性的,而是多轮交互
- Think + Route 交替:
think: 内部推理,分析任务route: 选择模型,获取响应
- 成本奖励: 在 RL 训练中加入成本惩罚,平衡性能和花费
- 零样本泛化: 仅需模型描述(定价、延迟、示例性能)即可集成新模型
可借鉴点:
- 可以在我们的系统中加入成本感知路由
- 支持动态添加新模型而无需重新训练
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 负面提示词模板
# 通用负面
模糊,低质量,变形,水印,噪点,
过曝,欠曝,不自然的颜色,比例失调
# 人物负面
多余肢体,变形的脸,不对称,
不自然的表情,僵硬的姿势
# 产品负面
材质失真,光影错误,比例错误,
背景杂乱,细节丢失
文档结束