Files
market/skills/dashscope-image-gen/SKILL.zh-CN.md
xyx 42617e292d fix(dashscope-image-gen): 切换到 /images/generations 端点 v1.3.0 (#26)
## 概要 / Summary

修复 dashscope-image-gen 技能的核心端点问题,从 `/chat/completions`(对 wan 图片模型返回 HTTP
400)切换到 `/images/generations`,同时新增多项防护措施防止模型偏离执行路径。

Fix the core endpoint issue: switch from `/chat/completions` (returns
HTTP 400 for wan image models) to `/images/generations`, with enhanced
guardrails to prevent model deviation.

## 变更内容 / Changes

**核心修复**
- 端点:`/chat/completions` → `/images/generations`
- 请求体:`messages` 数组 → `prompt` 字符串 + `size` + `n`
- 响应处理:`choices[].message.content` 图片 URL → `b64_json` base64 解码

**新增防护**
- `curl -o` 保存响应到临时文件,避免 ~2MB base64 灌入终端浪费 token
- 新增"供应商与默认算力"章节,明确 DesireCore Cloud 始终可用,无需探索
- 强化 7 条强制规则(原 5 条),禁止探索未列出的模型/端点/配置文件
- 端口发现优先从系统提示词获取,兜底 `${DESIRECORE_HOME:-$HOME/.desirecore}`
- 错误处理改为表格格式 + "禁止自行重试其他方案"

## 测试 / Test Plan

- [x] dev 模式端到端测试:用户输入"生成一张小猪" → 4 次工具调用,0 失败,图片成功生成并展示
- [x] 对比历史:第一次测试 472 条/7+ 失败 → 第二次 141 条/5 失败 → **本次 108 条/0 失败**
2026-06-10 17:23:52 +08:00

6.2 KiB
Raw Blame History

dashscope-image-gen 技能

强制规则(违反将导致功能失败)

  1. 严格按下方步骤执行 — 禁止自行探索其他端点、尝试本文档未列出的模型、或读取配置文件
  2. 必须用 HTTPS 访问 agent-service — API 地址已在系统提示词的"本机 API"部分提供(如 https://127.0.0.1:PORT),直接使用,加 -k 跳过证书验证
  3. 必须通过 /api/media/upload 上传到 media-store — 禁止保存到本地路径
  4. 必须使用 dc-media:// 协议展示图片 — 唯一能让前端正确渲染的方式
  5. 全程使用 Bash curl — 不要使用 HttpRequest 工具或 Python
  6. 使用 /images/generations 端点 — 同步调用,响应包含 b64_json 图片数据
  7. 只能使用下方模型列表中的模型 — 禁止尝试 dall-e-3、qwen-vl 或任何未列出的模型

供应商与默认算力

本技能使用阿里云 DashScope 的通义万相系列模型。无需指定供应商,只需传 "serviceType": "image_gen",系统会自动路由到正确的供应商:

  • DesireCore Cloud(默认,始终可用):内置算力供应商已支持 image_gen 和通义万相模型。用户无需任何配置即可直接生成图片。
  • DashScope(用户自配):如果用户自己配置了阿里云 API Key系统可能会路由到用户自己的供应商。

禁止尝试查询供应商列表、读取 compute.json、或通过 API 探索可用模型。下方列出的模型保证可用。

模型选择指南

模型 特点 适用场景
wan2.7-image-pro 旗舰4K 分辨率thinking_mode 用户要求最高画质、4K、细节丰富
wan2.7-image 标准高画质thinking_mode 默认首选,无特殊要求时使用

默认规则:用户未指定模型时,使用 wan2.7-image

完整执行流程(严格按此步骤执行)

获取 API 地址

系统提示词中"本机 API"部分已包含 agent-service 的地址(如 Agent Service: https://127.0.0.1:61000)。直接从中提取 URL 使用。

如果无法从系统提示词中找到,使用以下兜底方式:

PORT=$(cat "${DESIRECORE_HOME:-$HOME/.desirecore}/agent-service.port")
# 然后使用 https://127.0.0.1:${PORT}

第一步:生成图片(单次 curl 调用)

通过 media-proxy 调用 /images/generations 端点。必须严格使用以下请求结构 — 禁止添加 messagesresponse_format 或任何未在此处列出的参数:

# 将响应保存到临时文件,避免 base64 数据灌入终端
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
  -H "Content-Type: application/json" \
  -d '{
    "serviceType": "image_gen",
    "endpoint": "/images/generations",
    "body": {
      "model": "wan2.7-image",
      "prompt": "这里替换为图片描述(建议英文效果更好)",
      "size": "1024x1024",
      "n": 1
    },
    "responseType": "json"
  }' -o /tmp/dashscope-response.json

# 检查成功并直接将 b64_json 提取为图片文件(禁止将响应内容输出到终端)
python3 -c "
import json, base64, sys
with open('/tmp/dashscope-response.json') as f:
    resp = json.load(f)
if not resp.get('success'):
    print('ERROR:', json.dumps(resp, ensure_ascii=False)[:500])
    sys.exit(1)
b64 = resp['data']['data'][0]['b64_json']
with open('/tmp/dashscope-gen.png', 'wb') as f:
    f.write(base64.b64decode(b64))
print('OK: saved to /tmp/dashscope-gen.png')
"

关键警告:响应包含大约 2MB 的 base64 图片数据。禁止将原始响应或 b64_json 打印到终端。始终使用 -o 保存到文件,再用上面的 python3 脚本提取。

响应格式(保存在 /tmp/dashscope-response.json 中):

{
  "success": true,
  "data": {
    "created": 1781060911,
    "data": [{"b64_json": "<非常大的 base64 字符串>"}],
    "size": "1024x1024"
  }
}

第二步:上传到 media-store

curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
  -F "file=@/tmp/dashscope-gen.png;type=image/png"

从上传 JSON 响应中提取 mediaId 字段(格式如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png)。

第三步:用 dc-media 协议展示图片

在你的回复文本中直接写 Markdown 图片语法:

![图片描述](dc-media://这里替换为mediaId)

例如:![森林中的白色狐狸](dc-media://a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6.png)

前端会自动将 dc-media:// 转为可访问的图片 URL 并渲染出来。

参数映射

尺寸选择

size 放在 body 对象中:

{
  "model": "wan2.7-image",
  "prompt": "图片描述",
  "size": "1024x1024",
  "n": 1
}
用户意图 size 参数
正方形/头像/默认 "1024x1024"
横版/风景/壁纸 "1792x1024"
竖版/手机/海报 "1024x1792"

可选参数(加入请求体顶层)

参数 说明
n 生成数量 1-4默认 1
size 图片尺寸,如 "1024x1024"

多图生成

n > 1 时,为每张图片执行下载+上传,然后逐一展示:

![图片1描述](dc-media://mediaId1)
![图片2描述](dc-media://mediaId2)

错误处理

错误 含义 处理方式
"未找到匹配的供应商" 没有启用的供应商支持 image_gen 告知用户在设置中启用支持 image_gen 的供应商
"未配置 API Key" 未填写 API Key 告知用户配置 API Key
statusCode: 401 API Key 无效或过期 告知用户检查 API Key
statusCode: 429 频率限制 等待后重试一次
statusCode: 400 参数错误 检查模型名和尺寸是否在上表中
statusCode: 403 AccessDenied.Unpurchased 模型未开通 告知用户在阿里云控制台开通

遇到任何错误时:禁止尝试其他模型、其他端点、或读取配置文件。直接向用户清晰报告错误即可。

注意事项

  • 图片生成调用是同步的,通常 10-60 秒返回wan2.7-image-pro 可能更长)
  • 结果图片 URL 有时效,必须及时下载
  • 提示词建议用英文以获得最佳效果,中文也支持
  • 如果用户未明确要求模型/尺寸,默认使用 wan2.7-image + 1024x1024