All Products
Search
Document Center

Alibaba Cloud Model Studio:Pesan yang Kompatibel dengan Anthropic

Last Updated:Jun 29, 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.

Penting

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 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://dashscope-us.aliyuncs.com/apps/anthropic

URL permintaan HTTP: POST https://dashscope-us.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: Sertakan Kunci API Model Studio Anda di header x-api-key atau header Authorization: Bearer.

Body Permintaan

Panggilan Dasar

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

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

print(message.content[0].text)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

async function main() {
  const message = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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.7-plus",
    "max_tokens": 1024,
    "system": "You are a helpful assistant",
    "messages": [
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    "thinking": {"type": "disabled"}
}'

Streaming

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.7-plus",
    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)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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.7-plus",
    "max_tokens": 1024,
    "stream": true,
    "messages": [
        {
            "role": "user",
            "content": "Give a brief introduction to artificial intelligence."
        }
    ],
    "thinking": {"type": "disabled"}
}'

Extended Thinking

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.7-plus",
    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)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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.7-plus",
    "max_tokens": 2048,
    "stream": true,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 1024
    },
    "messages": [
        {
            "role": "user",
            "content": "Analyze the future prospects of quantum computing."
        }
    ]
}'

Pemahaman Gambar

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.7-plus",
    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)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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.7-plus",
    "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

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

stream = client.messages.create(
    model="qwen3.7-plus",
    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)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const stream = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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.7-plus",
    "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

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    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.7-plus",
    max_tokens=1024,
    tools=tools,
    messages=[
        {
            "role": "user",
            "content": "What's the weather like in Hangzhou today?"
        }
    ]
)

print(message.content)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

async function main() {
  const anthropic = new Anthropic({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
  });

  const message = await anthropic.messages.create({
    model: "qwen3.7-plus",
    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

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

Peng-cache-an Prompt

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
)

# Simulasikan konten repositori kode. Harus mencapai panjang minimum yang dapat di-cache (1024 token)
long_text_content = "<Your Code Here>" * 400


def get_completion(user_input):
    response = client.messages.create(
        # Pilih model yang mendukung peng-cache-an prompt
        model="qwen3.7-plus",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": long_text_content,
                # Tambahkan cache_control pada blok teks untuk menandai titik pemutusan cache. Juga dapat ditempatkan pada blok konten dalam array messages
                "cache_control": {"type": "ephemeral"},
            }
        ],
        messages=[
            {"role": "user", "content": user_input},
        ],
    )
    return response


# Permintaan pertama: Buat 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)
# Permintaan kedua: Konten panjang yang sama, pertanyaan berbeda -> 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}")

TypeScript

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

// Simulasikan konten repositori kode. Harus mencapai panjang minimum yang dapat di-cache (1024 token)
const longTextContent = "<Your Code Here>".repeat(400);

async function getCompletion(userInput) {
  return client.messages.create({
    // Pilih model yang mendukung peng-cache-an prompt
    model: "qwen3.7-plus",
    max_tokens: 1024,
    system: [
      {
        type: "text",
        text: longTextContent,
        // Tambahkan cache_control pada blok teks untuk menandai titik pemutusan cache. Juga dapat ditempatkan pada blok konten dalam array messages
        cache_control: { type: "ephemeral" },
      },
    ],
    messages: [{ role: "user", content: userInput }],
  });
}

// Permintaan pertama: Buat 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));
// Permintaan kedua: Konten panjang yang sama, pertanyaan berbeda -> 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

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.7-plus",
    "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

Python

import anthropic
import os

client = anthropic.Anthropic(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    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."
        }
    ],
    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
            }
        }
    },
)

print(message.content[0].text)

TypeScript

import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
});

async function main() {
  const message = await anthropic.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."
    }],
    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
        }
      }
    }
  });

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

main().catch(console.error);

curl

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

model string (Wajib)

Nama model. Model yang didukung:

Model yang Didukung

Qwen-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.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

Model Pihak Ketiga

deepseek-v4-pro, deepseek-v4-flash, 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)

Jumlah maksimum token untuk konten balasan. Jika konten yang dihasilkan melebihi nilai ini, proses generasi akan berhenti lebih awal dan stop_reason bernilai max_tokens.

max_tokens tidak membatasi panjang proses berpikir. Saat extended thinking diaktifkan, token berpikir dikontrol secara terpisah oleh thinking.budget_tokens.

system string atau array (Opsional)

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

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

Properti

type string (Wajib)

Nilai tetap: text.

text string (Wajib)

Teks prompt sistem.

cache_control object (Opsional)

Titik pemutusan peng-cache-an prompt. Saat terjadi cache hit, permintaan selanjutnya ditagih dengan laju baca cache. Hanya berisi type, yang nilainya tetap ephemeral.

messages array (Wajib)

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

Elemen array messages

role string (Wajib)

Peran pesan. Nilai yang valid: user, assistant.

content string atau array (Wajib)

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

Tipe Elemen Array Konten

Teks

Properti

type string (Wajib)

Nilai tetap: text.

text string (Wajib)

Konten teks.

cache_control object (Opsional)

Titik pemutusan peng-cache-an prompt. Hanya berisi type, yang nilainya tetap ephemeral.

Gambar (memerlukan model vision)

Properti

type string (Wajib)

Nilai tetap: image.

source object (Wajib)

Sumber data gambar.

Properti

type string (Wajib)

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

url string

URL publik gambar. Wajib saat type bernilai url.

media_type string

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

data string

Data gambar terenkripsi Base64. Wajib saat type bernilai base64.

Video (memerlukan model vision)

Properti

type string (Wajib)

Nilai tetap: video.

source object (Wajib)

Sumber data video.

Properti

type string (Wajib)

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

url string

URL publik video. Wajib saat type bernilai url.

media_type string

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

data string

Data video terenkripsi Base64. Wajib saat 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)

Identifikasi unik pemanggilan tool, digunakan untuk mengaitkan hasil pada tool_result berikutnya.

name string (Wajib)

Nama tool yang dipanggil.

input object (Wajib)

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

cache_control object (Opsional)

Titik pemutusan peng-cache-an prompt. Hanya berisi type, yang nilainya 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 object (Opsional)

Titik pemutusan peng-cache-an prompt. Hanya berisi type, yang nilainya tetap ephemeral.

stream boolean (Opsional)

Apakah streaming diaktifkan. Nilai default: false.

temperature number (Opsional)

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

Catatan

Rentang ini berbeda dari rentang resmi Anthropic yaitu [0.0, 1.0]. Saat memigrasikan dari Anthropic, verifikasi 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.

Catatan

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

thinking object (Opsional)

Konfigurasi extended thinking. 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 yang valid: enabled (aktifkan mode berpikir), disabled (nonaktifkan mode berpikir).

budget_tokens integer (Opsional)

Token maksimum untuk proses berpikir. Terpisah dari max_tokens: parameter ini membatasi bagian berpikir, sedangkan max_tokens membatasi balasan akhir. Anggaran yang lebih besar memungkinkan analisis lebih menyeluruh pada pertanyaan kompleks. Berlaku saat type bernilai enabled.

reasoning_effort string (Opsional)

Mengontrol intensitas penalaran model. Nilai yang valid: high, max. Nilai default: max. Model yang didukung: deepseek-v4-pro, deepseek-v4-flash.

Catatan

Saat diatur ke low atau medium, dipetakan ke high. Saat diatur ke xhigh, dipetakan ke max.

tools array (Opsional)

Definisi tool untuk pemanggilan fungsi.

Elemen array tools

name string (Wajib)

Nama tool.

description string (Opsional)

Deskripsi fungsi tool.

input_schema object (Wajib)

Definisi skema JSON untuk parameter input tool.

tool_choice object (Opsional)

Strategi pemilihan tool:

  • {"type": "auto"}: Model memutuskan apakah akan memanggil tool (default).

  • {"type": "any"}: Memaksa model memanggil tool apa pun.

  • {"type": "none"}: Melarang model memanggil tool.

  • {"type": "tool", "name": "tool_name"}: Memaksa model memanggil tool tertentu.

output_config object (Opsional)

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

  • Output terstruktur ketat: Tersedia untuk model seri deepseek dan glm. Model secara ketat mengikuti skema JSON yang diberikan, menjamin jenis bidang dan hierarki yang sama.

  • Output terstruktur reguler: Untuk semua model lain, 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 peka huruf besar/kecil). Jika kata kunci "JSON" tidak ada, API akan melemparkan error: 'messages' must contain the word 'json' in some form.

Properti

format object (Wajib)

Definisi format output.

Properti

type string (Wajib)

Nilai tetap: json_schema.

schema object (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).

Respons Non-streaming

Contoh Respons

{
  "id": "msg_e2898f19-fc0e-4cb3-bd9b-5b7dc4ea3bc9",
  "type": "message",
  "role": "assistant",
  "model": "qwen3.7-plus",
  "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
  }
}

id string

Identifikasi unik pesan.

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 model.

Berpikir (dikembalikan saat Extended Thinking diaktifkan)

Properti

type string

Nilai tetap: thinking.

thinking string

Proses penalaran model sebelum respons akhir.

signature string

Saat ini tetap sebagai string kosong.

Penggunaan tool (skenario pemanggilan fungsi)

Properti

type string

Nilai tetap: tool_use.

id string

Identifikasi unik pemanggilan tool, digunakan untuk mencocokkan tool_result.

name string

Nama tool yang dipanggil.

input object

Parameter input pemanggilan tool.

stop_reason string

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

stop_sequence string

Selalu null.

usage object

Statistik penggunaan token.

Catatan

Dalam panggilan streaming, field usage pada event message_start hanya berisi input_tokens dan output_tokens. Keempat field 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.

Respons Streaming

Contoh respons streaming

{"type":"message_start","message":{"id":"msg_xxx","type":"message","role":"assistant","model":"qwen3.7-plus","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"}

message_start

Event stream pertama, menandai awal pesan.

Properti

type string

Nilai tetap: message_start.

message object

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 object

Objek awal blok konten. Nilai type adalah text, thinking, atau tool_use. Untuk tipe tool_use, field 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 object

Objek delta. Nilai type:

  • text_delta: Delta teks, berisi field text.

  • thinking_delta: Delta berpikir, berisi field thinking.

  • signature_delta: Delta signature, berisi field signature (saat ini tetap sebagai string kosong).

  • input_json_delta: Delta parameter input pemanggilan tool, berisi field 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 penghentian dan penggunaan token akhir.

Properti

type string

Nilai tetap: message_delta.

delta object

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

usage object

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.