公司动态

AI视频提示词反推实战:从舞蹈视频自动生成Seedance提示词

📅 2026/8/22 10:22:39
AI视频提示词反推实战:从舞蹈视频自动生成Seedance提示词
最近在尝试用AI生成舞蹈视频时发现一个普遍痛点网上找到的舞蹈视频片段很精彩但想用Seedance这类AI视频生成工具复刻出来却异常困难。难点不在于工具本身而在于如何将视频中的复杂动作、场景、风格精准地“翻译”成AI能理解的提示词Prompt。手动拆解一帧帧画面再组合成有效的提示词不仅耗时耗力而且效果难以保证。本文将分享一套完整的“AI视频提示词反推”实战方案。我们将聚焦于如何利用现有工具和技术从任意舞蹈视频或其他动作视频中自动分析并生成一套高质量、标准化的Seedance提示词实现“一键复刻”视频风格与动作。无论你是想复刻热门舞蹈还是为原创视频寻找AI表达的灵感这套方法都能帮你大幅提升效率。下文将涵盖工具选型、环境搭建、核心代码实现、参数调优以及避坑指南提供可直接运行的代码示例。1. 背景与核心概念为什么需要提示词反推在深入实战之前我们有必要厘清几个核心概念理解“提示词反推”的价值所在。1.1 AI视频生成与提示词工程当前热门的AI视频生成模型如Seedance、Pika、Runway等通常依赖于文本提示词Prompt来引导生成过程。一个优秀的提示词需要包含主体谁在动例如“一个女孩”、“一位舞者”。动作在做什么例如“跳着Iris Out舞蹈”、“后空翻”。场景在哪里例如“在现代化的舞蹈工作室”、“在霓虹灯闪烁的街头”。风格视觉感受如何例如“电影感”、“赛博朋克”、“8K高清”。技术参数镜头、帧率等。例如“全景镜头”、“慢动作”、“24fps”。手动编写这样的提示词需要对视频内容有极强的概括和抽象能力并且要熟悉AI模型对词汇的“偏好”。1.2 视频复刻的挑战当你手里有一段想复刻的视频比如一段精彩的K-pop舞蹈直接将其输入给AI模型是行不通的。现有模型大多不支持“视频到视频”的完美复刻。因此我们需要一个中间桥梁——将视频内容解构成文本描述即提示词。这个过程就是“视频提示词反推”。1.3 反推工具的核心思路一个完整的反推流程通常包含以下步骤视频预处理抽帧、分辨率调整、格式统一。视觉特征分析图像描述使用视觉大模型如BLIP、CLIP Interrogator为关键帧生成文本描述。动作识别使用动作识别模型如VideoMAE、TimeSformer或姿态估计模型如OpenPose、MMPose来识别舞蹈类型或关键姿态序列。场景/风格识别分析视频的整体色调、光照、场景复杂度。提示词合成与优化将上述分析得到的零散文本信息如“一个穿红衣服的人”、“踢腿动作”、“木质地板”、“暖色调”按照提示词工程的最佳实践组合、润色、结构化生成一段符合Seedance等模型输入规范的、高质量的提示词。接下来我们将从环境准备开始一步步构建这个工具链。2. 环境准备与版本说明本项目主要使用Python结合多种深度学习库和模型。以下环境配置经过验证建议使用Python 3.8-3.10以获得最佳兼容性。2.1 基础环境操作系统Windows 10/11, macOS, 或 Linux (Ubuntu 20.04)。本文示例以Ubuntu为例命令在Windows Git Bash或macOS终端中稍作调整也可运行。Python版本 3.8.10。包管理工具pip或conda。推荐使用venv或conda创建独立虚拟环境。2.2 创建并激活虚拟环境# 创建虚拟环境 python -m venv venv_ai_video_reverse # 激活环境 (Linux/macOS) source venv_ai_video_reverse/bin/activate # 激活环境 (Windows) venv_ai_video_reverse\Scripts\activate2.3 安装核心依赖我们将安装用于视频处理、图像描述、姿态估计的库。由于部分模型较大首次运行时会自动下载。# 升级pip pip install --upgrade pip # 基础科学计算和视频处理 pip install opencv-python pillow numpy scipy # 深度学习框架 (以PyTorch为例请根据CUDA版本访问官网获取安装命令) # 例如无CUDA: pip install torch torchvision torchaudio # 有CUDA 11.8: pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 图像描述模型 (BLIP) pip install transformers # 姿态估计 (MMPose 是一个强大的选择但安装稍复杂。这里先用轻量级的mediapipe做演示) pip install mediapipe # 用于发起网络请求如果使用在线API pip install requests # 用于格式化输出 pip install rich2.4 项目结构建议创建如下项目结构使代码清晰可管理ai_video_reverse_tool/ ├── main.py # 主程序入口 ├── config.py # 配置文件 ├── video_processor.py # 视频处理模块 ├── prompt_engine.py # 提示词生成引擎 ├── utils.py # 工具函数 ├── requirements.txt # 依赖列表 ├── input_videos/ # 存放待处理的视频 │ └── dance_sample.mp4 └── output_prompts/ # 存放生成的提示词在项目根目录下生成requirements.txt文件pip freeze requirements.txt3. 核心模块拆解与原理我们的工具链主要由三个核心模块组成视频处理器、特征分析器、提示词引擎。3.1 视频处理器抽帧与采样AI模型处理视频时通常不需要每一帧。均匀或基于动作变化抽帧是关键。均匀抽帧每隔N帧取一帧。简单但可能错过关键动作。基于光流/场景变化抽帧更智能能捕捉动作起始和转折点。我们先用均匀抽帧实现基础功能。3.2 特征分析器从帧到文本这是反推的核心我们采用多模型协作策略整体描述BLIP为每一帧生成一个概括性描述。例如“A woman dancing in a studio”。姿态估计MediaPipe检测人体关键点可以用于推断动作类型如抬手、踢腿或作为后续动作分类的输入特征。可选场景风格分类可以使用预训练的图像分类模型如ResNet在Place365数据集上训练来识别场景如“dance studio”, “stage”。3.3 提示词引擎结构化与优化将从各帧分析得到的杂乱文本融合成一条高质量的提示词。策略包括去重与合并合并相似的描述。关键词提取与排序识别出现频率高、重要性强的名词主体、物体、动词动作、形容词风格。模板填充使用预定义的提示词模板将提取出的元素填入相应位置。例如[主体] is [动作] in [场景], [风格形容词], [技术参数]。Seedance风格适配研究Seedance模型的推荐提示词语法例如可能对特定的动作描述符如“fluid movement”, “sharp hit”响应更好将通用描述转化为模型偏好词汇。4. 完整实战案例构建视频提示词反推工具让我们开始编写代码实现一个基础但可用的版本。4.1 视频处理模块 (video_processor.py)这个模块负责读取视频并抽取关键帧。# video_processor.py import cv2 import os from typing import List, Generator import logging logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) class VideoProcessor: def __init__(self, video_path: str): 初始化视频处理器 :param video_path: 视频文件路径 if not os.path.exists(video_path): raise FileNotFoundError(f视频文件不存在: {video_path}) self.video_path video_path self.cap cv2.VideoCapture(video_path) if not self.cap.isOpened(): raise ValueError(f无法打开视频文件: {video_path}) self.fps int(self.cap.get(cv2.CAP_PROP_FPS)) self.total_frames int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) self.duration self.total_frames / self.fps if self.fps 0 else 0 logger.info(f视频信息: {self.total_frames}帧, {self.fps}FPS, 时长{self.duration:.2f}秒) def extract_frames_uniform(self, interval_seconds: float 2.0) - List[int]: 均匀时间间隔抽帧返回帧索引列表 :param interval_seconds: 抽帧间隔秒 :return: 抽取的帧索引列表 frame_indices [] interval_frames int(self.fps * interval_seconds) if interval_frames 1: interval_frames 1 for i in range(0, self.total_frames, interval_frames): frame_indices.append(i) logger.info(f均匀抽帧间隔{interval_seconds}秒共抽取{len(frame_indices)}帧) return frame_indices def get_frame_at_index(self, frame_index: int): 获取指定索引的帧图像 (BGR格式) :param frame_index: 帧索引 :return: numpy array 图像如果读取失败返回None self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index) ret, frame self.cap.read() if ret: return frame else: logger.warning(f无法读取第{frame_index}帧) return None def release(self): 释放视频捕获对象 if self.cap: self.cap.release() def __del__(self): self.release() # 示例用法 if __name__ __main__: vp VideoProcessor(input_videos/dance_sample.mp4) indices vp.extract_frames_uniform(interval_seconds1.5) for idx in indices[:3]: # 只处理前三帧做演示 frame vp.get_frame_at_index(idx) if frame is not None: print(f已获取第{idx}帧形状: {frame.shape}) # 这里可以保存帧或进行后续处理 # cv2.imwrite(fframe_{idx}.jpg, frame) vp.release()4.2 特征分析模块 (feature_analyzer.py)我们集成BLIP进行图像描述用MediaPipe进行简单的人体检测作为动作分析的起点。# feature_analyzer.py from transformers import BlipProcessor, BlipForConditionalGeneration from PIL import Image import cv2 import mediapipe as mp import numpy as np from typing import Dict, Any, List import logging logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) class FeatureAnalyzer: def __init__(self, use_gpu: bool False): 初始化特征分析器 :param use_gpu: 是否使用GPU加速 self.device cuda if use_gpu else cpu logger.info(f初始化特征分析器设备: {self.device}) # 初始化BLIP模型 (图像描述) logger.info(正在加载BLIP模型...) self.blip_processor BlipProcessor.from_pretrained(Salesforce/blip-image-captioning-base) self.blip_model BlipForConditionalGeneration.from_pretrained(Salesforce/blip-image-captioning-base).to(self.device) # 初始化MediaPipe Pose (姿态检测) logger.info(正在初始化MediaPipe Pose...) self.mp_pose mp.solutions.pose self.pose self.mp_pose.Pose(static_image_modeTrue, min_detection_confidence0.5) def describe_image_blip(self, image_array: np.ndarray) - str: 使用BLIP模型为图像生成描述 :param image_array: OpenCV BGR格式的图像数组 :return: 图像描述文本 # 转换颜色空间 BGR - RGB rgb_image cv2.cvtColor(image_array, cv2.COLOR_BGR2RGB) pil_image Image.fromarray(rgb_image) # 预处理并生成描述 inputs self.blip_processor(pil_image, return_tensorspt).to(self.device) out self.blip_model.generate(**inputs, max_length50, num_beams5) description self.blip_processor.decode(out[0], skip_special_tokensTrue) return description def detect_pose_landmarks(self, image_array: np.ndarray) - Dict[str, Any]: 使用MediaPipe检测人体姿态关键点 :param image_array: OpenCV BGR格式的图像数组 :return: 包含检测结果的字典如果未检测到人则返回None rgb_image cv2.cvtColor(image_array, cv2.COLOR_BGR2RGB) results self.pose.process(rgb_image) pose_data {} if results.pose_landmarks: pose_data[landmarks] results.pose_landmarks # 可以计算一些简单特征如 bounding box, 关键点坐标等 h, w, _ image_array.shape landmarks [] for lm in results.pose_landmarks.landmark: landmarks.append({x: lm.x * w, y: lm.y * h, z: lm.z, visibility: lm.visibility}) pose_data[landmarks_list] landmarks # 简单判断如果大部分关键点可见则认为检测有效 visible_points sum([1 for lm in landmarks if lm[visibility] 0.5]) pose_data[has_person] visible_points 10 else: pose_data[has_person] False return pose_data def analyze_frame(self, frame: np.ndarray) - Dict[str, Any]: 综合分析单帧图像 :param frame: 视频帧 :return: 包含所有分析结果的字典 analysis {} # 1. 图像描述 try: analysis[description] self.describe_image_blip(frame) except Exception as e: logger.error(fBLIP描述失败: {e}) analysis[description] # 2. 姿态检测 analysis[pose] self.detect_pose_landmarks(frame) # 3. (可选) 可以在这里添加颜色分析、场景分类等 # analysis[dominant_color] self._get_dominant_color(frame) return analysis def release(self): 释放资源 self.pose.close() def __del__(self): self.release() # 示例用法 if __name__ __main__: analyzer FeatureAnalyzer(use_gpuFalse) # 无GPU时设为False # 假设有一个帧图像 sample_frame # analysis_result analyzer.analyze_frame(sample_frame) # print(f图像描述: {analysis_result[description]}) # print(f检测到人体: {analysis_result[pose][has_person]}) analyzer.release()4.3 提示词引擎模块 (prompt_engine.py)这个模块负责聚合多帧分析结果并生成最终的提示词。# prompt_engine.py from collections import Counter import re from typing import List, Dict, Any import logging logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) class PromptEngine: def __init__(self): # Seedance 风格提示词模板 (可根据实际效果调整) self.template {subject} {action} in {scene}, {style}, {technical_terms} # 动作强度词汇映射 (简单示例) self.action_intensity_map { dancing: [energetically dancing, gracefully moving, performing a dynamic dance], standing: [standing calmly, posing], walking: [walking steadily, strolling] } def aggregate_descriptions(self, frame_analyses: List[Dict[str, Any]]) - Dict[str, List[str]]: 聚合多帧的分析结果 :param frame_analyses: 每帧的分析结果列表 :return: 聚合后的关键词分类字典 all_descriptions [] has_person_list [] for analysis in frame_analyses: all_descriptions.append(analysis.get(description, )) has_person_list.append(analysis.get(pose, {}).get(has_person, False)) # 简单的关键词提取 (按空格分割去除常见停用词) stop_words {a, an, the, is, are, in, on, at, and, or, with, of, to} words [] for desc in all_descriptions: # 简单分词并转为小写 tokens re.findall(r\b[a-zA-Z]\b, desc.lower()) words.extend([t for t in tokens if t not in stop_words and len(t) 2]) word_freq Counter(words) logger.info(f高频词汇: {word_freq.most_common(10)}) # 简单分类逻辑 (实际应用需要更复杂的NLP) aggregated { subjects: [], actions: [], scenes: [], styles: [], technical: [high quality, detailed, smooth motion] } # 启发式规则出现频率高的名词可能是主体或场景 for word, freq in word_freq.most_common(15): if freq 1: # 出现超过一次 if word in [woman, man, person, dancer, girl, boy]: if word not in aggregated[subjects]: aggregated[subjects].append(word) elif word in [dancing, standing, walking, jumping, spinning]: if word not in aggregated[actions]: aggregated[actions].append(word) elif word in [studio, room, street, park, stage, gym]: if word not in aggregated[scenes]: aggregated[scenes].append(word) elif word in [bright, dark, colorful, modern, empty]: if word not in aggregated[styles]: aggregated[styles].append(word) # 如果未检测到人但描述中有相关词汇也加入 if not any(has_person_list) and person not in aggregated[subjects]: # 从描述中尝试提取主体 for desc in all_descriptions: if person in desc.lower() or human in desc.lower(): aggregated[subjects].append(a person) break return aggregated def generate_prompt(self, aggregated_data: Dict[str, List[str]]) - str: 根据聚合数据生成最终提示词 :param aggregated_data: 聚合后的关键词数据 :return: 生成的提示词字符串 # 选择最可能的主体、动作、场景、风格 subject aggregated_data[subjects][0] if aggregated_data[subjects] else a person action aggregated_data[actions][0] if aggregated_data[actions] else performing an action scene aggregated_data[scenes][0] if aggregated_data[scenes] else a location style , .join(aggregated_data[styles][:2]) if aggregated_data[styles] else cinematic lighting technical , .join(aggregated_data[technical]) # 优化动作描述 enhanced_action action for base_action, enhanced_list in self.action_intensity_map.items(): if base_action in action: enhanced_action enhanced_list[0] # 取第一个增强描述 break # 填充模板 final_prompt self.template.format( subjectsubject, actionenhanced_action, scenescene, stylestyle, technical_termstechnical ) # 简单后处理首字母大写确保句号结尾 final_prompt final_prompt.strip().capitalize() if not final_prompt.endswith(.): final_prompt . logger.info(f生成的提示词: {final_prompt}) return final_prompt # 示例用法 if __name__ __main__: engine PromptEngine() # 假设有一些分析结果 sample_analyses # aggregated engine.aggregate_descriptions(sample_analyses) # prompt engine.generate_prompt(aggregated) # print(prompt)4.4 主程序集成 (main.py)现在我们将所有模块串联起来形成一个完整的流程。# main.py import argparse import os import json from datetime import datetime from video_processor import VideoProcessor from feature_analyzer import FeatureAnalyzer from prompt_engine import PromptEngine def main(video_path: str, output_dir: str output_prompts, interval_sec: float 2.0): 主函数处理视频并生成提示词 :param video_path: 输入视频路径 :param output_dir: 输出目录 :param interval_sec: 抽帧间隔秒 os.makedirs(output_dir, exist_okTrue) print(f开始处理视频: {video_path}) print(f抽帧间隔: {interval_sec}秒) # 1. 初始化组件 vp VideoProcessor(video_path) analyzer FeatureAnalyzer(use_gpuFalse) # 根据实际情况调整 engine PromptEngine() # 2. 抽帧 frame_indices vp.extract_frames_uniform(interval_secondsinterval_sec) total_frames_to_process len(frame_indices) print(f共需处理 {total_frames_to_process} 帧) # 3. 逐帧分析 frame_analyses [] for i, frame_idx in enumerate(frame_indices): print(f正在处理第 {i1}/{total_frames_to_process} 帧 (索引: {frame_idx})) frame vp.get_frame_at_index(frame_idx) if frame is None: continue analysis analyzer.analyze_frame(frame) frame_analyses.append(analysis) # 可选打印每帧描述 # print(f 描述: {analysis.get(description, N/A)}) # 4. 释放视频资源 vp.release() analyzer.release() if not frame_analyses: print(错误未能分析任何有效帧。) return # 5. 聚合分析结果并生成提示词 print(\n正在聚合分析结果...) aggregated_data engine.aggregate_descriptions(frame_analyses) final_prompt engine.generate_prompt(aggregated_data) # 6. 保存结果 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) video_name os.path.splitext(os.path.basename(video_path))[0] output_filename f{video_name}_prompt_{timestamp}.txt output_path os.path.join(output_dir, output_filename) with open(output_path, w, encodingutf-8) as f: f.write(f源视频: {video_path}\n) f.write(f分析帧数: {len(frame_analyses)}\n) f.write(f生成时间: {timestamp}\n) f.write(- * 50 \n) f.write(生成的Seedance提示词:\n) f.write(- * 50 \n) f.write(final_prompt \n) f.write(- * 50 \n) f.write(\n原始帧分析摘要:\n) for i, analysis in enumerate(frame_analyses[:5]): # 只保存前5帧的摘要 f.write(f帧 {i}: {analysis.get(description, )}\n) print(f\n✅ 处理完成) print(f生成的提示词已保存至: {output_path}) print(f\n最终提示词:\n{-*40}\n{final_prompt}\n{-*40}) # 同时打印聚合数据供参考 print(f\n聚合关键词:) for key, value in aggregated_data.items(): print(f {key}: {value}) if __name__ __main__: parser argparse.ArgumentParser(descriptionAI视频提示词反推工具) parser.add_argument(--video, typestr, requiredTrue, help输入视频文件路径) parser.add_argument(--output_dir, typestr, defaultoutput_prompts, help输出目录) parser.add_argument(--interval, typefloat, default2.0, help抽帧间隔秒) args parser.parse_args() main(args.video, args.output_dir, args.interval)4.5 运行与验证将你的舞蹈视频如my_dance.mp4放入input_videos/文件夹。在项目根目录下运行命令python main.py --video input_videos/my_dance.mp4 --interval 1.5--interval 1.5表示每1.5秒抽一帧对于快节奏舞蹈可以设为1.0或更小。查看控制台输出并在output_prompts/文件夹下找到生成的提示词文件。示例输出结果假设处理一个在舞蹈室跳舞的视频生成的提示词可能类似于A dancer energetically dancing in a studio, bright, modern, high quality, detailed, smooth motion.你可以将此提示词直接用于Seedance或类似AI视频生成工具作为生成新视频的文本输入。5. 常见问题与排查思路在开发和运行过程中你可能会遇到以下问题问题现象常见原因解决思路ModuleNotFoundError: No module named transformers依赖未正确安装。1. 确认虚拟环境已激活。2. 运行pip install -r requirements.txt或手动安装缺失包pip install transformers。BLIP模型下载失败或速度极慢网络连接问题或Hugging Face镜像问题。1. 检查网络。2. 使用国内镜像源pip install transformers -i https://pypi.tuna.tsinghua.edu.cn/simple。3. 可手动下载模型文件到本地修改代码指定本地路径。CUDA out of memory显卡显存不足特别是加载BLIP模型时。1. 在FeatureAnalyzer初始化时设置use_gpuFalse。2. 如果必须用GPU尝试减小模型尺寸如使用blip-image-captioning-small。3. 减少同时处理的帧大小或批量大小如果未来支持批量。MediaPipe检测不到人体视频中人物太小、太模糊、姿态非常规或被遮挡。1. 尝试降低min_detection_confidence参数如0.3。2. 确保视频帧是正立的人物。3. 考虑使用更鲁棒的姿态估计模型如MMPose需额外安装配置。生成的提示词过于笼统抽帧间隔太长或BLIP描述不够具体。1. 减小--interval参数如0.5秒获取更多细节帧。2. 尝试使用更强大的图像描述模型如BLIP-large或GIT。3. 在PromptEngine中丰富你的关键词映射表和启发式规则。处理速度很慢逐帧运行深度学习模型本身计算量大。1. 确保使用GPU (use_gpuTrue)。2. 增大抽帧间隔。3. 只对部分帧进行详细分析如每隔10帧做一次全分析中间帧只做简单处理。4. 考虑使用多线程/进程并行处理帧需注意GPU内存。提示词不符合Seedance风格模板和优化规则未针对Seedance调整。1. 收集一批Seedance官方或社区公认的优秀提示词示例。2. 分析其结构、常用词汇、语法。3. 据此修改PromptEngine中的template和action_intensity_map甚至引入更复杂的语言模型进行风格迁移。6. 最佳实践与工程建议要将这个工具从实验脚本升级为可靠工程需要注意以下几点6.1 模型选择与优化图像描述BLIP-base是一个不错的起点。对于精度要求更高的场景可以升级到BLIP-large或GIT但需权衡速度与显存。动作识别MediaPipe Pose轻量快速但精度有限。对于专业舞蹈动作识别建议集成专门的动作识别模型如基于VideoMAE、TimeSformer预训练的模型或使用时空动作检测框架。场景/风格分类可以添加一个专门的图像分类模型如在Place365上训练的ResNet来更准确识别场景或使用美学评分模型评估风格。6.2 提示词工程深化分镜与节奏高级玩法是反推视频的分镜和节奏。通过分析镜头运动缩放、平移、剪辑点在提示词中加入如“close-up shot”、“panning left”、“quick cut”等指令。动态提示词对于长视频可以生成随时间变化的提示词序列输入给支持提示词插值的AI视频模型实现更精准的复刻。负面提示词分析视频中不想要的元素如模糊、水印、无关人物自动生成负面提示词Negative Prompt提升生成质量。6.3 工程化与部署配置化将模型路径、抽帧策略、提示词模板等参数抽取到config.yaml文件中便于管理和调整。日志与监控使用更完善的日志系统如logging模块配置多级别输出到文件记录处理进度、错误和性能指标。API服务化使用FastAPI或Flask将核心功能封装成HTTP API方便集成到其他工作流或提供Web界面。容器化使用Docker封装环境解决依赖冲突便于在不同服务器上部署。6.4 合法与合规使用版权意识反推工具用于学习和创作辅助。直接复刻并商用他人拥有版权的舞蹈视频可能涉及侵权。请确保你拥有视频的使用权或仅用于生成具有原创性的衍生作品。内容安全生成的提示词及最终AI生成的视频内容需遵守平台内容政策避免生成违规内容。可以在提示词后处理阶段加入安全过滤词库。通过以上步骤你不仅拥有了一个可用的AI视频提示词反推工具更掌握了一套可扩展、可优化的技术框架。你可以根据具体需求替换其中任何一个模块如使用更准的模型设计更智能的提示词合成算法使其更加强大。这套方法的核心价值在于将主观、感性的视频内容转化为客观、结构化的数据提示词从而打通了人类创意与AI生成之间的关键链路。无论是用于内容创作、艺术研究还是技术探索都是一个值得深入挖掘的方向。