Come usare i modelli di chat della famiglia Phi-3 con Azure Machine Learning

In questo articolo vengono fornite informazioni sui modelli di chat di famiglia Phi-3 e su come usarli. La famiglia Phi-3 di piccoli modelli linguistici (SLM) è una raccolta di modelli di testo generativi ottimizzati per istruzioni.

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.

Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Modelli di chat della famiglia Phi-3

I modelli di chat della famiglia Phi-3 includono i modelli seguenti:

I modelli Phi-3.5 sono aperti, leggeri e all'avanguardia. Il training di questi modelli è stato effettuato con set di dati Phi-3, che includono dati sintetici e dati dei siti web filtrati e disponibili a livello pubblico, con particolare attenzione alle proprietà di alta qualità e dense di ragionamento.

Phi-3.5 Mini usa parametri 3.8B ed è un modello di trasformatore esclusivamente a decodificatore denso che usa lo stesso tokenizer di Phi-3 Mini.

Phi-3.5 MoE (mixture-of-expert) usa parametri 16x3.8B con parametri attivi 6.6B quando si usano 2 esperti. Il modello è un trasformatore esclusivamente a decodificatore con un mix di esperti, che utilizza un tokenizer con dimensioni del vocabolario pari a 32.064.

I modelli sono stati sottoposti a un rigoroso processo di miglioramento, incorporando sia l'ottimizzazione delle preferenze supervisionate che l'ottimizzazione dei criteri prossimali e l'ottimizzazione diretta delle preferenze, per garantire una precisa conformità alle istruzioni e misure di sicurezza solide. Quando valutati in base ai benchmark che testano il buon senso, la comprensione del linguaggio, la matematica, il codice, il contesto lungo e il ragionamento logico, i modelli Phi-3.5 hanno dimostrato prestazioni affidabili e all'avanguardia tra i modelli con meno di 13 miliardi di parametri.

I modelli Phi-3.5 sono disponibili nelle varianti seguenti, in cui le varianti hanno una lunghezza del contesto (in token) di 128K.

Sono disponibili i seguenti modelli:

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

Prerequisiti

Per usare i modelli di chat di famiglia Phi-3 con Azure Machine Learning, sono necessari i prerequisiti seguenti:

Distribuzione di modelli

Distribuzione in API serverless

È possibile distribuire i modelli di chat della famiglia Phi-3 in endpoint API serverless con fatturazione con pagamento in base al consumo. Questo tipo di distribuzione consente di usare i modelli come le API senza ospitarli nella sottoscrizione, mantenendo al contempo la sicurezza e la conformità aziendali necessarie alle organizzazioni.

La distribuzione in un endpoint API serverless non richiede la quota dalla sottoscrizione. Se il modello non è già stato distribuito, usare studio di Azure Machine Learning, Azure Machine Learning SDK per Python, l'interfaccia della riga di comando di Azure o i modelli ARM per distribuire il modello come API serverless.

Distribuzione in un ambiente di calcolo gestito self-hosted

È possibile distribuire il modello di chat della famiglia Phi-3 nella soluzione di inferenza gestita self-hosted, che consente di personalizzare e controllare tutti i dettagli su come viene gestito il modello.

Per la distribuzione in un ambiente di calcolo gestito self-hosted, è necessario disporre di una quota sufficiente nella sottoscrizione. Se non è disponibile una quota sufficiente, è possibile usare l’accesso temporaneo alla quota selezionando l'opzione Voglio usare la quota condivisa e accetto che questo endpoint venga eliminato tra 168 ore.

Pacchetto di inferenza installato

È possibile usare le stime di questo modello usando il pacchetto azure-ai-inference con Python. Per installare questo pacchetto, sono necessari i prerequisiti seguenti:

  • Python 3.8 o versione successiva installata, incluso pip.
  • URL dell'endpoint. Per costruire la libreria client, è necessario passare l'URL dell'endpoint. L'URL dell'endpoint ha il formato https://your-host-name.your-azure-region.inference.ai.azure.com, in cui your-host-name è il nome host della distribuzione del modello univoco e your-azure-region è l'area di Azure in cui viene distribuito il modello ( ad esempio eastus2).
  • A seconda della distribuzione del modello e delle preferenze di autenticazione, è necessario disporre di una chiave per l'autenticazione nel servizio o delle credenziali di Microsoft Entra ID. La chiave è una stringa di 32 caratteri.

Dopo aver ottenuto questi prerequisiti, installare il pacchetto di inferenza di Intelligenza artificiale di Azure con il comando seguente:

pip install azure-ai-inference

Altre informazioni sul pacchetto di inferenza di Intelligenza artificiale di Azure.

Usare i completamenti della chat

In questa sezione si usa l'API di inferenza del modello di intelligenza artificiale di Azure con un modello di completamento della chat per la chat.

Suggerimento

L'API di inferenza del modello di Azure per intelligenza artificiale consente di parlare con la maggior parte dei modelli distribuiti in Studio AI della piattaforma Azure con la stessa struttura e codice, inclusi i modelli di chat della famiglia Phi-3.

Creare un client per utilizzare il modello

Creare prima di tutto il client per utilizzare il modello. Il codice seguente usa un URL dell'endpoint e una chiave archiviati nelle variabili di ambiente.

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"]),
)

Quando si distribuisce il modello in un endpoint online self-hosted con il supporto di Microsoft Entra ID, è possibile usare il frammento di codice seguente per creare 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(),
)

Nota

Attualmente, gli endpoint API serverless non supportano l'uso di Microsoft Entra ID per l'autenticazione.

Ottenere le funzionalità del modello

La route /info restituisce informazioni sul modello distribuito nell'endpoint. Restituire le informazioni del modello chiamando il metodo seguente:

model_info = client.get_model_info()

Il formato della risposta è il seguente:

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

Creare una richiesta di completamento della chat

L'esempio seguente illustra come creare una richiesta di completamento della chat di base per il modello.

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?"),
    ],
)

Nota

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 e Phi-3-medium-128k-Instruct non supportano i messaggi di sistema (role="system"). Quando si usa l'API di inferenza del modello di Azure per intelligenza artificiale, i messaggi di sistema vengono convertiti in messaggi utente, cioè la funzionalità più vicina disponibile. Questa traduzione è disponibile per praticità; tuttavia, è importante verificare che il modello stia seguendo le istruzioni nel messaggio di sistema con il livello di attendibilità corretto.

La risposta è la seguente, in cui è possibile visualizzare le statistiche di utilizzo del modello:

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

Prendere in esame la sezione usage nella risposta per visualizzare il numero di token usati per il prompt, il numero totale di token generati e il numero di token usati per il completamento.

Streaming dei contenuti

Per impostazione predefinita, l'API di completamento restituisce l'intero contenuto generato in una singola risposta. Se si generano completamenti lunghi, l'attesa della risposta può impiegare diversi secondi.

È possibile trasmettere in streaming i contenuti per ottenerli mentre sono generati. Lo streaming dei contenuti consente di avviare l'elaborazione del completamento man mano che i contenuti diventano disponibili. Questa modalità restituisce un oggetto che ritrasmette la risposta come eventi inviati dal server solo dati. Estrarre blocchi dal campo delta, anziché dal campo del messaggio.

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,
)

Per trasmettere i completamenti, impostare stream=True quando si chiama il modello.

Per visualizzare l'output, definire una funzione helper per stampare il flusso.

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="")

È possibile visualizzare il modo in cui lo streaming genera contenuti:

print_stream(result)

Esplorare altri parametri supportati dal client di inferenza

Esplorare altri parametri che è possibile specificare nel client di inferenza. Per un elenco completo di tutti i parametri supportati e della relativa documentazione corrispondente, vedere Informazioni di riferimento sull'API di inferenza del modello di Azure per intelligenza artificiale.

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() },
)

Avviso

I modelli della famiglia Phi-3 non supportano la formattazione dell'output JSON (response_format = { "type": "json_object" }). È sempre possibile richiedere al modello di generare output JSON. Tuttavia, non è garantito che tali output siano JSON validi.

Se si desidera passare un parametro non incluso nell'elenco dei parametri supportati, è possibile passarlo al modello sottostante usando parametri aggiuntivi. Vedere Passare parametri aggiuntivi al modello.

Passare parametri aggiuntivi al modello

L'API di inferenza del modello di intelligenza artificiale di Azure consente di passare parametri aggiuntivi al modello. Nell'esempio di codice seguente viene illustrato come passare il parametro aggiuntivo logprobs al modello.

Prima di passare parametri aggiuntivi all'API di inferenza del modello di intelligenza artificiale di Azure, assicurarsi che il modello supporti tali parametri aggiuntivi. Quando la richiesta viene effettuata al modello sottostante, l'intestazione extra-parameters viene passata al modello con il valore pass-through. Questo valore indica all'endpoint di passare i parametri aggiuntivi al modello. L'uso di parametri aggiuntivi con il modello non garantisce che il suddetto possa gestirli effettivamente. Leggere la documentazione del modello per comprendere quali parametri aggiuntivi sono supportati.

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

È possibile passare i parametri aggiuntivi seguenti ai modelli di chat della famiglia Phi-3:

Nome Descrizione Tipo
logit_bias Accetta un oggetto JSON che esegue il mapping dei token (specificato dal relativo ID token nel tokenizer) con un valore di distorsione associato compreso tra -100 e 100. Matematicamente, la distorsione viene aggiunta ai logits generati dal modello prima del campionamento. L'effetto esatto varia per modello, ma i valori compresi tra -1 e 1 devono diminuire o aumentare la probabilità di selezione; i valori come -100 o 100 devono comportare un divieto o una selezione esclusiva del token pertinente. float
logprobs Indica se restituire o non restituire le probabilità di log dei token di output. Se vero, restituisce le probabilità di log di ogni token di output restituito nella content di message. int
top_logprobs Numero intero compreso tra 0 e 20 che specifica il numero di token più probabili da restituire in ogni posizione del token, ognuno con una probabilità di log associata. logprobs deve essere impostato su true se viene usato questo parametro. float
n Quante opzioni di completamento della chat generare per ogni messaggio di input. Si noti che verranno addebitati i costi in base al numero di token generati in tutte le scelte. int

Applicare la sicurezza dei contenuti

L'API di inferenza del modello di Azure per intelligenza artificiale supporta Sicurezza dei contenuti di Azure AI. Quando si usano distribuzioni con sicurezza dei contenuti di Azure AI attivata, gli input e gli output passano attraverso un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto (anteprima) rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output.

Nell'esempio seguente viene illustrato come gestire gli eventi quando il modello rileva contenuti dannosi nella richiesta di input e la sicurezza dei contenuti è abilitata.

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

Suggerimento

Per altre informazioni su come configurare e controllare le impostazioni di sicurezza dei contenuti di Intelligenza artificiale di Azure, vedere la documentazione sulla sicurezza dei contenuti di Intelligenza artificiale di Azure.

Nota

La sicurezza dei contenuti di Azure per intelligenza artificiale è disponibile solo per i modelli distribuiti come endpoint API serverless.

Modelli di chat della famiglia Phi-3

I modelli di chat della famiglia Phi-3 includono i modelli seguenti:

I modelli Phi-3.5 sono aperti, leggeri e all'avanguardia. Il training di questi modelli è stato effettuato con set di dati Phi-3, che includono dati sintetici e dati dei siti web filtrati e disponibili a livello pubblico, con particolare attenzione alle proprietà di alta qualità e dense di ragionamento.

Phi-3.5 Mini usa parametri 3.8B ed è un modello di trasformatore esclusivamente a decodificatore denso che usa lo stesso tokenizer di Phi-3 Mini.

Phi-3.5 MoE (mixture-of-expert) usa parametri 16x3.8B con parametri attivi 6.6B quando si usano 2 esperti. Il modello è un trasformatore esclusivamente a decodificatore con un mix di esperti, che utilizza un tokenizer con dimensioni del vocabolario pari a 32.064.

I modelli sono stati sottoposti a un rigoroso processo di miglioramento, incorporando sia l'ottimizzazione delle preferenze supervisionate che l'ottimizzazione dei criteri prossimali e l'ottimizzazione diretta delle preferenze, per garantire una precisa conformità alle istruzioni e misure di sicurezza solide. Quando valutati in base ai benchmark che testano il buon senso, la comprensione del linguaggio, la matematica, il codice, il contesto lungo e il ragionamento logico, i modelli Phi-3.5 hanno dimostrato prestazioni affidabili e all'avanguardia tra i modelli con meno di 13 miliardi di parametri.

I modelli Phi-3.5 sono disponibili nelle varianti seguenti, in cui le varianti hanno una lunghezza del contesto (in token) di 128K.

Sono disponibili i seguenti modelli:

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

Prerequisiti

Per usare i modelli di chat della famiglia Phi-3 con Studio di Azure Machine Learning, sono necessari i prerequisiti seguenti:

Distribuzione di modelli

Distribuzione in API serverless

È possibile distribuire i modelli di chat della famiglia Phi-3 in endpoint API serverless con fatturazione con pagamento in base al consumo. Questo tipo di distribuzione consente di usare i modelli come le API senza ospitarli nella sottoscrizione, mantenendo al contempo la sicurezza e la conformità aziendali necessarie alle organizzazioni.

La distribuzione in un endpoint API serverless non richiede la quota dalla sottoscrizione. Se il modello non è già stato distribuito, usare studio di Azure Machine Learning, Azure Machine Learning SDK per Python, l'interfaccia della riga di comando di Azure o i modelli ARM per distribuire il modello come API serverless.

Distribuzione in un ambiente di calcolo gestito self-hosted

È possibile distribuire il modello di chat della famiglia Phi-3 nella soluzione di inferenza gestita self-hosted, che consente di personalizzare e controllare tutti i dettagli su come viene gestito il modello.

Per la distribuzione in un ambiente di calcolo gestito self-hosted, è necessario disporre di una quota sufficiente nella sottoscrizione. Se non è disponibile una quota sufficiente, è possibile usare l’accesso temporaneo alla quota selezionando l'opzione Voglio usare la quota condivisa e accetto che questo endpoint venga eliminato tra 168 ore.

Pacchetto di inferenza installato

È possibile usare le stime di questo modello usando il pacchetto @azure-rest/ai-inference di npm. Per installare questo pacchetto, sono necessari i prerequisiti seguenti:

  • Versioni LTS di Node.js con npm.
  • URL dell'endpoint. Per costruire la libreria client, è necessario passare l'URL dell'endpoint. L'URL dell'endpoint ha il formato https://your-host-name.your-azure-region.inference.ai.azure.com, in cui your-host-name è il nome host della distribuzione del modello univoco e your-azure-region è l'area di Azure in cui viene distribuito il modello ( ad esempio eastus2).
  • A seconda della distribuzione del modello e delle preferenze di autenticazione, è necessario disporre di una chiave per l'autenticazione nel servizio o delle credenziali di Microsoft Entra ID. La chiave è una stringa di 32 caratteri.

Dopo aver ottenuto questi prerequisiti, installare la libreria di inferenza di Azure per JavaScript con il comando seguente:

npm install @azure-rest/ai-inference

Usare i completamenti della chat

In questa sezione si usa l'API di inferenza del modello di intelligenza artificiale di Azure con un modello di completamento della chat per la chat.

Suggerimento

L'API di inferenza del modello di Azure per intelligenza artificiale consente di parlare con la maggior parte dei modelli distribuiti in Studio di Azure Machine Learning con la stessa struttura e codice, inclusi i modelli di chat della famiglia Phi-3.

Creare un client per utilizzare il modello

Creare prima di tutto il client per utilizzare il modello. Il codice seguente usa un URL dell'endpoint e una chiave archiviati nelle variabili di ambiente.

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)
);

Quando si distribuisce il modello in un endpoint online self-hosted con il supporto di Microsoft Entra ID, è possibile usare il frammento di codice seguente per creare 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()
);

Nota

Attualmente, gli endpoint API serverless non supportano l'uso di Microsoft Entra ID per l'autenticazione.

Ottenere le funzionalità del modello

La route /info restituisce informazioni sul modello distribuito nell'endpoint. Restituire le informazioni del modello chiamando il metodo seguente:

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

Il formato della risposta è il seguente:

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

Creare una richiesta di completamento della chat

L'esempio seguente illustra come creare una richiesta di completamento della chat di base per il modello.

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,
    }
});

Nota

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 e Phi-3-medium-128k-Instruct non supportano i messaggi di sistema (role="system"). Quando si usa l'API di inferenza del modello di Azure per intelligenza artificiale, i messaggi di sistema vengono convertiti in messaggi utente, cioè la funzionalità più vicina disponibile. Questa traduzione è disponibile per praticità; tuttavia, è importante verificare che il modello stia seguendo le istruzioni nel messaggio di sistema con il livello di attendibilità corretto.

La risposta è la seguente, in cui è possibile visualizzare le statistiche di utilizzo del modello:

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

Prendere in esame la sezione usage nella risposta per visualizzare il numero di token usati per il prompt, il numero totale di token generati e il numero di token usati per il completamento.

Streaming dei contenuti

Per impostazione predefinita, l'API di completamento restituisce l'intero contenuto generato in una singola risposta. Se si generano completamenti lunghi, l'attesa della risposta può impiegare diversi secondi.

È possibile trasmettere in streaming i contenuti per ottenerli mentre sono generati. Lo streaming dei contenuti consente di avviare l'elaborazione del completamento man mano che i contenuti diventano disponibili. Questa modalità restituisce un oggetto che ritrasmette la risposta come eventi inviati dal server solo dati. Estrarre blocchi dal campo delta, anziché dal campo del messaggio.

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();

Per trasmettere i completamenti, usare .asNodeStream() quando si chiama il modello.

È possibile visualizzare il modo in cui lo streaming genera contenuti:

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 ?? "");
    }
}

Esplorare altri parametri supportati dal client di inferenza

Esplorare altri parametri che è possibile specificare nel client di inferenza. Per un elenco completo di tutti i parametri supportati e della relativa documentazione corrispondente, vedere Informazioni di riferimento sull'API di inferenza del modello di Azure per intelligenza artificiale.

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" },
    }
});

Avviso

I modelli della famiglia Phi-3 non supportano la formattazione dell'output JSON (response_format = { "type": "json_object" }). È sempre possibile richiedere al modello di generare output JSON. Tuttavia, non è garantito che tali output siano JSON validi.

Se si desidera passare un parametro non incluso nell'elenco dei parametri supportati, è possibile passarlo al modello sottostante usando parametri aggiuntivi. Vedere Passare parametri aggiuntivi al modello.

Passare parametri aggiuntivi al modello

L'API di inferenza del modello di intelligenza artificiale di Azure consente di passare parametri aggiuntivi al modello. Nell'esempio di codice seguente viene illustrato come passare il parametro aggiuntivo logprobs al modello.

Prima di passare parametri aggiuntivi all'API di inferenza del modello di intelligenza artificiale di Azure, assicurarsi che il modello supporti tali parametri aggiuntivi. Quando la richiesta viene effettuata al modello sottostante, l'intestazione extra-parameters viene passata al modello con il valore pass-through. Questo valore indica all'endpoint di passare i parametri aggiuntivi al modello. L'uso di parametri aggiuntivi con il modello non garantisce che il suddetto possa gestirli effettivamente. Leggere la documentazione del modello per comprendere quali parametri aggiuntivi sono supportati.

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
    }
});

È possibile passare i parametri aggiuntivi seguenti ai modelli di chat della famiglia Phi-3:

Nome Descrizione Tipo
logit_bias Accetta un oggetto JSON che esegue il mapping dei token (specificato dal relativo ID token nel tokenizer) con un valore di distorsione associato compreso tra -100 e 100. Matematicamente, la distorsione viene aggiunta ai logits generati dal modello prima del campionamento. L'effetto esatto varia per modello, ma i valori compresi tra -1 e 1 devono diminuire o aumentare la probabilità di selezione; i valori come -100 o 100 devono comportare un divieto o una selezione esclusiva del token pertinente. float
logprobs Indica se restituire o non restituire le probabilità di log dei token di output. Se vero, restituisce le probabilità di log di ogni token di output restituito nella content di message. int
top_logprobs Numero intero compreso tra 0 e 20 che specifica il numero di token più probabili da restituire in ogni posizione del token, ognuno con una probabilità di log associata. logprobs deve essere impostato su true se viene usato questo parametro. float
n Quante opzioni di completamento della chat generare per ogni messaggio di input. Si noti che verranno addebitati i costi in base al numero di token generati in tutte le scelte. int

Applicare la sicurezza dei contenuti

L'API di inferenza del modello di Azure per intelligenza artificiale supporta Sicurezza dei contenuti di Azure AI. Quando si usano distribuzioni con sicurezza dei contenuti di Azure AI attivata, gli input e gli output passano attraverso un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto (anteprima) rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output.

Nell'esempio seguente viene illustrato come gestire gli eventi quando il modello rileva contenuti dannosi nella richiesta di input e la sicurezza dei contenuti è abilitata.

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;
        }
    }
}

Suggerimento

Per altre informazioni su come configurare e controllare le impostazioni di sicurezza dei contenuti di Intelligenza artificiale di Azure, vedere la documentazione sulla sicurezza dei contenuti di Intelligenza artificiale di Azure.

Nota

La sicurezza dei contenuti di Azure per intelligenza artificiale è disponibile solo per i modelli distribuiti come endpoint API serverless.

Modelli di chat della famiglia Phi-3

I modelli di chat della famiglia Phi-3 includono i modelli seguenti:

I modelli Phi-3.5 sono aperti, leggeri e all'avanguardia. Il training di questi modelli è stato effettuato con set di dati Phi-3, che includono dati sintetici e dati dei siti web filtrati e disponibili a livello pubblico, con particolare attenzione alle proprietà di alta qualità e dense di ragionamento.

Phi-3.5 Mini usa parametri 3.8B ed è un modello di trasformatore esclusivamente a decodificatore denso che usa lo stesso tokenizer di Phi-3 Mini.

Phi-3.5 MoE (mixture-of-expert) usa parametri 16x3.8B con parametri attivi 6.6B quando si usano 2 esperti. Il modello è un trasformatore esclusivamente a decodificatore con un mix di esperti, che utilizza un tokenizer con dimensioni del vocabolario pari a 32.064.

I modelli sono stati sottoposti a un rigoroso processo di miglioramento, incorporando sia l'ottimizzazione delle preferenze supervisionate che l'ottimizzazione dei criteri prossimali e l'ottimizzazione diretta delle preferenze, per garantire una precisa conformità alle istruzioni e misure di sicurezza solide. Quando valutati in base ai benchmark che testano il buon senso, la comprensione del linguaggio, la matematica, il codice, il contesto lungo e il ragionamento logico, i modelli Phi-3.5 hanno dimostrato prestazioni affidabili e all'avanguardia tra i modelli con meno di 13 miliardi di parametri.

I modelli Phi-3.5 sono disponibili nelle varianti seguenti, in cui le varianti hanno una lunghezza del contesto (in token) di 128K.

Sono disponibili i seguenti modelli:

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

Prerequisiti

Per usare i modelli di chat della famiglia Phi-3 con Studio di Azure Machine Learning, sono necessari i prerequisiti seguenti:

Distribuzione di modelli

Distribuzione in API serverless

È possibile distribuire i modelli di chat della famiglia Phi-3 in endpoint API serverless con fatturazione con pagamento in base al consumo. Questo tipo di distribuzione consente di usare i modelli come le API senza ospitarli nella sottoscrizione, mantenendo al contempo la sicurezza e la conformità aziendali necessarie alle organizzazioni.

La distribuzione in un endpoint API serverless non richiede la quota dalla sottoscrizione. Se il modello non è già stato distribuito, usare studio di Azure Machine Learning, Azure Machine Learning SDK per Python, l'interfaccia della riga di comando di Azure o i modelli ARM per distribuire il modello come API serverless.

Distribuzione in un ambiente di calcolo gestito self-hosted

È possibile distribuire il modello di chat della famiglia Phi-3 nella soluzione di inferenza gestita self-hosted, che consente di personalizzare e controllare tutti i dettagli su come viene gestito il modello.

Per la distribuzione in un ambiente di calcolo gestito self-hosted, è necessario disporre di una quota sufficiente nella sottoscrizione. Se non è disponibile una quota sufficiente, è possibile usare l’accesso temporaneo alla quota selezionando l'opzione Voglio usare la quota condivisa e accetto che questo endpoint venga eliminato tra 168 ore.

Pacchetto di inferenza installato

È possibile usare le stime di questo modello usando il pacchetto Azure.AI.Inference di NuGet. Per installare questo pacchetto, sono necessari i prerequisiti seguenti:

  • URL dell'endpoint. Per costruire la libreria client, è necessario passare l'URL dell'endpoint. L'URL dell'endpoint ha il formato https://your-host-name.your-azure-region.inference.ai.azure.com, in cui your-host-name è il nome host della distribuzione del modello univoco e your-azure-region è l'area di Azure in cui viene distribuito il modello ( ad esempio eastus2).
  • A seconda della distribuzione del modello e delle preferenze di autenticazione, è necessario disporre di una chiave per l'autenticazione nel servizio o delle credenziali di Microsoft Entra ID. La chiave è una stringa di 32 caratteri.

Dopo aver ottenuto questi prerequisiti, installare la libreria di inferenza di Intelligenza artificiale di Azure con il comando seguente:

dotnet add package Azure.AI.Inference --prerelease

È anche possibile eseguire l'autenticazione con Microsoft Entra ID (in precedenza Azure Active Directory). Per usare provider di credenziali forniti con Azure SDK, installare il pacchetto Azure.Identity:

dotnet add package Azure.Identity

Importare gli spazi dei nomi seguenti:

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

Questo esempio usa anche gli spazi dei nomi seguenti; tuttavia,non sempre i suddetti sono necessari:

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

Usare i completamenti della chat

In questa sezione si usa l'API di inferenza del modello di intelligenza artificiale di Azure con un modello di completamento della chat per la chat.

Suggerimento

L'API di inferenza del modello di Azure per intelligenza artificiale consente di parlare con la maggior parte dei modelli distribuiti in Studio di Azure Machine Learning con la stessa struttura e codice, inclusi i modelli di chat della famiglia Phi-3.

Creare un client per utilizzare il modello

Creare prima di tutto il client per utilizzare il modello. Il codice seguente usa un URL dell'endpoint e una chiave archiviati nelle variabili di ambiente.

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

Quando si distribuisce il modello in un endpoint online self-hosted con il supporto di Microsoft Entra ID, è possibile usare il frammento di codice seguente per creare un client.

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

Nota

Attualmente, gli endpoint API serverless non supportano l'uso di Microsoft Entra ID per l'autenticazione.

Ottenere le funzionalità del modello

La route /info restituisce informazioni sul modello distribuito nell'endpoint. Restituire le informazioni del modello chiamando il metodo seguente:

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

Il formato della risposta è il seguente:

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

Creare una richiesta di completamento della chat

L'esempio seguente illustra come creare una richiesta di completamento della chat di base per il modello.

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);

Nota

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 e Phi-3-medium-128k-Instruct non supportano i messaggi di sistema (role="system"). Quando si usa l'API di inferenza del modello di Azure per intelligenza artificiale, i messaggi di sistema vengono convertiti in messaggi utente, cioè la funzionalità più vicina disponibile. Questa traduzione è disponibile per praticità; tuttavia, è importante verificare che il modello stia seguendo le istruzioni nel messaggio di sistema con il livello di attendibilità corretto.

La risposta è la seguente, in cui è possibile visualizzare le statistiche di utilizzo del modello:

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

Prendere in esame la sezione usage nella risposta per visualizzare il numero di token usati per il prompt, il numero totale di token generati e il numero di token usati per il completamento.

Streaming dei contenuti

Per impostazione predefinita, l'API di completamento restituisce l'intero contenuto generato in una singola risposta. Se si generano completamenti lunghi, l'attesa della risposta può impiegare diversi secondi.

È possibile trasmettere in streaming i contenuti per ottenerli mentre sono generati. Lo streaming dei contenuti consente di avviare l'elaborazione del completamento man mano che i contenuti diventano disponibili. Questa modalità restituisce un oggetto che ritrasmette la risposta come eventi inviati dal server solo dati. Estrarre blocchi dal campo delta, anziché dal campo del messaggio.

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);
}

Per trasmettere i completamenti, usare il metodo CompleteStreamingAsync quando si chiama il modello. Si noti che in questo esempio la chiamata viene sottoposta a wrapping in un metodo asincrono.

Per visualizzare l'output, definire un metodo asincrono per stampare il flusso nella 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);
        }
    }
}

È possibile visualizzare il modo in cui lo streaming genera contenuti:

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

Esplorare altri parametri supportati dal client di inferenza

Esplorare altri parametri che è possibile specificare nel client di inferenza. Per un elenco completo di tutti i parametri supportati e della relativa documentazione corrispondente, vedere Informazioni di riferimento sull'API di inferenza del modello di Azure per intelligenza artificiale.

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}");

Avviso

I modelli della famiglia Phi-3 non supportano la formattazione dell'output JSON (response_format = { "type": "json_object" }). È sempre possibile richiedere al modello di generare output JSON. Tuttavia, non è garantito che tali output siano JSON validi.

Se si desidera passare un parametro non incluso nell'elenco dei parametri supportati, è possibile passarlo al modello sottostante usando parametri aggiuntivi. Vedere Passare parametri aggiuntivi al modello.

Passare parametri aggiuntivi al modello

L'API di inferenza del modello di intelligenza artificiale di Azure consente di passare parametri aggiuntivi al modello. Nell'esempio di codice seguente viene illustrato come passare il parametro aggiuntivo logprobs al modello.

Prima di passare parametri aggiuntivi all'API di inferenza del modello di intelligenza artificiale di Azure, assicurarsi che il modello supporti tali parametri aggiuntivi. Quando la richiesta viene effettuata al modello sottostante, l'intestazione extra-parameters viene passata al modello con il valore pass-through. Questo valore indica all'endpoint di passare i parametri aggiuntivi al modello. L'uso di parametri aggiuntivi con il modello non garantisce che il suddetto possa gestirli effettivamente. Leggere la documentazione del modello per comprendere quali parametri aggiuntivi sono supportati.

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}");

È possibile passare i parametri aggiuntivi seguenti ai modelli di chat della famiglia Phi-3:

Nome Descrizione Tipo
logit_bias Accetta un oggetto JSON che esegue il mapping dei token (specificato dal relativo ID token nel tokenizer) con un valore di distorsione associato compreso tra -100 e 100. Matematicamente, la distorsione viene aggiunta ai logits generati dal modello prima del campionamento. L'effetto esatto varia per modello, ma i valori compresi tra -1 e 1 devono diminuire o aumentare la probabilità di selezione; i valori come -100 o 100 devono comportare un divieto o una selezione esclusiva del token pertinente. float
logprobs Indica se restituire o non restituire le probabilità di log dei token di output. Se vero, restituisce le probabilità di log di ogni token di output restituito nella content di message. int
top_logprobs Numero intero compreso tra 0 e 20 che specifica il numero di token più probabili da restituire in ogni posizione del token, ognuno con una probabilità di log associata. logprobs deve essere impostato su true se viene usato questo parametro. float
n Quante opzioni di completamento della chat generare per ogni messaggio di input. Si noti che verranno addebitati i costi in base al numero di token generati in tutte le scelte. int

Applicare la sicurezza dei contenuti

L'API di inferenza del modello di Azure per intelligenza artificiale supporta Sicurezza dei contenuti di Azure AI. Quando si usano distribuzioni con sicurezza dei contenuti di Azure AI attivata, gli input e gli output passano attraverso un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto (anteprima) rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output.

Nell'esempio seguente viene illustrato come gestire gli eventi quando il modello rileva contenuti dannosi nella richiesta di input e la sicurezza dei contenuti è abilitata.

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;
    }
}

Suggerimento

Per altre informazioni su come configurare e controllare le impostazioni di sicurezza dei contenuti di Intelligenza artificiale di Azure, vedere la documentazione sulla sicurezza dei contenuti di Intelligenza artificiale di Azure.

Nota

La sicurezza dei contenuti di Azure per intelligenza artificiale è disponibile solo per i modelli distribuiti come endpoint API serverless.

Modelli di chat della famiglia Phi-3

I modelli di chat della famiglia Phi-3 includono i modelli seguenti:

I modelli Phi-3.5 sono aperti, leggeri e all'avanguardia. Il training di questi modelli è stato effettuato con set di dati Phi-3, che includono dati sintetici e dati dei siti web filtrati e disponibili a livello pubblico, con particolare attenzione alle proprietà di alta qualità e dense di ragionamento.

Phi-3.5 Mini usa parametri 3.8B ed è un modello di trasformatore esclusivamente a decodificatore denso che usa lo stesso tokenizer di Phi-3 Mini.

Phi-3.5 MoE (mixture-of-expert) usa parametri 16x3.8B con parametri attivi 6.6B quando si usano 2 esperti. Il modello è un trasformatore esclusivamente a decodificatore con un mix di esperti, che utilizza un tokenizer con dimensioni del vocabolario pari a 32.064.

I modelli sono stati sottoposti a un rigoroso processo di miglioramento, incorporando sia l'ottimizzazione delle preferenze supervisionate che l'ottimizzazione dei criteri prossimali e l'ottimizzazione diretta delle preferenze, per garantire una precisa conformità alle istruzioni e misure di sicurezza solide. Quando valutati in base ai benchmark che testano il buon senso, la comprensione del linguaggio, la matematica, il codice, il contesto lungo e il ragionamento logico, i modelli Phi-3.5 hanno dimostrato prestazioni affidabili e all'avanguardia tra i modelli con meno di 13 miliardi di parametri.

I modelli Phi-3.5 sono disponibili nelle varianti seguenti, in cui le varianti hanno una lunghezza del contesto (in token) di 128K.

Sono disponibili i seguenti modelli:

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

Prerequisiti

Per usare i modelli di chat della famiglia Phi-3 con Studio di Azure Machine Learning, sono necessari i prerequisiti seguenti:

Distribuzione di modelli

Distribuzione in API serverless

È possibile distribuire i modelli di chat della famiglia Phi-3 in endpoint API serverless con fatturazione con pagamento in base al consumo. Questo tipo di distribuzione consente di usare i modelli come le API senza ospitarli nella sottoscrizione, mantenendo al contempo la sicurezza e la conformità aziendali necessarie alle organizzazioni.

La distribuzione in un endpoint API serverless non richiede la quota dalla sottoscrizione. Se il modello non è già stato distribuito, usare studio di Azure Machine Learning, Azure Machine Learning SDK per Python, l'interfaccia della riga di comando di Azure o i modelli ARM per distribuire il modello come API serverless.

Distribuzione in un ambiente di calcolo gestito self-hosted

È possibile distribuire il modello di chat della famiglia Phi-3 nella soluzione di inferenza gestita self-hosted, che consente di personalizzare e controllare tutti i dettagli su come viene gestito il modello.

Per la distribuzione in un ambiente di calcolo gestito self-hosted, è necessario disporre di una quota sufficiente nella sottoscrizione. Se non è disponibile una quota sufficiente, è possibile usare l’accesso temporaneo alla quota selezionando l'opzione Voglio usare la quota condivisa e accetto che questo endpoint venga eliminato tra 168 ore.

Un client REST

I modelli distribuiti con l'API di inferenza del modello di Azure per intelligenza artificiale possono essere usati usando qualsiasi client REST. Per usare il client REST, sono necessari i prerequisiti seguenti:

  • Per costruire le richieste, è necessario passare l'URL dell'endpoint. L'URL dell'endpoint ha il formato https://your-host-name.your-azure-region.inference.ai.azure.com, in cui your-host-name`` is your unique model deployment host name and your-azure-region`` è l'area di Azure in cui viene distribuito il modello (ad esempio eastus2).
  • A seconda della distribuzione del modello e delle preferenze di autenticazione, è necessario disporre di una chiave per l'autenticazione nel servizio o delle credenziali di Microsoft Entra ID. La chiave è una stringa di 32 caratteri.

Usare i completamenti della chat

In questa sezione si usa l'API di inferenza del modello di intelligenza artificiale di Azure con un modello di completamento della chat per la chat.

Suggerimento

L'API di inferenza del modello di Azure per intelligenza artificiale consente di parlare con la maggior parte dei modelli distribuiti in Studio di Azure Machine Learning con la stessa struttura e codice, inclusi i modelli di chat della famiglia Phi-3.

Creare un client per utilizzare il modello

Creare prima di tutto il client per utilizzare il modello. Il codice seguente usa un URL dell'endpoint e una chiave archiviati nelle variabili di ambiente.

Quando si distribuisce il modello in un endpoint online self-hosted con il supporto di Microsoft Entra ID, è possibile usare il frammento di codice seguente per creare un client.

Nota

Attualmente, gli endpoint API serverless non supportano l'uso di Microsoft Entra ID per l'autenticazione.

Ottenere le funzionalità del modello

La route /info restituisce informazioni sul modello distribuito nell'endpoint. Restituire le informazioni del modello chiamando il metodo seguente:

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

Il formato della risposta è il seguente:

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

Creare una richiesta di completamento della chat

L'esempio seguente illustra come creare una richiesta di completamento della chat di base per il modello.

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

Nota

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 e Phi-3-medium-128k-Instruct non supportano i messaggi di sistema (role="system"). Quando si usa l'API di inferenza del modello di Azure per intelligenza artificiale, i messaggi di sistema vengono convertiti in messaggi utente, cioè la funzionalità più vicina disponibile. Questa traduzione è disponibile per praticità; tuttavia, è importante verificare che il modello stia seguendo le istruzioni nel messaggio di sistema con il livello di attendibilità corretto.

La risposta è la seguente, in cui è possibile visualizzare le statistiche di utilizzo del modello:

{
    "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
    }
}

Prendere in esame la sezione usage nella risposta per visualizzare il numero di token usati per il prompt, il numero totale di token generati e il numero di token usati per il completamento.

Streaming dei contenuti

Per impostazione predefinita, l'API di completamento restituisce l'intero contenuto generato in una singola risposta. Se si generano completamenti lunghi, l'attesa della risposta può impiegare diversi secondi.

È possibile trasmettere in streaming i contenuti per ottenerli mentre sono generati. Lo streaming dei contenuti consente di avviare l'elaborazione del completamento man mano che i contenuti diventano disponibili. Questa modalità restituisce un oggetto che ritrasmette la risposta come eventi inviati dal server solo dati. Estrarre blocchi dal campo delta, anziché dal campo del messaggio.

{
    "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
}

È possibile visualizzare il modo in cui lo streaming genera contenuti:

{
    "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
        }
    ]
}

Nell'ultimo messaggio nel flusso è impostato finish_reason, che indica il motivo per cui il processo di generazione deve essere arrestato.

{
    "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
    }
}

Esplorare altri parametri supportati dal client di inferenza

Esplorare altri parametri che è possibile specificare nel client di inferenza. Per un elenco completo di tutti i parametri supportati e della relativa documentazione corrispondente, vedere Informazioni di riferimento sull'API di inferenza del modello di Azure per intelligenza artificiale.

{
    "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
    }
}

Avviso

I modelli della famiglia Phi-3 non supportano la formattazione dell'output JSON (response_format = { "type": "json_object" }). È sempre possibile richiedere al modello di generare output JSON. Tuttavia, non è garantito che tali output siano JSON validi.

Se si desidera passare un parametro non incluso nell'elenco dei parametri supportati, è possibile passarlo al modello sottostante usando parametri aggiuntivi. Vedere Passare parametri aggiuntivi al modello.

Passare parametri aggiuntivi al modello

L'API di inferenza del modello di intelligenza artificiale di Azure consente di passare parametri aggiuntivi al modello. Nell'esempio di codice seguente viene illustrato come passare il parametro aggiuntivo logprobs al modello.

Prima di passare parametri aggiuntivi all'API di inferenza del modello di intelligenza artificiale di Azure, assicurarsi che il modello supporti tali parametri aggiuntivi. Quando la richiesta viene effettuata al modello sottostante, l'intestazione extra-parameters viene passata al modello con il valore pass-through. Questo valore indica all'endpoint di passare i parametri aggiuntivi al modello. L'uso di parametri aggiuntivi con il modello non garantisce che il suddetto possa gestirli effettivamente. Leggere la documentazione del modello per comprendere quali parametri aggiuntivi sono supportati.

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
}

È possibile passare i parametri aggiuntivi seguenti ai modelli di chat della famiglia Phi-3:

Nome Descrizione Tipo
logit_bias Accetta un oggetto JSON che esegue il mapping dei token (specificato dal relativo ID token nel tokenizer) con un valore di distorsione associato compreso tra -100 e 100. Matematicamente, la distorsione viene aggiunta ai logits generati dal modello prima del campionamento. L'effetto esatto varia per modello, ma i valori compresi tra -1 e 1 devono diminuire o aumentare la probabilità di selezione; i valori come -100 o 100 devono comportare un divieto o una selezione esclusiva del token pertinente. float
logprobs Indica se restituire o non restituire le probabilità di log dei token di output. Se vero, restituisce le probabilità di log di ogni token di output restituito nella content di message. int
top_logprobs Numero intero compreso tra 0 e 20 che specifica il numero di token più probabili da restituire in ogni posizione del token, ognuno con una probabilità di log associata. logprobs deve essere impostato su true se viene usato questo parametro. float
n Quante opzioni di completamento della chat generare per ogni messaggio di input. Si noti che verranno addebitati i costi in base al numero di token generati in tutte le scelte. int

Applicare la sicurezza dei contenuti

L'API di inferenza del modello di Azure per intelligenza artificiale supporta Sicurezza dei contenuti di Azure AI. Quando si usano distribuzioni con sicurezza dei contenuti di Azure AI attivata, gli input e gli output passano attraverso un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto (anteprima) rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output.

Nell'esempio seguente viene illustrato come gestire gli eventi quando il modello rileva contenuti dannosi nella richiesta di input e la sicurezza dei contenuti è abilitata.

{
    "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
    }
}

Suggerimento

Per altre informazioni su come configurare e controllare le impostazioni di sicurezza dei contenuti di Intelligenza artificiale di Azure, vedere la documentazione sulla sicurezza dei contenuti di Intelligenza artificiale di Azure.

Nota

La sicurezza dei contenuti di Azure per intelligenza artificiale è disponibile solo per i modelli distribuiti come endpoint API serverless.

Altri esempi di inferenza del modello

Per altri esempi su come usare i modelli della famiglia Phi-3, vedere gli esempi e le esercitazioni seguenti:

Descrizione Lingua Esempio
Richiesta CURL Bash Collegamento
Pacchetto di inferenza di Intelligenza artificiale di Azure per JavaScript JavaScript Collegamento
Pacchetto di inferenza di Intelligenza artificiale di Azure per Python Python Collegamento
Richieste Web Python Python Collegamento
SDK di OpenAI (sperimentale) Python Collegamento
LangChain Python Collegamento
LiteLLM Python Collegamento

Considerazioni su costi e quote per i modelli della famiglia Phi-3 distribuiti come endpoint API serverless

La quota viene gestita per distribuzione. Ogni distribuzione ha un limite di frequenza di 200.000 token al minuto e 1.000 richieste API al minuto. Attualmente, tuttavia, viene limitata una distribuzione per ogni modello per ogni progetto. Contattare il supporto tecnico di Microsoft Azure se i limiti di frequenza correnti non sono sufficienti per gli scenari in uso.

Considerazioni su costi e quote per i modelli della famiglia Phi-3 distribuiti nel calcolo gestito

I modelli della famiglia Phi-3 distribuiti nel calcolo gestito vengono fatturati in base alle ore core dell'istanza dell'ambiente di calcolo associata. Il costo dell'istanza dell'ambiente di calcolo è determinato dalle dimensioni dell'istanza, dal numero di istanze in esecuzione e dalla durata dell'esecuzione.

È consigliabile iniziare con un numero ridotto di istanze e aumentare come necessario. È possibile monitorare il costo dell'istanza di ambiente di calcolo nel portale di Azure.