鸿蒙智能体开发实战:34.鸿蒙壁纸大师 - 提示词工程与优化

引言

提示词工程(Prompt Engineering)是 AI 应用中决定输出质量的关键环节。在鸿蒙壁纸大师中,提示词的质量直接决定了最终生成的壁纸是否符合用户的审美期待。

本文将深入分析项目中的双层提示词优化策略

  • 第一层 :根据用户选择的风格、主题和场景,使用 build_image_prompt() 构建结构化的基础 prompt
  • 第二层:调用 LLM 对基础 prompt 进行艺术化增强和语义丰富

同时还涵盖 System Prompt 设计、负向提示词、8 大核心艺术要素等内容。

关键概念:提示词工程不是简单的「写描述」,而是一个涉及结构化约束、多轮优化、负向控制的系统工程。优秀的提示词应同时考虑「告诉模型做什么」和「告诉模型不做什么」。

一、双层提示词优化策略

1.1 优化流程总览

复制代码
用户输入/选择
     ↓
┌─────────────────────────────────────┐
│ 第一层:基础 prompt 构建              │
│ build_image_prompt(style, theme,     │
│     screen_type, resolution)         │
│ → 结构化、标准化的基础 prompt          │
│ → 包含风格、主题、场景、分辨率约束       │
└─────────────────────────────────────┘
     ↓
┌─────────────────────────────────────┐
│ 第二层:LLM 艺术增强                   │
│ enhance_prompt_with_llm(base_prompt) │
│ → 调用 doubao-seed-2-0-mini 模型      │
│ → 添加艺术流派、色彩方案、材质纹理      │
│ → 确保输出结构规范                     │
└─────────────────────────────────────┘
     ↓
最终 prompt → 调用文生图模型生成壁纸

上图展示了双层提示词优化策略:第一层构建结构化基础 prompt,第二层通过 LLM 进行艺术增强,最终生成高质量壁纸

1.2 第一层:基础 prompt 构建

python 复制代码
# services/wallpaper_flow_service.py

def build_image_prompt(
    style: str,
    theme: str,
    screen_type: str,
    resolution: str
) -> Tuple[str, str]:
    """
    构建图片生成提示词

    Args:
        style: 风格名称(如"水墨国风")
        theme: 主题名称(如"青峦远山")
        screen_type: 屏幕类型(lock_screen 或 home_screen)
        resolution: 分辨率(如 1440x2560)

    Returns:
        (正向提示词,负向提示词)
    """
    # 计算宽高比
    if resolution:
        try:
            width, height = map(int, resolution.split('x'))
            if width > height:
                aspect_ratio = "横屏 3:2"
            else:
                aspect_ratio = "竖屏 9:16"
        except (ValueError, AttributeError):
            aspect_ratio = "竖屏 9:16"
    else:
        aspect_ratio = "竖屏 9:16"

    # 确定场景描述(锁屏 vs 主屏的差异化处理)
    if screen_type == "home_screen":
        scene_desc = (
            "整体画面柔和虚化、低对比度、留白充足,"
            "四周简洁不杂乱,不遮挡应用图标与卡片,"
            "风格简约高级,色调统一细腻"
        )
    else:  # lock_screen
        scene_desc = (
            "画面层次精致优雅,视觉柔和唯美,"
            "不遮挡顶部时间区域"
        )

    # 构建正向提示词
    positive_prompt = (
        f"生成一张 {style} 的 {aspect_ratio} 壁纸,"
        f"画面包含 {theme},比例为{aspect_ratio.split()[-1]}。"
        f"{scene_desc}。高级艺术氛围,柔光质感。"
        f"8K 超高清,无文字、无水印、无多余杂物。"
    )

    # 负向提示词
    negative_prompt = (
        "丑陋、杂乱、刺眼、文字、水印、LOGO、低俗、"
        "过度饱和、高对比、噪点、变形、低清、像素模糊、"
        "多余杂物、主题堆砌、色彩脏乱、卡通化、俗气"
    )

    return positive_prompt, negative_prompt

核心设计理念

  1. 场景差异化:主屏壁纸需要虚化留白以适应图标,锁屏壁纸则强调视觉层次
  2. 分辨率自适应:根据分辨率自动确定横竖屏比例
  3. 负向提示词硬编码:避免 LLM 优化时遗漏关键约束
  4. 基础模板稳定可靠:确保每次生成的壁纸都符合基本质量标准

设计提示:基础模板中的负向提示词不经过 LLM 优化,这是有意为之。LLM 在增强 prompt 时可能会「遗忘」或「弱化」某些约束条件,而文字、水印、LOGO 等禁止项是严格的合规需求,不可妥协。

1.3 第二层:LLM 艺术增强

基础 prompt 虽然结构清晰,但艺术表现力不足。第二层通过调用 LLM 进行深度增强:

python 复制代码
# services/wallpaper_service.py

async def enhance_prompt_with_llm(
    user_prompt: str,
    context_messages: List[Dict[str, str]] = None,
    log_id: str = None
) -> str:
    """
    调用语言模型完善用户输入的 prompt
    返回优化后的 prompt
    """
    system_prompt = """你是一个专业的艺术插画提示词优化专家。
用户会输入简单的描述(可能包含主题、风格信息),
你需要将其优化为具有强烈艺术风格的插画提示词。

核心原则:
- 禁止写实风格,必须是艺术插画
- 强调艺术性、设计感、高级感
- 融合多种艺术流派和质感

必须包含的核心要素:
1. 艺术风格定位:高定艺术插画、绘本风格、平面插画等
2. 主体元素:核心视觉元素具体化
3. 色彩方案:主色调+辅助色调,色彩情绪
4. 背景与材质:材质纹理、光影特征
5. 构图与排版:大师级排版,大量留白
6. 艺术质感:电影感、绘本感、版画质感等(至少3种)
7. 情绪氛围:梦幻、诗意、朦胧、宁静、治愈
8. 限制条件:不要出现文字

输出结构模板:
一张【主题】风格的艺术插画壁纸,融合【艺术流派】美学。
画面主体为【主体元素】,采用【主色调】与【辅助色调】,
呈现【情绪氛围】。背景使用【材质纹理】,带有【光影特征】。
构图采用【构图方式】,大量留白,点线面层次丰富。
融合【艺术质感关键词】。高定艺术插画,大师级排版,
极简与极繁结合,梦幻诗意,动态定格,电影级氛围。
不要出现文字。"""

    messages = [{"role": "system", "content": system_prompt}]

    if context_messages:
        messages.extend(context_messages[-10:])

    messages.append({
        "role": "user",
        "content": f"请优化以下绘画提示词:{user_prompt}"
    })

    # 调用火山引擎 LLM(流式输出)
    async with client.stream(
        "POST",
        f"{settings.VOLCANIC_BASE_URL}/chat/completions",
        headers={
            "Authorization": f"Bearer {settings.VOLCANIC_API_KEY}",
        },
        json={
            "model": settings.LANGUAGE_MODEL,  # doubao-seed-2-0-mini
            "messages": messages,
            "max_tokens": 1024,
            "temperature": 0.7,
            "stream": True,
        },
    ) as response:
        enhanced_prompt = ""
        async for line in response.aiter_lines():
            # 解析 SSE 流式响应,拼接完整 prompt
            # ...
            enhanced_prompt += content

        return enhanced_prompt

二、System Prompt 设计详解

2.1 壁纸闲聊 System Prompt

用于闲聊场景下的 LLM 调用:

python 复制代码
# services/wallpaper_service.py

system_prompt = """你是一个友好的 AI 壁纸助手。你可以和用户聊天,
但主要专长是帮助用户生成各种风格的壁纸。

如果用户询问壁纸相关的问题,请热情地介绍你的能力;
如果是闲聊,请简洁友好地回应,并适时引导用户描述他们想要的壁纸。"""

设计要点

  • 明确角色定位:告诉模型它是"AI 壁纸助手"
  • 定义专业边界:主要专长是壁纸生成
  • 交互引导:闲聊时适时引导回壁纸主题

2.2 意图识别 System Prompt

python 复制代码
# utils/intent_classifier.py

INTENT_SYSTEM_PROMPT = """你是一个意图识别助手。请分析用户的输入,判断用户的意图。

可选的意图类型:
1. generate_wallpaper - 生成壁纸
2. chat - 闲聊
3. modify_wallpaper - 修改壁纸
4. regenerate - 重新生成
5. cancel - 取消
6. clear_context - 清理上下文
7. unknown - 未知

判断规则:
- 问候语、感谢语、告别语 -> chat
- 停止、取消、不要、别等 -> cancel
- 清空、重新开始 -> clear_context
- 有上下文时,"换一张"、"重新来" -> regenerate
- 有上下文时,修改具体特征 -> modify_wallpaper
- 描述场景、物体、风格 -> generate_wallpaper

请返回 JSON 格式:
- intent: 意图类型
- confidence: 置信度 (0-1)
- reason: 判断理由
- topic: 如果是 generate_wallpaper,提取壁纸主题;否则为空
"""

设计要点

  • 结构化输出要求:要求模型返回 JSON 格式,便于程序解析
  • 枚举值约束:只允许返回预定义的7种意图类型
  • 低温参数temperature=0.1 确保分类结果的一致性
  • 上下文感知:将"是否有历史壁纸"等信息传递给模型

2.3 主题生成 System Prompt

python 复制代码
# wallpaper_flow_service.py

system_prompt = f"""你是一个壁纸主题设计专家。
请为「{style}」风格的壁纸设计 {count} 个主题选项。

要求:
1. 主题名称要简短、有诗意、2-6 个中文字符
2. 主题要符合该风格的美学特征
3. 只返回 JSON 数组,不要其他说明
4. 例如:["远山暮色", "林间晨光", "湖畔倒影", "雪地初晴"]"""

设计要点

  • 格式约束:要求返回纯 JSON 数组,避免解析错误
  • 字符数限制:2-6 个中文字符,确保主题简洁
  • 示例引导:通过 Few-shot 示例提示期望的输出格式

三、艺术插画提示词八要素

enhance_prompt_with_llm() 的 System Prompt 中可以提炼出艺术插画提示词八要素

# 要素 说明 示例
1 艺术风格定位 确定画面整体艺术风格 高定艺术插画、绘本风格、极简主义
2 主体元素 核心视觉元素具体化 一只简化线条的橘色猫咪剪影
3 色彩方案 主色调+辅助色调+色彩情绪 暖橙色与奶油白,呈现宁静治愈
4 背景与材质 材质纹理和光影特征 细腻亚麻纹理,柔和散射光
5 构图与排版 构图方式和空间布局 极简留白式,点线面层次丰富
6 艺术质感 至少3种艺术质感叠加 绘本感、版画质感、胶片颗粒感
7 情绪氛围 画面传递的情感氛围 梦幻、诗意、朦胧、宁静、治愈
8 限制条件 不能出现的内容 不要出现文字

3.1 优化前后对比

以用户输入"水墨风山水"为例:

优化前(基础 prompt)

复制代码
生成一张 水墨国风 的 竖屏 9:16 壁纸,
画面包含 远山轮廓,比例为9:16。
画面层次精致优雅,视觉柔和唯美,不遮挡顶部时间区域。
高级艺术氛围,柔光质感。8K 超高清,无文字、无水印、无多余杂物。

优化后(LLM 增强)

复制代码
一张水墨国风主题的艺术插画壁纸,融合宋代山水画美学。
画面主体为远山轮廓层叠,采用墨色与青灰色渐变,
呈现诗意朦胧氛围。背景使用宣纸质感纹理,
带有水墨晕染光影。构图采用深远式构图,大量留白,
点线面层次丰富。融合版画质感、宣纸肌理、水墨渲染。
高定艺术插画,传统与现代结合,梦幻诗意,电影级氛围。
不要出现文字。

优化后的 prompt 增加了艺术流派参考(宋画)、材质细节(宣纸、墨色)、构图技巧(深远式),以及更丰富的艺术质感描述,能产生更具艺术感的壁纸。

四、负向提示词设计

负向提示词(Negative Prompt)是文生图模型的重要输入,告诉模型不要生成什么。

4.1 壁纸大师的负向提示词

python 复制代码
negative_prompt = (
    "丑陋、杂乱、刺眼、文字、水印、LOGO、低俗、"
    "过度饱和、高对比、噪点、变形、低清、像素模糊、"
    "多余杂物、主题堆砌、色彩脏乱、卡通化、俗气"
)

4.2 负向提示词的分类策略

类别 关键词 目的
质量过滤 丑陋、杂乱、刺眼、低俗 避免低质量输出
技术问题 噪点、变形、低清、像素模糊 确保图像质量
内容限制 文字、水印、LOGO 合规性要求
风格控制 卡通化、俗气 确保艺术插画风格
色彩控制 过度饱和、高对比、色彩脏乱 保证色彩和谐
构图控制 多余杂物、主题堆砌 确保简洁构图

4.3 为什么负向提示词要硬编码

build_image_prompt() 中,负向提示词是硬编码的,不经过 LLM 增强。原因是:

  • 负向提示词的精确性要求高:少量关键词的遗漏可能导致大量不合格图片
  • LLM 可能"遗忘"约束:模型在增强过程中可能忽略或曲解某些禁止项
  • 合规性不可协商:文字、水印等限制是严格需求,不能被"优化"掉

五、提示词工程的性能优化

5.1 超时控制

LLM 调用的超时控制是提示词工程的重要环节:

python 复制代码
# services/wallpaper_service.py

# 基础 prompt 优化(非流式,快速返回)
async with httpx.AsyncClient(timeout=15.0) as client:
    ...

# LLM 增强 prompt(流式,需更长时间)
async with httpx.AsyncClient(timeout=60.0) as client:
    ...

# 文生图生成(最长超时)
async with httpx.AsyncClient(timeout=120.0) as client:
    ...

5.2 上下文窗口管理

上下文长度直接影响成本和响应速度:

python 复制代码
# services/wallpaper_service.py

if context_messages:
    # 只保留最近的上下文,避免 token 过多
    messages.extend(context_messages[-6:])  # 闲聊场景取6条
    ...
    messages.extend(context_messages[-10:])  # 提示词优化取10条

不同场景使用不同的上下文窗口大小:

  • 闲聊:保留最近6条对话,保持轻快响应
  • 提示词优化:保留最近10条,获取更丰富的上下文
  • 意图识别:仅传递关键状态信息,不传完整上下文

5.3 流式 vs 非流式

复制代码
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  提示词优化   │     │  意图识别    │     │  闲聊对话    │
│  (流式/非流式)│     │  (非流式)    │     │  (流式)      │
│  需要完整输出  │     │  仅需JSON    │     │  逐token输出 │
│  来构建下一步  │     │  响应可解析  │     │  以提升体验  │
└──────────────┘     └──────────────┘     └──────────────┘
  • 提示词优化:使用流式,但最终拼接为完整字符串再传递给文生图模型
  • 意图识别:使用非流式,等待完整 JSON 响应
  • 闲聊对话:使用流式,逐 token 推送给用户

六、提示词优化的最佳实践总结

6.1 分层优化策略

层级 方法 优点 缺点
模板化 固定字符串拼接 速度快、稳定可靠 缺乏艺术性
LLM 增强 调用语言模型优化 艺术表现力强 耗时增加
负向提示词 硬编码禁止内容 安全性高 不够灵活

6.2 质量保证清单

  • System Prompt 明确定义角色和边界
  • 输出格式结构化(JSON 或模板)
  • 提供 Few-shot 示例引导期望输出
  • 负向提示词不与正向提示词矛盾
  • 温度参数根据任务类型调整(分类用低温,生成用中温)
  • 上下文窗口大小适配场景需求
  • 超时时间根据任务复杂度设置
  • 兜底方案(LLM 失败时使用默认模板)

6.3 常见问题与解决方案

问题 原因 解决方案
提示词被 LLM 改写过度 温度过高或约束不足 降低 temperature,增加结构化约束
生成图片含文字 负向提示词未生效 在正向提示词中也添加"无文字"约束
图片风格偏离 风格描述不够精确 参考艺术家风格或具体艺术流派
响应超时 提示词过长 控制上下文条数,精简 System Prompt

七、常见问题与解决方案

问题 原因 解决方案
LLM 增强后 prompt 偏离原意 temperature 过高或约束不足 降低 temperature 至 0.5,增加结构化模板约束
生成图片出现文字 负向提示词被 LLM 弱化 正向 prompt 中也显式添加「无文字」约束
图片风格不稳定 风格描述过于抽象 引用具体艺术流派或艺术家风格作为参考
流式调用超时 网络波动或 prompt 过长 缩短上下文窗口,增加流式超时时间至 60s

八、性能优化建议

提示词工程的性能优化直接影响用户体验,以下是一些实测有效的策略:

python 复制代码
# 根据任务类型选择 temperature
TEMPERATURE_MAP = {
    "intent_classification": 0.1,   # 低温度,确保分类一致
    "prompt_enhancement": 0.7,     # 中等温度,平衡创意与稳定
    "chat": 0.7,                   # 闲聊,适度创造性
    "theme_generation": 0.8,       # 主题生成,较高创造性
}
优化方向 措施 效果
缓存基础 prompt 相同参数命中缓存 省去 LLM 调用,< 1ms
压缩 System Prompt 精简冗余描述 Token 减少 30%
上下文窗口裁剪 仅保留最近 6-10 条 降低延迟和成本
流式调用 避免非流式超时 提升用户体验

九、总结

本文详细解析了鸿蒙壁纸大师的提示词工程体系,核心内容:

  1. 双层优化策略:基础模板构建 + LLM 艺术增强,兼顾效率与质量
  2. 三种 System Prompt:闲聊、意图识别、主题生成,各有侧重
  3. 八要素提示词模板:艺术风格、主体元素、色彩方案、材质等
  4. 负向提示词设计:硬编码关键约束,确保输出质量和合规性
  5. 性能优化:超时控制、上下文窗口、流式与非流式的选择

提示词工程是一个持续迭代的过程,需要根据实际输出质量不断调整 System Prompt 的措辞和约束条件。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!

相关资源

相关推荐
blanks20201 小时前
android 编译问题记录
android
千逐681 小时前
React Native 性能优化深度解析:从原理到实战
flutter·华为·鸿蒙
ujainu小2 小时前
并发性能测试:心跳监测与主线程阻塞分析
华为·性能优化·harmonyos
●VON2 小时前
HarmonyKit | 鸿蒙开发:项目目录结构与多模块架构最佳实践
华为·架构·单元测试·harmonyos·鸿蒙
bobuddy2 小时前
平台总线(platform bus)
android
plainGeekDev2 小时前
libs 目录 → Gradle 依赖管理
android·java·kotlin
tyqtyq223 小时前
营养餐单规划:AI 科学饮食规划系统的鸿蒙实现
人工智能·学习·华为·职场和发展·生活·harmonyos
帅次4 小时前
Android 高级工程师面试:Flutter Widget 体系 近1年高频追问 20 题
android·flutter·面试·element·widget·setstate·renderobject
不才难以繁此生4 小时前
HarmonyOS RDB 索引实战:中式美食搜索和购物清单查询怎么避免扫全表
harmonyos·arkts·arkui·rdb·中式美食·relationalstore