Skill: zooagentpm/posterdesign (version 1.0.0)

--- name: visual-rag-design description: 自动生成设计海报/图片。当用户提出设计需求（如「帮我做个促销海报」「做一张活动通知图」「生成一张小红书封面」）时使用此技能。通过 visual-rag MCP 服务直接生成 PNG 图片，图片实时返回对话，无需管理文件或服务。 --- # 虾稿设计 使用 `visual-rag` MCP 工具生成设计图片。 MCP 服务地址：`https://syncopated-retractively-anitra.ngrok-free.dev/mcp` 若工具不可用或域名失效，告知用户联系**小邹**获取新地址。 --- ## 标准流程 **所有模型都应优先使用语义搜索路径。** 关键词搜索仅在语义搜索无结果时作为兜底。 ### Step 1：ensure_services 确认服务在线，必须第一步调用。 ### Step 2：search_templates（语义搜索，首选） ``` search_templates(query, usage_type="cover", n=8, include_thumbnails=True) ``` **用固定的 Query 模板构造查询，匹配效果最佳：** ``` 格式:[cover/content/poster] 语义:[为{目标受众}做{格式}，传达{核心主张}，整体{情绪/风格}] ``` | 参数 | 说明 | 示例 | |------|------|------| | 格式 | 用途分类 | cover=小红书封面，content=正文配图，poster=手机海报 | | 目标受众 | 谁会看这张图 | 内容创作者、职场新人、减脂博主… | | 核心主张 | 图片想传达什么 | "AI工具让创作提速10倍"、"3步搞定职场沟通" | | 情绪/风格 | 整体调性 | 冲击力强/清新轻松/喜庆热烈/克制专业… | **示例：** > ❌ 弱：`"减脂封面"` > ✅ 强：`"格式:cover 语义:为减脂打卡博主做封面，传达夏日减脂计划，整体清新轻松、带清单结构"` `usage_type` 参数与 query 中的"格式"保持一致，作为硬过滤（只搜对应类型的模板）。n 建议设为 8。 **有视觉能力的模型**：看缩略图合图，根据视觉风格直接选。 **纯文本模型**：传 `include_thumbnails=False`，根据 brief / visual_tags / layout_structure 等字段判断匹配度选模板 ID。 **无结果时**：改用 `list_templates(keyword, include_thumbnails=True/False)` 关键词兜底。关键词须命中模板描述中实际存在的词（如"插画""手绘""喜庆"），不能用语义词（"减脂"无效）。 ### Step 3：get_template_spec(template_id) 获取选定模板的槽位详情（uuid、role、max_chars、max_per_line、line_break、hint、current）。 ⚠ `template_id` 是**纯整数**，不带 `t` 前缀。正确：`template_id=689`，错误：`template_id="t689"` ### Step 4：填写槽位内容 **有视觉能力的模型**：可根据需求适度发挥，但不得超出 max_chars / max_per_line 限制。 **无视觉能力的模型**：严格遵守以下规则，这是唯一的质量保障手段： - `list_line_count: N` → 必须填满 **恰好 N 条**，不能多也不能少，少填会出现大片空白 - `max_per_line` → 每行字数**绝对不超过**此值，参考 `current` 示例的字数节奏 - `max_chars` → 总字数不超过上限 - `line_break: true` → 手动加 `\n` 换行，不靠自动折行 - `must_edit: true` 的槽位必须填写，其余**保留原值不做修改** - **不擅自改变内容结构**，模板设计什么格式就填什么格式 **槽位来源字段（⚠ 必须遵守）**：每个槽位的 `来源` 字段定义了内容来源类型： | 来源值 | 含义 | 规则 | |--------|------|------| | `⚠ 必须来自真实用户信息，不能编造` | 账号名、品牌名、期号、日期等 | **必须追问用户获取，不能使用示例值、不能编造** | | `可根据需求创作` | 标题、正文、语录等 | 可基于用户需求自由创作 | | `装饰文字，可保留默认` | 装饰性英文、设计元素等 | 可保留原值，或按主题替换 | `填写指引` 字段提供了具体的填写说明，填写前必须阅读。 若用户未提供真实信息（账号名、品牌名、期号等），**先追问再填写**，或保留原值，绝不编造。 ### Step 5：generate_poster(template_id, slots, adjustments?) 渲染并返回两张图：**render**（成品）+ **inspect**（UUID 标注图）。 ⚠ `slots` 是**字典**，格式为 `{"uuid": "填入文字"}`。 正确：`slots={"4b4c414680a0": "减脂打卡"}` 错误：`slots=[{"uuid": "4b4c414680a0", "value": "减脂打卡"}]` ⚠ 渲染完成后返回的下载链接路径是 `/files/文件名`，不要自行拼接路径。 ### Step 6：验收（渲染完成后必须检查） `generate_poster` 返回结果包含： - **render 图**（成品） - **inspect 图**（色码标注：🔴已确认问题 🟡疑似 🟢正常 ⬜装饰/非必填） - **📊 质检报告**（文字，随文本一起返回） - **🔴 高危裁图**（有确认问题时自动附加） **验收流程：** 1. **先读质检报告**： - 🔴 确认问题 → 必须处理（文字溢出/元素缺失），通常需缩短文字后重渲 - 🟡 疑似问题 → 调用 `get_slot_crops` 放大查看后决定是否处理 - ✅ 全部正常 → 继续视觉检查 2. **看 render 图**（有视觉能力时）： - 装饰贴纸是否遮挡文字 - 列表是否有大片空白（槽位未填满） - 整体视觉效果是否达标 3. **处理 🟡 疑似问题**（按需）： ``` get_slot_crops(render_path="/path/t708_xxx_render.png", uuids=["uuid1", "uuid2"]) ``` 4. **定位布局问题**：看 inspect 图，左上角 UUID 前8位对应 adjustments 中的 id ⚠ **批量生成时，每张图必须独立验收**，不能因为第1张通过就认为其余都正确。 **调整元素位置**（inspect 图定位后）： ``` adjustments=[{"id": "uuid前8位", "style": {"transform": "translateX(80px)"}}] ``` 支持：`transform` / `display: none` / `opacity` / `fontSize` / `top` / `left` **无视觉能力的模型**：依赖质检报告文字，严格处理 🔴 问题；从源头（Step 4 字数控制）规避 🟡。 --- ## 原则 - **内容优先**：内容多换高密度模板，不删减用户内容 - **给成品**：有视觉能力的模型自行调整到满意后再展示；无视觉模型严格填槽后直接交付 - 渲染完成后展示 render 图，并提供响应中返回的下载链接（不自行构造文件名）


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)