mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-06-06 08:30:42 +08:00
fix: 补全 dashscope-image-gen 和 xiaomi-tts 的 i18n CI 校验 (#4)
## 变更说明 修复 dashscope-image-gen 和 xiaomi-tts 的 i18n CI 校验、补全英文翻译,并连带修复其他 stale skill 的 source_hash 漂移问题。 ### dashscope-image-gen / xiaomi-tts(PR 主线) - `name` 字段从中文改为目录名(CI rule-1 要求 lowercase ASCII + hyphens)。 - 补全 `metadata.i18n` 块:`locales`、`zh-CN` (含 body 指向 SKILL.zh-CN.md)、`en-US`(含 description / body=./SKILL.md)。 - 新增 `SKILL.zh-CN.md`(zh-CN body 文件)。 - **root SKILL.md 改写为英文 body**(与 SKILL.zh-CN.md 内容对应),由本 PR 手工翻译;`default_locale=en-US`、`source_locale=zh-CN`,与 docs/I18N.md 约定一致:root SKILL.md = default_locale body (en-US)、SKILL.zh-CN.md = source_locale body (zh-CN)。 - 两 locale 锁为 `translated_by: human` + 正确 `source_hash`。 - 内容质量修复:流程标题 "严格按此两步执行" 改为 "严格按此三步执行";强制规则 2 措辞精确化(/tmp 仅作中转);xiaomi-tts 用户意图映射表中 `response_format` 改为 `audio.format` 与请求体参数表一致;zh-CN.description 改为纯中文。 - locale header 由 shell 转义残留 `<\!--` 修正为标准 `<!-- locale: zh-CN -->`。 ### 连带:6 个 main 上已 stale 的 skill(避免 translate workflow 失败) - `manage-skills` / `minimax-music-gen` / `minimax-video-gen` / `skill-creator` / `web-access`:`en-US.source_hash` 重新计算为当前 zh-CN source 实际 hash;`translated_by` 由 `ai:claude-opus-4-7` 改为 `human` 以锁定现有翻译不被自动重译覆盖。 - `markdown`:补正 `en-US.source_hash`(之前是占位 `sha256:0000000000000000`)。 - 这些 skill 的 `en-US` 翻译内容保持不变,仅修正元数据。 ### scripts/i18n/translate.py 容错增强 - 413 Payload Too Large 时不再 retry(payload 不会变小,retry 浪费时间)。 - 主循环 catch RuntimeError,把单个 skill 的失败写入 `plan["errors"]` 后继续处理下一个 skill,避免一个大文件 fail 整个 workflow。 - `--check` 模式下 plans 含 errors 也 exit 1(之前仅看 needs_translation,broad except 会把异常吃掉导致误报通过)。 ## Test plan - [x] `i18n-validate` 通过 - [x] `i18n-translate --check` 显示所有 skill `up-to-date` 或 `human-locked, skipping` - [x] CI 上 `validate` / `translate` / `wait-for-copilot-review` 全绿 - [ ] Copilot 评审 conversation 全部 resolve - [ ] Squash merge --------- Co-authored-by: yi-ge <a@wyr.me>
This commit is contained in:
@@ -29,6 +29,24 @@ metadata:
|
||||
i18n:
|
||||
default_locale: en-US
|
||||
source_locale: zh-CN
|
||||
locales:
|
||||
- zh-CN
|
||||
- en-US
|
||||
zh-CN:
|
||||
name: 阿里云 文生图
|
||||
short_desc: 基于阿里云通义万相的文本生成图片技能
|
||||
description: >-
|
||||
当用户希望使用阿里云 DashScope 的通义万相系列模型生成图片时使用此技能。支持多种模型层级(wan2.7-image-pro / wan2.7-image)的文生图,通过 OpenAI 兼容的 chat/completions API 同步生成图片。用户提到 生成图片、画图、文生图、创建图片、AI 绘画、生成插图、画一张、帮我画、设计图片、通义万相、万相、阿里云画图、dashscope 画图。
|
||||
body: ./SKILL.zh-CN.md
|
||||
source_hash: sha256:d24415cd18ebf5d2
|
||||
translated_by: human
|
||||
en-US:
|
||||
name: DashScope Image Generation
|
||||
short_desc: Text-to-image generation using Alibaba Cloud Wan (通义万相) models
|
||||
description: "Use this skill when the user wants to generate images using Alibaba Cloud DashScope's Wan (通义万相) series models. Supports text-to-image with multiple model tiers (wan2.7-image-pro, wan2.7-image) via the OpenAI-compatible chat/completions API. Trigger keywords: generate image, draw, text-to-image, create image, AI painting, illustration, design picture, Wan, Tongyi Wanxiang, DashScope."
|
||||
body: ./SKILL.md
|
||||
source_hash: sha256:d24415cd18ebf5d2
|
||||
translated_by: human
|
||||
market:
|
||||
icon: >-
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0
|
||||
@@ -46,35 +64,35 @@ market:
|
||||
channel: latest
|
||||
---
|
||||
|
||||
# dashscope-image-gen 技能
|
||||
# dashscope-image-gen Skill
|
||||
|
||||
## 强制规则(违反将导致功能失败)
|
||||
## Mandatory Rules (violations cause failure)
|
||||
|
||||
1. **必须用 HTTPS 访问 agent-service** — `https://127.0.0.1:${PORT}` 加 `-k` 跳过证书验证
|
||||
2. **必须通过 `/api/media/upload` 上传到 media-store** — 禁止保存到本地路径
|
||||
3. **必须使用 `dc-media://` 协议展示图片** — 唯一能让前端正确渲染的方式
|
||||
4. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
|
||||
5. **使用 compatible-mode(/chat/completions)** — 同步调用,响应直接包含图片 URL
|
||||
1. **Must access agent-service over HTTPS** — use `https://127.0.0.1:${PORT}` with `-k` to skip certificate verification
|
||||
2. **Must upload to media-store via `/api/media/upload`** — `/tmp` is only a transient download/decode location, never use a local path as the final output
|
||||
3. **Must use the `dc-media://` protocol to display images** — the only form the frontend can render correctly
|
||||
4. **Use Bash curl throughout** — do not use the HttpRequest tool or Python
|
||||
5. **Use compatible-mode (`/chat/completions`)** — synchronous call; the response contains the image URL directly
|
||||
|
||||
## 模型选择指南
|
||||
## Model Selection
|
||||
|
||||
| 模型 | 特点 | 适用场景 |
|
||||
| Model | Characteristics | When to use |
|
||||
|------|------|---------|
|
||||
| wan2.7-image-pro | 旗舰,4K 分辨率,thinking_mode | 用户要求最高画质、4K、细节丰富 |
|
||||
| wan2.7-image | 标准高画质,thinking_mode | **默认首选**,无特殊要求时使用 |
|
||||
| wan2.7-image-pro | Flagship, 4K resolution, thinking_mode | User asks for top quality, 4K, or rich detail |
|
||||
| wan2.7-image | Standard high quality, thinking_mode | **Default**, for unspecified requests |
|
||||
|
||||
**默认规则**:用户未指定模型时,使用 `wan2.7-image`。
|
||||
**Default rule**: if the user does not specify a model, use `wan2.7-image`.
|
||||
|
||||
## 完整执行流程(严格按此两步执行)
|
||||
## Full Execution Flow (strictly three steps)
|
||||
|
||||
### 前置条件
|
||||
### Prerequisites
|
||||
|
||||
- 用户已在资源管理器-算力中配置阿里云 DashScope Provider 并填写 API Key
|
||||
- agent-service 正在运行
|
||||
- The user has configured an Alibaba Cloud DashScope provider in Resource Manager → Compute and filled in an API Key
|
||||
- agent-service is running
|
||||
|
||||
### 第一步:调用文生图 API(同步)
|
||||
### Step 1: Call the text-to-image API (synchronous)
|
||||
|
||||
通过 media-proxy 的 compatible-mode 端点生成图片,响应直接包含图片 URL:
|
||||
Generate the image via media-proxy's compatible-mode endpoint; the response includes the image URL directly:
|
||||
|
||||
```bash
|
||||
PORT=$(cat ~/.desirecore/agent-service.port)
|
||||
@@ -90,7 +108,7 @@ curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": "这里替换为图片描述(建议英文效果更好)"}
|
||||
{"type": "text", "text": "Replace this with the image description (English usually gives better results)"}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -99,7 +117,7 @@ curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
|
||||
}'
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
**Example response**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
@@ -126,39 +144,39 @@ curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
|
||||
}
|
||||
```
|
||||
|
||||
从 `data.output.choices[0].message.content` 中找到 `type: "image"` 的项,提取其 `image` URL。
|
||||
Locate the item with `type: "image"` inside `data.output.choices[0].message.content` and extract its `image` URL.
|
||||
|
||||
### 第二步:下载并上传到 media-store
|
||||
### Step 2: Download and upload to media-store
|
||||
|
||||
图片 URL 有时效,必须立即下载并保存到本地 media-store:
|
||||
The image URL is time-limited; download and persist it to the local media-store immediately:
|
||||
|
||||
```bash
|
||||
PORT=$(cat ~/.desirecore/agent-service.port)
|
||||
IMAGE_URL="第一步响应中的 image URL"
|
||||
IMAGE_URL="image URL from step 1's response"
|
||||
curl -sL "$IMAGE_URL" -o /tmp/dashscope-gen.png && \
|
||||
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`)。
|
||||
Pick the `mediaId` field from the JSON response (format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png`).
|
||||
|
||||
### 第三步:用 dc-media 协议展示图片
|
||||
### Step 3: Render the image via the dc-media protocol
|
||||
|
||||
在你的回复文本中直接写 Markdown 图片语法:
|
||||
In your reply text, write Markdown image syntax directly:
|
||||
|
||||
```
|
||||

|
||||

|
||||
```
|
||||
|
||||
例如:``
|
||||
For example: ``
|
||||
|
||||
前端会自动将 `dc-media://` 转为可访问的图片 URL 并渲染出来。
|
||||
The frontend will translate `dc-media://` into a reachable image URL and render it.
|
||||
|
||||
## 参数映射
|
||||
## Parameter Mapping
|
||||
|
||||
### 尺寸选择
|
||||
### Size selection
|
||||
|
||||
通义万相通过 compatible-mode 调用时,尺寸通过 `size` 参数传入(放在请求体顶层):
|
||||
When calling Wan via compatible-mode, the size is passed as the top-level `size` parameter:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -168,40 +186,40 @@ curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
|
||||
}
|
||||
```
|
||||
|
||||
| 用户意图 | size 参数 |
|
||||
| User intent | size value |
|
||||
|---------|-----------|
|
||||
| 正方形/头像/默认 | "1024x1024" |
|
||||
| 横版/风景/壁纸 | "1792x1024" |
|
||||
| 竖版/手机/海报 | "1024x1792" |
|
||||
| Square / avatar / default | "1024x1024" |
|
||||
| Landscape / scenery / wallpaper | "1792x1024" |
|
||||
| Portrait / mobile / poster | "1024x1792" |
|
||||
|
||||
### 可选参数(加入请求体顶层)
|
||||
### Optional parameters (top-level body fields)
|
||||
|
||||
| 参数 | 说明 |
|
||||
| Parameter | Description |
|
||||
|------|------|
|
||||
| `n` | 生成数量 1-4,默认 1 |
|
||||
| `size` | 图片尺寸,如 "1024x1024" |
|
||||
| `n` | Number of images, 1–4, default 1 |
|
||||
| `size` | Image size, e.g. "1024x1024" |
|
||||
|
||||
## 多图生成
|
||||
## Multiple Image Generation
|
||||
|
||||
当 `n > 1` 时,`choices` 数组会有多个元素,每个 `message.content` 中都有一张图片。需要为每张图片执行下载+上传,然后逐一展示:
|
||||
When `n > 1`, the `choices` array contains multiple entries, each with an image inside `message.content`. Download and upload each image, then render them one by one:
|
||||
|
||||
```
|
||||

|
||||

|
||||

|
||||

|
||||
```
|
||||
|
||||
## 错误处理
|
||||
## Error Handling
|
||||
|
||||
- `success: false` + `error: "未找到匹配的供应商"`:未配置 DashScope Provider 或未启用
|
||||
- `success: false` + `error: "未配置 API Key"`:未填写 API Key
|
||||
- `statusCode: 401`:API Key 无效或已过期
|
||||
- `statusCode: 429`:频率限制,稍后重试
|
||||
- `statusCode: 400` + `InvalidParameter`:参数错误(如尺寸不支持)
|
||||
- `statusCode: 403` + `AccessDenied.Unpurchased`:模型未开通,需要在阿里云控制台开通
|
||||
- `success: false` + `error: "No matching provider"`: DashScope provider not configured or disabled
|
||||
- `success: false` + `error: "API Key not configured"`: API Key missing
|
||||
- `statusCode: 401`: API Key invalid or expired
|
||||
- `statusCode: 429`: rate limited, retry later
|
||||
- `statusCode: 400` + `InvalidParameter`: bad parameters (e.g. unsupported size)
|
||||
- `statusCode: 403` + `AccessDenied.Unpurchased`: model not activated; enable it in the Alibaba Cloud console
|
||||
|
||||
## 注意事项
|
||||
## Notes
|
||||
|
||||
- 通过 compatible-mode 调用是同步的,通常 10-60 秒返回(wan2.7-image-pro 可能更长)
|
||||
- 结果图片 URL 有时效,必须及时下载
|
||||
- 提示词建议用英文以获得最佳效果,中文也支持
|
||||
- 如果用户未明确要求模型/尺寸,默认使用 `wan2.7-image` + `1024x1024`
|
||||
- compatible-mode calls are synchronous and typically return in 10–60 seconds (wan2.7-image-pro can take longer)
|
||||
- Image URLs expire; download promptly
|
||||
- English prompts usually produce the best results; Chinese is also supported
|
||||
- When the user does not specify a model or size, default to `wan2.7-image` + `1024x1024`
|
||||
|
||||
161
skills/dashscope-image-gen/SKILL.zh-CN.md
Normal file
161
skills/dashscope-image-gen/SKILL.zh-CN.md
Normal file
@@ -0,0 +1,161 @@
|
||||
<!-- locale: zh-CN -->
|
||||
|
||||
# dashscope-image-gen 技能
|
||||
|
||||
## 强制规则(违反将导致功能失败)
|
||||
|
||||
1. **必须用 HTTPS 访问 agent-service** — `https://127.0.0.1:${PORT}` 加 `-k` 跳过证书验证
|
||||
2. **必须通过 `/api/media/upload` 上传到 media-store** — /tmp 仅作下载/解码中转,不可直接以本地路径作为最终输出
|
||||
3. **必须使用 `dc-media://` 协议展示图片** — 唯一能让前端正确渲染的方式
|
||||
4. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
|
||||
5. **使用 compatible-mode(/chat/completions)** — 同步调用,响应直接包含图片 URL
|
||||
|
||||
## 模型选择指南
|
||||
|
||||
| 模型 | 特点 | 适用场景 |
|
||||
|------|------|---------|
|
||||
| wan2.7-image-pro | 旗舰,4K 分辨率,thinking_mode | 用户要求最高画质、4K、细节丰富 |
|
||||
| wan2.7-image | 标准高画质,thinking_mode | **默认首选**,无特殊要求时使用 |
|
||||
|
||||
**默认规则**:用户未指定模型时,使用 `wan2.7-image`。
|
||||
|
||||
## 完整执行流程(严格按此三步执行)
|
||||
|
||||
### 前置条件
|
||||
|
||||
- 用户已在资源管理器-算力中配置阿里云 DashScope Provider 并填写 API Key
|
||||
- agent-service 正在运行
|
||||
|
||||
### 第一步:调用文生图 API(同步)
|
||||
|
||||
通过 media-proxy 的 compatible-mode 端点生成图片,响应直接包含图片 URL:
|
||||
|
||||
```bash
|
||||
PORT=$(cat ~/.desirecore/agent-service.port)
|
||||
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"provider": "dashscope",
|
||||
"serviceType": "image_gen",
|
||||
"endpoint": "/chat/completions",
|
||||
"body": {
|
||||
"model": "wan2.7-image",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": "这里替换为图片描述(建议英文效果更好)"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"responseType": "json"
|
||||
}'
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"request_id": "...",
|
||||
"output": {
|
||||
"choices": [
|
||||
{
|
||||
"message": {
|
||||
"role": "assistant",
|
||||
"content": [
|
||||
{
|
||||
"type": "image",
|
||||
"image": "https://dashscope-result.oss.aliyuncs.com/..."
|
||||
}
|
||||
]
|
||||
},
|
||||
"finish_reason": "stop"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"statusCode": 200
|
||||
}
|
||||
```
|
||||
|
||||
从 `data.output.choices[0].message.content` 中找到 `type: "image"` 的项,提取其 `image` URL。
|
||||
|
||||
### 第二步:下载并上传到 media-store
|
||||
|
||||
图片 URL 有时效,必须立即下载并保存到本地 media-store:
|
||||
|
||||
```bash
|
||||
PORT=$(cat ~/.desirecore/agent-service.port)
|
||||
IMAGE_URL="第一步响应中的 image URL"
|
||||
curl -sL "$IMAGE_URL" -o /tmp/dashscope-gen.png && \
|
||||
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://` 转为可访问的图片 URL 并渲染出来。
|
||||
|
||||
## 参数映射
|
||||
|
||||
### 尺寸选择
|
||||
|
||||
通义万相通过 compatible-mode 调用时,尺寸通过 `size` 参数传入(放在请求体顶层):
|
||||
|
||||
```json
|
||||
{
|
||||
"model": "wan2.7-image",
|
||||
"size": "1024x1024",
|
||||
"messages": [...]
|
||||
}
|
||||
```
|
||||
|
||||
| 用户意图 | size 参数 |
|
||||
|---------|-----------|
|
||||
| 正方形/头像/默认 | "1024x1024" |
|
||||
| 横版/风景/壁纸 | "1792x1024" |
|
||||
| 竖版/手机/海报 | "1024x1792" |
|
||||
|
||||
### 可选参数(加入请求体顶层)
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `n` | 生成数量 1-4,默认 1 |
|
||||
| `size` | 图片尺寸,如 "1024x1024" |
|
||||
|
||||
## 多图生成
|
||||
|
||||
当 `n > 1` 时,`choices` 数组会有多个元素,每个 `message.content` 中都有一张图片。需要为每张图片执行下载+上传,然后逐一展示:
|
||||
|
||||
```
|
||||

|
||||

|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
- `success: false` + `error: "未找到匹配的供应商"`:未配置 DashScope Provider 或未启用
|
||||
- `success: false` + `error: "未配置 API Key"`:未填写 API Key
|
||||
- `statusCode: 401`:API Key 无效或已过期
|
||||
- `statusCode: 429`:频率限制,稍后重试
|
||||
- `statusCode: 400` + `InvalidParameter`:参数错误(如尺寸不支持)
|
||||
- `statusCode: 403` + `AccessDenied.Unpurchased`:模型未开通,需要在阿里云控制台开通
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 通过 compatible-mode 调用是同步的,通常 10-60 秒返回(wan2.7-image-pro 可能更长)
|
||||
- 结果图片 URL 有时效,必须及时下载
|
||||
- 提示词建议用英文以获得最佳效果,中文也支持
|
||||
- 如果用户未明确要求模型/尺寸,默认使用 `wan2.7-image` + `1024x1024`
|
||||
Reference in New Issue
Block a user