Tous les produits
Search
Centre de documentation

Intelligent Media Services:Interface standard LLM

Dernière mise à jour :Aug 11, 2026

Connectez vos grands modèles de langage (LLM) personnalisés à des workflows en temps réel via un protocole standard.

Interface standard pour les LLM développés en interne (spécification OpenAI)

Si l'interface de votre LLM respecte la norme OpenAI, intégrez votre service LLM personnalisé dans un workflow via la configuration OpenAI. Seules les requêtes en streaming sont prises en charge.

  1. Dans le nœud LLM, sélectionnez Self-developed access (OpenAI specification) et configurez les paramètres suivants :

Nom

Type

Obligatoire

Description

Valeur d'exemple

ModelId

String

Oui

Nom du modèle. Correspond au champ « model » d'OpenAI.

abc

API-KEY

String

Oui

Clé API d'authentification. Correspond au champ « api_key » d'OpenAI.

AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI

Adresse HTTPS du modèle cible

String

Oui

URL du service cible. Correspond au champ « base_url » d'OpenAI.

Remarque

Conformément à la spécification OpenAI, Alibaba Cloud ajoute automatiquement /chat/completions à la base_url. Vérifiez que votre chemin respecte ce format.

http://www.abc.com

  1. Lors de l'exécution, le workflow assemble les données au format OpenAI et envoie une requête POST à l'endpoint du modèle configuré. Les paramètres d'entrée sont les suivants :

Nom

Type

Obligatoire

Description

Valeur d'exemple

messages

Array

Oui

Historique de conversation. 20 enregistrements maximum sont conservés. Les premières entrées du tableau correspondent aux messages les plus anciens.

Remarque

Le système combine automatiquement la saisie actuelle de l'utilisateur avec l'historique de conversation avant de l'envoyer au LLM.

[{'role': 'user', 'content': 'What is the weather like today?'},{'role': 'assistant', 'content': 'The weather is sunny today.'},{'role': 'user', 'content': 'What about the weather tomorrow?'}]

model

String

Oui

Nom du modèle.

abc

stream

Boolean

Oui

Activation du streaming pour la réponse. Seul le mode streaming est pris en charge.

True

extendData

Object

Oui

Informations supplémentaires.

{'instanceId':'68e00b6640e*3e943332fee7','channelId':'123','sentenceId':'3','userData':'{"aaaa":"bbbb"}'}

  • instanceId

String

Oui

ID de l'instance.

68e00b6640e*3e943332fee7

  • channelId

String

Oui

ID du canal.

123

  • sentenceId

Int

Oui

ID de la paire Q&R.

Remarque

Pour une même question utilisateur, la réponse de l'agent utilise toujours le même ID.

3

  • callerNumber

String

Non

Numéro appelant lors d'un appel téléphonique.

13800000001

  • calleeNumber

String

Non

Numéro appelé lors d'un appel téléphonique.

13800000002

  • userData

String

Non

Données métier transmises dans le champ UserData lors du démarrage de l'instance.

{"aaaa":"bbbb"}

Serveur LLM personnalisé (spécification OpenAI)

Python

import json
import time
from loguru import logger
from flask import Flask, request, jsonify, Response

app = Flask(__name__)

API_KEY = "YOURAPIKEY"

@app.route('/v1/chat/completions', methods=['POST'])
def chat_completion():
    # Check the API key
    auth_header = request.headers.get('Authorization')
    if not auth_header or auth_header.split()[1] != API_KEY:
        return jsonify({"error": "Unauthorized"}), 401

    data = request.json
    logger.info(f"data is {data}")
    task_id = request.args.get('task_id')
    room_id = request.args.get('room_id')
    for header, value in request.headers.items():
        logger.info(f"{header}: {value}")

    # Print query parameters
    logger.info("\nQuery Parameters:")
    for key, value in request.args.items():
        logger.info(f"{key}: {value}")

    logger.info(f"task_id: {task_id}, room_id: {room_id}")
    stream = data.get('stream', False)

    if stream:
        return Response(generate_stream_response(data), content_type='text/event-stream')
    else:
        return jsonify(generate_response(data))

def generate_response(data):
    response = "This is a mock AI assistant response. In a real application, call a real AI model here."

    return {
        "id": "chatcmpl-123",
        "object": "chat.completion",
        "created": int(time.time()),
        "model": data['model'],
        "choices": [{
            "index": 0,
            "message": {
                "role": "assistant",
                "content": response
            },
            "finish_reason": "stop"
        }],
        "usage": {
            "prompt_tokens": sum(len(m['content']) for m in data['messages']),
            "completion_tokens": len(response),
            "total_tokens": sum(len(m['content']) for m in data['messages']) + len(response)
        }
    }

def generate_stream_response(data):
    response = "This is a mock AI assistant streaming response. In a real application, call a real AI model here."
    words = list(response)
    for i, word in enumerate(words):
        chunk = {
            "id": "chatcmpl-123",
            "object": "chat.completion.chunk",
            "created": int(time.time()),
            "model": data['model'],
            "choices": [{
                "index": 0,
                "delta": {
                    "content": word, 
                    "tool_calls": [  
                        {
                            "id": "call_abc123",  
                            "type": "function",
                            "function": {
                                "name": "hangup", 
                                "arguments": "\{\}"  
                            }
                        }
                    ]
                },
                "finish_reason": None if i < len(words) - 1 else "stop"
            }]
        }
        logger.info(chunk)
        yield f"data: {json.dumps(chunk)}\n\n"
        time.sleep(0.1)  # Simulate processing time

    yield "data: [DONE]\n\n"

if __name__ == '__main__':
    logger.info(f"Server is running with API_KEY: {API_KEY}")
    app.run(port=8083, debug=True)