
Utiliser Qwen3.8 Max : Python, TypeScript et cURL
qwen3.8-max pour Chat Completions, Responses et Messages. L’URL de documentation conserve le slug Preview historique ; utilisez l’ID de production et exécutez un smoke test dans votre compte avant le trafic.Sortie QwenCloud et statut EvoLink
| Surface | ID | Statut |
|---|---|---|
| QwenCloud | qwen3.8-max | Flagship upstream officiel |
| Token Plan | qwen3.8-max-preview | Canal Preview |
| EvoLink | qwen3.8-max | Route de production disponible ; l’URL de documentation conserve le slug Preview |
Préparer la première requête
| Prérequis | Préparation | Pourquoi |
|---|---|---|
| Clé EvoLink | Créer dans le tableau des API Keys | Authentification Bearer |
| Base URL | https://direct.evolink.ai/v1 pour le texte | Sépare SDK et endpoint |
| URL multimodale | https://api.evolink.ai/v1 pour image, audio ou vidéo | Endpoint multimodal documenté |
| Variable modèle | ID exact affiché par EvoLink | Passage Preview–GA sans modifier le code |
| Smoke test | Une requête courte et déterministe | Vérifie auth, route, réponse et facturation |
| Fallback | Un modèle EvoLink déjà validé | Maintient le service lors d'un changement |
export EVOLINK_API_KEY="your-evolink-api-key"
export EVOLINK_BASE_URL="https://direct.evolink.ai/v1"
export EVOLINK_QWEN_MODEL="qwen3.8-max-preview"Arbre de décision du protocole
Chat pour une application OpenAI existante, Responses pour un nouvel agent avec outils ou état, Messages pour une stack Anthropic.
Existing OpenAI-compatible chat application?
├─ Yes → Chat Completions
└─ No
├─ New agent needs built-in tools or server-linked turns? → Responses
└─ Existing Anthropic Messages stack? → MessagesRemplacez la dernière valeur par l'ID exact d'EvoLink. Ne supposez pas qu'il sera identique à l'ID upstream.
Choisir Chat, Responses ou Messages
| Protocole | Endpoint | Point de départ | Différence |
|---|---|---|---|
| Chat Completions | /v1/chat/completions | Chats existants compatibles OpenAI | messages ; thinking dans reasoning_content |
| Responses | /v1/responses | Agents, outils et tours liés | input, previous_response_id, cache de session |
| Messages | /v1/messages | SDK Anthropic | system au niveau supérieur, max_tokens requis |
Choisissez Chat pour une application OpenAI existante, Responses pour les outils ou l'état serveur, Messages pour les blocs et événements Anthropic.
Premier appel cURL
curl --request POST \
--url "${EVOLINK_BASE_URL}/chat/completions" \
--header "Authorization: Bearer ${EVOLINK_API_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"model\": \"${EVOLINK_QWEN_MODEL}\",
\"messages\": [
{
\"role\": \"system\",
\"content\": \"You are a concise software architecture assistant.\"
},
{
\"role\": \"user\",
\"content\": \"Return three checks for a safe API rollout.\"
}
]
}"id, le model résolu, au moins un élément choices et l'usage. Conservez le modèle retourné comme preuve de résolution de l'alias.Python avec le SDK OpenAI
pip install openaiimport os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["EVOLINK_API_KEY"],
base_url=os.getenv("EVOLINK_BASE_URL", "https://direct.evolink.ai/v1"),
)
response = client.chat.completions.create(
model=os.environ["EVOLINK_QWEN_MODEL"],
messages=[
{
"role": "system",
"content": "You are a concise software architecture assistant.",
},
{
"role": "user",
"content": "Return three checks for a safe API rollout.",
},
],
)
print(response.choices[0].message.content)
print(response.model)Clé, Base URL et ID forment la frontière d'intégration. Modifiez d'abord la configuration, puis comparez sortie et comportement avant de changer prompts ou logique métier.
TypeScript
npm install openaiimport OpenAI from "openai";
const apiKey = process.env.EVOLINK_API_KEY;
const model = process.env.EVOLINK_QWEN_MODEL;
if (!apiKey || !model) {
throw new Error("EVOLINK_API_KEY and EVOLINK_QWEN_MODEL are required");
}
const client = new OpenAI({
apiKey,
baseURL: process.env.EVOLINK_BASE_URL ?? "https://direct.evolink.ai/v1",
});
const response = await client.chat.completions.create({
model,
messages: [
{
role: "system",
content: "You are a concise software architecture assistant.",
},
{
role: "user",
content: "Return three checks for a safe API rollout.",
},
],
});
console.log(response.choices[0].message.content);
console.log(response.model);Séparer Thinking et contenu final en streaming
reasoning_content et content séparément.import os
from openai import OpenAI
model = os.environ.get("EVOLINK_QWEN_MODEL")
if not model:
raise RuntimeError("EVOLINK_QWEN_MODEL is required")
client = OpenAI(
api_key=os.environ["EVOLINK_API_KEY"],
base_url=os.getenv("EVOLINK_BASE_URL", "https://direct.evolink.ai/v1"),
)
stream = client.chat.completions.create(
model=model,
messages=[
{"role": "user", "content": "Review this rollout plan for failure modes."}
],
stream=True,
extra_body={"enable_thinking": True},
)
for chunk in stream:
delta = chunk.choices[0].delta
reasoning = getattr(delta, "reasoning_content", None)
if reasoning:
print(reasoning, end="", flush=True)
if delta.content:
print(delta.content, end="", flush=True)EVOLINK_QWEN_MODEL au démarrage. Un fallback silencieux empêche d'auditer rollout et rollback.Responses pour outils et état multi-tour
input. EvoLink documente aussi previous_response_id et le header x-dashscope-session-cache: enable.curl --request POST \
--url "${EVOLINK_BASE_URL}/responses" \
--header "Authorization: Bearer ${EVOLINK_API_KEY}" \
--header "Content-Type: application/json" \
--header "x-dashscope-session-cache: enable" \
--data "{
\"model\": \"${EVOLINK_QWEN_MODEL}\",
\"input\": \"List the production checks for a model-route canary.\"
}"Responses : tour suivant et Session Cache
previous_response_id. Le header ne prouve pas un hit ; inspectez usage.curl --request POST \
--url "${EVOLINK_BASE_URL}/responses" \
--header "Authorization: Bearer ${EVOLINK_API_KEY}" \
--header "Content-Type: application/json" \
--header "x-dashscope-session-cache: enable" \
--data "{
\"model\": \"${EVOLINK_QWEN_MODEL}\",
\"previous_response_id\": \"resp_FROM_FIRST_CALL\",
\"input\": \"Turn those checks into a five-step canary plan.\"
}"id que si confidentialité et rétention autorisent les conversations liées côté serveur. La documentation actuelle indique sept jours ; revalidez ce contrat pour un workflow durable.Messages pour les stacks Anthropic
messages et exige max_tokens.curl --request POST \
--url "${EVOLINK_BASE_URL}/messages" \
--header "Authorization: Bearer ${EVOLINK_API_KEY}" \
--header "Content-Type: application/json" \
--data "{
\"model\": \"${EVOLINK_QWEN_MODEL}\",
\"max_tokens\": 1024,
\"system\": \"You are a concise software architecture assistant.\",
\"messages\": [
{
\"role\": \"user\",
\"content\": \"Return three checks for a safe API rollout.\"
}
]
}"Validation des tools, retries bornés et fallback
Les arguments sont non fiables : validez nom, schéma, autorisation et environnement avant tout effet.
import { z } from "zod";
const createCanarySchema = z.object({
workload: z.string().min(1).max(80),
trafficPercent: z.number().min(0.1).max(10),
});
function validateToolCall(name: string, rawArguments: string) {
if (name !== "create_canary") {
throw new Error(`Blocked unknown tool: ${name}`);
}
return createCanarySchema.parse(JSON.parse(rawArguments));
}Réessayez seulement timeout, connexion, 429 et 5xx transitoires avec une limite ; pas de 400/401/402 inchangé.
import os
import random
import time
from openai import APIConnectionError, APIStatusError, APITimeoutError, OpenAI
client = OpenAI(
api_key=os.environ["EVOLINK_API_KEY"],
base_url=os.getenv("EVOLINK_BASE_URL", "https://direct.evolink.ai/v1"),
)
def complete_with_fallback(messages):
models = [
os.environ["EVOLINK_QWEN_MODEL"],
os.environ["EVOLINK_FALLBACK_MODEL"],
]
for model in models:
for attempt in range(3):
try:
return client.chat.completions.create(
model=model,
messages=messages,
timeout=60,
)
except APIStatusError as error:
if error.status_code != 429 and error.status_code < 500:
raise
except (APIConnectionError, APITimeoutError):
pass
time.sleep((2 ** attempt) + random.random())
raise RuntimeError("Primary and fallback routes failed")Registre de validation en production
| Capacité | Statut | Preuve à enregistrer |
|---|---|---|
| Chat / Responses / Messages | Disponible ; valider | ID, modèle, HTTP, stop et usage |
| Streaming / Thinking | Disponible ; valider | Premier événement, final, raisonnement et contenu |
| Tools / Cache / Multimodal | Valider sur l’endpoint cible | Arguments, suite, usage cache et formats |
system, les content blocks, le cache et les événements Anthropic ; ne convertissez pas Chat mécaniquement.
Activer les fonctions progressivement
| Fonction | Chat | Responses | Messages | Contrôle |
|---|---|---|---|---|
| Thinking | enable_thinking; reasoning_content | reasoning.effort | blocs thinking | Qualité, latence, tokens |
| Streaming | stream: true; SSE | événements Responses | événements Anthropic | Coupures et sortie partielle |
| Outils | fonctions dans tools | outils intégrés et custom | blocs tool | Valider les arguments |
| Cache | cache_control | header de session | blocs cache_control | Inspecter l'usage |
| Multimodal | https://api.evolink.ai/v1 | URL multimodale | blocs image | Tester format et taille |
Ne copiez ni prix ni remises de cache QwenCloud : il s'agit d'un autre canal commercial. Utilisez le prix en direct de la page produit EvoLink.
Dépannage
| Symptôme | Cause probable | Action |
|---|---|---|
400 | Format ou champ incorrect | Revenir à l'exemple minimal |
401 | Token absent ou invalide | Vérifier clé et header |
402 | Crédits insuffisants | Vérifier le solde |
404 | Route, ID ou endpoint | Copier l'ID exact et vérifier le chemin |
429 | Rate limit | Backoff exponentiel avec jitter |
5xx | Erreur transitoire | Retry limité puis fallback |
| Texte vide avec thinking | Mauvais champ lu | Lire reasoning et contenu final |
Ne répétez pas 400, 401 ou 402 sans corriger la cause. Limitez les retries 429 et 5xx pour éviter qu'une boucle d'agent multiplie coût et charge.
Checklist de production
- Copier l'ID exact dans
EVOLINK_QWEN_MODEL. - Exécuter un appel texte court sans streaming et enregistrer modèle et usage.
- Tester séparément streaming, outils, thinking, cache et multimodal.
- Rejouer 20–50 tâches représentatives face à la baseline.
- Mesurer succès, latence acceptée, retries, tokens et correction humaine.
- Commencer en shadow traffic puis petit canary.
- Garder un fallback validé derrière la même passerelle.
- Revenir en arrière si erreur, latence, coût ou qualité franchissent leurs seuils.
Vérifier la route avant le premier appel en production
Ne vous inscrivez pas sur la seule foi d’une annonce. Validez d’abord ces points, puis créez une clé API si la route correspond à votre charge.
- 01
Publié ?
Oui. Qwen3.8 Max est le modèle de production ; Preview reste un contexte de canal historique.
- 02
Disponible ?
Oui sur EvoLink. Vérifiez la route active et l’ID du modèle sur la page produit.
- 03
Adapté à mon cas ?
Pour le raisonnement long contexte, les grands dépôts et les agents à outils ; gardez les tâches simples sur une route plus légère.
- 04
Quel prix ?
Consultez le module de prix en direct de la page produit, sans reprendre un prix upstream ou Preview.
- 05
Comment l’appeler ?
Choisissez Chat Completions, Responses ou Messages, puis suivez le guide et la référence des paramètres.
Les cinq points sont validés ? Créer une clé API.
Questions fréquentes
Qwen3.8 Max est-il déjà appelable via EvoLink ?
qwen3.8-max, vérifiez sa présence dans votre compte et exigez un smoke test réussi avant la production.Quel ID utiliser ?
qwen3.8-max et la documentation EvoLink actuelle qwen3.8-max-preview ; gardez-le configurable.Quelle Base URL utiliser ?
https://direct.evolink.ai/v1 pour texte et connexions longues ; https://api.evolink.ai/v1 pour image, audio ou vidéo.Chat ou Responses ?
Chat pour une application OpenAI existante ; Responses pour tours liés, outils intégrés et événements Responses.
Puis-je utiliser Anthropic ?
/v1/messages, en préservant system, max_tokens, blocs et événements Anthropic.Ce guide contient-il les prix ?
Non. Le prix appartient à la page modèle afin d'éviter doublons périmés et cannibalisation.
Comment gérer les rate limits ?
Limitez la concurrence, appliquez un backoff avec jitter aux 429, bornez les retries et conservez un fallback.
Que tester avant la production ?
Auth, modèle, parsing, streaming, outils, thinking, cache, multimodal, timeout, retry, facturation, fallback, shadow et canary.


