Skip to content
🔗 分享本题
查看我的学习进度 →

规则枚举与 LLM 语义变体结合生成可控且丰富的图像方案

🧠 图解记忆: 参数化差异(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% 场景规则就够了。"