Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:Messages compatible con Anthropic

Última actualización: Oct 22, 2026

Migre su aplicación de Anthropic a Model Studio cambiando tres configuraciones. Este tema cubre los parámetros de solicitud y respuesta con ejemplos de código.

Para migrar una aplicación existente de Anthropic a Model Studio, cambie estas configuraciones:

  • api_key: Reemplace con la clave API de Model Studio.
  • base_url: Reemplace con un endpoint de Model Studio listado a continuación.
  • model: Reemplace con un nombre de modelo compatible, como qwen3.7-plus.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos de espacio de trabajo para las regiones de China (Pekín), Singapur y China (Hong Kong). Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de https://dashscope.aliyuncs.com a https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de https://dashscope-intl.aliyuncs.com a https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
  • China (Hong Kong): de https://cn-hongkong.dashscope.aliyuncs.com a https://{WorkspaceId}.cn-hongkong.maas.aliyuncs.com

{WorkspaceId} es su ID de espacio de trabajo, que se encuentra en la página Workspace Details de la consola de Alibaba Cloud Model Studio. El dominio existente permanece totalmente funcional.

Singapore

SDK base_url:https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic

URL de solicitud HTTP:POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages

China (Beijing)

SDK base_url:https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic

URL de solicitud HTTP:POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic/v1/messages

Germany (Frankfurt)

SDK base_url:https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/apps/anthropic

URL de solicitud HTTP:POST https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/apps/anthropic/v1/messages

EE. UU. (Virginia)

SDK base_url:https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/apps/anthropic

URL de solicitud HTTP:POST https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/apps/anthropic/v1/messages

Japan (Tokyo)

SDK base_url:https://{WorkspaceId}.ap-northeast-1.maas.aliyuncs.com/apps/anthropic

URL de solicitud HTTP:POST https://{WorkspaceId}.ap-northeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Autenticación: Pase su clave API de Model Studio en el encabezado x-api-key o en el encabezado Authorization: Bearer.

Cuerpo de la solicitud

model string (Obligatorio)

Nombre del modelo. Modelos admitidos:

Modelos compatibles

Qwen-Max: serie qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08

Qwen-Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.6-plus-2026-04-02, qwen3.5-plus, qwen3.5-plus-2026-04-20, qwen3.5-plus-2026-02-15, qwen-plus, qwen-plus-latest

Qwen-Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.6-flash-2026-04-16, qwen3.5-flash, qwen3.5-flash-2026-02-23, qwen-flash, qwen-flash-2025-07-28

Qwen-Coder: qwen3-coder-flash

Qwen-VL: qwen3-vl-plus

Qwen Modelos de código abierto: qwen3.6-27b, qwen3.5-397b-a17b, qwen3.5-122b-a10b, qwen3.5-27b, qwen3.5-35b-a3b, qwen3.8-2.4t-a95b, qwen3.8-27b

Modelos de terceros

deepseek-v4.1-flash, deepseek-v4-pro, deepseek-v4-pro-0813, deepseek-v4-flash-0731, kimi-k3, kimi-k2.7-code, kimi-k2.5, glm-5.3, glm-5.1, glm-5, MiniMax-M2.5, deepseek-v4.1-flash-1017

max_tokens integer (Obligatorio)

  • deepseek-v4.1-flash, deepseek-v4-pro, deepseek-v4-pro-0813, deepseek-v4-flash-0731, serie qwen3.8-max, qwen3.8-flash: max_tokens es el recuento total máximo de tokens tanto para el contenido de la respuesta como para el contenido de la cadena de pensamiento. La generación se detiene anticipadamente cuando la salida del modelo excede este valor, y stop_reason es max_tokens.

    max_tokens limita la longitud combinada del contenido de la respuesta y el proceso de pensamiento. Cuando el pensamiento extendido está habilitado, max_tokens > thinking.budget_tokens

  • glm-5.3: max_tokens es el recuento total máximo de tokens tanto para el contenido de la respuesta como para el contenido de la cadena de pensamiento. La generación se detiene anticipadamente cuando la salida del modelo excede este valor, y stop_reason es max_tokens. glm-5.3 ignora el parámetro thinking.budget_tokens.

  • glm-5.2: Cuando no se pasa el parámetro thinking.budget_tokens, max_tokens es el recuento total máximo de tokens tanto para el contenido de la respuesta como para el contenido de la cadena de pensamiento. La generación se detiene anticipadamente cuando la salida del modelo excede este valor, y stop_reason es max_tokens. Cuando se pasa el parámetro thinking.budget_tokens, max_tokens representa únicamente el número máximo de tokens para el contenido de la respuesta, y los tokens de razonamiento se controlan por separado mediante thinking.budget_tokens.

  • Otros modelos: Número máximo de tokens para el contenido de la respuesta. Si el contenido generado excede este valor, la generación se detiene anticipadamente y stop_reason es max_tokens.

    max_tokens no limita la longitud del proceso de pensamiento. Cuando el pensamiento extendido está habilitado, los tokens de pensamiento se controlan por separado mediante thinking.budget_tokens.

system string or array (Opcional)

Prompt del sistema que define el comportamiento del modelo. system es un parámetro de nivel superior — el arreglo messages no acepta un rol system.

Una cadena equivale a un solo bloque type="text". Pase un arreglo para marcar puntos de interrupción de caché de prompts.

Propiedades

type string (Obligatorio)

Valor fijo: text.

text string (Obligatorio)

El texto del prompt del sistema.

cache_control object (Opcional)

Punto de interrupción de caché de prompts. En caso de acierto de caché, las solicitudes subsiguientes se facturan a la tarifa de lectura de caché. Contiene solo type, fijado en ephemeral.

messages array (Obligatorio)

El arreglo de mensajes, organizado en turnos alternados de user/assistant.

Elemento de la matriz messages

role string (Obligatorio)

El rol del mensaje. Valores válidos: user, assistant.

content string or array (Obligatorio)

Cadena de texto plano o arreglo de contenido estructurado. Una cadena equivale a un solo bloque content con type="text".

Tipos de elementos de la matriz content

Texto

Propiedades

type string (Obligatorio)

Valor fijo: text.

text string (Obligatorio)

El contenido de texto.

cache_control object (Opcional)

Punto de interrupción de caché de prompts. Contiene solo type, fijado en ephemeral.

Imagen (requiere modelo de visión)

Propiedades

type string (Obligatorio)

Valor fijo: image.

source object (Obligatorio)

El origen de los datos de imagen.

Propiedades

type string (Obligatorio)

Valores válidos: url (URL pública de imagen), base64 (codificado en Base64).

url string

La URL pública de la imagen. Obligatorio cuando type es url.

media_type string

El tipo MIME de la imagen, como image/jpeg. Obligatorio cuando type es base64.

data string

Los datos de imagen codificados en Base64. Obligatorios cuando type es base64.

Video (requiere modelo de visión)

Propiedades

type string (Obligatorio)

Valor fijo: video.

source object (Obligatorio)

El origen de los datos de video.

Propiedades

type string (Obligatorio)

Valores válidos: url (URL pública de video), base64 (codificado en Base64).

url string

La URL pública del video. Obligatorio cuando type es url.

media_type string

El tipo MIME del video, como video/mp4. Obligatorio cuando type es base64.

data string

Los datos de video codificados en Base64. Obligatorios cuando type es base64.

Uso de herramientas (rol asistente; instrucción de llamada a herramienta devuelta por el modelo)

Propiedades

type string (Obligatorio)

Valor fijo: tool_use.

id string (Obligatorio)

El identificador único de la llamada a herramienta, utilizado para asociar el resultado en un tool_result posterior.

name string (Obligatorio)

El nombre de la herramienta llamada.

input object (Obligatorio)

Los parámetros de entrada de la llamada a herramienta. La estructura está determinada por el input_schema de la herramienta correspondiente en tools.

cache_control object (Opcional)

Punto de interrupción de caché de prompts. Contiene solo type, fijado en ephemeral. El contenido de la llamada a herramienta participa en el prefijo de caché.

Resultado de herramienta (rol usuario; resultado de ejecución de una herramienta enviado de vuelta al modelo)

Propiedades

type string (Obligatorio)

Valor fijo: tool_result.

tool_use_id string (Obligatorio)

Corresponde al id en el bloque tool_use.

content string (Obligatorio)

Contenido devuelto por la herramienta.

cache_control object (Opcional)

Punto de interrupción de caché de prompts. Contiene solo type, fijado en ephemeral.

stream boolean (Opcional)

Si se habilita el streaming. Valor predeterminado: false.

temperature number (Opcional)

Controla la diversidad del texto generado. Rango de valores: [0, 2). Los valores más altos producen resultados más aleatorios.

NotaEste rango es diferente al rango oficial de Anthropic de [0.0, 1.0]. Al migrar desde Anthropic, verifique el valor de este parámetro.

top_p number (Opcional)

Umbral de probabilidad de muestreo de núcleo.

Tanto temperature como top_p pueden controlar la diversidad del texto generado. Recomendamos configurar solo uno de ellos. Para más información, consulte Descripción general.

top_k integer (Opcional)

Tamaño del conjunto de candidatos durante el muestreo.

stop_sequences array (Opcional)

Secuencias de texto que activan la detención de la generación. La salida termina antes de la secuencia coincidente.

NotaDespués de una coincidencia, el stop_reason en la respuesta es stop_sequence, y la secuencia coincidente se devuelve en el campo stop_sequence de la respuesta.

thinking object (Opcional)

Configuración de pensamiento extendido. Cuando está habilitada, el modelo razona antes de responder, y la respuesta incluye bloques de contenido de tipo thinking. No todos los modelos admiten el modo de pensamiento.

Propiedades

type string (Obligatorio)

Valores válidos: enabled (habilitar modo de pensamiento), disabled (deshabilitar modo de pensamiento).

budget_tokens integer (Opcional, quedará obsoleto)

Este parámetro quedará obsoleto. Para nuevas integraciones, utilice effort.

Tokens máximos para el proceso de razonamiento. Independiente de max_tokens: este parámetro limita la parte de razonamiento, mientras que max_tokens limita la respuesta final. Un presupuesto mayor permite un análisis más exhaustivo en preguntas complejas. Surte efecto cuando type es enabled.

tools array (Opcional)

Definiciones de herramientas para llamada de funciones.

Elemento de la matriz tools

name string (Obligatorio)

El nombre de la herramienta.

description string (Opcional)

La descripción de la función de la herramienta.

input_schema object (Obligatorio)

La definición JSON Schema de los parámetros de entrada de la herramienta.

deepseek-v4.1-flash-1017 admite las herramientas de búsqueda web web_search y de recuperación de páginas web web_fetch. Para los requisitos y ejemplos de solicitudes compatibles con Anthropic, consulte Extractor web.

tool_choice object (Opcional)

Estrategia de selección de herramientas:

  • {"type": "auto"}: El modelo decide si llamar a una herramienta (predeterminado).
  • {"type": "any"}: Forzar al modelo a llamar a cualquier herramienta.
  • {"type": "none"}: Prohibir al modelo llamar a herramientas.
  • {"type": "tool", "name": "tool_name"}: Forzar al modelo a llamar a una herramienta específica.

output_config object (Opcional)

Propiedades

effort string (Opcional)

Controla la intensidad de inferencia de los modelos. Los valores válidos y predeterminados varían según el modelo.

  • glm-5.3: Valor predeterminado: max

    Valores válidos:

    • low: Inferencia de baja intensidad
    • high: Inferencia de alta intensidad
    • max: Inferencia de intensidad máxima

    Pasar cualquier otro valor devuelve un error.

  • glm-5.2 y deepseek-v4-pro: Valor predeterminado: max

    Valores válidos:

    • high: Inferencia de alta intensidad
    • max: Inferencia de intensidad máxima

    low y medium se asignan a high, y xhigh se asigna a max.

  • qwen3.8-max/qwen3.8-flash: Valor predeterminado: xhigh

    Valores válidos:

    • xhigh: Inferencia de alta intensidad
    • medium: Inferencia de intensidad media
    • low: Inferencia de baja intensidad

    max y high se asignan a xhigh.

format object (Opcional)

Configuración de salida estructurada. Cuando está habilitada, el modelo devuelve una cadena JSON. El comportamiento varía según el modelo:

deepseek-v4.1-flash-1017 solo admite JSON Object, no JSON Schema.

  • Salidas estructuradas estrictas: Disponible para modelos de las series qwen3.8, qwen3.7, deepseek (excepto deepseek-v4.1-flash-1017) y glm. El modelo sigue estrictamente el JSON Schema proporcionado, garantizando los mismos tipos de campos y jerarquía.
  • Salidas estructuradas regulares: Para todos los demás modelos, las restricciones de campos del esquema no se aplican; la API recurre automáticamente a un modo JSON simple (garantizando únicamente que la salida sea una cadena JSON válida). En este modo alternativo, la solicitud debe cumplir ambos requisitos siguientes: (1) el parámetro output_config se proporciona explícitamente; (2) el contenido de system o messages contiene la palabra clave "JSON" (sin distinción entre mayúsculas y minúsculas). Si falta la palabra clave "JSON", la API genera el error: 'messages' must contain the word 'json' in some form.

Propiedades

type string (Obligatorio)

Valor fijo: json_schema.

schema object (Obligatorio)

Objeto JSON Schema que sigue la especificación estándar de JSON Schema. Debe incluir type (tipo de datos), properties (definiciones de campos), required (matriz de nombres de campos obligatorios) y additionalProperties (debe establecerse en false).

Llamada básica

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

message = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1024,
    system="You are a helpful assistant",
    messages=[
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    thinking={"type": "disabled"},
)

print(message.content[0].text)
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

async function main() {
  const message = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 1024,
    system: "You are a helpful assistant",
    messages: [{
      role: "user",
      content: "Who are you?"
    }],
    thinking: { type: "disabled" },
  });

  console.log(message.content[0].text);
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "system": "You are a helpful assistant",
    "messages": [
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    "thinking": {"type": "disabled"}
}'

Transmisión

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1024,
    stream=True,
    messages=[
        {
            "role": "user",
            "content": "Give a brief introduction to artificial intelligence."
        }
    ],
    thinking={"type": "disabled"},
)

for chunk in stream:
    if chunk.type == "content_block_delta":
        if hasattr(chunk.delta, 'text'):
            print(chunk.delta.text, end="", flush=True)
import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 1024,
    stream: true,
    messages: [{
      role: "user",
      content: "Give a brief introduction to artificial intelligence."
    }],
    thinking: { type: "disabled" },
  });

  for await (const chunk of stream) {
    if (chunk.type === "content_block_delta" && 'text' in chunk.delta) {
      process.stdout.write(chunk.delta.text);
    }
  }
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  --no-buffer \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "stream": true,
    "messages": [
        {
            "role": "user",
            "content": "Give a brief introduction to artificial intelligence."
        }
    ],
    "thinking": {"type": "disabled"}
}'

Razonamiento extendido

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.8-max",
    max_tokens=2048,
    stream=True,
    thinking={
        "type": "enabled",
        "budget_tokens": 1024
    },
    messages=[
        {
            "role": "user",
            "content": "Analyze the future prospects of quantum computing."
        }
    ]
)

for chunk in stream:
    if chunk.type == "content_block_delta":
        if hasattr(chunk.delta, 'thinking'):
            print(chunk.delta.thinking, end="", flush=True)
        elif hasattr(chunk.delta, 'text'):
            print(chunk.delta.text, end="", flush=True)
import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 2048,
    stream: true,
    thinking: { type: "enabled", budget_tokens: 1024 },
    messages: [{
      role: "user",
      content: "Analyze the future prospects of quantum computing."
    }]
  });

  for await (const chunk of stream) {
    if (chunk.type === "content_block_delta") {
      if ('thinking' in chunk.delta) {
        process.stdout.write(chunk.delta.thinking);
      } else if ('text' in chunk.delta) {
        process.stdout.write(chunk.delta.text);
      }
    }
  }
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 2048,
    "stream": true,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 1024
    },
    "messages": [
        {
            "role": "user",
            "content": "Analyze the future prospects of quantum computing."
        }
    ]
}'

Comprensión de imágenes

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1024,
    stream=True,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "url",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250414/mqqmiy/animal_01.jpg",
                    },
                },
                {
                    "type": "text",
                    "text": "Describe the content of this image."
                },
            ],
        }
    ],
    thinking={"type": "disabled"},
)

for chunk in stream:
    if chunk.type == "content_block_delta":
        if hasattr(chunk.delta, 'text'):
            print(chunk.delta.text, end="", flush=True)
import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 1024,
    stream: true,
    messages: [{
      role: "user",
      content: [
        {
          type: "image",
          source: {
            type: "url",
            url: "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250414/mqqmiy/animal_01.jpg",
          },
        },
        { type: "text", text: "Describe the content of this image." },
      ],
    }],
    thinking: { type: "disabled" },
  });

  for await (const chunk of stream) {
    if (chunk.type === "content_block_delta" && 'text' in chunk.delta) {
      process.stdout.write(chunk.delta.text);
    }
  }
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "stream": true,
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "url",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250414/mqqmiy/animal_01.jpg"
                    }
                },
                {
                    "type": "text",
                    "text": "Describe the content of this image."
                }
            ]
        }
    ],
    "thinking": {"type": "disabled"}
}'

Comprensión de video

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1024,
    stream=True,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "source": {
                        "type": "url",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251208/zpupby/3e81ef38-98f0-4d55-bbb6-259334ca18d0.mp4",
                    },
                },
                {
                    "type": "text",
                    "text": "Describe the content of this video."
                },
            ],
        }
    ],
    thinking={"type": "disabled"},
)

for chunk in stream:
    if chunk.type == "content_block_delta":
        if hasattr(chunk.delta, 'text'):
            print(chunk.delta.text, end="", flush=True)
import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 1024,
    stream: true,
    messages: [{
      role: "user",
      content: [
        {
          type: "video",
          source: {
            type: "url",
            url: "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251208/zpupby/3e81ef38-98f0-4d55-bbb6-259334ca18d0.mp4",
          },
        },
        { type: "text", text: "Describe the content of this video." },
      ],
    }],
    thinking: { type: "disabled" },
  });

  for await (const chunk of stream) {
    if (chunk.type === "content_block_delta" && 'text' in chunk.delta) {
      process.stdout.write(chunk.delta.text);
    }
  }
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "stream": true,
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "video",
                    "source": {
                        "type": "url",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251208/zpupby/3e81ef38-98f0-4d55-bbb6-259334ca18d0.mp4"
                    }
                },
                {
                    "type": "text",
                    "text": "Describe the content of this video."
                }
            ]
        }
    ],
    "thinking": {"type": "disabled"}
}'

Llamada a funciones

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

tools = [
    {
        "name": "get_weather",
        "description": "Get weather information for a specified city",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "City name"
                }
            },
            "required": ["city"]
        }
    }
]

message = client.messages.create(
    model="qwen3.8-max",
    max_tokens=1024,
    tools=tools,
    messages=[
        {
            "role": "user",
            "content": "What's the weather like in Hangzhou today?"
        }
    ]
)

print(message.content)
import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const message = await anthropic.messages.create({
    model: "qwen3.8-max",
    max_tokens: 1024,
    tools: [
      {
        name: "get_weather",
        description: "Get weather information for a specified city",
        input_schema: {
          type: "object",
          properties: {
            city: { type: "string", description: "City name" }
          },
          required: ["city"],
        },
      },
    ],
    messages: [{
      role: "user",
      content: "What's the weather like in Hangzhou today?"
    }],
  });

  console.log(JSON.stringify(message.content, null, 2));
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "tools": [
        {
            "name": "get_weather",
            "description": "Get weather information for a specified city",
            "input_schema": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "City name"
                    }
                },
                "required": ["city"]
            }
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What's the weather like in Hangzhou today?"
        }
    ]
}'

Caché de prompts

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

# Simulate code repository content. Must reach minimum cacheable length (1024 tokens)
long_text_content = "<Your Code Here>" * 400

def get_completion(user_input):
    response = client.messages.create(
        # Choose a model that supports prompt caching
        model="qwen3.8-max",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": long_text_content,
                # Add cache_control on a text block to mark a cache breakpoint. Can also be placed on content blocks in the messages array
                "cache_control": {"type": "ephemeral"},
            }
        ],
        messages=[
            {"role": "user", "content": user_input},
        ],
    )
    return response

# First request: Create cache
first = get_completion("What does this code do?")
print(f"Cache creation tokens: {first.usage.cache_creation_input_tokens}")
print(f"Cache read tokens: {first.usage.cache_read_input_tokens}")
print("=" * 20)
# Second request: Same long content, different question -> Cache hit
second = get_completion("How can this code be optimized?")
print(f"Cache creation tokens: {second.usage.cache_creation_input_tokens}")
print(f"Cache read tokens: {second.usage.cache_read_input_tokens}")
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

// Simulate code repository content. Must reach minimum cacheable length (1024 tokens)
const longTextContent = "<Your Code Here>".repeat(400);

async function getCompletion(userInput) {
  return client.messages.create({
    // Choose a model that supports prompt caching
    model: "qwen3.8-max",
    max_tokens: 1024,
    system: [
      {
        type: "text",
        text: longTextContent,
        // Add cache_control on a text block to mark a cache breakpoint. Can also be placed on content blocks in the messages array
        cache_control: { type: "ephemeral" },
      },
    ],
    messages: [{ role: "user", content: userInput }],
  });
}

// First request: Create cache
const first = await getCompletion("What does this code do?");
console.log(`Cache creation tokens: ${first.usage.cache_creation_input_tokens}`);
console.log(`Cache read tokens: ${first.usage.cache_read_input_tokens}`);
console.log("=".repeat(20));
// Second request: Same long content, different question -> Cache hit
const second = await getCompletion("How can this code be optimized?");
console.log(`Cache creation tokens: ${second.usage.cache_creation_input_tokens}`);
console.log(`Cache read tokens: ${second.usage.cache_read_input_tokens}`);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "qwen3.8-max",
    "max_tokens": 1024,
    "system": [
      {
        "type": "text",
        "text": "<Place cacheable content here with at least 1024 tokens>",
        "cache_control": {"type": "ephemeral"}
      }
    ],
    "messages": [
      {"role": "user", "content": "What does this code do?"}
    ]
}'

Salidas estructuradas

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

message = client.messages.create(
    model="deepseek-v4-pro",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "Extract key info from this email: John Smith (john@example.com) is interested in the Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
        }
    ],
    extra_body={
        "output_config": {
            "format": {
                "type": "json_schema",
                "schema": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string"},
                        "email": {"type": "string"},
                        "plan_interest": {"type": "string"},
                        "demo_requested": {"type": "boolean"}
                    },
                    "required": ["name", "email", "plan_interest", "demo_requested"],
                    "additionalProperties": False
                }
            }
        }
    },
)

# deepseek-v4-pro returns a thinking block; find the text content block
text_block = next(block for block in message.content if block.type == "text")
print(text_block.text)
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

async function main() {
  // output_config is a Model Studio platform extension parameter, pass via body
  const message = await (anthropic.messages.create as Function)({
    model: "deepseek-v4-pro",
    max_tokens: 1024,
    messages: [{
      role: "user",
      content: "Extract key info from this email: John Smith (john@example.com) is interested in the Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
    }],
    output_config: {
      format: {
        type: "json_schema",
        schema: {
          type: "object",
          properties: {
            name: { type: "string" },
            email: { type: "string" },
            plan_interest: { type: "string" },
            demo_requested: { type: "boolean" }
          },
          required: ["name", "email", "plan_interest", "demo_requested"],
          additionalProperties: false
        }
      }
    }
  });

  // deepseek-v4-pro returns a thinking block; find the text content block
  const textBlock = message.content.find(
    (block: { type: string }) => block.type === "text"
  );
  console.log(textBlock?.text);
}

main().catch(console.error);
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $DASHSCOPE_API_KEY" \
  -d '{
    "model": "deepseek-v4-pro",
    "max_tokens": 1024,
    "messages": [
        {
            "role": "user",
            "content": "Extract key info from this email: John Smith (john@example.com) is interested in the Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
        }
    ],
    "output_config": {
        "format": {
            "type": "json_schema",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "email": {"type": "string"},
                    "plan_interest": {"type": "string"},
                    "demo_requested": {"type": "boolean"}
                },
                "required": ["name", "email", "plan_interest", "demo_requested"],
                "additionalProperties": false
            }
        }
    }
}'

Respuesta sin streaming

id string

Identificador único del mensaje.

type string

Valor fijo: message.

role string

Valor fijo: assistant.

model string

El modelo utilizado para la generación.

content array

La matriz de contenido.

Tipos de elementos de la matriz content

Texto

Propiedades

type string

Valor fijo: text.

text string

La respuesta de texto generada por el modelo.

Pensamiento (devuelto cuando el Pensamiento Extendido está habilitado)

Propiedades

type string

Valor fijo: thinking.

thinking string

El razonamiento del modelo antes de la respuesta final.

signature string

Actualmente fijado como una cadena vacía.

Uso de herramientas (escenario de llamada a función)

Propiedades

type string

Valor fijo: tool_use.

id string

Identificador único de llamada a herramienta, utilizado para coincidir con el tool_result.

name string

El nombre de la herramienta llamada.

input object

Los parámetros de entrada de la llamada a la herramienta.

stop_reason string

Motivo por el que se detuvo la generación. Valores válidos: end_turn (finalización normal), max_tokens (límite de tokens alcanzado), tool_use (llamada a herramienta).

stop_sequence string

Siempre null.

usage object

Estadísticas de uso de tokens.

NotaEn llamadas en streaming, el campo usage del evento message_start contiene solo input_tokens y output_tokens. Los cuatro campos completos se devuelven en el evento message_delta.

Propiedades

input_tokens integer

Tokens de entrada.

output_tokens integer

Tokens de salida.

cache_creation_input_tokens integer

Tokens consumidos para la creación de caché.

cache_read_input_tokens integer

Tokens consumidos por lecturas de caché.

Ejemplo de respuesta
{
  "id": "msg_e2898f19-fc0e-4cb3-bd9b-5b7dc4ea3bc9",
  "type": "message",
  "role": "assistant",
  "model": "qwen3.8-max",
  "content": [
    {
      "type": "thinking",
      "thinking": "Let me analyze this problem...",
      "signature": ""
    },
    {
      "type": "text",
      "text": "Hello! I am Qwen..."
    }
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 22,
    "output_tokens": 223,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 0
  }
}

Respuesta en streaming

message_start

Primer evento de flujo, marca el inicio del mensaje.

Propiedades

type string

Valor fijo: message_start.

message object

El objeto de mensaje inicial. content es un arreglo vacío, y usage contiene solo input_tokens y output_tokens.

content_block_start

Marca el inicio de un bloque de contenido.

Propiedades

type string

Valor fijo: content_block_start.

index integer

Índice basado en 0 correspondiente a la posición en el arreglo content.

content_block object

El objeto inicial del bloque de contenido. El valor de type es text, thinking o tool_use. Para el tipo tool_use, el campo input es un objeto vacío en este evento, y los parámetros de entrada completos se ensamblan a partir de los deltas content_block_delta subsiguientes.

content_block_delta

Actualización incremental del bloque de contenido. Se envían múltiples deltas por bloque.

Propiedades

type string

Valor fijo: content_block_delta.

index integer

El índice del bloque de contenido asociado.

delta object

Objeto delta. Valores de type:

  • text_delta: Delta de texto, que contiene el campo text.
  • thinking_delta: Delta de pensamiento, que contiene el campo thinking.
  • signature_delta: Delta de firma, que contiene el campo signature (actualmente fijado como una cadena vacía).
  • input_json_delta: Delta de parámetro de entrada de llamada a herramienta, que contiene el campo partial_json.
content_block_stop

Marca el final de un bloque de contenido.

Propiedades

type string

Valor fijo: content_block_stop.

index integer

El índice del bloque de contenido finalizado.

message_delta

Enviado después de que terminan todos los bloques de contenido. Contiene el motivo de detención y el uso final de tokens.

Propiedades

type string

Valor fijo: message_delta.

delta object

Contiene stop_reason y stop_sequence. Para valores válidos, consulte la tabla de Respuesta sin streaming anterior.

usage object

Estadísticas completas de uso de tokens, incluyendo input_tokens, output_tokens, cache_creation_input_tokens y cache_read_input_tokens.

message_stop

Evento final, marca el fin del mensaje.

Propiedades

type string

Valor fijo: message_stop.

Además, las respuestas en streaming envían periódicamente eventos ping ({"type":"ping"}) para mantener activa la conexión. Los clientes pueden ignorarlos.

Ejemplo de respuesta en streaming
{"type":"message_start","message":{"id":"msg_xxx","type":"message","role":"assistant","model":"qwen3.8-max","content":[],"usage":{"input_tokens":15,"output_tokens":0}}}
{"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"Here's a thinking process:\n\n1. **Analyze User Input:**\n   - **Topic:** Artificial Intelligence (AI)\n   - **Request:** Give a brief introduction to artificial intelligence."}}
{"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":""}}
{"type":"content_block_stop","index":0}
{"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}
{"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"Artificial intelligence (AI) is an important branch of computer science..."}}
{"type":"content_block_stop","index":1}
{"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":15,"output_tokens":1078,"cache_creation_input_tokens":0,"cache_read_input_tokens":0}}
{"type":"message_stop"}

FAQ

Después de configurar Claude Desktop o Claude Code, la prueba de conexión falla conModel discovery — Gateway /v1/models returned HTTP 404, o la URL de solicitud contiene/v1/v1/models. ¿Cómo lo soluciono?

La función de descubrimiento de modelos de clientes como Claude Desktop y Claude Code agrega automáticamente /v1/models a la URL base configurada. Verifique los siguientes dos puntos:

  • No termine la URL base con/v1/: debe terminar en /apps/anthropic (por ejemplo, para China (Beijing) use https://dashscope.aliyuncs.com/apps/anthropic; consulte la información de endpoints anterior para otras regiones). Si introduce erróneamente .../apps/anthropic/v1/, el cliente añade /v1/models y produce la ruta duplicada /v1/v1/models, que devuelve HTTP 404. Por lo tanto, cuando obtenga un error 404, verifique primero si la URL de solicitud real contiene una ruta /v1/v1/ duplicada; de ser así, elimine la parte final /v1/ de la URL base.
  • Agregar modelos manualmente para omitir la detección: el endpoint compatible con Anthropic de Model Studio proporciona únicamente la Messages API (/v1/messages) y no ofrece un endpoint de lista de modelos (/v1/models), por lo que la solicitud de detección de modelos también devuelve 404. Agregue modelos manualmente (por ejemplo, qwen3.7-plus) en la sección Models del cliente para omitir la detección automática.