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:
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.
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.
systemstring 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
typestring(Obligatorio)
Valor fijo: text.
textstring(Obligatorio)
El texto del prompt del sistema.
cache_controlobject (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.
messagesarray(Obligatorio)
El arreglo de mensajes, organizado en turnos alternados de user/assistant.
Elemento de la matriz messages
rolestring(Obligatorio)
El rol del mensaje. Valores válidos: user, assistant.
contentstring 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
typestring(Obligatorio)
Valor fijo: text.
textstring(Obligatorio)
El contenido de texto.
cache_controlobject (Opcional)
Punto de interrupción de caché de prompts. Contiene solo type, fijado en ephemeral.
Imagen (requiere modelo de visión)
Propiedades
typestring(Obligatorio)
Valor fijo: image.
sourceobject(Obligatorio)
El origen de los datos de imagen.
Propiedades
typestring(Obligatorio)
Valores válidos: url (URL pública de imagen), base64 (codificado en Base64).
urlstring
La URL pública de la imagen. Obligatorio cuando type es url.
media_typestring
El tipo MIME de la imagen, como image/jpeg. Obligatorio cuando type es base64.
datastring
Los datos de imagen codificados en Base64. Obligatorios cuando type es base64.
Video (requiere modelo de visión)
Propiedades
typestring(Obligatorio)
Valor fijo: video.
sourceobject(Obligatorio)
El origen de los datos de video.
Propiedades
typestring(Obligatorio)
Valores válidos: url (URL pública de video), base64 (codificado en Base64).
urlstring
La URL pública del video. Obligatorio cuando type es url.
media_typestring
El tipo MIME del video, como video/mp4. Obligatorio cuando type es base64.
datastring
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
typestring(Obligatorio)
Valor fijo: tool_use.
idstring(Obligatorio)
El identificador único de la llamada a herramienta, utilizado para asociar el resultado en un tool_result posterior.
namestring(Obligatorio)
El nombre de la herramienta llamada.
inputobject(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_controlobject (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
typestring(Obligatorio)
Valor fijo: tool_result.
tool_use_idstring(Obligatorio)
Corresponde al id en el bloque tool_use.
contentstring(Obligatorio)
Contenido devuelto por la herramienta.
cache_controlobject (Opcional)
Punto de interrupción de caché de prompts. Contiene solo type, fijado en ephemeral.
streamboolean (Opcional)
Si se habilita el streaming. Valor predeterminado: false.
temperaturenumber (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_pnumber (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_kinteger (Opcional)
Tamaño del conjunto de candidatos durante el muestreo.
stop_sequencesarray (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.
thinkingobject (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
typestring(Obligatorio)
Valores válidos: enabled (habilitar modo de pensamiento), disabled (deshabilitar modo de pensamiento).
budget_tokensinteger (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.
toolsarray (Opcional)
Definiciones de herramientas para llamada de funciones.
Elemento de la matriz tools
namestring(Obligatorio)
El nombre de la herramienta.
descriptionstring (Opcional)
La descripción de la función de la herramienta.
input_schemaobject(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_choiceobject (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_configobject (Opcional)
Propiedades
effortstring (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.
formatobject (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
typestring(Obligatorio)
Valor fijo: json_schema.
schemaobject(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);
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
idstring
Identificador único del mensaje.
typestring
Valor fijo: message.
rolestring
Valor fijo: assistant.
modelstring
El modelo utilizado para la generación.
contentarray
La matriz de contenido.
Tipos de elementos de la matriz content
Texto
Propiedades
typestring
Valor fijo: text.
textstring
La respuesta de texto generada por el modelo.
Pensamiento (devuelto cuando el Pensamiento Extendido está habilitado)
Propiedades
typestring
Valor fijo: thinking.
thinkingstring
El razonamiento del modelo antes de la respuesta final.
signaturestring
Actualmente fijado como una cadena vacía.
Uso de herramientas (escenario de llamada a función)
Propiedades
typestring
Valor fijo: tool_use.
idstring
Identificador único de llamada a herramienta, utilizado para coincidir con el tool_result.
namestring
El nombre de la herramienta llamada.
inputobject
Los parámetros de entrada de la llamada a la herramienta.
stop_reasonstring
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_sequencestring
Siempre null.
usageobject
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.
Primer evento de flujo, marca el inicio del mensaje.
Propiedades
typestring
Valor fijo: message_start.
messageobject
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
typestring
Valor fijo: content_block_start.
indexinteger
Índice basado en 0 correspondiente a la posición en el arreglo content.
content_blockobject
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
typestring
Valor fijo: content_block_delta.
indexinteger
El índice del bloque de contenido asociado.
deltaobject
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
typestring
Valor fijo: content_block_stop.
indexinteger
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
typestring
Valor fijo: message_delta.
deltaobject
Contiene stop_reason y stop_sequence. Para valores válidos, consulte la tabla de Respuesta sin streaming anterior.
usageobject
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
typestring
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.