Esercitazione: Introduzione al modello di ragionamento DeepSeek-R1 nei Modelli Foundry di Microsoft

Questa esercitazione illustra come distribuire e usare un modello di ragionamento DeepSeek in Microsoft Foundry. Questa esercitazione usa DeepSeek-R1 per l'illustrazione. Tuttavia, il contenuto si applica anche al modello di ragionamento DeepSeek-R1-0528 più recente.

Cosa si ottiene:

In questa esercitazione si distribuisce il modello di ragionamento DeepSeek-R1, si inviano richieste di inferenza a livello di codice usando il codice e si analizza l'output di ragionamento per comprendere come il modello arriva alle relative risposte.

I passaggi eseguiti in questa esercitazione sono:

  • Creare e configurare le risorse di Azure per l'uso di DeepSeek-R1 in Modelli di Foundry.
  • Configurare la distribuzione del modello.
  • Usare DeepSeek-R1 con le API OpenAI di nuova generazione v1 Azure per usare il modello nel codice.

Prerequisiti

Per completare questo articolo, è necessario:

  • Sottoscrizione Azure con un metodo di pagamento valido. Se non hai una sottoscrizione Azure, crea un account Azure a pagamento per iniziare. Se stai utilizzando i modelli di GitHub, puoi eseguire l'aggiornamento dai modelli di GitHub ai modelli Microsoft Foundry e creare una sottoscrizione Azure nel frattempo.

  • Accesso a Microsoft Foundry con le autorizzazioni appropriate per creare e gestire le risorse. In genere è necessario il ruolo di Collaboratore o Proprietario sul gruppo di risorse per la creazione di risorse e la distribuzione di modelli.

  • Ruolo Utente di Servizi cognitivi (o superiore) assegnato all'account Azure sulla risorsa Foundry. Questo ruolo è necessario per effettuare chiamate di inferenza con Microsoft Entra ID. Assegnalo nel portale di Azure in Controllo di accesso (IAM) sulla risorsa Foundry.

  • Installare Azure OpenAI SDK per il linguaggio di programmazione:

    • Python: pip install openai azure-identity
    • .NET: dotnet add package OpenAI e dotnet add package Azure.Identity
    • JavaScript: npm install openai @azure/identity
    • Java: aggiungere i pacchetti com.openai:openai-java e com.azure:azure-identity

DeepSeek-R1 è un modello di ragionamento che genera spiegazioni insieme alle risposte. Supporta i completamenti di chat basati su testo, ma non supporta i formati di output strutturati o chiamate di strumenti. Per informazioni dettagliate, vedere Informazioni sui modelli di ragionamento .

Creare le risorse

Per creare un progetto Foundry che supporta la distribuzione per DeepSeek-R1, seguire questa procedura. È anche possibile creare le risorse usando interfaccia della riga di comando di Azure o infrastructure come codice, con Bicep.

  1. Accedere a Microsoft Foundry. Assicurarsi che l'interruttore New Foundry sia attivato. Questi passaggi fanno riferimento a Foundry (nuovo).These steps refer to Foundry (new).
  2. Il progetto su cui si sta lavorando viene visualizzato nell'angolo superiore sinistro.
  3. Per creare un nuovo progetto, selezionare il nome del progetto e quindi Crea nuovo progetto.
  4. Assegnare un nome al progetto e selezionare Crea progetto.

Distribuire il modello

  1. Aggiungere un modello al progetto. Selezionare Compila al centro della pagina e quindi Modello.
  2. Selezionare Distribuisci modello di base per aprire il catalogo dei modelli.
  3. Trovare e selezionare il riquadro del modello DeepSeek-R1 per aprire la scheda del modello e selezionare Distribuisci. È possibile selezionare Distribuzione rapida per usare le impostazioni predefinite oppure selezionare Personalizza distribuzione per visualizzare e modificare le impostazioni di distribuzione.

Al termine della distribuzione, si raggiunge il relativo playground, in cui è possibile iniziare a interagire con la distribuzione. Verificare che la distribuzione sia pronta verificando che lo stato della distribuzione sia Completato. Prendere nota del nome della distribuzione e dell'URI dell'endpoint dai dettagli della distribuzione, entrambi necessari per la sezione del codice.

Se preferisci esplorare prima il modello in modo interattivo, vai a Usare il modello nel campo di prova.

Usare il modello nel codice

Usare l'endpoint e le credenziali dei modelli Foundry per connettersi al modello.

  1. Selezionare il riquadro Dettagli nel riquadro superiore di Playgrounds per visualizzare i dettagli della distribuzione. Qui è possibile trovare l'URI e la chiave API della distribuzione.
  2. Ottieni il nome della risorsa dall'URI della distribuzione per effettuare inferenze sul modello tramite codice.

Utilizza le API Azure OpenAI di nuova generazione v1 per integrare il modello nel tuo codice. Questi esempi di codice usano un approccio di autenticazione sicuro e senza chiave, Microsoft Entra ID, tramite la libreria di identità Azure.

Gli esempi di codice seguenti illustrano come:

  1. Eseguire l'autenticazione con Microsoft Entra ID usando DefaultAzureCredential, che tenta automaticamente più metodi di autenticazione (variabili di ambiente, identità gestita, interfaccia della riga di comando di Azure e altri). L'ordine esatto dipende dalla versione di Azure Identity SDK in uso.

    Suggerimento

    Per lo sviluppo locale, assicurarsi di essere autenticati con interfaccia della riga di comando di Azure eseguendo az login. Per le distribuzioni di produzione in Azure, configurare l'identità gestita per l'applicazione.

  2. Creare un client di completamento della chat connesso alla distribuzione del modello

  3. Inviare un prompt di base al modello di DeepSeek-R1

  4. Ricevere e visualizzare la risposta

Output previsto: Risposta JSON contenente la risposta del modello, il processo di ragionamento (all'interno <think> di tag), le statistiche di utilizzo dei token (token di richiesta, token di completamento, token totali) e informazioni sul modello.

Installare i pacchetti openai e azure-identity usare la gestione pacchetti, ad esempio pip:

pip install --upgrade openai azure-identity

L'esempio seguente illustra come creare un client per utilizzare i completamenti della chat e quindi generare e stampare la risposta:


from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)
response = client.chat.completions.create(
  model="DeepSeek-R1", # Replace with your model deployment name.
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "How many languages are in the world?"}
  ]
)

#print(response.choices[0].message)
print(response.model_dump_json(indent=2))

Suggerimento

Dopo aver eseguito il codice, dovrebbe essere visualizzata una risposta JSON che include choices[0].message.content con la risposta del modello. Se il modello genera un ragionamento, la risposta contiene contenuto racchiuso in <think>...</think> tag seguiti dalla risposta finale.

Informazioni di riferimento sulle API:

Il ragionamento potrebbe generare risposte più lunghe e utilizzare un numero maggiore di token. DeepSeek-R1 supporta fino a 5.000 richieste al minuto e 5.000.000 token al minuto. Vedere i limiti di frequenza applicabili ai modelli di DeepSeek-R1. Valutare la possibilità di avere una strategia di ripetizione dei tentativi per gestire i limiti di velocità. È anche possibile richiedere aumenti ai limiti predefiniti.

Informazioni sui modelli di ragionamento

I modelli di ragionamento possono raggiungere livelli più elevati di prestazioni in domini come matematica, codifica, scienza, strategia e logistica. Il modo in cui questi modelli producono output consiste nell'usare in modo esplicito la catena di pensiero per esplorare tutti i possibili percorsi prima di generare una risposta. Verificano le loro risposte man mano che li producono, che aiutano ad arrivare a conclusioni più accurate. Di conseguenza, i modelli di ragionamento potrebbero richiedere meno richieste di contesto per produrre risultati effettivi.

I modelli di ragionamento producono due tipi di contenuto come output:

  • Completamento del ragionamento
  • Completamenti dell'output

Entrambi questi completamenti vengono conteggiati per il contenuto generato dal modello. Di conseguenza, contribuiscono ai limiti e ai costi dei token associati al modello. Alcuni modelli, ad esempio DeepSeek-R1, potrebbero rispondere con il contenuto di ragionamento. Altri, ad esempio o1, generano solo i completamenti.

Contenuto di ragionamento

Alcuni modelli di ragionamento, ad esempio DeepSeek-R1, generano completamenti e includono il motivo sottostante. Il ragionamento associato al completamento è incluso nel contenuto della risposta all'interno dei tag <think> e </think>. Il modello può selezionare gli scenari per cui generare contenuto di ragionamento. Nell'esempio seguente viene illustrato come generare il contenuto del ragionamento usando Python:

import re

match = re.match(r"<think>(.*?)</think>(.*)", response.choices[0].message.content, re.DOTALL)

print("Response:")
if match:
    print("\tThinking:", match.group(1))
    print("\tAnswer:", match.group(2))
else:
    print("\tAnswer:", 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)
Thinking: Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer. Let's start by recalling the general consensus from linguistic sources. I remember that the number often cited is around 7,000, but maybe I should check some reputable organizations.\n\nEthnologue is a well-known resource for language data, and I think they list about 7,000 languages. But wait, do they update their numbers? It might be around 7,100 or so. Also, the exact count can vary because some sources might categorize dialects differently or have more recent data. \n\nAnother thing to consider is language endangerment. Many languages are endangered, with some having only a few speakers left. Organizations like UNESCO track endangered languages, so mentioning that adds context. Also, the distribution isn't even. Some countries or regions have hundreds of languages, like Papua New Guinea with over 800, while others have just a few. \n\nA user might also wonder why the exact number is hard to pin down. It's because the distinction between a language and a dialect can be political or cultural. For example, Mandarin and Cantonese are considered dialects of Chinese by some, but they're mutually unintelligible, so others classify them as separate languages. Also, some regions are under-researched, making it hard to document all languages. \n\nI should also touch on language families. The 7,000 languages are grouped into families like Indo-European, Sino-Tibetan, Niger-Congo, etc. Maybe mention a few of the largest families. But wait, the question is just about the count, not the families. Still, it's good to provide a bit more context. \n\nI need to make sure the information is up-to-date. Let me think – recent estimates still hover around 7,000. However, languages are dying out rapidly, so the number decreases over time. Including that note about endangerment and language extinction rates could be helpful. For instance, it's often stated that a language dies every few weeks. \n\nAnother point is sign languages. Does the count include them? Ethnologue includes some, but not all sources might. If the user is including sign languages, that adds more to the count, but I think the 7,000 figure typically refers to spoken languages. For thoroughness, maybe mention that there are also over 300 sign languages. \n\nSummarizing, the answer should state around 7,000, mention Ethnologue's figure, explain why the exact number varies, touch on endangerment, and possibly note sign languages as a separate category. Also, a brief mention of Papua New Guinea as the most linguistically diverse country/region. \n\nWait, let me verify Ethnologue's current number. As of their latest edition (25th, 2022), they list 7,168 living languages. But I should check if that's the case. Some sources might round to 7,000. Also, SIL International publishes Ethnologue, so citing them as reference makes sense. \n\nOther sources, like Glottolog, might have a different count because they use different criteria. Glottolog might list around 7,000 as well, but exact numbers vary. It's important to highlight that the count isn't exact because of differing definitions and ongoing research. \n\nIn conclusion, the approximate number is 7,000, with Ethnologue being a key source, considerations of endangerment, and the challenges in counting due to dialect vs. language distinctions. I should make sure the answer is clear, acknowledges the variability, and provides key points succinctly.

Answer: The exact number of languages in the world is challenging to determine due to differences in definitions (e.g., distinguishing languages from dialects) and ongoing documentation efforts. However, widely cited estimates suggest there are approximately **7,000 languages** globally.
Model: DeepSeek-R1
Usage: 
  Prompt tokens: 11
  Total tokens: 897
  Completion tokens: 886

Informazioni di riferimento sulle API:

Modelli di ragionamento prompt

Quando si costruiscono richieste per modelli di ragionamento, tenere in considerazione quanto segue:

  • Usare istruzioni semplici ed evitare l'uso di tecniche di concatenazione del pensiero.
  • Le funzionalità di ragionamento predefinite rendono le semplici richieste zero-shot efficaci come metodi più complessi.
  • Quando si forniscono contesto o documenti aggiuntivi, ad esempio negli scenari RAG, includere solo le informazioni più rilevanti potrebbe aiutare a impedire che il modello complici eccessivamente la risposta.
  • I modelli di ragionamento possono supportare l'uso dei messaggi di sistema. Tuttavia, potrebbero non seguirli rigorosamente come altri modelli non basati sul ragionamento.
  • Quando si creano applicazioni a più turni, è consigliabile aggiungere solo la risposta finale del modello, escludendo il contenuto di ragionamento, come spiegato nella sezione Contenuto di ragionamento.

Si noti che i modelli di ragionamento possono richiedere più tempo per generare risposte. Usano lunghe catene di ragionamento di pensiero che consentono una risoluzione dei problemi più profonda e più strutturata. Eseguono anche l'auto-verifica per controllare le loro risposte e correggere i loro errori, mostrando così comportamenti emergenti di auto-riflessione.

Parametri

I modelli di ragionamento supportano un sottoinsieme di parametri di completamento della chat standard per mantenere l'integrità del processo di ragionamento.

Parametri supportati:

  • max_tokens - Numero massimo di token da generare nella risposta
  • stop - Sequenze in cui l'API smette di generare token
  • stream - Abilitare le risposte in streaming
  • n - Numero di completamenti da generare

Parametri non supportati (i modelli di ragionamento non supportano):

  • temperature - Correzione per ottimizzare la qualità del ragionamento
  • top_p - Non configurabile per i modelli di ragionamento
  • presence_penalty - Non disponibile
  • repetition_penalty - Non disponibile per i modelli di ragionamento

Esempio con max_tokens:

response = client.chat.completions.create(
    model="DeepSeek-R1",
    messages=[
        {"role": "user", "content": "Explain quantum computing"}
    ],
    max_tokens=1000  # Limit response length
)

Per l'elenco completo dei parametri supportati, vedere le informazioni di riferimento sull'API di completamento della chat.

Usare il modello nell'area di prova

Usare il modello nel playground per ottenere un'idea delle funzionalità del modello.

Al termine della distribuzione, si arriva nell'area di prova del modello, dove è possibile iniziare a interagire con l'implementazione. Ad esempio, è possibile immettere i prompt, ad esempio "Quante lingue ci sono nel mondo?" nel playground.

Risoluzione dei problemi

Se si verificano problemi durante l'esecuzione di questa esercitazione, usare le indicazioni seguenti per risolvere i problemi comuni.

Errori di autenticazione (401/403)

  • Accertarsi di aver eseguito l'accesso a CLI di Azure. Per lo sviluppo locale, eseguire az login prima di eseguire il codice. DefaultAzureCredential usa le credenziali interfaccia della riga di comando di Azure come fallback quando non sono disponibili altre credenziali.
  • Verificare le assegnazioni di ruolo. L'account Azure necessita del ruolo utente Utente di Servizi cognitivi (o versione successiva) nella risorsa Foundry per effettuare chiamate di inferenza con Microsoft Entra ID. Se questo ruolo non è ancora stato assegnato, vedere la sezione Prerequisiti.
  • Controllare il formato dell'endpoint. L'URL dell'endpoint deve seguire il formato https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/. Verificare che il nome della risorsa corrisponda alla risorsa Foundry.

Problemi di distribuzione

  • Nome della distribuzione e nome del modello. Il model parametro nelle chiamate API fa riferimento al nome della distribuzione, non al nome del modello. Se il nome della distribuzione è stato personalizzato durante la creazione, usare tale nome anziché DeepSeek-R1.
  • Distribuzione non pronta. Se viene visualizzato un errore 404, verificare che lo stato della distribuzione sia Completato nel portale foundry prima di effettuare chiamate API.

Limitazione della frequenza (errori 429)

  • Implementare la logica di ripetizione dei tentativi. I modelli di ragionamento generano risposte più lunghe che utilizzano più token. Usare il backoff esponenziale per gestire gli errori 429 (troppe richieste).
  • Monitorare l'utilizzo dei token. DeepSeek-R1 il contenuto di ragionamento (nei tag <think>) viene conteggiato nel limite di token. Vedere quote e limiti per i limiti di velocità correnti.
  • Aumento della quota richiesta. Se si raggiunge costantemente i limiti di frequenza, la richiesta aumenta ai limiti predefiniti.

Problemi di installazione dei pacchetti

  • Python. Installare entrambi i pacchetti necessari: pip install openai azure-identity. Il azure-identity pacchetto è obbligatorio per DefaultAzureCredential.
  • Javascript. Installare entrambi i pacchetti necessari: npm install openai @azure/identity.
  • .NET. Installare il pacchetto identity Azure: dotnet add package Azure.Identity.

Cosa si è appreso

In questa esercitazione sono state eseguite le operazioni seguenti:

  • Risorse di fonderia sono state create per l'hosting di modelli di intelligenza artificiale
  • È stato distribuito il modello di ragionamento DeepSeek-R1
  • Eseguito l'uso di API autenticate utilizzando Microsoft Entra ID
  • Richieste di inferenza inviate e output di ragionamento ricevuti
  • Analisi del contenuto di ragionamento dalle risposte del modello per comprendere il processo di pensiero del modello