小程序端灵感板块分阶段优化方案
前置文档:
INSPIRATION_MINIPROGRAM_ANALYSIS.md- 现状与问题分析
本文档: 分阶段优化方案详细设计
版本: V1.0
日期: 2025-12-11
第四部分:分阶段优化方案
阶段1:快速优化(1-2周,立竿见影)
目标: 解决最紧急的体验问题,提升核心转化率
资源需求: 1名前端 + 1名后端
风险等级: ✅ 低(不涉及架构变更)
优化1.1:简化Tab结构 🎯 P0
当前问题:
- 5个Tab(全部/收藏灵感/智能推荐/热点/我的素材)
- 用户不理解区别,切换频繁但无收获
- 部分Tab为空(智能推荐/热点未配置时)
优化方案:
<!-- 当前:5个Tab -->
<view class="content-tabs">
<view class="tab-item" :class="{ active: activeTab === 'all' }">全部</view>
<view class="tab-item" :class="{ active: activeTab === 'collection' }">收藏灵感</view>
<view class="tab-item" :class="{ active: activeTab === 'smart' }">智能推荐</view>
<view class="tab-item" :class="{ active: activeTab === 'trend' }">热点</view>
<view class="tab-item" :class="{ active: activeTab === 'asset' }">我的素材</view>
</view>
<!-- 优化后:3个Tab -->
<view class="content-tabs-v2">
<view class="tab-item" :class="{ active: activeTab === 'my' }">
<text class="tab-icon">📂</text>
<text class="tab-text">我的收藏</text>
<view class="tab-count" v-if="stats.myCollection > 0">{{ stats.myCollection }}</view>
</view>
<view class="tab-item" :class="{ active: activeTab === 'recommend' }">
<text class="tab-icon">💡</text>
<text class="tab-text">推荐灵感</text>
<view class="tab-count hot" v-if="stats.recommend > 0">{{ stats.recommend }}</view>
</view>
<view class="tab-item" :class="{ active: activeTab === 'recent' }">
<text class="tab-icon">⏰</text>
<text class="tab-text">最近使用</text>
<view class="tab-count used" v-if="stats.recentUsed > 0">{{ stats.recentUsed }}</view>
</view>
</view>数据映射逻辑:
// 后端API调整
const loadData = async (tab) => {
const params = { page, limit: 20 };
switch (tab) {
case 'my':
// 合并:用户收藏的灵感 + 用户上传的素材
params.source = 'user';
params.content_type = 'all';
break;
case 'recommend':
// 合并:智能推荐 + 热点
params.source = 'studio';
params.content_type = 'inspiration';
params.include_trend = true;
break;
case 'recent':
// 新增:最近引用到任务的灵感
params.order_by = 'last_used_at';
params.has_used = true;
break;
}
return await inspirationApi.getUnifiedFeed(params);
};预期效果:
- 认知成本降低:5个概念 → 3个概念
- Tab切换次数减少:平均从4次/会话 → 2次/会话
- 用户留存提升:减少因"找不到内容"而流失
实施步骤:
- Day 1-2: 前端修改Tab UI和切换逻辑
- Day 3: 后端API增加
recent参数支持 - Day 4: 数据库增加
last_used_at字段记录 - Day 5: 测试和灰度发布
优化1.2:强化"一键引用"入口 🎯 P0
当前问题:
- 转化入口藏在长按菜单中,发现率<30%
- 即使点击转化,跳转后表单为空,填写成本高
- 转化率<5%,灵感功能价值未体现
优化方案:
1. 显性化入口
<!-- 卡片底部增加醒目按钮 -->
<view class="inspiration-card">
<!-- 封面、标题等 -->
<view class="card-cover">...</view>
<view class="card-body">
<text class="card-title">{{ item.title }}</text>
</view>
<!-- 新增:底部操作栏 -->
<view class="card-actions">
<button class="action-btn use-btn" @click.stop="handleUseCreate(item)">
<text class="btn-icon">⚡</text>
<text class="btn-text">用这个拍视频</text>
</button>
<button class="action-btn more-btn" @click.stop="showMore(item)">
<text>更多</text>
</button>
</view>
</view>样式设计(Figma草图):
.use-btn {
flex: 1;
height: 44px;
background: linear-gradient(135deg, #7c3aed, #a78bfa);
border-radius: 12px;
color: #fff;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
.btn-icon {
font-size: 20px;
animation: pulse 2s infinite;
}
&:active {
transform: scale(0.98);
background: linear-gradient(135deg, #6d28d9, #8b5cf6);
}
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}2. 采集后引导
// 采集成功后立即询问
const handleCollectSuccess = async (inspiration) => {
uni.showModal({
title: '采集成功!',
content: '是否立即基于这条灵感创建拍摄任务?',
confirmText: '立即创建',
confirmColor: '#7c3aed',
cancelText: '稍后再说',
success: async (res) => {
if (res.confirm) {
await convertToTask(inspiration.id);
} else {
// 记录用户选择,后续可分析转化漏斗
analytics.track('inspiration_collected_not_converted', {
inspiration_id: inspiration.id
});
}
}
});
};3. 增强自动填充
// 后端:增强转化逻辑
async function convertInspiration ToTask(inspirationId, userId) {
const inspiration = await UserCorpus.findByPk(inspirationId);
// 创建任务
const task = await CaptureTask.create({
user_id: userId,
project_id: inspiration.project_id,
// 基础字段自动填充
title: inspiration.title,
description: inspiration.content,
// 新增:智能推断字段
task_type: inferTaskType(inspiration), // 探店/教程/vlog
duration: inferDuration(inspiration.content), // 分析文本推测时长
// 参考内容
reference_content: {
inspiration_id: inspiration.id,
source_url: inspiration.source_url,
cover_image: inspiration.media_urls[0],
platform: inspiration.source_platform
},
// 预填充脚本
script: inspiration.content, // 直接作为口播参考
// 状态
status: 'ready_to_shoot' // 直接标记为可拍摄
});
// 更新灵感使用次数
await inspiration.increment('usage_count');
return task;
}
// 辅助函数:推断任务类型
function inferTaskType(inspiration) {
const { title, content, source_platform } = inspiration;
const text = `${title} ${content}`.toLowerCase();
if (text.includes('探店') || text.includes('打卡')) return 'explore_shop';
if (text.includes('教程') || text.includes('如何')) return 'tutorial';
if (text.includes('vlog') || text.includes('记录')) return 'vlog';
if (text.includes('测评') || text.includes('体验')) return 'review';
// 根据平台推测
if (source_platform === 'xiaohongshu') return 'share'; // 小红书多分享类
if (source_platform === 'douyin') return 'entertainment'; // 抖音多娱乐类
return 'general';
}
// 辅助函数:推断时长
function inferDuration(content) {
const wordCount = content.length;
// 按语速估算(平均每秒4-5个字)
if (wordCount < 50) return 15; // 15秒
if (wordCount < 100) return 30;
if (wordCount < 200) return 60;
return 90;
}预期效果:
- 转化率提升:5% → 20%
- 用户感知价值:从"收藏夹"升级为"创作工具"
- 任务创建效率:从3分钟 → 10秒
实施步骤:
- Day 1: 设计新的卡片布局(包含use-btn)
- Day 2: 前端实现按钮和弹窗逻辑
- Day 3: 后端增强convertToTask函数
- Day 4-5: 测试和数据埋点
优化1.3:空状态引导优化 🎯 P0
当前问题:
- 首次进入看到空页面,无任何提示
- 用户不知道灵感板块的价值和用法
- 流失率高:首次进入后<30%的用户会采集第一条灵感
优化方案:
1. 空状态UI设计
<view class="empty-state" v-if="feedList.length === 0 && !loading">
<!-- 视觉元素 -->
<view class="empty-visual">
<view class="lightbulb-icon">💡</view>
<view class="sparkles">
<text class="sparkle">✨</text>
<text class="sparkle">✨</text>
<text class="sparkle">✨</text>
</view>
</view>
<!-- 引导文案 -->
<view class="empty-content">
<text class="empty-title">开始收集你的第一个灵感</text>
<text class="empty-desc">看到好的视频、文案或图片,保存下来</text>
<text class="empty-desc">一键就能变成你的拍摄任务</text>
</view>
<!-- 快速上手教程 -->
<view class="quick-guide">
<view class="guide-step">
<view class="step-num">1</view>
<text class="step-text">复制抖音/小红书视频链接</text>
</view>
<view class="guide-step">
<view class="step-num">2</view>
<text class="step-text">点击上方"粘贴链接"保存</text>
</view>
<view class="guide-step">
<view class="step-num">3</view>
<text class="step-text">点击"用这个拍视频"开始创作</text>
</view>
</view>
<!-- 行动按钮 -->
<view class="empty-actions">
<button class="action-btn primary" @click="handlePasteLink">
<text class="icon">🔗</text>
<text>粘贴链接试试</text>
</button>
<button class="action-btn secondary" @click="viewExamples">
<text>查看示例灵感</text>
</button>
</view>
<!-- 新增:预置示例灵感(针对美业用户) -->
<view class="example-inspirations" v-if="userIndustry === 'beauty'">
<text class="section-title">💄 美业案例灵感(点击查看)</text>
<view class="example-grid">
<view
class="example-card"
v-for="example in presetExamples"
:key="example.id"
@click="viewExample(example)"
>
<image :src="example.cover" mode="aspectFill" />
<text class="example-title">{{ example.title }}</text>
</view>
</view>
</view>
</view>2. 预置示例灵感库
// 后端:按行业预置10条优质灵感
const presetInspirationsBeauty = [
{
id: 'preset_001',
title: '美甲店探店模板',
content: '镜头1:店门口全景 → 镜头2:美甲师操作特写 → 镜头3:成品展示 → 口播:价格/地址',
cover: 'https://example.com/beauty_1.jpg',
tags: ['探店', '美甲', '本地生活'],
inspiration_type: 'template'
},
{
id: 'preset_002',
title: '项目前后对比',
content: '客户问题痛点展示 → 项目过程 → 效果对比 → CTA引导到店',
cover: 'https://example.com/beauty_2.jpg',
tags: ['项目展示', '效果对比'],
inspiration_type: 'template'
},
// ... 共10条
];
// 前端:首次进入时展示预置灵感
const loadInitialData = async () => {
const myInspirations = await inspirationApi.getUnifiedFeed({ source: 'user' });
if (myInspirations.data.items.length === 0) {
// 空状态 + 预置示例
showPresetExamples.value = true;
presetExamples.value = await inspirationApi.getPresetByIndustry(userIndustry);
} else {
feedList.value = myInspirations.data.items;
}
};3. 首次采集成功庆祝
// 首次采集成功后的特殊反馈
const handleFirstInspiration = async () => {
const isFirstTime = uni.getStorageSync('has_collected_inspiration') !== 'true';
if (isFirstTime) {
// 记录标记
uni.setStorageSync('has_collected_inspiration', 'true');
// 庆祝动画 + 引导
uni.showModal({
title: '🎉 恭喜你!',
content: '第一个灵感已保存\n现在点击"用这个拍视频",马上就能开始创作!',
showCancel: false,
confirmText: '立即体验',
success: () => {
// 高亮显示"用这个拍视频"按钮
highlightUseButton();
}
});
}
};预期效果:
- 首次采集转化率:0% → 40%
- 用户理解度提升:从"不知道干什么" → "明确采集-使用流程"
- 留存提升:7日留存 +15%
实施步骤:
- Day 1: 设计空状态UI和动画
- Day 2: 准备10条预置示例灵感(各行业)
- Day 3: 前端实现空状态和引导流程
- Day 4: 后端API支持预置灵感接口
- Day 5: 测试和灰度发布
阶段2:中期迭代(1-2个月,功能增强)
目标: 提升灵感的价值密度和使用效率
资源需求: 1名前端 + 1名后端 + 1名AI工程师
风险等级: ⚠️ 中(涉及AI服务调用和算法开发)
优化2.1:智能标签系统 🎯 P1
问题分析:
- 当前:
ai_tags字段有数据但未展示,用户无法通过标签筛选 - 痛点:灵感多了后找不到,搜索也不准确
- 需求:能按标签快速筛选(如:只看"美甲"相关的灵感)
方案设计:
1. 自动打标签(后端)
// services/TaggingService.js
class TaggingService {
async generateTags(inspiration) {
const { title, content, source_platform } = inspiration;
// 调用GPT-4o进行智能标签生成
const prompt = `
分析以下内容,生成3-5个标签。
标签应该包括:行业、场景、平台特征。
标题:${title}
内容:${content}
平台:${source_platform}
输出格式:JSON数组,例如:["美甲", "探店", "本地生活", "抖音"]
`;
const response = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: prompt }],
response_format: { type: 'json_object' },
temperature: 0.3
});
const tags = JSON.parse(response.choices[0].message.content).tags;
// 标签标准化(映射到预定义分类)
return this.normalizeTags(tags);
}
normalizeTags(rawTags) {
const industryMap = {
'美甲': 'beauty_nail',
'美容': 'beauty_facial',
'护肤': 'beauty_skincare',
'美食': 'food',
'探店': 'local_explore',
// ... 更多映射
};
return rawTags.map(tag => ({
display: tag, // 显示名称
value: industryMap[tag] || tag, // 标准化值
category: this.detectCategory(tag) // 一级分类
}));
}
detectCategory(tag) {
const categories = {
industry: ['美甲', '美容', '美食', '服装'],
scene: ['探店', '教程', 'vlog', '测评'],
platform: ['抖音', '小红书', '视频号']
};
for (const [cat, keywords] of Object.entries(categories)) {
if (keywords.includes(tag)) return cat;
}
return 'other';
}
}
// 采集灵感时自动打标签
router.post('/collect', authenticateToken, async (req, res) => {
const inspiration = await UserCorpus.create(req.body);
// 异步生成标签(不阻塞响应)
TaggingService.generateTags(inspiration).then(tags => {
inspiration.update({ ai_tags: tags });
});
res.json({ success: true, data: inspiration });
});2. 标签云展示(前端)
<view class="tag-filter-section">
<view class="section-header">
<text class="section-title">热门标签</text>
<text class="section-action" @click="showAllTags">查看全部</text>
</view>
<!-- 标签云 -->
<view class="tag-cloud">
<view
class="tag-item"
:class="{ active: selectedTags.includes(tag.value) }"
v-for="tag in popularTags"
:key="tag.value"
@click="toggleTag(tag)"
>
<text class="tag-icon">{{ tag.icon }}</text>
<text class="tag-label">{{ tag.display }}</text>
<text class="tag-count">{{ tag.count }}</text>
</view>
</view>
<!-- 已选标签 -->
<view class="selected-tags" v-if="selectedTags.length > 0">
<text class="label">已选:</text>
<view
class="selected-tag"
v-for="tag in selectedTags"
:key="tag"
@click="removeTag(tag)"
>
<text>{{ getTagDisplay(tag) }}</text>
<text class="close">×</text>
</view>
<button class="clear-btn" @click="clearTags">清除</button>
</view>
</view>3. 标签智能推荐
// 基于用户历史行为推荐标签
const getRecommendedTags = computed(() => {
// 统计用户历史采集的标签频率
const tagFrequency = {};
feedList.value.forEach(item => {
if (item.ai_tags) {
item.ai_tags.forEach(tag => {
tagFrequency[tag.value] = (tagFrequency[tag.value] || 0) + 1;
});
}
});
// 排序取Top6
return Object.entries(tagFrequency)
.sort((a, b) => b[1] - a[1])
.slice(0, 6)
.map(([value, count]) => ({ value, count }));
});预期效果:
- 查找效率提升:从"翻页查找"变为"点击标签筛选",平均查找时间从30秒 → 5秒
- 灵感复用率提升:能快速找到相关灵感,复用率 +30%
优化2.2:灵感使用统计 🎯 P1
问题分析:
- 当前:
usage_count字段有值但未展示 - 痛点:用户不知道哪些灵感"最有用",无法优先复用高价值灵感
方案设计:
1. 使用次数可视化
<view class="inspiration-card">
<!-- 使用徽章 -->
<view class="usage-badge" v-if="item.usage_count > 0">
<text class="badge-icon">⭐</text>
<text class="badge-text">已用 {{ item.usage_count }} 次</text>
</view>
<!-- 高价值标记 -->
<view class="high-value-tag" v-if="item.usage_count >= 5">
<text>🏆 高价值灵感</text>
</view>
</view>2. 使用历史记录
// 后端:关联表设计
CREATE TABLE InspirationUsage (
id UUID PRIMARY KEY,
inspiration_id UUID REFERENCES UserCorpus(id),
task_id UUID REFERENCES CaptureTasks(id),
used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER
);
// API:获取使用历史
router.get('/:id/usage-history', authenticateToken, async (req, res) => {
const history = await InspirationUsage.findAll({
where: { inspiration_id: req.params.id },
include: [{
model: CaptureTask,
attributes: ['id', 'title', 'created_at', 'status']
}],
order: [['used_at', 'DESC']]
});
res.json({ success: true, data: history });
});3. 详情页展示使用历史
<view class="usage-history-section" v-if="usageHistory.length > 0">
<view class="section-header">
<text class="section-title">使用记录</text>
</view>
<view class="usage-list">
<view
class="usage-item"
v-for="usage in usageHistory"
:key="usage.id"
@click="viewTask(usage.task_id)"
>
<view class="task-info">
<text class="task-title">{{ usage.task.title }}</text>
<text class="task-date">{{ formatDate(usage.used_at) }}</text>
</view>
<view class="task-status" :class="usage.task.status">
<text>{{ getStatusText(usage.task.status) }}</text>
</view>
<view class="arrow">→</view>
</view>
</view>
</view>4. 排序优化(按使用频率)
// 增加排序选项
const sortOptions = [
{ value: 'created_at', label: '最新采集' },
{ value: 'usage_count', label: '最常使用' }, // 新增
{ value: 'last_used_at', label: '最近使用' } // 新增
];
const loadData = async (sortBy = 'created_at') => {
const params = {
page, limit: 20,
order_by: sortBy,
order_direction: sortBy === 'created_at' ? 'DESC' : 'DESC'
};
const res = await inspirationApi.getUnifiedFeed(params);
// ...
};预期效果:
- 用户价值感知:从"不知道灵感有没有用"到"看到明确的使用数据"
- 复用率提升:高价值灵感被多次使用,ROI提升
优化2.3:灵感推荐算法 🎯 P1
问题分析:
- 当前:"推荐灵感"Tab内容来源不明,推荐不精准
- 痛点:推荐的内容与用户无关(比如美业用户看到餐饮内容)
方案设计:
1. 推荐策略设计
// services/RecommendationService.js
class RecommendationService {
async getRecommendations(userId, limit = 20) {
const strategies = [
this.collaborativeFiltering(userId), // 协同过滤
this.contentBasedFiltering(userId), // 内容推荐
this.trendBasedFiltering(userId) // 热度推荐
];
// 多策略融合(权重配置)
const results = await Promise.all(strategies);
return this.mergeAndRank(results, {
collaborative: 0.4,
content: 0.4,
trend: 0.2
});
}
// 策略1:协同过滤
async collaborativeFiltering(userId) {
// 找到相似用户(采集了相似灵感的用户)
const similarUsers = await this.findSimilarUsers(userId);
// 推荐相似用户采集的灵感
const recommendations = await UserCorpus.findAll({
where: {
user_id: { [Op.in]: similarUsers },
is_deleted: false
},
order: [['usage_count', 'DESC']],
limit: 20
});
return recommendations;
}
// 策略2:内容推荐
async contentBasedFiltering(userId) {
// 获取用户偏好(从历史采集中提取)
const userPreference = await this.getUserPreference(userId);
// 推荐相似内容
return await UserCorpus.findAll({
where: {
ai_tags: { [Op.overlap]: userPreference.tags },
inspiration_type: userPreference.types,
is_deleted: false,
user_id: { [Op.ne]: userId } // 排除自己的
},
order: [['created_at', 'DESC']],
limit: 20
});
}
// 策略3:热度推荐
async trendBasedFiltering(userId) {
const userIndustry = await this.getUserIndustry(userId);
// 推荐同行业的热点灵感
return await UserCorpus.findAll({
where: {
inspiration_type: 'trend',
ai_tags: { [Op.overlap]: [userIndustry] },
is_deleted: false
},
order: [['hot_score', 'DESC']],
limit: 20
});
}
// 辅助:用户偏好提取
async getUserPreference(userId) {
const myInspirations = await UserCorpus.findAll({
where: { user_id: userId, is_deleted: false },
attributes: ['ai_tags', 'inspiration_type'],
limit: 50
});
// 统计标签频率
const tagFreq = {};
const typeFreq = {};
myInspirations.forEach(item => {
if (item.ai_tags) {
item.ai_tags.forEach(tag => {
tagFreq[tag] = (tagFreq[tag] || 0) + 1;
});
}
typeFreq[item.inspiration_type] = (typeFreq[item.inspiration_type] || 0) + 1;
});
return {
tags: Object.keys(tagFreq).sort((a, b) => tagFreq[b] - tagFreq[a]).slice(0, 5),
types: Object.keys(typeFreq)
};
}
}2. 时段智能推荐
// 根据时间段调整推荐策略
const getTimeBasedRecommendations = (hour) => {
if (hour >= 7 && hour < 12) {
// 早上:推荐热点话题
return { strategy: 'trend', weight: 0.6 };
} else if (hour >= 12 && hour < 18) {
// 下午:推荐项目相关
return { strategy: 'content', weight: 0.7 };
} else {
// 晚上:推荐教程类
return { strategy: 'collaborative', weight: 0.6 };
}
};预期效果:
- 推荐点击率:从<10% 提升到 25%+
- 用户满意度:NPS从6分提升到8分
优化2.4:灵感详情增强 🎯 P1
问题分析:
- 当前:详情页只展示基础信息(标题、内容、封面)
- 缺失:缺少深度信息(相似灵感、适用场景、创作建议)
方案设计:
1. 相似灵感推荐
// 使用向量相似度
const getSimilarInspirations = async (inspirationId) => {
const current = await UserCorpus.findByPk(inspirationId);
// 方案A:简单版 - 基于标签匹配
const similar = await UserCorpus.findAll({
where: {
id: { [Op.ne]: inspirationId },
ai_tags: { [Op.overlap]: current.ai_tags },
is_deleted: false
},
limit: 5
});
// 方案B:高级版 - 基于向量相似度(需要pgvector)
// const embedding = await getEmbedding(current.content);
// const similar = await sequelize.query(`
// SELECT *, embedding <-> $1 AS distance
// FROM UserCorpus
// WHERE id != $2
// ORDER BY distance
// LIMIT 5
// `, { bind: [embedding, inspirationId] });
return similar;
};2. 适用场景分析(AI)
// 调用AI分析灵感适用场景
const analyzeUseCase = async (inspiration) => {
const prompt = `
分析以下灵感内容,推荐3-5个适用的拍摄场景。
内容:${inspiration.content}
行业:${inspiration.ai_tags.find(t => t.category === 'industry')}
输出JSON格式:
{
"use_cases": [
{ "scene": "场景名称", "reason": "原因", "difficulty": "简单/中等/困难" }
]
}
`;
const response = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: prompt }]
});
return JSON.parse(response.choices[0].message.content).use_cases;
};3. 一键生成完整任务
<view class="detail-actions">
<!-- 基础操作 -->
<button class="action-btn" @click="convertToTask">
⚡ 转为任务
</button>
<!-- 高级操作 -->
<button class="action-btn advanced" @click="generateFullTask">
🤖 AI生成完整任务
</button>
</view>// AI生成完整任务配置
const generateFullTask = async (inspiration) => {
uni.showLoading({ title: 'AI分析中...' });
try {
// 调用AI服务生成任务配置
const taskConfig = await ai.generateTaskFromInspiration({
inspiration_id: inspiration.id,
content: inspiration.content,
industry: userIndustry
});
// 预览生成结果
uni.hideLoading();
uni.showModal({
title: 'AI已生成任务配置',
content: `
任务类型:${taskConfig.type}
拍摄步骤:${taskConfig.steps.length}个
预计时长:${taskConfig.duration}秒
是否确认创建?
`,
success: async (res) => {
if (res.confirm) {
const task = await taskApi.create(taskConfig);
uni.switchTab({ url: '/pages/index/index' });
}
}
});
} catch (error) {
uni.hideLoading();
uni.showToast({ title: 'AI服务异常', icon: 'none' });
}
};预期效果:
- 从"收藏工具"升级为"创作助手"
- 任务创建效率提升80%(从手动填写到AI生成)
阶段3:长期战略(3-6个月,架构重构)
目标: 打通灵感→任务→创作全链路,实现社区化
资源需求: 2名前端 + 2名后端 + 1名AI工程师 + 1名产品经理
风险等级: 🔴 高(涉及数据迁移和架构重构)
优化3.1:数据模型重构 🎯 P2
目标: 解决灵感和素材共用表的性能和扩展性问题
方案设计:
1. 新表结构
-- 灵感表(外部采集)
CREATE TABLE Inspirations (
id UUID PRIMARY KEY,
user_id INTEGER REFERENCES Users(id),
project_id UUID REFERENCES Projects(id),
-- 基础信息
title VARCHAR(500),
content TEXT,
-- 来源信息
source_type ENUM('link', 'text', 'voice'),
source_platform VARCHAR(50), -- douyin/xiaohongshu/etc
source_url TEXT,
-- AI处理
ai_summary TEXT,
ai_tags JSONB, -- 使用JSONB以支持GIN索引
-- 媒体
cover_url TEXT,
media_urls JSONB,
-- 分类
type ENUM('collection', 'trend'),
-- 统计
view_count INTEGER DEFAULT 0,
usage_count INTEGER DEFAULT 0,
last_used_at TIMESTAMP,
-- 状态
status ENUM('active', 'archived', 'deleted') DEFAULT 'active',
-- 时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 素材表(用户上传)
CREATE TABLE Assets (
id UUID PRIMARY KEY,
user_id INTEGER REFERENCES Users(id),
project_id UUID REFERENCES Projects(id),
-- 文件信息
file_type ENUM('image', 'video', 'audio'),
file_url TEXT NOT NULL,
thumbnail_url TEXT,
file_size BIGINT,
duration INTEGER, -- 视频/音频时长(秒)
resolution VARCHAR(20), -- 如"1080x1920"
-- 元数据
title VARCHAR(200),
description TEXT,
tags JSONB,
-- 来源
uploaded_from VARCHAR(20), -- 'mobile' / 'desktop' / 'import'
-- 分析结果(AI识别)
ai_analysis JSONB, -- 场景、物体、情感等
-- 统计
usage_count INTEGER DEFAULT 0,
last_used_at TIMESTAMP,
-- 状态
status ENUM('processing', 'ready', 'failed', 'deleted') DEFAULT 'processing',
-- 时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 使用记录表
CREATE TABLE InspirationUsage (
id UUID PRIMARY KEY,
inspiration_id UUID REFERENCES Inspirations(id),
task_id UUID REFERENCES CaptureTasks(id),
user_id INTEGER REFERENCES Users(id),
used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- 使用上下文
context JSONB -- 记录如何使用的(如:作为参考/作为模板/作为文案源)
);
-- 索引优化
CREATE INDEX idx_inspirations_user_type ON Inspirations(user_id, type, status);
CREATE INDEX idx_inspirations_tags ON Inspirations USING GIN(ai_tags);
CREATE INDEX idx_inspirations_usage ON Inspirations(usage_count DESC, last_used_at DESC);
CREATE INDEX idx_assets_user_type ON Assets(user_id, file_type, status);
CREATE INDEX idx_assets_project ON Assets(project_id, created_at DESC);2. 数据迁移策略
// migrations/20250112000000-split-corpus-table.js
async function migrate() {
const existingData = await UserCorpus.findAll({
where: { is_deleted: false }
});
for (const item of existingData) {
// 判断是灵感还是素材
if (item.content_type === 'asset') {
// 迁移到Assets表
await Asset.create({
id: item.id,
user_id: item.user_id,
project_id: item.project_id,
file_type: inferFileType(item),
file_url: item.media_urls[0],
title: item.title,
uploaded_from: item.meta?.source || 'unknown',
created_at: item.created_at
});
} else {
// 迁移到Inspirations表
await Inspiration.create({
id: item.id,
user_id: item.user_id,
project_id: item.project_id,
title: item.title,
content: item.content,
source_platform: item.source_platform,
source_url: item.source_url,
ai_summary: item.ai_summary,
ai_tags: item.ai_tags,
cover_url: item.media_urls[0],
type: item.inspiration_type,
usage_count: item.usage_count || 0,
created_at: item.created_at
});
}
}
console.log(`Migrated ${existingData.length} records`);
}3. API兼容层
// 保持旧API兼容
router.get('/unified-feed', authenticateToken, async (req, res) => {
const { content_type } = req.query;
let results;
if (content_type === 'asset') {
results = await Asset.findAll({ where: { user_id: req.user.id } });
} else if (content_type === 'inspiration') {
results = await Inspiration.findAll({ where: { user_id: req.user.id } });
} else {
// all:合并两个表
const inspirations = await Inspiration.findAll({ where: { user_id: req.user.id } });
const assets = await Asset.findAll({ where: { user_id: req.user.id } });
results = [...inspirations, ...assets].sort((a, b) =>
new Date(b.created_at) - new Date(a.created_at)
);
}
res.json({ success: true, data: { items: results } });
});预期效果:
- 查询性能提升:70%(通过专用索引)
- 代码可维护性提升:清晰的表结构,减少复杂WHERE条件
- 功能扩展性提升:可以独立为Inspirations和Assets添加新字段
优化3.2:灵感工作流深度集成 🎯 P2
目标: 灵感不再是独立模块,而是任务创建的前置步骤
方案设计:
1. 任务创建流程重构
当前流程:
任务列表 → 点击"新建任务" → 手动填写表单 → 创建
新流程:
任务列表 → 点击"新建任务" →
选择方式:
- 从灵感创建 (80%用户选择)
- 从模板创建
- 从空白创建2. 灵感详情页集成任务生成器
<!-- 灵感详情页底部 -->
<view class="detail-footer">
<!-- 第一步:选择项目 -->
<view class="create-task-panel">
<view class="panel-step">
<text class="step-num">1</text>
<text class="step-label">选择项目</text>
</view>
<view class="project-selector">
<picker
:range="projects"
range-key="name"
@change="selectProject"
>
<view class="picker-display">
{{ selectedProject?.name || '选择项目' }}
</view>
</picker>
</view>
</view>
<!-- 第二步:AI生成任务配置 -->
<view class="create-task-panel">
<view class="panel-step">
<text class="step-num">2</text>
<text class="step-label">生成任务配置</text>
</view>
<button
class="generate-btn"
@click="generateTaskConfig"
:loading="isGenerating"
>
<text class="icon">🤖</text>
<text>AI智能生成</text>
</button>
</view>
<!-- 第三步:预览和调整 -->
<view class="task-preview" v-if="taskConfig">
<view class="preview-section">
<text class="section-title">拍摄步骤 ({{taskConfig.steps.length}}个)</text>
<view class="steps-list">
<view class="step-item" v-for="(step, i) in taskConfig.steps" :key="i">
<text class="step-index">{{ i + 1 }}</text>
<text class="step-instruction">{{ step.instruction }}</text>
<text class="step-duration">{{ step.duration }}s</text>
</view>
</view>
</view>
<view class="preview-section">
<text class="section-title">口播文案</text>
<textarea
v-model="taskConfig.script"
class="script-input"
placeholder="AI生成的文案,可修改"
/>
</view>
<view class="preview-section">
<text class="section-title">推荐BGM</text>
<view class="bgm-suggestion">
<text class="bgm-name">{{ taskConfig.bgm.name }}</text>
<button class="play-btn" @click="playBGM">试听</button>
</view>
</view>
</view>
<!-- 第四步:创建任务 -->
<button
class="create-task-btn"
@click="createTask"
v-if="taskConfig"
>
<text>创建任务并开始拍摄</text>
</button>
</view>3. AI工作流集成
// services/InspirationToTaskWorkflow.js
class InspirationToTaskWorkflow {
async execute(inspirationId, projectId, userId) {
// Step 1: 获取灵感详情
const inspiration = await Inspiration.findByPk(inspirationId);
// Step 2: 调用CreativeAssistantService分析
const analysis = await CreativeAssistantService.analyzeContent({
content: inspiration.content,
platform: inspiration.source_platform,
industry: await this.getUserIndustry(userId)
});
// Step 3: 生成拍摄步骤
const steps = await this.generateShootingSteps(inspiration, analysis);
// Step 4: 改写口播文案
const script = await this.rewriteScript(inspiration.content, analysis);
// Step 5: 推荐BGM
const bgm = await this.suggestBGM(analysis.emotion);
// Step 6: 组装任务配置
return {
title: inspiration.title,
description: `基于灵感「${inspiration.title}」创建`,
task_type: analysis.task_type,
duration: steps.reduce((sum, s) => sum + s.duration, 0),
steps,
script,
bgm,
reference_content: {
inspiration_id: inspirationId,
source_url: inspiration.source_url,
cover_image: inspiration.cover_url
}
};
}
async generateShootingSteps(inspiration, analysis) {
const prompt = `
基于以下灵感内容,生成详细的拍摄步骤。
灵感内容:${inspiration.content}
内容分析:${JSON.stringify(analysis)}
要求:
1. 每个步骤包含:镜头类型、拍摄指导、建议时长
2. 适合小白用户,指导要具体
3. 总时长控制在60秒内
输出JSON格式:
{
"steps": [
{ "step": 1, "shot_type": "全景", "instruction": "拍摄店门口,展示招牌", "duration": 3 }
]
}
`;
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: prompt }]
});
return JSON.parse(response.choices[0].message.content).steps;
}
async rewriteScript(originalContent, analysis) {
const prompt = `
改写以下内容为适合口播的文案。
原内容:${originalContent}
要求:
1. 保留核心信息
2. 口语化,自然流畅
3. 60秒内能读完
4. 符合${analysis.platform}平台风格
`;
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: prompt }]
});
return response.choices[0].message.content;
}
async suggestBGM(emotion) {
// 根据情感标签推荐BGM
const bgmLibrary = {
'energetic': { name: '活力节拍', file: 'bgm_energetic.mp3' },
'calm': { name: '舒缓音乐', file: 'bgm_calm.mp3' },
'exciting': { name: '激动人心', file: 'bgm_exciting.mp3' }
};
return bgmLibrary[emotion] || bgmLibrary['energetic'];
}
}预期效果:
- 任务创建效率:从3-5分钟 → 30秒
- 灵感→任务转化率:从20% → 60%+
- 用户体验:从"工具"升级为"助手"
优化3.3:去中心化外部服务依赖 🎯 P2
目标: 降低部署门槛,提升功能可用性
方案选择:
方案A:轻量级内置(推荐)
// 使用轻量级库代替MediaCrawler
const cheerio = require('cheerio');
const axios = require('axios');
async function parseLink_builtin(url) {
// 1. 检测平台
const platform = detectPlatform(url);
// 2. 根据平台调用不同策略
switch (platform) {
case 'douyin':
return await parseDouyin(url);
case 'xiaohongshu':
return await parseXiaohongshu(url);
default:
return await parseGeneric(url);
}
}
async function parseGeneric(url) {
try {
const response = await axios.get(url, {
headers: { 'User-Agent': 'Mozilla/5.0...' }
});
const $ = cheerio.load(response.data);
// 提取OpenGraph元数据
return {
title: $('meta[property="og:title"]').attr('content') || $('title').text(),
description: $('meta[property="og:description"]').attr('content'),
cover: $('meta[property="og:image"]').attr('content'),
platform: detectPlatform(url)
};
} catch (error) {
// 降级:返回基础信息
return {
title: url,
description: '点击查看原链接',
cover: null,
platform: 'external'
};
}
}
async function parseDouyin(url) {
// 抖音链接特殊处理(通过分享ID获取)
const shareId = extractShareId(url);
try {
// 调用抖音开放平台API(如果有)
const response = await axios.get(`https://open.douyin.com/share/video/${shareId}`);
return {
title: response.data.title,
cover: response.data.cover,
platform: 'douyin'
};
} catch (error) {
// 降级到通用解析
return await parseGeneric(url);
}
}方案B:云端SaaS服务
// KKmusic云端API
const CLOUD_API = 'https://api.kkmusic.cloud/v1';
async function parseLink_cloud(url, userApiKey) {
const response = await axios.post(`${CLOUD_API}/parse-link`, {
url,
options: {
extract_video: false, // 不下载视频(节省成本)
extract_meta: true
}
}, {
headers: {
'Authorization': `Bearer ${userApiKey}`,
'X-User-Id': req.user.id
}
});
// 云端返回统一格式
return response.data;
}
// 用户注册时赠送免费额度
async function onUserRegister(userId) {
await ApiQuota.create({
user_id: userId,
service: 'link_parse',
quota: 100, // 免费100次
used: 0
});
}方案C:混合策略(最优)
async function parseLink_hybrid(url) {
// 1. 优先使用内置解析
try {
const result = await parseLink_builtin(url);
if (result.title && result.cover) {
return result;
}
} catch (error) {
console.warn('[Inspiration] 内置解析失败,尝试云端');
}
// 2. 内置失败,尝试云端
if (process.env.KKMUSIC_CLOUD_API_KEY) {
try {
return await parseLink_cloud(url, process.env.KKMUSIC_CLOUD_API_KEY);
} catch (error) {
console.warn('[Inspiration] 云端解析失败');
}
}
// 3. 都失败,返回基础信息
return {
title: '外部链接',
description: url,
cover: null,
source_url: url
};
}热点推送轻量化:
// 不再依赖TrendRadar,直接调用公开API
async function fetchTrends() {
const sources = [
fetchWeiboHot(),
fetchDouyinTrends(),
fetchBaiduHot()
];
const results = await Promise.all(sources);
const merged = results.flat();
// 按用户行业筛选
const filtered = merged.filter(item =>
item.tags.includes(user.industry)
);
// 存入数据库
await Inspiration.bulkCreate(filtered.map(item => ({
title: item.title,
content: item.description,
type: 'trend',
source_platform: item.source,
ai_tags: item.tags,
hot_score: item.rank
})));
}
async function fetchWeiboHot() {
const response = await axios.get('https://weibo.com/ajax/side/hotSearch');
return response.data.realtime.map(item => ({
title: item.word,
rank: item.rank,
source: 'weibo',
tags: item.category ? [item.category] : ['通用']
}));
}预期效果:
- 部署成功率:从50% → 95%
- 功能可用性:即使不配置外部服务,核心功能仍可用
- 用户满意度:减少因"功能不可用"导致的差评
优化3.4:社区化灵感共享 🎯 P2
目标: 从个人工具升级为创作者社区
方案设计:
1. 灵感广场
<view class="inspiration-square">
<view class="square-header">
<text class="square-title">灵感广场</text>
<text class="square-desc">发现其他创作者的优质灵感</text>
</view>
<!-- 筛选器 -->
<view class="square-filters">
<view class="filter-tabs">
<view
class="filter-tab"
:class="{ active: filterCategory === 'all' }"
@click="filterCategory = 'all'"
>
全部
</view>
<view
class="filter-tab"
:class="{ active: filterCategory === 'beauty' }"
@click="filterCategory = 'beauty'"
>
美业
</view>
<view
class="filter-tab"
:class="{ active: filterCategory === 'food' }"
@click="filterCategory = 'food'"
>
餐饮
</view>
<view
class="filter-tab"
:class="{ active: filterCategory === 'knowledge' }"
@click="filterCategory = 'knowledge'"
>
知识IP
</view>
</view>
<view class="sort-selector">
<picker :range="['最新', '最热', '最多收藏']" @change="handleSortChange">
<text>{{ currentSort }}</text>
</picker>
</view>
</view>
<!-- 灵感列表 -->
<view class="square-content">
<view
class="square-card"
v-for="item in squareList"
:key="item.id"
@click="viewSquareDetail(item)"
>
<image class="card-cover" :src="item.cover" mode="aspectFill" />
<view class="card-body">
<text class="card-title">{{ item.title }}</text>
<view class="card-stats">
<view class="stat-item">
<text class="icon">👁️</text>
<text>{{ item.view_count }}</text>
</view>
<view class="stat-item">
<text class="icon">❤️</text>
<text>{{ item.like_count }}</text>
</view>
<view class="stat-item">
<text class="icon">⭐</text>
<text>{{ item.collect_count }}</text>
</view>
</view>
</view>
<!-- 作者信息 -->
<view class="card-author">
<image class="author-avatar" :src="item.author.avatar" />
<text class="author-name">{{ item.author.name }}</text>
<view class="author-badge" v-if="item.author.is_verified">
<text>✓ 认证</text>
</view>
</view>
</view>
</view>
</view>2. 分享机制
// 用户可选择是否分享灵感到广场
const shareToSquare = async (inspirationId) => {
// 1. 检查是否符合分享条件
const inspiration = await Inspiration.findByPk(inspirationId);
if (inspiration.usage_count < 1) {
uni.showToast({
title: '至少使用过一次才能分享哦',
icon: 'none'
});
return;
}
// 2. 创建分享记录
await InspirationsSquare.create({
inspiration_id: inspirationId,
user_id: req.user.id,
category: detectCategory(inspiration.ai_tags),
status: 'pending_review' // 需要审核
});
// 3. 奖励积分
await UserPoints.increment({ user_id: req.user.id, points: 10 });
uni.showToast({
title: '已提交,审核通过后将在广场展示',
icon: 'success'
});
};3. 社区互动
// 点赞
router.post('/square/:id/like', authenticateToken, async (req, res) => {
await InspirationsSquare.increment('like_count', {
where: { id: req.params.id }
});
await SquareLike.create({
square_id: req.params.id,
user_id: req.user.id
});
res.json({ success: true });
});
// 收藏到我的灵感库
router.post('/square/:id/collect', authenticateToken, async (req, res) => {
const squareItem = await InspirationsSquare.findByPk(req.params.id, {
include: [Inspiration]
});
// 创建副本到用户自己的灵感库
const myInspiration = await Inspiration.create({
...squareItem.Inspiration.toJSON(),
id: undefined, // 生成新ID
user_id: req.user.id,
source_type: 'community',
original_author_id: squareItem.user_id
});
res.json({ success: true, inspiration_id: myInspiration.id });
});4. 激励机制
// 积分系统
const POINT_RULES = {
share_inspiration: 10,
inspiration_liked: 2,
inspiration_collected: 5,
high_quality_inspiration: 50 // 被收藏超过100次
};
// 排行榜
router.get('/square/leaderboard', async (req, res) => {
const topUsers = await sequelize.query(`
SELECT
u.id, u.name, u.avatar,
COUNT(DISTINCT is.id) AS inspiration_count,
SUM(is.like_count) AS total_likes,
SUM(is.collect_count) AS total_collects
FROM Users u
JOIN InspirationsSquare is ON u.id = is.user_id
WHERE is.status = 'approved'
GROUP BY u.id
ORDER BY total_collects DESC
LIMIT 20
`);
res.json({ success: true, data: topUsers });
});预期效果:
- 内容生态:UGC内容增加,降低运营成本
- 用户黏性:DAU/MAU比例从20% → 35%
- 商业价值:社区氛围形成后,可开展付费会员、广告等变现
第五部分:实施路线图
5.1 时间线规划
gantt
title 灵感板块优化实施路线图
dateFormat YYYY-MM-DD
section 阶段1-快速优化
简化Tab结构 :a1, 2025-01-15, 3d
强化一键引用入口 :a2, after a1, 2d
空状态引导优化 :a3, after a2, 2d
测试和发布 :a4, after a3, 3d
section 阶段2-中期迭代
智能标签系统 :b1, 2025-02-01, 14d
灵感使用统计 :b2, 2025-02-05, 7d
推荐算法开发 :b3, 2025-02-15, 14d
详情页增强 :b4, 2025-02-20, 7d
测试和发布 :b5, 2025-03-01, 7d
section 阶段3-长期战略
数据模型重构 :c1, 2025-04-01, 28d
工作流深度集成 :c2, 2025-04-15, 28d
外部服务优化 :c3, 2025-05-01, 14d
社区化功能 :c4, 2025-05-15, 28d
全面测试和上线 :c5, 2025-06-10, 14d5.2 资源分配
| 阶段 | 前端 | 后端 | AI工程师 | 测试 | 总人天 |
|---|---|---|---|---|---|
| 阶段1 | 5天 | 3天 | 0 | 2天 | 10天 |
| 阶段2 | 20天 | 20天 | 10天 | 8天 | 58天 |
| 阶段3 | 40天 | 50天 | 20天 | 20天 | 130天 |
团队配置建议:
- 前端工程师:1名(全程参与)
- 后端工程师:2名(阶段2-3各1名)
- AI工程师:1名(阶段2-3兼职)
- 测试工程师:1名(兼职)
- 产品经理:1名(阶段3全程参与)
5.3 里程碑与验收标准
里程碑1:阶段1完成(Week 2)
验收标准:
- ✅ Tab从5个减少到3个
- ✅ 每个卡片底部有"用这个拍视频"按钮
- ✅ 空状态显示引导文案和示例灵感
- ✅ 灵感→任务转化率达到15%以上
- ✅ 用户反馈NPS > 7
里程碑2:阶段2完成(Week 8)
验收标准:
- ✅ 所有灵感自动打上AI标签
- ✅ 标签筛选功能可用,点击率>20%
- ✅ 卡片上显示使用次数
- ✅ 推荐Tab内容与用户相关度>70%
- ✅ 详情页有"相似灵感"和"适用场景"
- ✅ 灵感使用率提升30%
里程碑3:阶段3完成(Week 24)
验收标准:
- ✅ 数据迁移完成,无数据丢失
- ✅ 查询性能提升50%以上
- ✅ 灵感详情页可直接生成完整任务
- ✅ 内置解析成功率>80%(无需MediaCrawler)
- ✅ 灵感广场上线,UGC内容>100条
- ✅ 社区日活>100人
第六部分:成功指标体系
6.1 短期指标(1个月)
| 指标名称 | 当前基线 | 目标值 | 数据采集方式 |
|---|---|---|---|
| 灵感采集量 | 10条/用户/月 | 13条/用户/月 (+30%) | 数据库统计 |
| 采集成功率 | 60% | 85% | 后端日志分析 |
| 灵感→任务转化率 | 5% | 15% | 埋点统计 |
| 首次采集转化率 | 0% | 40% | 新用户漏斗分析 |
| 用户7日留存 | 45% | 50% (+10%) | Cohort分析 |
| NPS评分 | 6 | 7.5 | 问卷调查 |
数据采集实现:
// 埋点示例
analytics.track('inspiration_collected', {
user_id: req.user.id,
inspiration_id: inspiration.id,
source_type: inspiration.source_type,
success: true,
elapsed_time: Date.now() - startTime
});
analytics.track('inspiration_converted_to_task', {
user_id: req.user.id,
inspiration_id: inspiration.id,
task_id: task.id
});6.2 中期指标(3个月)
| 指标名称 | 目标值 | 计算公式 | 数据源 |
|---|---|---|---|
| 灵感平均使用次数 | 2次/条 | SUM(usage_count) / COUNT(inspirations) | Inspirations表 |
| 高价值灵感占比 | 20% | COUNT(usage_count>=5) / COUNT(all) | 统计查询 |
| 推荐点击率 | 25% | 推荐Tab点击数 / 推荐Tab展示数 | 埋点统计 |
| 标签筛选使用率 | 30% | 使用标签筛选的会话数 / 总会话数 | 行为日志 |
| 灵感查找效率 | 5秒 | 平均查找时间(从进入到点击) | 前端计时 |
| 用户满意度 | NPS > 8 | (推荐者% - 贬损者%) | 问卷调查 |
6.3 长期指标(6个月)
| 指标名称 | 目标值 | 说明 |
|---|---|---|
| 社区UGC占比 | 30% | 来自社区的灵感占总灵感的比例 |
| 社区活跃度 | DAU/MAU > 30% | 日活跃用户 / 月活跃用户 |
| 用户分享率 | 10% | 至少分享过1条灵感的用户比例 |
| 灵感广场GMV | ¥50万/月 | 通过广场带来的商业价值(会员、广告) |
| 付费转化率 | 5% | 免费用户 → 付费会员的转化率 |
| 平台NPS | > 50 | 整体用户推荐度 |
6.4 数据看板设计
// Grafana Dashboard配置示例
{
"dashboard": {
"title": "灵感板块核心指标",
"panels": [
{
"title": "灵感采集趋势",
"targets": [
{
"query": "SELECT DATE(created_at), COUNT(*) FROM Inspirations GROUP BY DATE(created_at)"
}
],
"type": "graph"
},
{
"title": "转化漏斗",
"targets": [
{
"query": `
SELECT
'采集' AS stage, COUNT(DISTINCT user_id) AS users FROM Inspirations
UNION ALL
SELECT
'查看' AS stage, COUNT(DISTINCT user_id) FROM InspirationViews
UNION ALL
SELECT
'转化' AS stage, COUNT(DISTINCT user_id) FROM InspirationUsage
`
}
],
"type": "funnel"
},
{
"title": "Top10 高价值灵感",
"targets": [
{
"query": "SELECT title, usage_count FROM Inspirations ORDER BY usage_count DESC LIMIT 10"
}
],
"type": "table"
}
]
}
}第七部分:风险管理
7.1 技术风险
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 数据迁移失败 | 中 | 高 | 1) 充分测试 2) 双写机制 3) 回滚方案 |
| AI服务不稳定 | 高 | 中 | 1) 降级方案 2) 缓存机制 3) 备用模型 |
| 性能下降 | 中 | 中 | 1) 压力测试 2) 索引优化 3) CDN加速 |
| 外部API限流 | 高 | 中 | 1) 请求队列 2) 备用API 3) 本地缓存 |
7.2 产品风险
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 用户不接受Tab调整 | 中 | 中 | 灰度发布 + A/B测试 + 用户反馈快速迭代 |
| 推荐算法效果差 | 高 | 高 | 准备3套推荐策略,AB测试选最优 |
| 社区内容质量低 | 中 | 高 | 审核机制 + 激励优质内容 + 降权低质 |
7.3 资源风险
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 人力不足 | 中 | 高 | 降低阶段3优先级,聚焦阶段1-2 |
| AI成本超预算 | 高 | 中 | 使用GPT-4o-mini,限制调用频率 |
| 时间延期 | 中 | 中 | 砍掉次要功能,保证核心体验 |
第八部分:总结与建议
8.1 核心要点
- 问题根源:灵感板块当前最大问题是"定位模糊"和"转化断层"
- 优化重点:优先解决转化路径(一键引用),其次提升查找效率(标签/推荐)
- 长期方向:从收藏工具 → 创作助手 → 创作者社区
8.2 快速落地建议
如果只有1周时间,做这3件事:
- 简化Tab结构(3个Tab)
- 卡片底部增加"用这个拍视频"按钮
- 空状态增加引导文案
预期收益: 转化率 +10%,用户留存 +5%
如果有1个月时间,再做这3件事: 4. AI自动打标签 5. 标签筛选功能 6. 使用次数可视化
预期收益: 查找效率 +50%,灵感复用率 +30%
如果有3个月时间,再做这2件事: 7. 灵感→任务工作流集成(AI生成完整任务) 8. 去除MediaCrawler依赖(内置轻量级解析)
预期收益: 任务创建效率 +80%,部署成功率 +45%
8.3 下一步行动
- 立即:与产品团队review本方案,确定阶段1范围
- 本周:启动阶段1开发(3天完成)
- 下周:灰度发布阶段1,收集用户反馈
- 下月:根据数据决定是否进入阶段2
附录
A. 参考资料
INSPIRATION_MINIPROGRAM_ANALYSIS.md- 现状分析报告INSPIRATION_SETUP.md- 当前灵感库部署文档INSPIRATION_OPTIMIZATION_SUMMARY.md- Web端优化总结
B. 联系方式
有任何疑问,请联系:
- 产品负责人:[姓名]
- 技术负责人:[姓名]
- 项目管理:[姓名]
文档结束