Intégration rapide Connexion en un clic à plus de 30 fournisseurs de services IA majeurs
Migration sans code · Routage intelligent · Optimisation des coûts
Concept fondamental
EvoLink adopte une architecture de tâches asynchrones , tous les services IA sont traités comme des tâches :
Soumettre une tâche Envoyez une requête, obtenez immédiatement un identifiant de tâche
Suivi en temps réel Consultez la progression, recevez des mises à jour de statut
Obtenir les résultats Récupérez les résultats finaux une fois la tâche terminée
Prérequis
Obtenir une clé API
Créer une clé
Accédez à la page de gestion des API, cliquez sur « Nouvelle clé »
Sauvegarder la clé
Copiez la clé API générée (format : sk-evo-xxxxxxxxxx)
La clé API dispose de toutes les permissions du compte, veuillez la conserver en lieu sûr. En cas de fuite, réinitialisez-la immédiatement.
Expérience en 30 secondes
Exemple de génération d’image
# Soumettre une tâche de génération d'image
curl -X POST https://api.evolink.ai/v1/images/generations \\
-H "Authorization: Bearer YOUR_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
"model": "gpt-4o-image",
"prompt": "A cute cat running on the grass at sunset with warm lighting"
}'
Réponse immédiate - Tâche créée
{
"created" : 1757156493 ,
"id" : "task-unified-1757156493-imcg5zqt" ,
"model" : "gpt-4o-image" ,
"object" : "image.generation.task" ,
"progress" : 0 ,
"status" : "pending" ,
"task_info" : {
"can_cancel" : true ,
"estimated_time" : 100
},
"type" : "image" ,
"usage" : {
"billing_rule" : "per_call" ,
"credits_reserved" : 252 ,
"estimated_cost" : 0.252 ,
"user_group" : "default"
}
}
Consulter le statut de la tâche
# Utiliser l'identifiant de tâche retourné pour consulter le statut
curl https://api.evolink.ai/v1/tasks/task-unified-1757156493-imcg5zqt \\
-H "Authorization: Bearer YOUR_API_KEY"
Réponse après achèvement de la tâche
{
"created" : 1757156493 ,
"id" : "task-unified-1757156493-imcg5zqt" ,
"model" : "gpt-4o-image" ,
"object" : "image.generation.task" ,
"progress" : 100 ,
"results" : [
"https://tempfile.aiquickdraw.com/s/generated_image_url.png"
],
"status" : "completed" ,
"task_info" : {
"can_cancel" : false
},
"type" : "image"
}
Capacités IA multimodales
🎨 Génération d’images
GPT-4O Image
Seedream 4.0
import requests
# Génération d'image GPT-4O
response = requests.post(
"https://api.evolink.ai/v1/images/generations" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
json = {
"model" : "gpt-4o-image" ,
"prompt" : "A beautiful sunset over the ocean with vibrant colors" ,
"size" : "1024x1024" ,
"n" : 1
}
)
task = response.json()
print ( f "Task ID: { task[ 'id' ] } " )
print ( f "Temps estimé : { task[ 'task_info' ][ 'estimated_time' ] } secondes" )
# Génération d'image Seedream 4.0
response = requests.post(
"https://api.evolink.ai/v1/images/generations" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
json = {
"model" : "doubao-seedream-4.0" ,
"prompt" : "Futuristic city with neon lights at night"
}
)
task = response.json()
print ( f "Tâche créée : { task[ 'created' ] } " )
print ( f "Coût estimé : $ { task[ 'usage' ][ 'estimated_cost' ] } " )
🎬 Génération de vidéos
import requests
import time
# Génération de vidéo Veo3-Fast
def generate_video ():
# Soumettre une tâche de génération de vidéo
response = requests.post(
"https://api.evolink.ai/v1/videos/generations" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
json = {
"model" : "veo3-fast" ,
"prompt" : "A cat chasing butterflies in the garden, slow motion" ,
"aspect_ratio" : "16:9"
}
)
task = response.json()
task_id = task[ 'id' ]
print ( f "Tâche vidéo créée : { task_id } " )
print ( f "Temps d'achèvement estimé : { task[ 'task_info' ][ 'estimated_time' ] } secondes" )
print ( f "Coût estimé : $ { task[ 'usage' ][ 'estimated_cost' ] } " )
return task_id
# Surveiller la progression de la tâche
def monitor_task ( task_id ):
while True :
response = requests.get(
f "https://api.evolink.ai/v1/tasks/ { task_id } " ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" }
)
task = response.json()
status = task[ 'status' ]
progress = task[ 'progress' ]
print ( f "Statut : { status } , Progression : { progress } %" )
if status == "completed" :
return task[ 'results' ][ 0 ] # URL de la vidéo dans le tableau results
elif status == "failed" :
raise Exception ( f "Tâche échouée : { task.get( 'error' ) } " )
time.sleep( 10 ) # Interroger toutes les 10 secondes
# Exemple d'utilisation
task_id = generate_video()
video_url = monitor_task(task_id)
print ( f "Génération vidéo terminée : { video_url } " )
Intégration rapide avec SDK
Python SDK
import openai
import requests
class EvoLinkClient :
def __init__ ( self , api_key ):
self .api_key = api_key
self .base_url = "https://api.evolink.ai"
self .headers = { "Authorization" : f "Bearer { api_key } " }
def create_image ( self , model , prompt , ** kwargs ):
"""Créer une tâche de génération d'image"""
response = requests.post(
f " { self .base_url } /v1/images/generations" ,
headers = self .headers,
json = { "model" : model, "prompt" : prompt, ** kwargs}
)
return response.json()
def create_video ( self , model , prompt , ** kwargs ):
"""Créer une tâche de génération de vidéo"""
response = requests.post(
f " { self .base_url } /v1/videos/generations" ,
headers = self .headers,
json = { "model" : model, "prompt" : prompt, ** kwargs}
)
return response.json()
def get_task ( self , task_id ):
"""Obtenir le statut de la tâche"""
response = requests.get(
f " { self .base_url } /v1/tasks/ { task_id } " ,
headers = self .headers
)
return response.json()
def wait_for_completion ( self , task_id , timeout = 300 ):
"""Attendre l'achèvement de la tâche"""
import time
start_time = time.time()
while time.time() - start_time < timeout:
task = self .get_task(task_id)
if task[ 'status' ] == 'completed' :
return task
elif task[ 'status' ] == 'failed' :
raise Exception ( f "Tâche échouée : { task.get( 'error' ) } " )
time.sleep( 5 )
raise TimeoutError ( "Délai d'exécution de la tâche dépassé" )
# Exemple d'utilisation
client = EvoLinkClient( "YOUR_API_KEY" )
# Générer une image
task = client.create_image(
model = "gpt-4o-image" ,
prompt = "A modern intelligent office building"
)
result = client.wait_for_completion(task[ 'id' ])
print ( f "URL de l'image : { result[ 'results' ][ 0 ] } " )
JavaScript/Node.js
class EvoLinkClient {
constructor ( apiKey ) {
this . apiKey = apiKey ;
this . baseURL = 'https://api.evolink.ai' ;
}
async createImage ( model , prompt , options = {}) {
const response = await fetch ( ` ${ this . baseURL } /v1/images/generations` , {
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ this . apiKey } ` ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({ model , prompt , ... options })
});
return response . json ();
}
async getTask ( taskId ) {
const response = await fetch ( ` ${ this . baseURL } /v1/tasks/ ${ taskId } ` , {
headers: { 'Authorization' : `Bearer ${ this . apiKey } ` }
});
return response . json ();
}
async waitForCompletion ( taskId , timeout = 300000 ) {
const startTime = Date . now ();
while ( Date . now () - startTime < timeout ) {
const task = await this . getTask ( taskId );
if ( task . status === 'completed' ) {
return task ;
} else if ( task . status === 'failed' ) {
throw new Error ( `Tâche échouée : ${ task . error } ` );
}
await new Promise ( resolve => setTimeout ( resolve , 5000 ));
}
throw new Error ( "Délai d'exécution de la tâche dépassé" );
}
}
// Exemple d'utilisation
async function generateImage () {
const client = new EvoLinkClient ( 'YOUR_API_KEY' );
try {
// Créer une tâche
const task = await client . createImage (
'doubao-seedream-4.0' ,
'An abstract art painting with rich colors'
);
console . log ( 'Tâche créée :' , task . id );
// Attendre l'achèvement
const result = await client . waitForCompletion ( task . id );
console . log ( 'Génération d \' image terminée :' , result . results [ 0 ]);
} catch ( error ) {
console . error ( 'Échec de la génération :' , error . message );
}
}
generateImage ();
Bonnes pratiques pour la production
Stratégie de gestion des erreurs
import requests
from typing import Optional
import time
class EvoLinkError ( Exception ):
"""Classe de base des exceptions API EvoLink"""
pass
class RateLimitError ( EvoLinkError ):
"""Exception de limite de débit"""
pass
class QuotaExhaustedError ( EvoLinkError ):
"""Exception de quota épuisé"""
pass
def handle_api_call ( func , * args , ** kwargs ):
"""Gestion unifiée des erreurs d'appel API"""
max_retries = 3
retry_delay = 1
for attempt in range (max_retries):
try :
response = func( * args, ** kwargs)
if response.status_code == 200 :
return response.json()
elif response.status_code == 429 :
# Limite de débit, attendre et réessayer
wait_time = int (response.headers.get( 'Retry-After' , retry_delay))
print ( f "Limite de débit atteinte, attente de { wait_time } secondes avant nouvelle tentative..." )
time.sleep(wait_time)
retry_delay *= 2
continue
elif response.status_code == 402 :
raise QuotaExhaustedError( "Solde du compte insuffisant, veuillez recharger" )
else :
error_data = response.json()
raise EvoLinkError( f "Échec de l'appel API : { error_data.get( 'error' , {}).get( 'message' ) } " )
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1 :
raise EvoLinkError( f "Échec de la requête réseau : { str (e) } " )
time.sleep(retry_delay)
retry_delay *= 2
raise EvoLinkError( "Nombre maximum de tentatives atteint" )
# Exemple d'utilisation
try :
result = handle_api_call(
requests.post,
"https://api.evolink.ai/v1/images/generations" ,
headers = { "Authorization" : "Bearer YOUR_API_KEY" },
json = { "model" : "gpt-4o-image" , "prompt" : "Test image" }
)
print ( "Tâche créée avec succès :" , result[ 'id' ])
except QuotaExhaustedError:
print ( "Veuillez recharger dans la console : https://evolink.ai/dashboard/billing" )
except EvoLinkError as e:
print ( f "Exception d'appel API : { e } " )
import asyncio
import aiohttp
async def create_task_async ( session , model , prompt ):
"""Création de tâche asynchrone"""
async with session.post(
"https://api.evolink.ai/v1/images/generations" ,
json = { "model" : model, "prompt" : prompt}
) as response:
return await response.json()
async def batch_generate_images ( prompts , model = "gpt-4o-image" ):
"""Génération d'images par lots"""
headers = { "Authorization" : "Bearer YOUR_API_KEY" }
async with aiohttp.ClientSession( headers = headers) as session:
# Créer toutes les tâches simultanément
tasks = [
create_task_async(session, model, prompt)
for prompt in prompts
]
results = await asyncio.gather( * tasks)
# Retourner la liste des identifiants de tâches
return [result[ 'id' ] for result in results]
# Exemple d'utilisation
prompts = [
"Modern office design" ,
"Natural landscape painting" ,
"Abstract artwork" ,
"Tech-style UI interface"
]
task_ids = asyncio.run(batch_generate_images(prompts))
print ( f " { len (task_ids) } tâches créées" )
from concurrent.futures import ThreadPoolExecutor
import queue
import threading
class TaskManager :
def __init__ ( self , api_key , max_workers = 5 ):
self .api_key = api_key
self .headers = { "Authorization" : f "Bearer { api_key } " }
self .task_queue = queue.Queue()
self .result_queue = queue.Queue()
self .executor = ThreadPoolExecutor( max_workers = max_workers)
self .running = True
def submit_task ( self , model , prompt , ** kwargs ):
"""Soumettre une tâche à la file d'attente"""
task_data = { "model" : model, "prompt" : prompt, ** kwargs}
future = self .executor.submit( self ._process_task, task_data)
return future
def _process_task ( self , task_data ):
"""Traiter une tâche individuelle"""
# Créer la tâche
response = requests.post(
"https://api.evolink.ai/v1/images/generations" ,
headers = self .headers,
json = task_data
)
task = response.json()
# Attendre l'achèvement
return self ._wait_for_completion(task[ 'id' ])
def _wait_for_completion ( self , task_id ):
"""Attendre l'achèvement de la tâche"""
while True :
response = requests.get(
f "https://api.evolink.ai/v1/tasks/ { task_id } " ,
headers = self .headers
)
task = response.json()
if task[ 'status' ] == 'completed' :
return task
elif task[ 'status' ] == 'failed' :
raise Exception ( f "Tâche échouée : { task.get( 'error' ) } " )
time.sleep( 5 )
# Exemple d'utilisation
manager = TaskManager( "YOUR_API_KEY" )
futures = []
for i in range ( 10 ):
future = manager.submit_task(
model = "gpt-4o-image" ,
prompt = f "Design { i + 1 } "
)
futures.append(future)
# Obtenir tous les résultats
for i, future in enumerate (futures):
try :
result = future.result( timeout = 300 )
print ( f "Tâche { i + 1 } terminée : { result[ 'results' ][ 0 ] } " )
except Exception as e:
print ( f "Tâche { i + 1 } échouée : { e } " )
Surveillance et analyses
Suivi de l’utilisation
Rendez-vous sur la Console EvoLink pour consulter en temps réel :
Surveillance en temps réel
Statistiques d’appels API
Taux de succès et d’erreurs
Analyse des temps de réponse
Surveillance des requêtes simultanées
Analyse des coûts
Répartition des coûts par modèle
Tendances d’utilisation quotidiennes/mensuelles
Prévisions et alertes de coûts
État d’utilisation des quotas
Surveillance personnalisée
import logging
from datetime import datetime
class EvoLinkMonitor :
def __init__ ( self ):
# Configurer la journalisation
logging.basicConfig(
level = logging. INFO ,
format = ' %(asctime)s - %(levelname)s - %(message)s ' ,
handlers = [
logging.FileHandler( 'evolink_api.log' ),
logging.StreamHandler()
]
)
self .logger = logging.getLogger( __name__ )
def log_task_creation ( self , task_id , model , cost ):
"""Journaliser la création de tâche"""
self .logger.info( f "Tâche créée | ID: { task_id } | Modèle: { model } | Coût:$ { cost } " )
def log_task_completion ( self , task_id , duration , status ):
"""Journaliser l'achèvement de tâche"""
self .logger.info( f "Tâche terminée | ID: { task_id } | Durée: { duration } s | Statut: { status } " )
def log_error ( self , error , context = "" ):
"""Journaliser les erreurs"""
self .logger.error( f "Erreur API | { context } | { str (error) } " )
# Exemple d'utilisation
monitor = EvoLinkMonitor()
# Utiliser dans les appels API
start_time = time.time()
try :
task = client.create_image( "gpt-4o-image" , "Test prompt" )
monitor.log_task_creation(
task[ 'id' ],
task[ 'model' ],
task[ 'usage' ][ 'estimated_cost' ]
)
result = client.wait_for_completion(task[ 'id' ])
duration = time.time() - start_time
monitor.log_task_completion(task[ 'id' ], int (duration), "completed" )
except Exception as e:
monitor.log_error(e, f "Task ID: { task.get( 'id' , 'unknown' ) } " )
Résumé des bonnes pratiques
Recommandations de développement
Toujours implémenter la gestion des erreurs
Utiliser la programmation asynchrone pour plus d’efficacité
Définir des valeurs de délai d’attente raisonnables
Journaliser les informations détaillées des appels
Optimisation des performances
Le traitement par lots réduit la surcharge réseau
Utiliser des pools de tâches pour la gestion de la concurrence
Surveiller l’utilisation des quotas API
Mettre en cache les résultats fréquemment utilisés
Considérations de sécurité
Stockage sécurisé des clés API
Utiliser des variables d’environnement pour la configuration
Effectuer une rotation régulière des clés d’accès
Surveiller les comportements d’appel anormaux
Contrôle des coûts
Définir des limites budgétaires raisonnables
Choisir les modèles appropriés
Optimiser la longueur des prompts
Surveiller les tendances d’utilisation
Prêt à commencer ? Lancez votre parcours de création IA dès maintenant Besoin d’aide ? Notre équipe technique est toujours prête à vous fournir un support professionnel