《扣子开发AI Agent智能体应用》-第12章 实战案例:企业营销宣传海报自动生成器
-
- 12.1 项目背景与需求
- 12.2 创建并配置智能体
-
- 12.2.1 创建智能体
- 12.2.2 配置智能体基础信息
- 12.3 构建海报生成工作流
-
- 12.3.1 添加和配置工作流
- 12.3.2 配置"开始"节点参数
- 12.3.3 添加和配置"意图识别"节点
- 12.3.4 添加和配置"图像生成"节点
- 12.3.5 添加和配置"变量聚合"节点
- 12.3.5 添加和配置"变量聚合"节点
-
- 1. 节点功能说明
- 2. 配置步骤
- 12.3.6 配置"结束"节点
-
- 1. 节点功能说明
- 2. 配置步骤
- 12.3.7 完整工作流结构
- 12.4 工作流测试与发布
-
- 1. 测试执行流程
- 2. 结果验证
- 3. 发布准备
- 12.5 工作流集成与智能体完善
-
- 1. 添加工作流到智能体
- 2. 配置智能体人设与回复逻辑
- 12.6 智能体测试验证
-
- 1. 技能1:画面补充与确认验证
- 2. 技能2:风格选择引导验证
- 3. 技能3:比例确认验证
- 4. 技能4:工作流调用验证
|
🌺The Begin🌺点点关注,收藏不迷路🌺 |
《扣子开发AI Agent智能体应用 人工智能技术丛书 宋立桓 王东健 陈铭毅 程东升 清华大学出版社》【摘要 书评 试读】- 京东图书
12.1 项目背景与需求
智能化的企业营销宣传海报生成系统是一种24小时在线、高效率、高创意的AI驱动设计方案。本章将详细介绍开发企业营销宣传海报生成系统的方法,包括从智能体创建、工作流配置到实际应用测试的完整流程,使即使没有专业设计经验的用户也能轻松构建企业级宣传海报生成系统。
在企业营销活动中,高质量的宣传海报是传递品牌形象和产品信息的关键载体。传统上,企业需要专门的宣传部门或设计团队来完成这些工作,这不仅需要专业的设计人才,还涉及较高的人力成本和时间投入。
本章将利用扣子平台搭建一个智能化的企业营销宣传海报生成系统,实现以下核心目标:
12.2 创建并配置智能体
12.2.1 创建智能体

12.2.2 配置智能体基础信息
打开"创建智能体"页面,填写智能体的基本信息:
智能体名称:输入"企业市场运营海报部门"(直观表明职能定位)
功能介绍:简洁描述"根据需求,只需通过自然语言即可完成企业级宣传海报"
视觉形象:单击星星按钮,系统会根据功能介绍自动生成符合主题的图标 

12.3 构建海报生成工作流
12.3.1 添加和配置工作流
进入工作流配置界面,在页面中间"技能"区域中,单击"工作流"右侧的加号按钮: 


12.3.2 配置"开始"节点参数
节点功能说明:
- 工作流创建完成后,首先配置开始节点的输入参数
- 作为工作流入口,参数设置决定工作流接收的输入类型
参数配置步骤:
- 设置输入参数变量名为 prompt
- 变量类型选择 String(字符串)
- 用于接收用户的海报需求描述和画幅比例信息

12.3.3 添加和配置"意图识别"节点
节点功能:
- 分析用户输入中的画幅比例信息
- 根据识别结果分流到对应的图像生成模块
- 实现需求精准匹配
配置流程:
步骤1:添加节点
- 在工作流编辑界面点击"添加节点"
- 选择"意图识别"节点类型

步骤2:参数绑定
- 设置输入参数 query 关联到开始节点的 prompt 值
- 确保分析原始用户输入
步骤3:规则配置
# 意图识别规则逻辑示例
def detect_aspect_ratio(text):
if "竖版" in text or "9:16" in text:
return "portrait"
elif "方图" in text or "1:1" in text:
return "square"
else: # 默认横版
return "landscape"
输出分支配置:
- 根据识别结果设置3个输出分支:
- 竖版(9:16)
- 方图(1:1)
- 横版(16:9)
- 。。。。。
节点结构示意图:
#mermaid-svg-xbYcfPUKHCCIXe4g {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .error-icon{fill:#552222;}#mermaid-svg-xbYcfPUKHCCIXe4g .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xbYcfPUKHCCIXe4g .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-xbYcfPUKHCCIXe4g .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xbYcfPUKHCCIXe4g .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xbYcfPUKHCCIXe4g .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xbYcfPUKHCCIXe4g .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xbYcfPUKHCCIXe4g .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xbYcfPUKHCCIXe4g .marker.cross{stroke:#333333;}#mermaid-svg-xbYcfPUKHCCIXe4g svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xbYcfPUKHCCIXe4g .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .cluster-label text{fill:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .cluster-label span{color:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .label text,#mermaid-svg-xbYcfPUKHCCIXe4g span{fill:#333;color:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .node rect,#mermaid-svg-xbYcfPUKHCCIXe4g .node circle,#mermaid-svg-xbYcfPUKHCCIXe4g .node ellipse,#mermaid-svg-xbYcfPUKHCCIXe4g .node polygon,#mermaid-svg-xbYcfPUKHCCIXe4g .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xbYcfPUKHCCIXe4g .node .label{text-align:center;}#mermaid-svg-xbYcfPUKHCCIXe4g .node.clickable{cursor:pointer;}#mermaid-svg-xbYcfPUKHCCIXe4g .arrowheadPath{fill:#333333;}#mermaid-svg-xbYcfPUKHCCIXe4g .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xbYcfPUKHCCIXe4g .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xbYcfPUKHCCIXe4g .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-xbYcfPUKHCCIXe4g .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-xbYcfPUKHCCIXe4g .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xbYcfPUKHCCIXe4g .cluster text{fill:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g .cluster span{color:#333;}#mermaid-svg-xbYcfPUKHCCIXe4g div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xbYcfPUKHCCIXe4g :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
竖版
方图
横版
开始节点
意图识别
竖版处理
方图处理
横版处理
设计要点:意图识别节点采用模糊匹配算法,支持"竖版/纵向/9:16"等多种表达方式,确保用户体验自然流畅。识别准确率应达到92%以上,未明确指定比例时默认使用企业VI标准比例(通常为16:9)。
12.3.4 添加和配置"图像生成"节点
图像生成节点是工作流中的核心处理单元,负责将结构化需求转换为可视化海报设计。该节点具备以下能力:
多模态内容生成(图文结合)
自适应画幅比例渲染
品牌元素自动嵌入
配置步骤详解:
在工作流编排页面下方单击"添加节点"按钮;
在弹出菜单的"图像处理"区域选择"图像生成"组件;
将节点拖拽至意图识别节点后方。


12.3.5 添加和配置"变量聚合"节点
12.3.5 添加和配置"变量聚合"节点
1. 节点功能说明
- 作用:合并多个分支(如不同比例的图像生成节点)的输出,确保工作流最终返回统一结构的数据
- 典型场景:
- 多分支工作流(如竖版/横版/方图生成路径)
- 动态选择最优结果(如A/B测试后聚合)
- 核心能力:
- 自动检测有效分支输出
- 支持数据格式标准化
- 提供错误分支过滤
2. 配置步骤
步骤1:添加节点

步骤2:输入源绑定
- 将上游所有图像生成节点的输出连接到本节点
#mermaid-svg-K2wHOr4eWhBwGhRd {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .error-icon{fill:#552222;}#mermaid-svg-K2wHOr4eWhBwGhRd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-K2wHOr4eWhBwGhRd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-K2wHOr4eWhBwGhRd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-K2wHOr4eWhBwGhRd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-K2wHOr4eWhBwGhRd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-K2wHOr4eWhBwGhRd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-K2wHOr4eWhBwGhRd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-K2wHOr4eWhBwGhRd .marker.cross{stroke:#333333;}#mermaid-svg-K2wHOr4eWhBwGhRd svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-K2wHOr4eWhBwGhRd .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .cluster-label text{fill:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .cluster-label span{color:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .label text,#mermaid-svg-K2wHOr4eWhBwGhRd span{fill:#333;color:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .node rect,#mermaid-svg-K2wHOr4eWhBwGhRd .node circle,#mermaid-svg-K2wHOr4eWhBwGhRd .node ellipse,#mermaid-svg-K2wHOr4eWhBwGhRd .node polygon,#mermaid-svg-K2wHOr4eWhBwGhRd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-K2wHOr4eWhBwGhRd .node .label{text-align:center;}#mermaid-svg-K2wHOr4eWhBwGhRd .node.clickable{cursor:pointer;}#mermaid-svg-K2wHOr4eWhBwGhRd .arrowheadPath{fill:#333333;}#mermaid-svg-K2wHOr4eWhBwGhRd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-K2wHOr4eWhBwGhRd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-K2wHOr4eWhBwGhRd .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-K2wHOr4eWhBwGhRd .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-K2wHOr4eWhBwGhRd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-K2wHOr4eWhBwGhRd .cluster text{fill:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd .cluster span{color:#333;}#mermaid-svg-K2wHOr4eWhBwGhRd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-K2wHOr4eWhBwGhRd :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
竖版生成
变量聚合
横版生成
方图生成

12.3.6 配置"结束"节点
1. 节点功能说明
- 作用:定义工作流的最终输出结构,将处理结果返回给用户或调用方
- 核心任务:
- 标准化输出格式
- 过滤敏感元数据
- 添加交付所需的附加信息(如版权声明)
2. 配置步骤
步骤1:打开结束节点配置

12.3.7 完整工作流结构

#mermaid-svg-9zgInf2m2KQDdCqe {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .error-icon{fill:#552222;}#mermaid-svg-9zgInf2m2KQDdCqe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9zgInf2m2KQDdCqe .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9zgInf2m2KQDdCqe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9zgInf2m2KQDdCqe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9zgInf2m2KQDdCqe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9zgInf2m2KQDdCqe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9zgInf2m2KQDdCqe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9zgInf2m2KQDdCqe .marker.cross{stroke:#333333;}#mermaid-svg-9zgInf2m2KQDdCqe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9zgInf2m2KQDdCqe .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .cluster-label text{fill:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .cluster-label span{color:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .label text,#mermaid-svg-9zgInf2m2KQDdCqe span{fill:#333;color:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .node rect,#mermaid-svg-9zgInf2m2KQDdCqe .node circle,#mermaid-svg-9zgInf2m2KQDdCqe .node ellipse,#mermaid-svg-9zgInf2m2KQDdCqe .node polygon,#mermaid-svg-9zgInf2m2KQDdCqe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9zgInf2m2KQDdCqe .node .label{text-align:center;}#mermaid-svg-9zgInf2m2KQDdCqe .node.clickable{cursor:pointer;}#mermaid-svg-9zgInf2m2KQDdCqe .arrowheadPath{fill:#333333;}#mermaid-svg-9zgInf2m2KQDdCqe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9zgInf2m2KQDdCqe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9zgInf2m2KQDdCqe .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9zgInf2m2KQDdCqe .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9zgInf2m2KQDdCqe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9zgInf2m2KQDdCqe .cluster text{fill:#333;}#mermaid-svg-9zgInf2m2KQDdCqe .cluster span{color:#333;}#mermaid-svg-9zgInf2m2KQDdCqe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9zgInf2m2KQDdCqe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
竖版 9:16
横版 16:9
方图 1:1
开始节点
意图识别
竖版图像生成
横版图像生成
方图图像生成
变量聚合
结束节点
开始节点
- 接收用户原始输入(文本/语音)
- 输出结构化参数:prompt: String
意图识别
- 解析画幅比例需求
- 分支条件:
- 包含"竖版"/"9:16" → 竖版路径
- 包含"横版"/"16:9" → 横版路径
- 其他情况 → 方图路径
图像生成
- 输入:design_spec: JSON
- 输出:image_url: String
变量聚合
- 合并有效分支结果
- 输出标准化结构:
结束节点
- 最终交付物:
- 高清海报图像
12.4 工作流测试与发布
1. 测试执行流程
进入测试模式
- 单击工作流编辑页面下方的 “运行” 按钮
- 在 “试运行” 窗口中输入测试用例
测试用例规范
- 格式:[需求描述] + [画幅比例]
- 示例:一个戴墨镜的小男孩,简笔画,大小9:16
执行验证
- 系统自动解析输入并触发工作流
- 运行日志实时显示各节点状态

2. 结果验证
输出检查项
| 图像内容 | 匹配描述关键词(望远镜/小男孩) |
| 画幅比例 | 严格符合9:16(如1080×1920像素) |
| 风格符合度 | 简笔画风格,无冗余元素 |
成功标志
- 结束节点返回完整图像文件
- 元数据包含正确比例标识
3. 发布准备
测试覆盖率要求
- 至少覆盖3种比例(9:16/16:9/1:1)
- 验证5类典型需求(产品/活动/人物/抽象概念/混合描述)
性能基线
| 平均响应时间 | ≤15秒(简单需求) |
| 错误率 | <1% |
| 并发支持 | ≥50请求/分钟 |
发布操作
- 通过 “发布” 按钮部署至生产环境
- 自动生成版本快照(如v1.0.0)

12.5 工作流集成与智能体完善
1. 添加工作流到智能体
- 导航至 “技能” 区域
- 单击 “工作流” 右侧的 “+” 按钮
- 在 “添加工作流” 窗口中选择已发布的 Poster_generation
- 单击 “添加” 按钮完成关联

2. 配置智能体人设与回复逻辑
角色定位:
技能结构设计:
回复逻辑规则:
界面配置参考:

12.6 智能体测试验证
以下是针对“海报设计智能体”的测试验证方案,结合人设与回复逻辑的功能点设计:
1. 技能1:画面补充与确认验证
- 测试目标:验证智能体能否根据模糊需求生成符合绘画原则的详细画面描述,并正确引导用户确认。
- 测试用例:
输入(用户模糊需求)预期输出(画面补充内容)验证点 “科技公司新品发布会海报” – 画面主体:未来感科技舞台,中央放置新品模型(如流线型智能设备),顶部悬浮全息投影文字“XX新品发布会”- 背景:深蓝色渐变星空,点缀光效线条和电路板纹路- 配色:银灰色+霓虹粉高光- 文字:“文字:‘XX科技·未来已来’,字体为金属质感立体字,右侧标注日期‘2025.12.18’”- 元素:舞台两侧设置抽象化科技光柱,底部添加观众席剪影(动态欢呼姿态) – 画面元素完整(主体、背景、文字、装饰)- 符合“科技感”主题与绘画构图原则(主次分明、色彩协调)- 文字格式正确(带双引号及字体描述) “环保主题公益海报” – 画面主体:手捧绿色地球的孩童,地球表面覆盖植被与海洋,指尖飘落蝴蝶- 背景:淡蓝色天空渐变至草地绿色,左侧叠加垃圾分类图标(可回收/厨余/有害/其他)- 配色:清新绿+天蓝色+暖黄色- 文字:“文字:‘守护地球·从我做起’,字体为手写体风格,底部小字‘环保公益·人人参与’”- 元素:环绕地球的飘带写有“低碳生活”“绿色循环”标语 – 主题传达清晰,元素象征意义准确(如蝴蝶代表生态)- 文字位置合理(不遮挡主体)- 符合用户未明确提及的“公益感”隐性需求 - 异常场景测试:
- 输入空内容或纯符号(如“@@#”)→ 智能体应提示“请提供海报主题或画面相关描述”。
- 输入与海报无关内容(如“今天天气如何”)→ 智能体应拒绝回答并提示“仅专注海报设计任务”。
2. 技能2:风格选择引导验证
- 测试目标:验证智能体能否准确列举风格选项,并正确响应风格选择指令。
- 测试用例:
- 用户回复“满意”→ 智能体输出“以下是可供选择的风格:漫画风格、简笔画风格、线条风格、宫崎骏风格、胶片风格,请您选择一种风格。”(需包含所有预设风格,顺序固定)。
- 用户指定非预设风格(如“水彩风格”)→ 智能体应提示“当前仅支持漫画、简笔画、线条、宫崎骏、胶片风格,请重新选择。”
3. 技能3:比例确认验证
- 测试目标:验证智能体能否正确列出比例选项,并处理非法输入。
- 测试用例:
- 用户选择风格后→ 智能体输出“目前支持的比例有:1:1、2:3、3:4、9:16、16:9。请您选择一种比例。”(顺序固定)。
- 用户输入非比例值(如“正方形”“竖版”)→ 智能体应提示“请选择具体比例(如1:1、2:3等)。”
4. 技能4:工作流调用验证
- 测试目标:验证智能体能否正确整合画面描述、风格、比例,触发工作流。
- 模拟验证:
- 假设用户确认画面→ 选择“胶片风格”→ 比例“3:4”→ 智能体需生成结构化数据(示例):画面描述:〔详细内容如技能1测试用例〕
风格:胶片风格
比例:3:4 - 验证数据格式是否符合工作流(Poster_generation)输入要求(如JSON格式、字段完整性)。
- 假设用户确认画面→ 选择“胶片风格”→ 比例“3:4”→ 智能体需生成结构化数据(示例):画面描述:〔详细内容如技能1测试用例〕
通过以上测试,确保智能体在海报设计全流程中满足专业性、准确性与用户体验要求,符合“世界顶尖市场运营海报设计大师”的人设定位。




|
🌺The End🌺点点关注,收藏不迷路🌺 |



