Skill: cinience/aliyun-qwen-multimodal-embedding (version 1.0.0)

--- name: aliyun-qwen-multimodal-embedding description: Use when multimodal embeddings are needed from Alibaba Cloud Model Studio models such as `qwen3-vl-embedding` for image, video, and text retrieval, cross-modal search, clustering, or offline vectorization pipelines. version: 1.0.0 --- Category: provider # Model Studio Multimodal Embedding ## Validation ```bash mkdir -p output/aliyun-qwen-multimodal-embedding python -m py_compile skills/ai/search/aliyun-qwen-multimodal-embedding/scripts/prepare_multimodal_embedding_request.py && echo "py_compile_ok" > output/aliyun-qwen-multimodal-embedding/validate.txt ``` Pass criteria: command exits 0 and `output/aliyun-qwen-multimodal-embedding/validate.txt` is generated. ## Output And Evidence - Save normalized request payloads, selected dimensions, and sample input references under [REDACTED_SECRET]. - Record the exact model, modality mix, and output vector dimension for reproducibility. Use this skill when the task needs text, image, or video embeddings from Model Studio for retrieval or similarity workflows. ## Critical model names Use one of these exact model strings as needed: - `qwen3-vl-embedding` - `qwen2.5-vl-embedding` - [REDACTED_SECRET] Selection guidance: - Prefer `qwen3-vl-embedding` for the newest multimodal embedding path. - Use `qwen2.5-vl-embedding` when you need compatibility with an older deployed pipeline. ## Prerequisites - Set `DASHSCOPE_API_KEY` in your environment, or add `dashscope_api_key` to `~/.alibabacloud/credentials`. - Pair this skill with a vector store such as DashVector, OpenSearch, or Milvus when building retrieval systems. ## Normalized interface (embedding.multimodal) ### Request - `model` (string, optional): default `qwen3-vl-embedding` - `texts` (array<string>, optional) - `images` (array<string>, optional): public URLs or local paths uploaded by your client layer - `videos` (array<string>, optional): public URLs where supported - `dimension` (int, optional): e.g. `2560`, `2048`, `1536`, `1024`, `768`, `512`, `256` for `qwen3-vl-embedding` ### Response - `embeddings` (array<object>) - `dimension` (int) - `usage` (object, optional) ## Quick start ```bash python skills/ai/search/aliyun-qwen-multimodal-embedding/scripts/prepare_multimodal_embedding_request.py \ --text "A cat sitting on a red chair" \ --image "https://example.com/cat.jpg" \ --dimension 1024 ``` ## Operational guidance - Keep `input.contents` as an array; malformed shapes are a common 400 cause. - Pin the output dimension to match your index schema before writing vectors. - Use the same model and dimension across one vector index to avoid mixed-vector incompatibility. - For large image or video batches, stage files in object storage and reference stable URLs. ## Output location - Default output: `output/aliyun-qwen-multimodal-embedding/request.json` - Override base dir with `OUTPUT_DIR`. ## References - `references/sources.md`

path: agents/openai.yaml
content: interface:
  display_name: "Alibaba Cloud AI Search Multimodal Embedding"
  short_description: "Multimodal embeddings from Model Studio VL embedding models"
  default_prompt: "Use $alicloud-ai-search-multimodal-embedding to complete this ai/search multimodal embedding task on Alibaba Cloud."


path: references/sources.md
content: - 向量化（qwen3-vl-embedding / qwen2.5-vl-embedding）: https://help.aliyun.com/zh/model-studio/embedding
- 模型列表: https://help.aliyun.com/zh/model-studio/models
- 模型上下架与更新: https://help.aliyun.com/zh/model-studio/newly-released-models



path: scripts/prepare_multimodal_embedding_request.py
content: #!/usr/bin/env python3
"""Prepare a minimal request payload for Model Studio multimodal embedding."""

from __future__ import annotations

import argparse
import json
from pathlib import Path


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--text", action="append", default=[])
    parser.add_argument("--image", action="append", default=[])
    parser.add_argument("--video", action="append", default=[])
    parser.add_argument("--model", default="qwen3-vl-embedding")
    parser.add_argument("--dimension", type=int)
    parser.add_argument(
        "--output",
        default="output/aliyun-qwen-multimodal-embedding/request.json",
    )
    args = parser.parse_args()

    contents: list[dict[str, str]] = []
    for text in args.text:
        contents.append({"text": text})
    for image in args.image:
        contents.append({"image": image})
    for video in args.video:
        contents.append({"video": video})
    if not contents:
        contents.append({"text": "Alibaba Cloud multimodal embedding"})

    payload = {
        "model": args.model,
        "input": {
            "contents": contents,
        },
    }
    if args.dimension is not None:
        payload["dimension"] = args.dimension

    output = Path(args.output)
    output.parent.mkdir(parents=True, exist_ok=True)
    output.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps({"ok": True, "request_path": str(output)}, ensure_ascii=False))


if __name__ == "__main__":
    main()


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