🧠 图解记忆: 参数化差异(Seed、风格、角度、光照)适合规则,语义级变化适合 LLM,生产中用规则定边界、LLM 造变体并去重验收。
💡 答案要点
两种方案对比:
| 方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 预设规则 | 固定参数组合(seed/风格/角度枚举) | 确定性强,可控,低成本 | 多样性有限,人工维护规则 |
| LLM 判断 | 让 LLM 生成差异化 Prompt | 多样性强,理解语义 | 成本高,结果不可预期 |
| 混合方案 | 规则框架 + LLM 局部变化 | 平衡可控性和多样性 | 实现复杂度中等 |
推荐:混合方案(工程实践)
展开 Python 代码示例(40 行)
python
class ImageDiversityStrategy:
# 预设规则:控制结构化变量(确定性)
STYLE_VARIANTS = ["realistic", "anime", "oil painting", "sketch"]
ANGLE_VARIANTS = ["front view", "side view", "top view", "3/4 view"]
LIGHTING_VARIANTS = ["studio lighting", "natural light", "dramatic lighting"]
async def generate_diverse_set(
self, base_description: str, count: int = 4
) -> list[str]:
"""生成多样性图像集合"""
# 策略1:预设规则控制风格/角度(低成本,高可控)
rule_variants = [
f"{base_description}, {style}, {angle}"
for style, angle in zip(
self.STYLE_VARIANTS[:count],
self.ANGLE_VARIANTS[:count]
)
]
# 策略2:LLM 生成语义差异化描述(高多样性)
llm_variants = await self._llm_diversify(base_description, count)
# 策略3:不同 Seed(同 Prompt 不同随机结果)
seeds = [random.randint(0, 2**32) for _ in range(count)]
return [
await self.sd_client.generate(prompt=p, seed=s)
for p, s in zip(llm_variants, seeds)
]
async def _llm_diversify(self, description: str, count: int) -> list[str]:
"""LLM 生成语义差异化的 Prompt 变体"""
response = await llm.complete(f"""
基于以下描述,生成 {count} 个有显著差异的图像描述变体。
要求:内容主题相同,但在构图、风格、角度、色调上有明显差异。
原始描述:{description}
输出 JSON 数组,每项是一个英文 SD Prompt。
""")
return json.loads(response)判断标准(是否需要 LLM 介入):
简单多样性需求 → 预设规则(seed变换 + 参数组合)
语义差异化需求 → LLM 生成Prompt变体
内容连贯性需求 → LLM 全程控制(如故事板生成)面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "我们用混合策略:结构化的多样性(风格、角度、光线)用预设规则枚举,成本低且可控;语义层面的差异化(同一主题不同叙事视角)用 LLM 生成 Prompt 变体。判断规则是:如果多样性需求可以用参数描述,就用规则;如果需要理解语义意图,就用 LLM。生产中 80% 场景规则就够了。"
