Comment utiliser les modèles de conversation de la famille Phi-3 avec Azure Machine Learning

Dans cet article, vous allez découvrir les modèles de conversation de la famille Phi-3 et comment les utiliser. La famille Phi-3 de petits modèles de langage (SLMs) est une collection de modèles texte génératifs optimisés pour les instructions.

Important

Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.

Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Modèles de conversation de la famille Phi-3

Les modèles de conversation de la famille Phi-3 incluent les modèles suivants :

Les modèles Phi-3.5 sont des modèles ouverts légers et sophistiqués. Ces modèles ont été entraînés avec des jeux de données Phi-3 qui incluent à la fois des données synthétiques et les données de sites web filtrées disponibles publiquement, avec un focus sur les propriétés haute qualité et denses en raisonnement.

Phi-3.5 Mini utilise des paramètres 3.8B. Il s’agit d’un modèle de transformateur décodeur-uniquement dense utilisant le même générateur de jetons que Phi-3 Mini.

Phi-3.5 MoE (mélange d’expert ou d’experte) utilise des paramètres 16x3.8B avec des paramètres actifs 6.6B lors de l’utilisation de deux experts. Le modèle est un modèle de transformateur décodeur-uniquement MoE (mixture-of-expert), utilisant un générateur de jetons avec une taille de vocabulaire de 32 064.

Les modèles ont subi un processus d’amélioration rigoureux, incorporant à la fois l’ajustement supervisé, l’optimisation des stratégies de proximité et l’optimisation des préférences directes afin de garantir une adhérence précise aux instructions et des mesures de sécurité robustes. Lorsqu’ils ont été évalués par rapport aux points de référence qui testent le bon sens, la compréhension du langage, les mathématiques, le code, le contexte long et le raisonnement logique, les modèles Phi-3.5 ont démontré un niveau de performance robuste et de pointe parmi les modèles de moins de 13 milliards de paramètres.

Les modèles Phi-3.5 sont fournis dans les variantes suivantes, celles-ci ayant une longueur de contexte (en jetons) de 128K.

Les modèles suivants sont disponibles :

  • Phi-3.5-Mini-Instruct
  • Phi-3.5-MoE-Instruct

Prérequis

Pour utiliser les modèles de conversation de la famille Phi-3 avec Azure Machine Learning, vous avez besoin des prérequis suivants :

Un modèle de déploiement

Déploiement sur des API sans serveur

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur des points de terminaison d’API serverless avec facturation en paiement à l’utilisation. Ce type de déploiement permet de consommer des modèles en tant qu’API sans les héberger sur votre abonnement, tout en conservant la sécurité et la conformité de l’entreprise dont les organisations ont besoin.

Le déploiement vers un point de terminaison API serverless ne nécessite pas de quota de votre abonnement. Si votre modèle n’est pas déjà déployé, utilisez Azure Machine Learning studio, le kit de développement logiciel (SDK) Azure Machine Learning pour Python, l’interface de ligne de commande Azure ou les modèles ARM pour déployer le modèle en tant qu’API serverless.

Déploiement sur un calcul managé auto-hébergé

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur notre solution d’inférence managée auto-hébergée, ce qui vous permet de personnaliser et de contrôler tous les détails sur la façon dont le modèle est servi.

Pour un déploiement sur un calcul managé auto-hébergé, vous devez disposer d’un quota suffisant dans votre abonnement. Si vous n’avez pas suffisamment de quota disponible, vous pouvez utiliser notre accès temporaire au quota en sélectionnant l’option Je souhaite utiliser le quota partagé et je reconnais que ce point de terminaison sera supprimé dans 168 heures.

Package d’inférence installé

Vous pouvez utiliser des prédictions à partir de ce modèle à l’aide du package azure-ai-inference avec Python. Pour installer ce package, vous avez besoin des prérequis suivants :

  • Python 3.8 ou version ultérieure installée, y compris pip.
  • L’URL du point de terminaison. Pour construire la bibliothèque cliente, vous devez passer l’URL du point de terminaison. L’URL du point de terminaison est sous la forme https://your-host-name.your-azure-region.inference.ai.azure.com, où your-host-name est le nom d’hôte unique de votre modèle de déploiement et your-azure-region est la région Azure où le modèle est déployé (par exemple, eastus2).
  • En fonction de vos préférences de modèle de déploiement et d’authentification, vous aurez besoin d’une clé pour vous authentifier auprès du service ou des informations d’identification Microsoft Entra ID. La clé est une chaîne de 32 caractères.

Une fois ces conditions préalables remplies, installez le package d’inférence Azure AI avec la commande suivante :

pip install azure-ai-inference

En savoir plus sur le Package d’inférence et les informations de référence Azure AI.

Travailler avec des complétions de conversation

Dans cette section, vous utilisez l’API d’inférence de modèle Azure AI avec un modèle de complétion de conversation pour les conversations.

Conseil

L’API Inférence de modèle Azure AI vous permet de communiquer avec la plupart des modèles déployés dans Azure AI Studio avec le même code et la même structure, y compris les modèles de conversation de la famille Phi-3.

Créer un client pour consommer le modèle

Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

client = ChatCompletionsClient(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["AZURE_INFERENCE_CREDENTIAL"]),
)

Lorsque vous déployez le modèle sur un point de terminaison en ligne auto-hébergé avec prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.

import os
from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential

client = ChatCompletionsClient(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredential(),
)

Remarque

Actuellement, les points de terminaison d’API serverless ne prennent pas en charge l’utilisation de Microsoft Entra ID pour l’authentification.

Obtenir les fonctionnalités du modèle

L’itinéraire /info retourne des informations sur le modèle déployé sur le point de terminaison. Renvoyez les informations du modèle en appelant la méthode suivante :

model_info = client.get_model_info()

La réponse est comme suit :

print("Model name:", model_info.model_name)
print("Model type:", model_info.model_type)
print("Model provider name:", model_info.model_provider_name)
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Créer une requête de complétion de conversation

L’exemple suivant vous montre comment créer une requête de complétions de conversation de base sur le modèle.

from azure.ai.inference.models import SystemMessage, UserMessage

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
)

Remarque

Phi-3.5-Mini-Instruct, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct and Phi-3-medium-128k-Instruct ne prennent pas en charge les messages système (role="system"). Lorsque vous utilisez l’API Inférence de modèle Azure AI, les messages système sont traduits en messages utilisateur, ce qui est la fonctionnalité la plus proche disponible. Cette traduction est proposée pour des raisons pratiques, mais il est important de vérifier que le modèle suit les instructions du message système avec le niveau de confiance approprié.

La réponse est comme suit, où vous pouvez voir les statistiques d’utilisation du modèle :

print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Examinez la section usage dans la réponse pour voir le nombre de jetons utilisés pour l’invite, le nombre total de jetons générés et le nombre de jetons utilisés pour la complétion.

Diffuser du contenu

Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.

Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse en tant qu’événements envoyés par le serveur contenant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.

result = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    temperature=0,
    top_p=1,
    max_tokens=2048,
    stream=True,
)

Pour diffuser en continu des complétions, définissez stream=True lorsque vous appelez le modèle.

Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux.

def print_stream(result):
    """
    Prints the chat completion with streaming.
    """
    import time
    for update in result:
        if update.choices:
            print(update.choices[0].delta.content, end="")

Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :

print_stream(result)

Découvrir d’autres paramètres pris en charge par le client d’inférence

Explorez d’autres paramètres que vous pouvez spécifier dans le client d’inférence. Pour obtenir la liste complète de tous les paramètres pris en charge et leur documentation correspondante, consultez Référence de l’API Inférence de modèle Azure AI.

from azure.ai.inference.models import ChatCompletionsResponseFormat

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    presence_penalty=0.1,
    frequency_penalty=0.8,
    max_tokens=2048,
    stop=["<|endoftext|>"],
    temperature=0,
    top_p=1,
    response_format={ "type": ChatCompletionsResponseFormatText() },
)

Avertissement

Les modèles de la famille Phi-3 ne prennent pas en charge la mise en forme de sortie JSON (response_format = { "type": "json_object" }). Vous pouvez toujours demander au modèle de générer des sorties JSON. Cependant, il n’est pas garanti que de telles sorties soient en JSON valide.

Si vous souhaitez transmettre un paramètre qui ne figure pas dans la liste des paramètres pris en charge, vous pouvez le transmettre au modèle sous-jacent en utilisant des paramètres supplémentaires. Consulter Transmettre des paramètres supplémentaires au modèle.

Transmettre des paramètres supplémentaires au modèle

L'API d'inférence du modèle Azure AI vous permet de transmettre des paramètres supplémentaires au modèle. L’exemple de code suivant montre comment transmettre le paramètre supplémentaire logprobs au modèle.

Avant de transmettre des paramètres supplémentaires à l’API Inférence de modèle Azure AI, assurez-vous que votre modèle prend en charge ces paramètres supplémentaires. Lorsque la requête est adressée au modèle sous-jacent, l’en-tête extra-parameters est transmis au modèle avec la valeur pass-through. Cette valeur indique au point de terminaison de transmettre les paramètres supplémentaires au modèle. L’utilisation de paramètres supplémentaires avec le modèle ne garantit pas que le modèle peut réellement les gérer. Lisez la documentation du modèle pour comprendre quels paramètres supplémentaires sont pris en charge.

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    model_extras={
        "logprobs": True
    }
)

Les paramètres supplémentaires suivants peuvent être transmis aux modèles de conversation de la famille Phi-3 :

Nom Description Type
logit_bias Accepte un objet JSON qui mappe des jetons (spécifiés par leur ID de jeton dans le générateur de jetons) à une valeur de biais associée de -100 à 100. Mathématiquement, le biais est ajouté aux logits générés par le modèle avant l’échantillonnage. L’effet exact varie selon le modèle, mais les valeurs comprises entre -1 et 1 doivent diminuer ou augmenter la probabilité de sélection; les valeurs telles que -100 ou 100 doivent entraîner une interdiction ou une sélection exclusive du jeton approprié. float
logprobs Indique s’il faut retourner les probabilités de journal des jetons de sortie ou non. Si true, renvoie les probabilités de journal de chaque jeton de sortie renvoyé dans le content de message. int
top_logprobs Entier compris entre 0 et 20 spécifiant le nombre des jetons les plus probables à retourner à chaque position de jeton, chacun avec une probabilité de journal associée. logprobs devez être défini sur true si ce paramètre est utilisé. float
n Nombre d’options de complétion de conversation à générer pour chaque message d’entrée. Notez que vous serez facturé en fonction du nombre de jetons générés dans tous les choix. int

Appliquer la sécurité du contenu

L’API Inférence de modèle Azure AI prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec la sécurité du contenu Azure AI activée, les entrées et les sorties passent par un ensemble de modèles de classification visant à détecter et à empêcher la sortie de contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.

L’exemple suivant montre comment gérer les évènements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée et que la sécurité du contenu est activée.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage

try:
    response = client.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = ex.response.json()
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise
    raise

Conseil

Pour en savoir plus sur la façon dont vous pouvez configurer et contrôler les paramètres de sécurité du contenu Azure AI, consultez la documentation Azure AI Sécurité du Contenu.

Remarque

La sécurité du contenu Azure AI n’est disponible que pour les modèles déployés en tant que points de terminaison d’API serverless.

Modèles de conversation de la famille Phi-3

Les modèles de conversation de la famille Phi-3 incluent les modèles suivants :

Les modèles Phi-3.5 sont des modèles ouverts légers et sophistiqués. Ces modèles ont été entraînés avec des jeux de données Phi-3 qui incluent à la fois des données synthétiques et les données de sites web filtrées disponibles publiquement, avec un focus sur les propriétés haute qualité et denses en raisonnement.

Phi-3.5 Mini utilise des paramètres 3.8B. Il s’agit d’un modèle de transformateur décodeur-uniquement dense utilisant le même générateur de jetons que Phi-3 Mini.

Phi-3.5 MoE (mélange d’expert ou d’experte) utilise des paramètres 16x3.8B avec des paramètres actifs 6.6B lors de l’utilisation de deux experts. Le modèle est un modèle de transformateur décodeur-uniquement MoE (mixture-of-expert), utilisant un générateur de jetons avec une taille de vocabulaire de 32 064.

Les modèles ont subi un processus d’amélioration rigoureux, incorporant à la fois l’ajustement supervisé, l’optimisation des stratégies de proximité et l’optimisation des préférences directes afin de garantir une adhérence précise aux instructions et des mesures de sécurité robustes. Lorsqu’ils ont été évalués par rapport aux points de référence qui testent le bon sens, la compréhension du langage, les mathématiques, le code, le contexte long et le raisonnement logique, les modèles Phi-3.5 ont démontré un niveau de performance robuste et de pointe parmi les modèles de moins de 13 milliards de paramètres.

Les modèles Phi-3.5 sont fournis dans les variantes suivantes, celles-ci ayant une longueur de contexte (en jetons) de 128K.

Les modèles suivants sont disponibles :

  • Phi-3.5-Mini-Instruct
  • Phi-3.5-MoE-Instruct

Prérequis

Pour utiliser les modèles de conversation de la famille Phi-3 avec Azure Machine Learning studio, vous avez besoin des prérequis suivants :

Un modèle de déploiement

Déploiement sur des API sans serveur

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur des points de terminaison d’API serverless avec facturation en paiement à l’utilisation. Ce type de déploiement permet de consommer des modèles en tant qu’API sans les héberger sur votre abonnement, tout en conservant la sécurité et la conformité de l’entreprise dont les organisations ont besoin.

Le déploiement vers un point de terminaison API serverless ne nécessite pas de quota de votre abonnement. Si votre modèle n’est pas déjà déployé, utilisez Azure Machine Learning studio, le kit de développement logiciel (SDK) Azure Machine Learning pour Python, l’interface de ligne de commande Azure ou les modèles ARM pour déployer le modèle en tant qu’API serverless.

Déploiement sur un calcul managé auto-hébergé

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur notre solution d’inférence managée auto-hébergée, ce qui vous permet de personnaliser et de contrôler tous les détails sur la façon dont le modèle est servi.

Pour un déploiement sur un calcul managé auto-hébergé, vous devez disposer d’un quota suffisant dans votre abonnement. Si vous n’avez pas suffisamment de quota disponible, vous pouvez utiliser notre accès temporaire au quota en sélectionnant l’option Je souhaite utiliser le quota partagé et je reconnais que ce point de terminaison sera supprimé dans 168 heures.

Package d’inférence installé

Vous pouvez consommer des prédictions depuis ce modèle en utilisant le package @azure-rest/ai-inference de npm. Pour installer ce package, vous avez besoin des prérequis suivants :

  • Versions LTS de Node.js avec npm.
  • L’URL du point de terminaison. Pour construire la bibliothèque cliente, vous devez passer l’URL du point de terminaison. L’URL du point de terminaison est sous la forme https://your-host-name.your-azure-region.inference.ai.azure.com, où your-host-name est le nom d’hôte unique de votre modèle de déploiement et your-azure-region est la région Azure où le modèle est déployé (par exemple, eastus2).
  • En fonction de vos préférences de modèle de déploiement et d’authentification, vous aurez besoin d’une clé pour vous authentifier auprès du service ou des informations d’identification Microsoft Entra ID. La clé est une chaîne de 32 caractères.

Une fois ces prérequis remplis, installez la bibliothèque Azure Inference pour JavaScript avec la commande suivante :

npm install @azure-rest/ai-inference

Travailler avec des complétions de conversation

Dans cette section, vous utilisez l’API d’inférence de modèle Azure AI avec un modèle de complétion de conversation pour les conversations.

Conseil

L’API Inférence de modèle Azure AI vous permet de communiquer avec la plupart des modèles déployés dans Azure Machine Learning studio avec le même code et la même structure, y compris les modèles de conversation de la famille Phi-3.

Créer un client pour consommer le modèle

Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.

import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { AzureKeyCredential } from "@azure/core-auth";

const client = new ModelClient(
    process.env.AZURE_INFERENCE_ENDPOINT, 
    new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);

Lorsque vous déployez le modèle sur un point de terminaison en ligne auto-hébergé avec prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.

import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { DefaultAzureCredential }  from "@azure/identity";

const client = new ModelClient(
    process.env.AZURE_INFERENCE_ENDPOINT, 
    new DefaultAzureCredential()
);

Remarque

Actuellement, les points de terminaison d’API serverless ne prennent pas en charge l’utilisation de Microsoft Entra ID pour l’authentification.

Obtenir les fonctionnalités du modèle

L’itinéraire /info retourne des informations sur le modèle déployé sur le point de terminaison. Renvoyez les informations du modèle en appelant la méthode suivante :

var model_info = await client.path("/info").get()

La réponse est comme suit :

console.log("Model name: ", model_info.body.model_name)
console.log("Model type: ", model_info.body.model_type)
console.log("Model provider name: ", model_info.body.model_provider_name)
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Créer une requête de complétion de conversation

L’exemple suivant vous montre comment créer une requête de complétions de conversation de base sur le modèle.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
    }
});

Remarque

Phi-3.5-Mini-Instruct, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct and Phi-3-medium-128k-Instruct ne prennent pas en charge les messages système (role="system"). Lorsque vous utilisez l’API Inférence de modèle Azure AI, les messages système sont traduits en messages utilisateur, ce qui est la fonctionnalité la plus proche disponible. Cette traduction est proposée pour des raisons pratiques, mais il est important de vérifier que le modèle suit les instructions du message système avec le niveau de confiance approprié.

La réponse est comme suit, où vous pouvez voir les statistiques d’utilisation du modèle :

if (isUnexpected(response)) {
    throw response.body.error;
}

console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Examinez la section usage dans la réponse pour voir le nombre de jetons utilisés pour l’invite, le nombre total de jetons générés et le nombre de jetons utilisés pour la complétion.

Diffuser du contenu

Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.

Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse en tant qu’événements envoyés par le serveur contenant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
    }
}).asNodeStream();

Pour diffuser les complétions en continu, utilisez .asNodeStream() lorsque vous appelez le modèle.

Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :

var stream = response.body;
if (!stream) {
    stream.destroy();
    throw new Error(`Failed to get chat completions with status: ${response.status}`);
}

if (response.status !== "200") {
    throw new Error(`Failed to get chat completions: ${response.body.error}`);
}

var sses = createSseStream(stream);

for await (const event of sses) {
    if (event.data === "[DONE]") {
        return;
    }
    for (const choice of (JSON.parse(event.data)).choices) {
        console.log(choice.delta?.content ?? "");
    }
}

Découvrir d’autres paramètres pris en charge par le client d’inférence

Explorez d’autres paramètres que vous pouvez spécifier dans le client d’inférence. Pour obtenir la liste complète de tous les paramètres pris en charge et leur documentation correspondante, consultez Référence de l’API Inférence de modèle Azure AI.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
        presence_penalty: "0.1",
        frequency_penalty: "0.8",
        max_tokens: 2048,
        stop: ["<|endoftext|>"],
        temperature: 0,
        top_p: 1,
        response_format: { type: "text" },
    }
});

Avertissement

Les modèles de la famille Phi-3 ne prennent pas en charge la mise en forme de sortie JSON (response_format = { "type": "json_object" }). Vous pouvez toujours demander au modèle de générer des sorties JSON. Cependant, il n’est pas garanti que de telles sorties soient en JSON valide.

Si vous souhaitez transmettre un paramètre qui ne figure pas dans la liste des paramètres pris en charge, vous pouvez le transmettre au modèle sous-jacent en utilisant des paramètres supplémentaires. Consulter Transmettre des paramètres supplémentaires au modèle.

Transmettre des paramètres supplémentaires au modèle

L'API d'inférence du modèle Azure AI vous permet de transmettre des paramètres supplémentaires au modèle. L’exemple de code suivant montre comment transmettre le paramètre supplémentaire logprobs au modèle.

Avant de transmettre des paramètres supplémentaires à l’API Inférence de modèle Azure AI, assurez-vous que votre modèle prend en charge ces paramètres supplémentaires. Lorsque la requête est adressée au modèle sous-jacent, l’en-tête extra-parameters est transmis au modèle avec la valeur pass-through. Cette valeur indique au point de terminaison de transmettre les paramètres supplémentaires au modèle. L’utilisation de paramètres supplémentaires avec le modèle ne garantit pas que le modèle peut réellement les gérer. Lisez la documentation du modèle pour comprendre quels paramètres supplémentaires sont pris en charge.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    headers: {
        "extra-params": "pass-through"
    },
    body: {
        messages: messages,
        logprobs: true
    }
});

Les paramètres supplémentaires suivants peuvent être transmis aux modèles de conversation de la famille Phi-3 :

Nom Description Type
logit_bias Accepte un objet JSON qui mappe des jetons (spécifiés par leur ID de jeton dans le générateur de jetons) à une valeur de biais associée de -100 à 100. Mathématiquement, le biais est ajouté aux logits générés par le modèle avant l’échantillonnage. L’effet exact varie selon le modèle, mais les valeurs comprises entre -1 et 1 doivent diminuer ou augmenter la probabilité de sélection; les valeurs telles que -100 ou 100 doivent entraîner une interdiction ou une sélection exclusive du jeton approprié. float
logprobs Indique s’il faut retourner les probabilités de journal des jetons de sortie ou non. Si true, renvoie les probabilités de journal de chaque jeton de sortie renvoyé dans le content de message. int
top_logprobs Entier compris entre 0 et 20 spécifiant le nombre des jetons les plus probables à retourner à chaque position de jeton, chacun avec une probabilité de journal associée. logprobs devez être défini sur true si ce paramètre est utilisé. float
n Nombre d’options de complétion de conversation à générer pour chaque message d’entrée. Notez que vous serez facturé en fonction du nombre de jetons générés dans tous les choix. int

Appliquer la sécurité du contenu

L’API Inférence de modèle Azure AI prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec la sécurité du contenu Azure AI activée, les entrées et les sorties passent par un ensemble de modèles de classification visant à détecter et à empêcher la sortie de contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.

L’exemple suivant montre comment gérer les évènements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée et que la sécurité du contenu est activée.

try {
    var messages = [
        { role: "system", content: "You are an AI assistant that helps people find information." },
        { role: "user", content: "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills." },
    ];

    var response = await client.path("/chat/completions").post({
        body: {
            messages: messages,
        }
    });

    console.log(response.body.choices[0].message.content);
}
catch (error) {
    if (error.status_code == 400) {
        var response = JSON.parse(error.response._content);
        if (response.error) {
            console.log(`Your request triggered an ${response.error.code} error:\n\t ${response.error.message}`);
        }
        else
        {
            throw error;
        }
    }
}

Conseil

Pour en savoir plus sur la façon dont vous pouvez configurer et contrôler les paramètres de sécurité du contenu Azure AI, consultez la documentation Azure AI Sécurité du Contenu.

Remarque

La sécurité du contenu Azure AI n’est disponible que pour les modèles déployés en tant que points de terminaison d’API serverless.

Modèles de conversation de la famille Phi-3

Les modèles de conversation de la famille Phi-3 incluent les modèles suivants :

Les modèles Phi-3.5 sont des modèles ouverts légers et sophistiqués. Ces modèles ont été entraînés avec des jeux de données Phi-3 qui incluent à la fois des données synthétiques et les données de sites web filtrées disponibles publiquement, avec un focus sur les propriétés haute qualité et denses en raisonnement.

Phi-3.5 Mini utilise des paramètres 3.8B. Il s’agit d’un modèle de transformateur décodeur-uniquement dense utilisant le même générateur de jetons que Phi-3 Mini.

Phi-3.5 MoE (mélange d’expert ou d’experte) utilise des paramètres 16x3.8B avec des paramètres actifs 6.6B lors de l’utilisation de deux experts. Le modèle est un modèle de transformateur décodeur-uniquement MoE (mixture-of-expert), utilisant un générateur de jetons avec une taille de vocabulaire de 32 064.

Les modèles ont subi un processus d’amélioration rigoureux, incorporant à la fois l’ajustement supervisé, l’optimisation des stratégies de proximité et l’optimisation des préférences directes afin de garantir une adhérence précise aux instructions et des mesures de sécurité robustes. Lorsqu’ils ont été évalués par rapport aux points de référence qui testent le bon sens, la compréhension du langage, les mathématiques, le code, le contexte long et le raisonnement logique, les modèles Phi-3.5 ont démontré un niveau de performance robuste et de pointe parmi les modèles de moins de 13 milliards de paramètres.

Les modèles Phi-3.5 sont fournis dans les variantes suivantes, celles-ci ayant une longueur de contexte (en jetons) de 128K.

Les modèles suivants sont disponibles :

  • Phi-3.5-Mini-Instruct
  • Phi-3.5-MoE-Instruct

Prérequis

Pour utiliser les modèles de conversation de la famille Phi-3 avec Azure Machine Learning studio, vous avez besoin des prérequis suivants :

Un modèle de déploiement

Déploiement sur des API sans serveur

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur des points de terminaison d’API serverless avec facturation en paiement à l’utilisation. Ce type de déploiement permet de consommer des modèles en tant qu’API sans les héberger sur votre abonnement, tout en conservant la sécurité et la conformité de l’entreprise dont les organisations ont besoin.

Le déploiement vers un point de terminaison API serverless ne nécessite pas de quota de votre abonnement. Si votre modèle n’est pas déjà déployé, utilisez Azure Machine Learning studio, le kit de développement logiciel (SDK) Azure Machine Learning pour Python, l’interface de ligne de commande Azure ou les modèles ARM pour déployer le modèle en tant qu’API serverless.

Déploiement sur un calcul managé auto-hébergé

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur notre solution d’inférence managée auto-hébergée, ce qui vous permet de personnaliser et de contrôler tous les détails sur la façon dont le modèle est servi.

Pour un déploiement sur un calcul managé auto-hébergé, vous devez disposer d’un quota suffisant dans votre abonnement. Si vous n’avez pas suffisamment de quota disponible, vous pouvez utiliser notre accès temporaire au quota en sélectionnant l’option Je souhaite utiliser le quota partagé et je reconnais que ce point de terminaison sera supprimé dans 168 heures.

Package d’inférence installé

Vous pouvez consommer les prédictions de ce modèle en utilisant le package Azure.AI.Inference de NuGet. Pour installer ce package, vous avez besoin des prérequis suivants :

  • L’URL du point de terminaison. Pour construire la bibliothèque cliente, vous devez passer l’URL du point de terminaison. L’URL du point de terminaison est sous la forme https://your-host-name.your-azure-region.inference.ai.azure.com, où your-host-name est le nom d’hôte unique de votre modèle de déploiement et your-azure-region est la région Azure où le modèle est déployé (par exemple, eastus2).
  • En fonction de vos préférences de modèle de déploiement et d’authentification, vous aurez besoin d’une clé pour vous authentifier auprès du service ou des informations d’identification Microsoft Entra ID. La clé est une chaîne de 32 caractères.

Une fois ces prérequis remplis, installez la bibliothèque d’inférence Azure AI avec la commande suivante :

dotnet add package Azure.AI.Inference --prerelease

Vous pouvez également vous authentifier avec Microsoft Entra ID (anciennement Azure Active Directory). Pour utiliser les fournisseurs d’informations d’identification fournis avec le kit de développement logiciel (SDK) Azure, installez le package Azure.Identity:

dotnet add package Azure.Identity

Importez les espaces de noms suivants :

using Azure;
using Azure.Identity;
using Azure.AI.Inference;

Cet exemple utilise également les espaces de noms suivants, mais vous n’en aurez peut-être pas toujours besoin :

using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;

Travailler avec des complétions de conversation

Dans cette section, vous utilisez l’API d’inférence de modèle Azure AI avec un modèle de complétion de conversation pour les conversations.

Conseil

L’API Inférence de modèle Azure AI vous permet de communiquer avec la plupart des modèles déployés dans Azure Machine Learning studio avec le même code et la même structure, y compris les modèles de conversation de la famille Phi-3.

Créer un client pour consommer le modèle

Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.

ChatCompletionsClient client = new ChatCompletionsClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
    new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);

Lorsque vous déployez le modèle sur un point de terminaison en ligne auto-hébergé avec prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.

client = new ChatCompletionsClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
    new DefaultAzureCredential(includeInteractiveCredentials: true)
);

Remarque

Actuellement, les points de terminaison d’API serverless ne prennent pas en charge l’utilisation de Microsoft Entra ID pour l’authentification.

Obtenir les fonctionnalités du modèle

L’itinéraire /info retourne des informations sur le modèle déployé sur le point de terminaison. Renvoyez les informations du modèle en appelant la méthode suivante :

Response<ModelInfo> modelInfo = client.GetModelInfo();

La réponse est comme suit :

Console.WriteLine($"Model name: {modelInfo.Value.ModelName}");
Console.WriteLine($"Model type: {modelInfo.Value.ModelType}");
Console.WriteLine($"Model provider name: {modelInfo.Value.ModelProviderName}");
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Créer une requête de complétion de conversation

L’exemple suivant vous montre comment créer une requête de complétions de conversation de base sur le modèle.

ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
};

Response<ChatCompletions> response = client.Complete(requestOptions);

Remarque

Phi-3.5-Mini-Instruct, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct and Phi-3-medium-128k-Instruct ne prennent pas en charge les messages système (role="system"). Lorsque vous utilisez l’API Inférence de modèle Azure AI, les messages système sont traduits en messages utilisateur, ce qui est la fonctionnalité la plus proche disponible. Cette traduction est proposée pour des raisons pratiques, mais il est important de vérifier que le modèle suit les instructions du message système avec le niveau de confiance approprié.

La réponse est comme suit, où vous pouvez voir les statistiques d’utilisation du modèle :

Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Console.WriteLine($"Model: {response.Value.Model}");
Console.WriteLine("Usage:");
Console.WriteLine($"\tPrompt tokens: {response.Value.Usage.PromptTokens}");
Console.WriteLine($"\tTotal tokens: {response.Value.Usage.TotalTokens}");
Console.WriteLine($"\tCompletion tokens: {response.Value.Usage.CompletionTokens}");
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Examinez la section usage dans la réponse pour voir le nombre de jetons utilisés pour l’invite, le nombre total de jetons générés et le nombre de jetons utilisés pour la complétion.

Diffuser du contenu

Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.

Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse en tant qu’événements envoyés par le serveur contenant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.

static async Task StreamMessageAsync(ChatCompletionsClient client)
{
    ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
    {
        Messages = {
            new ChatRequestSystemMessage("You are a helpful assistant."),
            new ChatRequestUserMessage("How many languages are in the world? Write an essay about it.")
        },
        MaxTokens=4096
    };

    StreamingResponse<StreamingChatCompletionsUpdate> streamResponse = await client.CompleteStreamingAsync(requestOptions);

    await PrintStream(streamResponse);
}

Pour diffuser en continu des complétions, utilisez la méthode CompleteStreamingAsync lorsque vous appelez le modèle. Notez que dans cet exemple, l’appel est encapsulé dans une méthode asynchrone.

Pour visualiser la sortie, définissez une méthode asynchrone pour imprimer le flux dans la console.

static async Task PrintStream(StreamingResponse<StreamingChatCompletionsUpdate> response)
{
    await foreach (StreamingChatCompletionsUpdate chatUpdate in response)
    {
        if (chatUpdate.Role.HasValue)
        {
            Console.Write($"{chatUpdate.Role.Value.ToString().ToUpperInvariant()}: ");
        }
        if (!string.IsNullOrEmpty(chatUpdate.ContentUpdate))
        {
            Console.Write(chatUpdate.ContentUpdate);
        }
    }
}

Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :

StreamMessageAsync(client).GetAwaiter().GetResult();

Découvrir d’autres paramètres pris en charge par le client d’inférence

Explorez d’autres paramètres que vous pouvez spécifier dans le client d’inférence. Pour obtenir la liste complète de tous les paramètres pris en charge et leur documentation correspondante, consultez Référence de l’API Inférence de modèle Azure AI.

requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
    PresencePenalty = 0.1f,
    FrequencyPenalty = 0.8f,
    MaxTokens = 2048,
    StopSequences = { "<|endoftext|>" },
    Temperature = 0,
    NucleusSamplingFactor = 1,
    ResponseFormat = new ChatCompletionsResponseFormatText()
};

response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");

Avertissement

Les modèles de la famille Phi-3 ne prennent pas en charge la mise en forme de sortie JSON (response_format = { "type": "json_object" }). Vous pouvez toujours demander au modèle de générer des sorties JSON. Cependant, il n’est pas garanti que de telles sorties soient en JSON valide.

Si vous souhaitez transmettre un paramètre qui ne figure pas dans la liste des paramètres pris en charge, vous pouvez le transmettre au modèle sous-jacent en utilisant des paramètres supplémentaires. Consulter Transmettre des paramètres supplémentaires au modèle.

Transmettre des paramètres supplémentaires au modèle

L'API d'inférence du modèle Azure AI vous permet de transmettre des paramètres supplémentaires au modèle. L’exemple de code suivant montre comment transmettre le paramètre supplémentaire logprobs au modèle.

Avant de transmettre des paramètres supplémentaires à l’API Inférence de modèle Azure AI, assurez-vous que votre modèle prend en charge ces paramètres supplémentaires. Lorsque la requête est adressée au modèle sous-jacent, l’en-tête extra-parameters est transmis au modèle avec la valeur pass-through. Cette valeur indique au point de terminaison de transmettre les paramètres supplémentaires au modèle. L’utilisation de paramètres supplémentaires avec le modèle ne garantit pas que le modèle peut réellement les gérer. Lisez la documentation du modèle pour comprendre quels paramètres supplémentaires sont pris en charge.

requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
    AdditionalProperties = { { "logprobs", BinaryData.FromString("true") } },
};

response = client.Complete(requestOptions, extraParams: ExtraParameters.PassThrough);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");

Les paramètres supplémentaires suivants peuvent être transmis aux modèles de conversation de la famille Phi-3 :

Nom Description Type
logit_bias Accepte un objet JSON qui mappe des jetons (spécifiés par leur ID de jeton dans le générateur de jetons) à une valeur de biais associée de -100 à 100. Mathématiquement, le biais est ajouté aux logits générés par le modèle avant l’échantillonnage. L’effet exact varie selon le modèle, mais les valeurs comprises entre -1 et 1 doivent diminuer ou augmenter la probabilité de sélection; les valeurs telles que -100 ou 100 doivent entraîner une interdiction ou une sélection exclusive du jeton approprié. float
logprobs Indique s’il faut retourner les probabilités de journal des jetons de sortie ou non. Si true, renvoie les probabilités de journal de chaque jeton de sortie renvoyé dans le content de message. int
top_logprobs Entier compris entre 0 et 20 spécifiant le nombre des jetons les plus probables à retourner à chaque position de jeton, chacun avec une probabilité de journal associée. logprobs devez être défini sur true si ce paramètre est utilisé. float
n Nombre d’options de complétion de conversation à générer pour chaque message d’entrée. Notez que vous serez facturé en fonction du nombre de jetons générés dans tous les choix. int

Appliquer la sécurité du contenu

L’API Inférence de modèle Azure AI prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec la sécurité du contenu Azure AI activée, les entrées et les sorties passent par un ensemble de modèles de classification visant à détecter et à empêcher la sortie de contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.

L’exemple suivant montre comment gérer les évènements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée et que la sécurité du contenu est activée.

try
{
    requestOptions = new ChatCompletionsOptions()
    {
        Messages = {
            new ChatRequestSystemMessage("You are an AI assistant that helps people find information."),
            new ChatRequestUserMessage(
                "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
            ),
        },
    };

    response = client.Complete(requestOptions);
    Console.WriteLine(response.Value.Choices[0].Message.Content);
}
catch (RequestFailedException ex)
{
    if (ex.ErrorCode == "content_filter")
    {
        Console.WriteLine($"Your query has trigger Azure Content Safety: {ex.Message}");
    }
    else
    {
        throw;
    }
}

Conseil

Pour en savoir plus sur la façon dont vous pouvez configurer et contrôler les paramètres de sécurité du contenu Azure AI, consultez la documentation Azure AI Sécurité du Contenu.

Remarque

La sécurité du contenu Azure AI n’est disponible que pour les modèles déployés en tant que points de terminaison d’API serverless.

Modèles de conversation de la famille Phi-3

Les modèles de conversation de la famille Phi-3 incluent les modèles suivants :

Les modèles Phi-3.5 sont des modèles ouverts légers et sophistiqués. Ces modèles ont été entraînés avec des jeux de données Phi-3 qui incluent à la fois des données synthétiques et les données de sites web filtrées disponibles publiquement, avec un focus sur les propriétés haute qualité et denses en raisonnement.

Phi-3.5 Mini utilise des paramètres 3.8B. Il s’agit d’un modèle de transformateur décodeur-uniquement dense utilisant le même générateur de jetons que Phi-3 Mini.

Phi-3.5 MoE (mélange d’expert ou d’experte) utilise des paramètres 16x3.8B avec des paramètres actifs 6.6B lors de l’utilisation de deux experts. Le modèle est un modèle de transformateur décodeur-uniquement MoE (mixture-of-expert), utilisant un générateur de jetons avec une taille de vocabulaire de 32 064.

Les modèles ont subi un processus d’amélioration rigoureux, incorporant à la fois l’ajustement supervisé, l’optimisation des stratégies de proximité et l’optimisation des préférences directes afin de garantir une adhérence précise aux instructions et des mesures de sécurité robustes. Lorsqu’ils ont été évalués par rapport aux points de référence qui testent le bon sens, la compréhension du langage, les mathématiques, le code, le contexte long et le raisonnement logique, les modèles Phi-3.5 ont démontré un niveau de performance robuste et de pointe parmi les modèles de moins de 13 milliards de paramètres.

Les modèles Phi-3.5 sont fournis dans les variantes suivantes, celles-ci ayant une longueur de contexte (en jetons) de 128K.

Les modèles suivants sont disponibles :

  • Phi-3.5-Mini-Instruct
  • Phi-3.5-MoE-Instruct

Prérequis

Pour utiliser les modèles de conversation de la famille Phi-3 avec Azure Machine Learning studio, vous avez besoin des prérequis suivants :

Un modèle de déploiement

Déploiement sur des API sans serveur

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur des points de terminaison d’API serverless avec facturation en paiement à l’utilisation. Ce type de déploiement permet de consommer des modèles en tant qu’API sans les héberger sur votre abonnement, tout en conservant la sécurité et la conformité de l’entreprise dont les organisations ont besoin.

Le déploiement vers un point de terminaison API serverless ne nécessite pas de quota de votre abonnement. Si votre modèle n’est pas déjà déployé, utilisez Azure Machine Learning studio, le kit de développement logiciel (SDK) Azure Machine Learning pour Python, l’interface de ligne de commande Azure ou les modèles ARM pour déployer le modèle en tant qu’API serverless.

Déploiement sur un calcul managé auto-hébergé

Les modèles de conversation de la famille Phi-3 peuvent être déployés sur notre solution d’inférence managée auto-hébergée, ce qui vous permet de personnaliser et de contrôler tous les détails sur la façon dont le modèle est servi.

Pour un déploiement sur un calcul managé auto-hébergé, vous devez disposer d’un quota suffisant dans votre abonnement. Si vous n’avez pas suffisamment de quota disponible, vous pouvez utiliser notre accès temporaire au quota en sélectionnant l’option Je souhaite utiliser le quota partagé et je reconnais que ce point de terminaison sera supprimé dans 168 heures.

Un client REST

Les modèles déployés avec l’API Inférence de modèle Azure AI peuvent être consommés en utilisant tout client REST. Pour utiliser le client REST, vous avez besoin des prérequis suivants :

  • Pour construire les requêtes, vous devez transmettre l’URL du point de terminaison. L’URL du point de terminaison a la forme https://your-host-name.your-azure-region.inference.ai.azure.com, où your-host-name`` is your unique model deployment host name and votre-région-azure`` est la région Azure où le modèle est déployé (par exemple, eastus2).
  • En fonction de vos préférences de modèle de déploiement et d’authentification, vous aurez besoin d’une clé pour vous authentifier auprès du service ou des informations d’identification Microsoft Entra ID. La clé est une chaîne de 32 caractères.

Travailler avec des complétions de conversation

Dans cette section, vous utilisez l’API d’inférence de modèle Azure AI avec un modèle de complétion de conversation pour les conversations.

Conseil

L’API Inférence de modèle Azure AI vous permet de communiquer avec la plupart des modèles déployés dans Azure Machine Learning studio avec le même code et la même structure, y compris les modèles de conversation de la famille Phi-3.

Créer un client pour consommer le modèle

Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.

Lorsque vous déployez le modèle sur un point de terminaison en ligne auto-hébergé avec prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.

Remarque

Actuellement, les points de terminaison d’API serverless ne prennent pas en charge l’utilisation de Microsoft Entra ID pour l’authentification.

Obtenir les fonctionnalités du modèle

L’itinéraire /info retourne des informations sur le modèle déployé sur le point de terminaison. Renvoyez les informations du modèle en appelant la méthode suivante :

GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json

La réponse est comme suit :

{
    "model_name": "Phi-3.5-Mini-Instruct",
    "model_type": "chat-completions",
    "model_provider_name": "Microsoft"
}

Créer une requête de complétion de conversation

L’exemple suivant vous montre comment créer une requête de complétions de conversation de base sur le modèle.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ]
}

Remarque

Phi-3.5-Mini-Instruct, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct and Phi-3-medium-128k-Instruct ne prennent pas en charge les messages système (role="system"). Lorsque vous utilisez l’API Inférence de modèle Azure AI, les messages système sont traduits en messages utilisateur, ce qui est la fonctionnalité la plus proche disponible. Cette traduction est proposée pour des raisons pratiques, mais il est important de vérifier que le modèle suit les instructions du message système avec le niveau de confiance approprié.

La réponse est comme suit, où vous pouvez voir les statistiques d’utilisation du modèle :

{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
                "tool_calls": null
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Examinez la section usage dans la réponse pour voir le nombre de jetons utilisés pour l’invite, le nombre total de jetons générés et le nombre de jetons utilisés pour la complétion.

Diffuser du contenu

Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.

Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse en tant qu’événements envoyés par le serveur contenant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "stream": true,
    "temperature": 0,
    "top_p": 1,
    "max_tokens": 2048
}

Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "delta": {
                "role": "assistant",
                "content": ""
            },
            "finish_reason": null,
            "logprobs": null
        }
    ]
}

Le dernier message dans le flux a finish_reason défini, indiquant la raison de l’arrêt du processus de génération.

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "delta": {
                "content": ""
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Découvrir d’autres paramètres pris en charge par le client d’inférence

Explorez d’autres paramètres que vous pouvez spécifier dans le client d’inférence. Pour obtenir la liste complète de tous les paramètres pris en charge et leur documentation correspondante, consultez Référence de l’API Inférence de modèle Azure AI.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "presence_penalty": 0.1,
    "frequency_penalty": 0.8,
    "max_tokens": 2048,
    "stop": ["<|endoftext|>"],
    "temperature" :0,
    "top_p": 1,
    "response_format": { "type": "text" }
}
{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
                "tool_calls": null
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Avertissement

Les modèles de la famille Phi-3 ne prennent pas en charge la mise en forme de sortie JSON (response_format = { "type": "json_object" }). Vous pouvez toujours demander au modèle de générer des sorties JSON. Cependant, il n’est pas garanti que de telles sorties soient en JSON valide.

Si vous souhaitez transmettre un paramètre qui ne figure pas dans la liste des paramètres pris en charge, vous pouvez le transmettre au modèle sous-jacent en utilisant des paramètres supplémentaires. Consulter Transmettre des paramètres supplémentaires au modèle.

Transmettre des paramètres supplémentaires au modèle

L'API d'inférence du modèle Azure AI vous permet de transmettre des paramètres supplémentaires au modèle. L’exemple de code suivant montre comment transmettre le paramètre supplémentaire logprobs au modèle.

Avant de transmettre des paramètres supplémentaires à l’API Inférence de modèle Azure AI, assurez-vous que votre modèle prend en charge ces paramètres supplémentaires. Lorsque la requête est adressée au modèle sous-jacent, l’en-tête extra-parameters est transmis au modèle avec la valeur pass-through. Cette valeur indique au point de terminaison de transmettre les paramètres supplémentaires au modèle. L’utilisation de paramètres supplémentaires avec le modèle ne garantit pas que le modèle peut réellement les gérer. Lisez la documentation du modèle pour comprendre quels paramètres supplémentaires sont pris en charge.

POST /chat/completions HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "logprobs": true
}

Les paramètres supplémentaires suivants peuvent être transmis aux modèles de conversation de la famille Phi-3 :

Nom Description Type
logit_bias Accepte un objet JSON qui mappe des jetons (spécifiés par leur ID de jeton dans le générateur de jetons) à une valeur de biais associée de -100 à 100. Mathématiquement, le biais est ajouté aux logits générés par le modèle avant l’échantillonnage. L’effet exact varie selon le modèle, mais les valeurs comprises entre -1 et 1 doivent diminuer ou augmenter la probabilité de sélection; les valeurs telles que -100 ou 100 doivent entraîner une interdiction ou une sélection exclusive du jeton approprié. float
logprobs Indique s’il faut retourner les probabilités de journal des jetons de sortie ou non. Si true, renvoie les probabilités de journal de chaque jeton de sortie renvoyé dans le content de message. int
top_logprobs Entier compris entre 0 et 20 spécifiant le nombre des jetons les plus probables à retourner à chaque position de jeton, chacun avec une probabilité de journal associée. logprobs devez être défini sur true si ce paramètre est utilisé. float
n Nombre d’options de complétion de conversation à générer pour chaque message d’entrée. Notez que vous serez facturé en fonction du nombre de jetons générés dans tous les choix. int

Appliquer la sécurité du contenu

L’API Inférence de modèle Azure AI prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec la sécurité du contenu Azure AI activée, les entrées et les sorties passent par un ensemble de modèles de classification visant à détecter et à empêcher la sortie de contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.

L’exemple suivant montre comment gérer les évènements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée et que la sécurité du contenu est activée.

{
    "messages": [
        {
            "role": "system",
            "content": "You are an AI assistant that helps people find information."
        },
                {
            "role": "user",
            "content": "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
        }
    ]
}
{
    "error": {
        "message": "The response was filtered due to the prompt triggering Microsoft's content management policy. Please modify your prompt and retry.",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400
    }
}

Conseil

Pour en savoir plus sur la façon dont vous pouvez configurer et contrôler les paramètres de sécurité du contenu Azure AI, consultez la documentation Azure AI Sécurité du Contenu.

Remarque

La sécurité du contenu Azure AI n’est disponible que pour les modèles déployés en tant que points de terminaison d’API serverless.

Autres exemples d’inférence

Pour plus d’exemples d’utilisation des modèles de la famille Phi-3, consultez les exemples et didacticiels suivants :

Description Langage Exemple
Requête CURL Bash Lien
Package Azure AI Inference pour JavaScript JavaScript Lien
Package Azure AI Inference pour Python Python Lien
Requêtes Web Python Python Lien
Kit de développement logiciel (SDK) OpenAI (expérimental) Python Lien
LangChain Python Lien
LiteLLM Python Lien

Considérations relatives au coût et au quota pour les modèles de la famille Phi-3 déployés en tant que points de terminaison d’API serverless

Le quota est géré par déploiement. Chaque déploiement a une limite de débit de 200 000 jetons par minute et 1 000 requêtes d’API par minute. Toutefois, nous limitons actuellement un déploiement par modèle par projet. Contactez le Support Microsoft Azure si les limites de débit actuelles ne suffisent pas pour vos scénarios.

Considérations relatives au coût et au quota pour les modèles de la famille Phi-3 déployés sur un calcul managé

Les modèles de la famille Phi-3 déployés sur un calcul managé sont facturés en fonction des heures cœur de l’instance de calcul associée. Le coût de l’instance de calcul est déterminé par la taille de l’instance, le nombre d’instances en cours d’exécution et la durée d’exécution.

Il est recommandé de commencer par un nombre d’instances peu élevé et d’effectuer un scale-up si nécessaire. Vous pouvez surveiller le coût de l’instance de calcul dans le Portail Azure.