All Products
Search
Document Center

Alibaba Cloud Model Studio:Pesan yang Kompatibel dengan Anthropic

Last Updated:Sep 02, 2026

Migrasikan aplikasi Anthropic Anda ke Model Studio dengan mengubah tiga pengaturan. Topik ini mencakup parameter permintaan dan respons beserta contoh kode.

Untuk memigrasikan aplikasi Anthropic yang sudah ada ke Model Studio, ubah pengaturan berikut:

  • api_key: Ganti dengan Kunci API Model Studio.
  • base_url: Ganti dengan titik akhir Model Studio yang tercantum di bawah.
  • model: Ganti dengan nama model yang didukung, seperti qwen3.7-plus.

PentingAlibaba Cloud Model Studio telah merilis domain khusus ruang kerja untuk wilayah China (Beijing), Singapura, dan China (Hong Kong). Domain khusus baru ini memberikan performa lebih unggul dan stabilitas lebih tinggi untuk permintaan inferensi. Kami merekomendasikan migrasi ke domain baru berikut:

  • China (Beijing): dari https://dashscope.aliyuncs.com ke https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapura: dari https://dashscope-intl.aliyuncs.com ke https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
  • China (Hong Kong): dari https://cn-hongkong.dashscope.aliyuncs.com ke https://{WorkspaceId}.cn-hongkong.maas.aliyuncs.com

{WorkspaceId} adalah ID ruang kerja Anda, yang dapat ditemukan pada halaman Detail Ruang Kerja di Konsol Alibaba Cloud Model Studio. Domain lama tetap berfungsi penuh.

Singapura

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

URL permintaan 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 permintaan HTTP: POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic/v1/messages

Jerman (Frankfurt)

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

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

AS (Virginia)

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

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

Jepang (Tokyo)

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

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

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

Otentikasi: Masukkan Kunci API Model Studio Anda di header x-api-key atau header Authorization: Bearer.

Isi Permintaan

model string (Wajib)

Nama model. Model yang didukung:

Model yang Didukung

Qwen-Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3.6-max-preview, qwen3-max, qwen3-max-2026-01-23, qwen3-max-preview

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-plus-2025-09-11

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-Turbo: qwen-turbo

Qwen-Coder: qwen3-coder-next, qwen3-coder-plus, qwen3-coder-plus-2025-09-23, qwen3-coder-flash

Qwen-VL: qwen3-vl-plus, qwen3-vl-flash, qwen-vl-max, qwen-vl-plus

Model Open-Source Qwen: 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

Model Pihak Ketiga

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

max_tokens integer (Wajib)

  • Untuk model deepseek-v4-pro, deepseek-v4-pro-0813, deepseek-v4-flash, deepseek-v4-flash-0731, qwen3.8-max, dan qwen3.8-flash: max_tokens adalah jumlah maksimum token total untuk konten balasan dan konten rantai-pikiran. Generasi berhenti lebih awal ketika output model melebihi nilai ini, dan stop_reason bernilai max_tokens.

    max_tokens membatasi panjang gabungan konten balasan dan proses berpikir. Saat rantai-pikiran diperluas diaktifkan, max_tokens > thinking.budget_tokens

  • Untuk glm-5.2: Jika parameter thinking.budget_tokens tidak diberikan, max_tokens adalah jumlah maksimum token total untuk konten balasan dan konten rantai-pikiran. Generasi berhenti lebih awal ketika output model melebihi nilai ini, dan stop_reason bernilai max_tokens. Jika parameter thinking.budget_tokens diberikan, max_tokens hanya membatasi jumlah maksimum token untuk konten balasan, sedangkan token berpikir dikontrol secara terpisah oleh thinking.budget_tokens.

  • Untuk model lainnya: max_tokens membatasi jumlah maksimum token untuk konten balasan. Jika konten yang dihasilkan melebihi nilai ini, generasi berhenti lebih awal dan stop_reason bernilai max_tokens.

    max_tokens tidak membatasi panjang proses berpikir. Saat rantai-pikiran diperluas diaktifkan, token berpikir dikontrol secara terpisah oleh thinking.budget_tokens.

system string atau array (Opsional)

Prompt sistem yang menentukan perilaku model. system merupakan parameter tingkat atas — array messages tidak menerima peran system.

String setara dengan satu blok type="text". Gunakan array untuk menandai titik pemutusan cache prompt.

Properti

type string (Wajib)

Nilai tetap: text.

text string (Wajib)

Teks prompt sistem.

cache_control objek (Opsional)

Titik pemutusan cache prompt. Pada cache hit, permintaan selanjutnya ditagih dengan laju baca cache. Hanya berisi properti type dengan nilai tetap ephemeral.

messages array (Wajib)

Array pesan, disusun secara bergantian dalam giliran user/assistant.

Elemen array messages

role string (Wajib)

Peran pesan. Nilai valid: user, assistant.

content string atau array (Wajib)

Berupa string teks biasa atau array konten terstruktur. String setara dengan satu blok content dengan type="text".

Jenis elemen array content

Teks

Properti

type string (Wajib)

Nilai tetap: text.

text string (Wajib)

Konten teks.

cache_control objek (Opsional)

Titik pemutusan cache prompt. Hanya berisi properti type dengan nilai tetap ephemeral.

Gambar (memerlukan model vision)

Properti

type string (Wajib)

Nilai tetap: image.

source objek (Wajib)

Sumber data gambar.

Properti

type string (Wajib)

Nilai valid: url (URL gambar publik), base64 (data terenkripsi Base64).

url string

URL publik gambar. Wajib jika type bernilai url.

media_type string

Tipe MIME gambar, seperti image/jpeg. Wajib jika type bernilai base64.

data string

Data gambar terenkripsi Base64. Wajib jika type bernilai base64.

Video (memerlukan model vision)

Properti

type string (Wajib)

Nilai tetap: video.

source objek (Wajib)

Sumber data video.

Properti

type string (Wajib)

Nilai valid: url (URL video publik), base64 (data terenkripsi Base64).

url string

URL publik video. Wajib jika type bernilai url.

media_type string

Tipe MIME video, seperti video/mp4. Wajib jika type bernilai base64.

data string

Data video terenkripsi Base64. Wajib jika type bernilai base64.

Penggunaan tool (peran assistant; instruksi pemanggilan tool yang dikembalikan oleh model)

Properti

type string (Wajib)

Nilai tetap: tool_use.

id string (Wajib)

Identifier unik pemanggilan tool, digunakan untuk mengaitkan hasil dalam tool_result berikutnya.

name string (Wajib)

Nama tool yang dipanggil.

input objek (Wajib)

Parameter input pemanggilan tool. Strukturnya ditentukan oleh input_schema tool yang sesuai dalam tools.

cache_control objek (Opsional)

Titik pemutusan cache prompt. Hanya berisi properti type dengan nilai tetap ephemeral. Konten pemanggilan tool berpartisipasi dalam prefiks cache.

Hasil tool (peran user; hasil eksekusi tool yang dikirim kembali ke model)

Properti

type string (Wajib)

Nilai tetap: tool_result.

tool_use_id string (Wajib)

Bersesuaian dengan id dalam blok tool_use.

content string (Wajib)

Konten yang dikembalikan oleh tool.

cache_control objek (Opsional)

Titik pemutusan cache prompt. Hanya berisi properti type dengan nilai tetap ephemeral.

stream boolean (Opsional)

Apakah akan mengaktifkan streaming. Nilai default: false.

temperature number (Opsional)

Mengontrol keragaman teks yang dihasilkan. Rentang nilai: [0, 2). Nilai yang lebih tinggi menghasilkan respons yang lebih acak.

CatatanRentang ini berbeda dari rentang resmi Anthropic yaitu [0.0, 1.0]. Saat memigrasikan dari Anthropic, pastikan untuk memverifikasi nilai parameter ini.

top_p number (Opsional)

Ambang batas probabilitas pengambilan sampel nucleus.

Kedua parameter temperature dan top_p dapat mengontrol keragaman teks yang dihasilkan. Kami merekomendasikan hanya mengatur salah satunya. Untuk informasi lebih lanjut, lihat Ikhtisar.

top_k integer (Opsional)

Ukuran kumpulan kandidat selama pengambilan sampel.

stop_sequences array (Opsional)

Urutan teks yang memicu penghentian generasi. Output berakhir sebelum urutan yang cocok.

CatatanSetelah pencocokan, stop_reason dalam respons tetap bernilai end_turn, dan respons tidak menyertakan urutan yang cocok.

thinking objek (Opsional)

Konfigurasi rantai-pikiran diperluas. Saat diaktifkan, model melakukan penalaran sebelum merespons, dan respons mencakup blok konten bertipe thinking. Tidak semua model mendukung mode berpikir.

Properti

type string (Wajib)

Nilai valid: enabled (aktifkan mode berpikir), disabled (nonaktifkan mode berpikir).

budget_tokens integer (Opsional, akan ditinggalkan)

Parameter ini akan ditinggalkan. Untuk integrasi baru, gunakan effort.

Token maksimum untuk proses berpikir. Parameter ini terpisah dari max_tokens: ia membatasi bagian berpikir, sedangkan max_tokens membatasi balasan akhir. Anggaran token yang lebih besar memungkinkan analisis lebih menyeluruh terhadap pertanyaan kompleks. Berlaku saat type bernilai enabled.

tools array (Opsional)

Definisi tool untuk pemanggilan fungsi.

Elemen array tools

name string (Wajib)

Nama tool.

description string (Opsional)

Deskripsi fungsi tool.

input_schema objek (Wajib)

Definisi skema JSON parameter input tool.

tool_choice objek (Opsional)

Strategi pemilihan tool:

  • {"type": "auto"}: Model memutuskan apakah akan memanggil tool (default).
  • {"type": "any"}: Memaksa model untuk memanggil tool apa pun.
  • {"type": "none"}: Melarang model memanggil tool.
  • {"type": "tool", "name": "tool_name"}: Memaksa model untuk memanggil tool tertentu.

output_config objek (Opsional)

Properti

effort string (Opsional)

Mengontrol intensitas inferensi model. Nilai valid dan nilai default bervariasi berdasarkan model.

  • glm-5.2, deepseek-v4-pro, dan deepseek-v4-flash: Nilai default: max

    Nilai valid:

    • high: Inferensi intensitas tinggi
    • max: Inferensi intensitas maksimum

    Nilai low dan medium dipetakan ke high, sedangkan xhigh dipetakan ke max.

  • qwen3.8-max/qwen3.8-flash: Nilai default: xhigh

    Nilai valid:

    • xhigh: Inferensi intensitas tinggi
    • medium: Inferensi intensitas menengah
    • low: Inferensi intensitas rendah

    Nilai max dan high dipetakan ke xhigh.

format objek (Opsional)

Konfigurasi output terstruktur. Saat diaktifkan, model mengembalikan string JSON. Perilaku bervariasi berdasarkan model:

  • Output terstruktur ketat: Tersedia untuk model seri qwen3.8, qwen3.7, deepseek, dan glm. Model secara ketat mengikuti skema JSON yang diberikan, menjamin jenis bidang dan hierarki yang sama.
  • Output terstruktur reguler: Untuk semua model lainnya, batasan bidang skema tidak diberlakukan — API secara otomatis kembali ke mode JSON biasa (hanya menjamin bahwa output adalah string JSON yang valid). Dalam mode fallback ini, permintaan harus memenuhi kedua syarat berikut: (1) parameter output_config diberikan secara eksplisit; (2) konten system atau messages mengandung kata kunci "JSON" (tidak memperhatikan huruf besar/kecil). Jika kata kunci "JSON" tidak ada, API akan melempar error: 'messages' must contain the word 'json' in some form.

Properti

type string (Wajib)

Nilai tetap: json_schema.

schema objek (Wajib)

Objek skema JSON yang mengikuti spesifikasi standar JSON Schema. Harus mencakup type (tipe data), properties (definisi bidang), required (array nama bidang wajib), dan additionalProperties (harus diatur ke false).

Panggilan Dasar

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"}
}'

Streaming

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"}
}'

Pemikiran Lanjutan

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."
        }
    ]
}'

Pemahaman Gambar

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"}
}'

Pemahaman 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"}
}'

pemanggilan fungsi

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?"
        }
    ]
}'

cache prompt

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?"}
    ]
}'

Output terstruktur

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
            }
        }
    }
}'

Respons Non-streaming

id string

Identifier pesan unik.

type string

Nilai tetap: message.

role string

Nilai tetap: assistant.

model string

Model yang digunakan untuk generasi.

content array

Array konten.

Tipe Elemen Array Konten

Teks

Properti

type string

Nilai tetap: text.

text string

Teks respons yang dihasilkan oleh model.

Thinking (dikembalikan saat Extended Thinking diaktifkan)

Properti

type string

Nilai tetap: thinking.

thinking string

Penalaran model sebelum respons akhir.

signature string

Saat ini tetap sebagai string kosong.

Penggunaan alat (skenario pemanggilan fungsi)

Properti

type string

Nilai tetap: tool_use.

id string

Identifier unik pemanggilan tool, digunakan untuk mencocokkan tool_result.

name string

Nama tool yang dipanggil.

input objek

Parameter input pemanggilan tool.

stop_reason string

Alasan penghentian generasi. Nilai valid: end_turn (penyelesaian normal), max_tokens (batas token tercapai), tool_use (pemanggilan tool).

stop_sequence string

Selalu null.

usage objek

Statistik penggunaan token.

CatatanDalam panggilan streaming, bidang usage pada event message_start hanya berisi input_tokens dan output_tokens. Keempat bidang lengkap dikembalikan dalam event message_delta.

Properti

input_tokens integer

Token input.

output_tokens integer

Token output.

cache_creation_input_tokens integer

Token yang dikonsumsi untuk pembuatan cache.

cache_read_input_tokens integer

Token yang dikonsumsi dari pembacaan cache.

Contoh Respons
{
  "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
  }
}

Respons Streaming

message_start

Event stream pertama, menandai awal pesan.

Properti

type string

Nilai tetap: message_start.

message objek

Objek pesan awal. content adalah array kosong, dan usage hanya berisi input_tokens dan output_tokens.

content_block_start

Menandai awal blok konten.

Properti

type string

Nilai tetap: content_block_start.

index integer

Indeks berbasis 0 yang bersesuaian dengan posisi dalam array content.

content_block objek

Objek awal blok konten. Nilai type adalah text, thinking, atau tool_use. Untuk tipe tool_use, bidang input adalah objek kosong dalam event ini, dan parameter input lengkap dirakit dari delta content_block_delta berikutnya.

content_block_delta

Pembaruan inkremental blok konten. Beberapa delta dikirim per blok.

Properti

type string

Nilai tetap: content_block_delta.

index integer

Indeks blok konten terkait.

delta objek

Objek delta. Nilai type:

  • text_delta: Delta teks, berisi bidang text.
  • thinking_delta: Delta rantai-pikiran, berisi bidang thinking.
  • signature_delta: Delta signature, berisi bidang signature (saat ini tetap sebagai string kosong).
  • input_json_delta: Delta parameter input pemanggilan tool, berisi bidang partial_json.
content_block_stop

Menandai akhir blok konten.

Properti

type string

Nilai tetap: content_block_stop.

index integer

Indeks blok konten yang berakhir.

message_delta

Dikirim setelah semua blok konten berakhir. Berisi alasan berhenti dan penggunaan token akhir.

Properti

type string

Nilai tetap: message_delta.

delta objek

Berisi stop_reason dan stop_sequence. Untuk nilai valid, lihat tabel Respons Non-streaming di atas.

usage objek

Statistik penggunaan token lengkap, termasuk input_tokens, output_tokens, cache_creation_input_tokens, dan cache_read_input_tokens.

message_stop

Event terakhir, menandai akhir pesan.

Properti

type string

Nilai tetap: message_stop.

Selain itu, respons streaming secara berkala mengirim event ping ({"type":"ping"}) untuk menjaga koneksi tetap aktif. Klien dapat mengabaikannya.

Contoh respons 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

Setelah mengonfigurasi Claude Desktop atau Claude Code, uji koneksi gagal denganModel discovery — Gateway /v1/models returned HTTP 404, atau URL permintaan berisi/v1/v1/models. Bagaimana cara memperbaikinya?

Fitur penemuan model klien seperti Claude Desktop dan Claude Code secara otomatis menambahkan /v1/models ke URL dasar yang dikonfigurasi. Periksa dua hal berikut:

  • Jangan mengakhiri URL dasar dengan/v1/: URL harus berakhir di /apps/anthropic (misalnya, untuk China (Beijing) gunakan https://dashscope.aliyuncs.com/apps/anthropic; lihat informasi titik akhir di atas untuk wilayah lainnya). Jika Anda salah memasukkan .../apps/anthropic/v1/, klien akan menambahkan /v1/models dan menghasilkan path duplikat /v1/v1/models, yang mengembalikan HTTP 404. Oleh karena itu, saat Anda mendapatkan 404, pertama-tama periksa apakah URL permintaan aktual berisi /v1/v1/ yang duplikat; jika iya, hapus /v1/ di akhir URL dasar.
  • Tambahkan model secara manual untuk melewati penemuan: Titik akhir kompatibel Anthropic Model Studio hanya menyediakan API Messages (/v1/messages) dan tidak menyediakan titik akhir daftar model (/v1/models), sehingga permintaan penemuan model mengembalikan 404. Tambahkan model secara manual (misalnya, qwen3.7-plus) di bagian Models pada klien untuk melewati penemuan otomatis.