Delen via


Redeneringsmodellen gebruiken met Azure AI Foundry-modellen

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

In dit artikel wordt uitgelegd hoe u de redeneringsmogelijkheden van chatvoltooiingsmodellen gebruikt die zijn geïmplementeerd in Azure AI Foundry-modellen.

Redeneringsmodellen

Redeneringsmodellen kunnen hogere prestatieniveaus bereiken in domeinen zoals wiskunde, codering, wetenschap, strategie en logistiek. De manier waarop deze modellen uitvoer produceren, is door expliciet een keten van gedachte te gebruiken om alle mogelijke paden te verkennen voordat een antwoord wordt gegenereerd. Ze controleren hun antwoorden wanneer ze ze produceren, wat helpt bij het bereiken van nauwkeurigere conclusies. Als gevolg hiervan vereisen redeneringsmodellen mogelijk minder context bij het vragen om effectieve resultaten te produceren.

Deze manier om de prestaties van een model te schalen, wordt de inference rekentijd genoemd, omdat de prestaties worden verhandeld ten opzichte van hogere latentie en kosten. Andere benaderingen kunnen daarentegen worden geschaald door de rekentijd van de training.

Redeneringsmodellen produceren twee soorten inhoud als uitvoer:

  • Voltooien van redeneringen
  • Uitvoer voltooiingen

Beide voltooiingen tellen mee voor inhoud die is gegenereerd op basis van het model. Daarom dragen ze bij aan de tokenlimieten en kosten die aan het model zijn gekoppeld. Sommige modellen, zoals DeepSeek-R1, reageren mogelijk met de redeneringsinhoud. Andere, zoals o1, voeren alleen de voltooiingen uit.

Vereiste voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

Redeneringsmogelijkheden gebruiken met chatten

Maak eerst de client om het model te gebruiken. De volgende code maakt gebruik van een eindpunt-URL en -sleutel die zijn opgeslagen in omgevingsvariabelen.

import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    azure_endpoint = "https://<resource>.services.ai.azure.com",
    api_key=os.getenv("AZURE_INFERENCE_CREDENTIAL"),  
    api_version="2024-10-21",
)

Als je de bron hebt geconfigureerd met ondersteuning voor Microsoft Entra ID, kun je de volgende codefragment gebruiken om een client te maken.

import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

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

client = AzureOpenAI(
    azure_endpoint = "https://<resource>.services.ai.azure.com",
    azure_ad_token_provider=token_provider,
    api_version="2024-10-21",
)

Modellen voor redeneren

Houd bij het opstellen van prompts voor redeneermodellen rekening met het volgende:

  • Gebruik eenvoudige instructies en vermijd het gebruik van ketting-van-gedachtetechnieken.
  • Ingebouwde redeneringsmogelijkheden zorgen ervoor dat eenvoudige zero-shot prompts net zo effectief zijn als complexere methoden.
  • Wanneer u aanvullende context of documenten opgeeft, zoals in RAG-scenario's, met inbegrip van alleen de meest relevante informatie, kan dit helpen voorkomen dat het model het antwoord te veel compliceert.
  • Redeneringsmodellen kunnen het gebruik van systeemberichten ondersteunen. Ze volgen ze echter mogelijk niet zo strikt als andere niet-redenerende modellen.
  • Bij het maken van toepassingen met meerdere wendingen, overweeg alleen het uiteindelijke antwoord van het model toe te voegen, zonder de redeneringsinhoud ervan, zoals uitgelegd in de sectie Redeneringsinhoud.

U ziet dat het langer kan duren voordat modellen met redeneringen antwoorden genereren. Ze gebruiken lange redeneringsketens van gedachten die dieper en meer gestructureerde probleemoplossing mogelijk maken. Ze voeren ook zelfverificatie uit om hun antwoorden kruislings te controleren en hun fouten te corrigeren, waardoor het opkomende zelf reflecterende gedrag wordt getoond.

Een aanvraag voor het voltooien van een chat maken

Het volgende voorbeeld laat zien hoe je een eenvoudig chatverzoek naar het model kunt maken.

response = client.chat.completions.create(
    model="deepseek-r1",
    messages=[
        {"role": "user", "content": "How many languages are in the world?"}
    ]
)

Het antwoord is als volgt, waar u de gebruiksstatistieken van het model kunt zien:

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: deepseek-r1
Usage: 
  Prompt tokens: 11
  Total tokens: 897
  Completion tokens: 886

Redeneringsinhoud

Opmerking

Deze informatie over redeneringsinhoud is niet van toepassing op Azure OpenAI-modellen. Azure OpenAI-redeneringsmodellen gebruiken de redeneringsfunctie voor samenvattingen.

Sommige redeneringsmodellen, zoals DeepSeek-R1, genereren voltooiingen en bevatten de redenering erachter.

De redenering die aan de voltooiing is gekoppeld, is opgenomen in het veld reasoning_content. Het model kan selecteren welke scenario's u wilt gebruiken om redeneringsinhoud te genereren.

print("Thinking:", response.choices[0].message.reasoning_content)
Thinking: Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer...

Wanneer u gesprekken met meerdere rondes maakt, is het handig om te voorkomen dat de inhoud van de redenering in de chatgeschiedenis wordt verzonden, omdat beredenatie vaak lange uitleg genereert.

Inhoud streamen

Standaard retourneert de voltooiings-API de volledige gegenereerde inhoud in één antwoord. Als je lange voltooiingen genereert, kan het enkele seconden duren voordat je de reactie krijgt.

U kunt de inhoud streamen om deze te verkrijgen terwijl deze wordt gegenereerd. Met streaming-inhoud kunt u beginnen met het verwerken van het voltooide proces zodra inhoud beschikbaar komt. Deze modus retourneert een object dat het antwoord terug streamt als door de server verzonden gebeurtenissen met alleen data. Extraheer segmenten uit het delta veld, in plaats van het berichtenveld.

Om voltooiingen te streamen, stelt u stream=True in wanneer u het model aanroept.

response = client.chat.completions.create(
    model="deepseek-r1",
    messages=[
        {"role": "user", "content": "How many languages are in the world?"}
    ],
    stream=True
)

Om de output te visualiseren, definieer een hulpfunctie om de stream te printen. Het volgende voorbeeld implementeert een routing die alleen het antwoord streamt zonder de redeneerinhoud.

Redeneringsinhoud wordt ook opgenomen in de deltaonderdelen van het antwoord, in de sleutel reasoning_content.

def print_stream(completion):
    """
    Prints the chat completion with streaming.
    """
    is_thinking = False
    for event in completion:
        if event.choices:
            content = event.choices[0].delta.content
            reasoning_content = event.choices[0].delta.reasoning_content if hasattr(event.choices[0].delta, "reasoning_content") else None
            if reasoning_content and not is_thinking:
                is_thinking = True
                print("🧠 Thinking...", end="", flush=True)
            elif content:
                if is_thinking:
                    is_thinking = False
                    print("🛑\n\n")
            print(content or reasoning_content, end="", flush=True)

print_stream(response)

U kunt visualiseren hoe streaming inhoud genereert:

print_stream(response)

Parameterwaarden

In het algemeen bieden redeneringsmodellen geen ondersteuning voor de volgende parameters die u kunt vinden in voltooiingsmodellen voor chats:

  • Temperatuur
  • Aanwezigheidsstraf
  • Herhalingsstraf
  • Parameter top_p

Sommige modellen ondersteunen het gebruik van tools of gestructureerde uitvoer (inclusief JSON-schema's). Lees de detailpagina van de Modellen om inzicht te krijgen in de ondersteuning van elk model.

Richtlijnen en controlemechanismen toepassen

De Azure AI-modeldeductie-API ondersteunt Azure AI Content Safety. Wanneer u implementaties gebruikt met Azure AI Content Safety ingeschakeld, passeren invoer en uitvoer een ensemble van classificatiemodellen die zijn gericht op het detecteren en voorkomen van de uitvoer van schadelijke inhoud. Het inhoudsfiltersysteem detecteert en onderneemt actie op specifieke categorieën van mogelijk schadelijke inhoud in zowel invoerprompts als uitvoervoltooiingen.

In het volgende voorbeeld ziet u hoe gebeurtenissen worden verwerkt wanneer het model schadelijke inhoud detecteert in de invoerprompt.

try:
    response = client.chat.completions.create(
        model="deepseek-r1",
        messages=[
            {"role": "user", "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

Aanbeveling

Raadpleeg de documentatie over Azure AI Content Safety voor meer informatie over hoe u Azure AI Content Safety-instellingen kunt configureren en beheren.

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

In dit artikel wordt uitgelegd hoe u de redeneringsmogelijkheden van chatvoltooiingsmodellen gebruikt die zijn geïmplementeerd in Azure AI Foundry-modellen.

Redeneringsmodellen

Redeneringsmodellen kunnen hogere prestatieniveaus bereiken in domeinen zoals wiskunde, codering, wetenschap, strategie en logistiek. De manier waarop deze modellen uitvoer produceren, is door expliciet een keten van gedachte te gebruiken om alle mogelijke paden te verkennen voordat een antwoord wordt gegenereerd. Ze controleren hun antwoorden wanneer ze ze produceren, wat helpt bij het bereiken van nauwkeurigere conclusies. Als gevolg hiervan vereisen redeneringsmodellen mogelijk minder context bij het vragen om effectieve resultaten te produceren.

Deze manier om de prestaties van een model te schalen, wordt de inference rekentijd genoemd, omdat de prestaties worden verhandeld ten opzichte van hogere latentie en kosten. Andere benaderingen kunnen daarentegen worden geschaald door de rekentijd van de training.

Redeneringsmodellen produceren twee soorten inhoud als uitvoer:

  • Voltooien van redeneringen
  • Uitvoer voltooiingen

Beide voltooiingen tellen mee voor inhoud die is gegenereerd op basis van het model. Daarom dragen ze bij aan de tokenlimieten en kosten die aan het model zijn gekoppeld. Sommige modellen, zoals DeepSeek-R1, reageren mogelijk met de redeneringsinhoud. Andere, zoals o1, voeren alleen de voltooiingen uit.

Vereiste voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

  • Installeer de Azure-deductiebibliotheek voor JavaScript met de volgende opdracht:

    npm install @azure-rest/ai-inference
    npm install @azure/core-auth
    npm install @azure/identity
    

    Als u Node.jsgebruikt, kunt u de afhankelijkheden configureren in package.json:

    package.json

    {
      "name": "main_app",
      "version": "1.0.0",
      "description": "",
      "main": "app.js",
      "type": "module",
      "dependencies": {
        "@azure-rest/ai-inference": "1.0.0-beta.6",
        "@azure/core-auth": "1.9.0",
        "@azure/core-sse": "2.2.0",
        "@azure/identity": "4.8.0"
      }
    }
    
  • Importeer het volgende:

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

Redeneringsmogelijkheden gebruiken met chatten

Maak eerst de client om het model te gebruiken. De volgende code maakt gebruik van een eindpunt-URL en -sleutel die zijn opgeslagen in omgevingsvariabelen.

const client = ModelClient(
    "https://<resource>.services.ai.azure.com/models", 
    new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);

Als u de resource hebt geconfigureerd met ondersteuning voor Microsoft Entra ID , kunt u het volgende codefragment gebruiken om een client te maken.

const clientOptions = { credentials: { "https://cognitiveservices.azure.com/.default" } };

const client = ModelClient(
    "https://<resource>.services.ai.azure.com/models", 
    new DefaultAzureCredential()
    clientOptions,
);

Modellen voor redeneren

Houd bij het opstellen van prompts voor redeneermodellen rekening met het volgende:

  • Gebruik eenvoudige instructies en vermijd het gebruik van ketting-van-gedachtetechnieken.
  • Ingebouwde redeneringsmogelijkheden zorgen ervoor dat eenvoudige zero-shot prompts net zo effectief zijn als complexere methoden.
  • Wanneer u aanvullende context of documenten opgeeft, zoals in RAG-scenario's, met inbegrip van alleen de meest relevante informatie, kan dit helpen voorkomen dat het model het antwoord te veel compliceert.
  • Redeneringsmodellen kunnen het gebruik van systeemberichten ondersteunen. Ze volgen ze echter mogelijk niet zo strikt als andere niet-redenerende modellen.
  • Bij het maken van toepassingen met meerdere wendingen, overweeg alleen het uiteindelijke antwoord van het model toe te voegen, zonder de redeneringsinhoud ervan, zoals uitgelegd in de sectie Redeneringsinhoud.

U ziet dat het langer kan duren voordat modellen met redeneringen antwoorden genereren. Ze gebruiken lange redeneringsketens van gedachten die dieper en meer gestructureerde probleemoplossing mogelijk maken. Ze voeren ook zelfverificatie uit om hun antwoorden kruislings te controleren en hun fouten te corrigeren, waardoor het opkomende zelf reflecterende gedrag wordt getoond.

Een aanvraag voor het voltooien van een chat maken

Het volgende voorbeeld laat zien hoe je een eenvoudig chatverzoek naar het model kunt maken.

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

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

Het antwoord is als volgt, waar u de gebruiksstatistieken van het model kunt zien:

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: <think>Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer...</think>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: deepseek-r1
Usage: 
  Prompt tokens: 11
  Total tokens: 897
  Completion tokens: 886

Redeneringsinhoud

Opmerking

Deze informatie over redeneringsinhoud is niet van toepassing op Azure OpenAI-modellen. Azure OpenAI-redeneringsmodellen gebruiken de redeneringsfunctie voor samenvattingen.

Sommige redeneringsmodellen, zoals DeepSeek-R1, genereren voltooiingen en bevatten de redenering erachter. De redenering die verband houdt met de voltooiing is opgenomen in de inhoud van de reactie binnen de tags <think> en </think>. Het model kan selecteren welke scenario's u wilt gebruiken om redeneringsinhoud te genereren. Je kunt de inhoud van de redenering uit de reactie halen om het denkproces van het model te begrijpen als volgt:

var content = response.body.choices[0].message.content
var match = content.match(/<think>(.*?)<\/think>(.*)/s);

console.log("Response:");
if (match) {
    console.log("\tThinking:", match[1]);
    console.log("\Answer:", match[2]);
}
else {
    console.log("Response:", 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);
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 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. \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

Wanneer u gesprekken met meerdere rondes maakt, is het handig om te voorkomen dat de inhoud van de redenering in de chatgeschiedenis wordt verzonden, omdat beredenatie vaak lange uitleg genereert.

Inhoud streamen

Standaard retourneert de voltooiings-API de volledige gegenereerde inhoud in één antwoord. Als je lange voltooiingen genereert, kan het enkele seconden duren voordat je de reactie krijgt.

U kunt de inhoud streamen om deze te verkrijgen terwijl deze wordt gegenereerd. Met streaming-inhoud kunt u beginnen met het verwerken van het voltooide proces zodra inhoud beschikbaar komt. Deze modus retourneert een object dat het antwoord terug streamt als door de server verzonden gebeurtenissen met alleen data. Extraheer segmenten uit het delta veld, in plaats van het berichtenveld.

Om voltooiingen te streamen, stelt u stream=True in wanneer u het model aanroept.

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

var response = await client.path("/chat/completions").post({
    body: {
        model: "DeepSeek-R1",
        messages: messages,
        stream: true
    }
}).asNodeStream();

Om de output te visualiseren, definieer een hulpfunctie om de stream te printen. Het volgende voorbeeld implementeert een routing die alleen het antwoord streamt zonder de redeneerinhoud.

async function printStream(sses) {
    let isThinking = false;
    
    for await (const event of sses) {
        if (event.data === "[DONE]") {
            return;
        }
        for (const choice of (JSON.parse(event.data)).choices) {
            const content = choice.delta?.content ?? "";
            
            if (content === "<think>") {
                isThinking = true;
                process.stdout.write("🧠 Thinking...");
            } else if (content === "</think>") {
                isThinking = false;
                console.log("🛑\n\n");
            } else if (content) {
                process.stdout.write(content);
            }
        }
    }
}

U kunt visualiseren hoe streaming inhoud genereert:

var sses = createSseStream(response.body);
await printStream(sses)

Parameterwaarden

In het algemeen bieden redeneringsmodellen geen ondersteuning voor de volgende parameters die u kunt vinden in voltooiingsmodellen voor chats:

  • Temperatuur
  • Aanwezigheidsstraf
  • Herhalingsstraf
  • Parameter top_p

Sommige modellen ondersteunen het gebruik van tools of gestructureerde uitvoer (inclusief JSON-schema's). Lees de detailpagina van de Modellen om inzicht te krijgen in de ondersteuning van elk model.

Richtlijnen en controlemechanismen toepassen

De Azure AI-modeldeductie-API ondersteunt Azure AI Content Safety. Wanneer u implementaties gebruikt met Azure AI Content Safety ingeschakeld, passeren invoer en uitvoer een ensemble van classificatiemodellen die zijn gericht op het detecteren en voorkomen van de uitvoer van schadelijke inhoud. Het inhoudsfiltersysteem detecteert en onderneemt actie op specifieke categorieën van mogelijk schadelijke inhoud in zowel invoerprompts als uitvoervoltooiingen.

In het volgende voorbeeld ziet u hoe gebeurtenissen worden verwerkt wanneer het model schadelijke inhoud detecteert in de invoerprompt.

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({
        model: "DeepSeek-R1",
        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;
        }
    }
}

Aanbeveling

Raadpleeg de documentatie over Azure AI Content Safety voor meer informatie over hoe u Azure AI Content Safety-instellingen kunt configureren en beheren.

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

In dit artikel wordt uitgelegd hoe u de redeneringsmogelijkheden van chatvoltooiingsmodellen gebruikt die zijn geïmplementeerd in Azure AI Foundry-modellen.

Redeneringsmodellen

Redeneringsmodellen kunnen hogere prestatieniveaus bereiken in domeinen zoals wiskunde, codering, wetenschap, strategie en logistiek. De manier waarop deze modellen uitvoer produceren, is door expliciet een keten van gedachte te gebruiken om alle mogelijke paden te verkennen voordat een antwoord wordt gegenereerd. Ze controleren hun antwoorden wanneer ze ze produceren, wat helpt bij het bereiken van nauwkeurigere conclusies. Als gevolg hiervan vereisen redeneringsmodellen mogelijk minder context bij het vragen om effectieve resultaten te produceren.

Deze manier om de prestaties van een model te schalen, wordt de inference rekentijd genoemd, omdat de prestaties worden verhandeld ten opzichte van hogere latentie en kosten. Andere benaderingen kunnen daarentegen worden geschaald door de rekentijd van de training.

Redeneringsmodellen produceren twee soorten inhoud als uitvoer:

  • Voltooien van redeneringen
  • Uitvoer voltooiingen

Beide voltooiingen tellen mee voor inhoud die is gegenereerd op basis van het model. Daarom dragen ze bij aan de tokenlimieten en kosten die aan het model zijn gekoppeld. Sommige modellen, zoals DeepSeek-R1, reageren mogelijk met de redeneringsinhoud. Andere, zoals o1, voeren alleen de voltooiingen uit.

Vereiste voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

  • Voeg het Azure AI-inferentiepakket toe aan je project:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-ai-inference</artifactId>
        <version>1.0.0-beta.4</version>
    </dependency>
    
  • Als je Entra ID gebruikt, heb je ook het volgende pakket nodig:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.15.3</version>
    </dependency>
    
  • Importeer de volgende naamruimte:

    package com.azure.ai.inference.usage;
    
    import com.azure.ai.inference.EmbeddingsClient;
    import com.azure.ai.inference.EmbeddingsClientBuilder;
    import com.azure.ai.inference.ChatCompletionsClient;
    import com.azure.ai.inference.ChatCompletionsClientBuilder;
    import com.azure.ai.inference.models.EmbeddingsResult;
    import com.azure.ai.inference.models.EmbeddingItem;
    import com.azure.ai.inference.models.ChatCompletions;
    import com.azure.core.credential.AzureKeyCredential;
    import com.azure.core.util.Configuration;
    
    import java.util.ArrayList;
    import java.util.List;
    

Redeneringsmogelijkheden gebruiken met chatten

Maak eerst de client om het model te gebruiken. De volgende code maakt gebruik van een eindpunt-URL en -sleutel die zijn opgeslagen in omgevingsvariabelen.

ChatCompletionsClient client = new ChatCompletionsClient(
        new URI("https://<resource>.services.ai.azure.com/models"),
        new AzureKeyCredential(System.getProperty("AZURE_INFERENCE_CREDENTIAL")),

Aanbeveling

Controleer of u het model hebt geïmplementeerd in azure AI Services-resource met de Azure AI-modeldeductie-API. Deepseek-R1 is ook beschikbaar als serverloze API-implementaties. Echter, die eindpunten nemen de parameter model niet zoals uitgelegd in deze tutorial. Je kunt dat controleren door naar de Azure AI Foundry-portal> te gaan, en controleren of het model is vermeld onder de sectie Azure AI-services.

Als je de bron hebt geconfigureerd met ondersteuning voor Microsoft Entra ID, kun je de volgende codefragment gebruiken om een client te maken.

client = new ChatCompletionsClient(
        new URI("https://<resource>.services.ai.azure.com/models"),
        new DefaultAzureCredentialBuilder().build()
);

Modellen voor redeneren

Houd bij het opstellen van prompts voor redeneermodellen rekening met het volgende:

  • Gebruik eenvoudige instructies en vermijd het gebruik van ketting-van-gedachtetechnieken.
  • Ingebouwde redeneringsmogelijkheden zorgen ervoor dat eenvoudige zero-shot prompts net zo effectief zijn als complexere methoden.
  • Wanneer u aanvullende context of documenten opgeeft, zoals in RAG-scenario's, met inbegrip van alleen de meest relevante informatie, kan dit helpen voorkomen dat het model het antwoord te veel compliceert.
  • Redeneringsmodellen kunnen het gebruik van systeemberichten ondersteunen. Ze volgen ze echter mogelijk niet zo strikt als andere niet-redenerende modellen.
  • Bij het maken van toepassingen met meerdere wendingen, overweeg alleen het uiteindelijke antwoord van het model toe te voegen, zonder de redeneringsinhoud ervan, zoals uitgelegd in de sectie Redeneringsinhoud.

U ziet dat het langer kan duren voordat modellen met redeneringen antwoorden genereren. Ze gebruiken lange redeneringsketens van gedachten die dieper en meer gestructureerde probleemoplossing mogelijk maken. Ze voeren ook zelfverificatie uit om hun antwoorden kruislings te controleren en hun fouten te corrigeren, waardoor het opkomende zelf reflecterende gedrag wordt getoond.

Een aanvraag voor het voltooien van een chat maken

Het volgende voorbeeld laat zien hoe je een eenvoudig chatverzoek naar het model kunt maken.

ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
        .setModel("DeepSeek-R1")
        .setMessages(Arrays.asList(
                new ChatRequestUserMessage("How many languages are in the world?")
        ));

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

Het antwoord is als volgt, waar u de gebruiksstatistieken van het model kunt zien:

System.out.println("Response: " + response.getValue().getChoices().get(0).getMessage().getContent());
System.out.println("Model: " + response.getValue().getModel());
System.out.println("Usage:");
System.out.println("\tPrompt tokens: " + response.getValue().getUsage().getPromptTokens());
System.out.println("\tTotal tokens: " + response.getValue().getUsage().getTotalTokens());
System.out.println("\tCompletion tokens: " + response.getValue().getUsage().getCompletionTokens());
Response: <think>Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate...</think>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

Redeneringsinhoud

Opmerking

Deze informatie over redeneringsinhoud is niet van toepassing op Azure OpenAI-modellen. Azure OpenAI-redeneringsmodellen gebruiken de redeneringsfunctie voor samenvattingen.

Sommige redeneringsmodellen, zoals DeepSeek-R1, genereren voltooiingen en bevatten de redenering erachter. De redenering die verband houdt met de voltooiing is opgenomen in de inhoud van de reactie binnen de tags <think> en </think>. Het model kan selecteren welke scenario's u wilt gebruiken om redeneringsinhoud te genereren. Je kunt de inhoud van de redenering uit de reactie halen om het denkproces van het model te begrijpen als volgt:

String content = response.getValue().getChoices().get(0).getMessage().getContent()
Pattern pattern = Pattern.compile("<think>(.*?)</think>(.*)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);

System.out.println("Response:");
if (matcher.find()) {
    System.out.println("\tThinking: " + matcher.group(1));
    System.out.println("\tAnswer: " + matcher.group(2));
}
else {
    System.out.println("Response: " + content);
}
System.out.println("Model: " + response.getValue().getModel());
System.out.println("Usage:");
System.out.println("\tPrompt tokens: " + response.getValue().getUsage().getPromptTokens());
System.out.println("\tTotal tokens: " + response.getValue().getUsage().getTotalTokens());
System.out.println("\tCompletion tokens: " + response.getValue().getUsage().getCompletionTokens());
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 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. \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

Wanneer u gesprekken met meerdere rondes maakt, is het handig om te voorkomen dat de inhoud van de redenering in de chatgeschiedenis wordt verzonden, omdat beredenatie vaak lange uitleg genereert.

Inhoud streamen

Standaard retourneert de voltooiings-API de volledige gegenereerde inhoud in één antwoord. Als je lange voltooiingen genereert, kan het enkele seconden duren voordat je de reactie krijgt.

U kunt de inhoud streamen om deze te verkrijgen terwijl deze wordt gegenereerd. Met streaming-inhoud kunt u beginnen met het verwerken van het voltooide proces zodra inhoud beschikbaar komt. Deze modus retourneert een object dat het antwoord terug streamt als door de server verzonden gebeurtenissen met alleen data. Extraheer segmenten uit het delta veld, in plaats van het berichtenveld.

ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
        .setModel("DeepSeek-R1")
        .setMessages(Arrays.asList(
                new ChatRequestUserMessage("How many languages are in the world? Write an essay about it.")
        ))
        .setMaxTokens(4096);

return client.completeStreamingAsync(requestOptions).thenAcceptAsync(response -> {
    try {
        printStream(response);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
});

Om de output te visualiseren, definieer een hulpfunctie om de stream te printen. Het volgende voorbeeld implementeert een routing die alleen het antwoord streamt zonder de redeneerinhoud.

public void printStream(StreamingResponse<StreamingChatCompletionsUpdate> response) throws Exception {
    boolean isThinking = false;

    for (StreamingChatCompletionsUpdate chatUpdate : response) {
       if (chatUpdate.getContentUpdate() != null && !chatUpdate.getContentUpdate().isEmpty()) {
            String content = chatUpdate.getContentUpdate();

            if ("<think>".equals(content)) {
                isThinking = true;
                System.out.print("🧠 Thinking...");
                System.out.flush();
            } else if ("</think>".equals(content)) {
                isThinking = false;
                System.out.println("🛑\n\n");
            } else if (content != null && !content.isEmpty()) {
                System.out.print(content);
                System.out.flush();
            }
        }
    }
}

U kunt visualiseren hoe streaming inhoud genereert:

try {
    streamMessageAsync(client).get();
} catch (Exception e) {
    throw new RuntimeException(e);
}

Parameterwaarden

In het algemeen bieden redeneringsmodellen geen ondersteuning voor de volgende parameters die u kunt vinden in voltooiingsmodellen voor chats:

  • Temperatuur
  • Aanwezigheidsstraf
  • Herhalingsstraf
  • Parameter top_p

Sommige modellen ondersteunen het gebruik van tools of gestructureerde uitvoer (inclusief JSON-schema's). Lees de detailpagina van de Modellen om inzicht te krijgen in de ondersteuning van elk model.

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

In dit artikel wordt uitgelegd hoe u de redeneringsmogelijkheden van chatvoltooiingsmodellen gebruikt die zijn geïmplementeerd in Azure AI Foundry-modellen.

Redeneringsmodellen

Redeneringsmodellen kunnen hogere prestatieniveaus bereiken in domeinen zoals wiskunde, codering, wetenschap, strategie en logistiek. De manier waarop deze modellen uitvoer produceren, is door expliciet een keten van gedachte te gebruiken om alle mogelijke paden te verkennen voordat een antwoord wordt gegenereerd. Ze controleren hun antwoorden wanneer ze ze produceren, wat helpt bij het bereiken van nauwkeurigere conclusies. Als gevolg hiervan vereisen redeneringsmodellen mogelijk minder context bij het vragen om effectieve resultaten te produceren.

Deze manier om de prestaties van een model te schalen, wordt de inference rekentijd genoemd, omdat de prestaties worden verhandeld ten opzichte van hogere latentie en kosten. Andere benaderingen kunnen daarentegen worden geschaald door de rekentijd van de training.

Redeneringsmodellen produceren twee soorten inhoud als uitvoer:

  • Voltooien van redeneringen
  • Uitvoer voltooiingen

Beide voltooiingen tellen mee voor inhoud die is gegenereerd op basis van het model. Daarom dragen ze bij aan de tokenlimieten en kosten die aan het model zijn gekoppeld. Sommige modellen, zoals DeepSeek-R1, reageren mogelijk met de redeneringsinhoud. Andere, zoals o1, voeren alleen de voltooiingen uit.

Vereiste voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

  • Installeer het Azure AI-deductiepakket met de volgende opdracht:

    dotnet add package Azure.AI.Inference --prerelease
    
  • Als je Entra ID gebruikt, heb je ook het volgende pakket nodig:

    dotnet add package Azure.Identity
    

Redeneringsmogelijkheden gebruiken met chatten

Maak eerst de client om het model te gebruiken. De volgende code maakt gebruik van een eindpunt-URL en -sleutel die zijn opgeslagen in omgevingsvariabelen.

AzureAIInferenceClientOptions clientOptions = new AzureAIInferenceClientOptions(apiVersion);

ChatCompletionsClient client = new ChatCompletionsClient(
    new Uri("https://<resource>.services.ai.azure.com/models"),
    new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL")),
    clientOptions
);

Als je de bron hebt geconfigureerd met ondersteuning voor Microsoft Entra ID, kun je de volgende codefragment gebruiken om een client te maken.

AzureAIInferenceClientOptions clientOptions = new AzureAIInferenceClientOptions(
    "2024-05-01-preview", 
    new string[] { "https://cognitiveservices.azure.com/.default" }
);

client = new ChatCompletionsClient(
    new Uri("https://<resource>.services.ai.azure.com/models"),
    new DefaultAzureCredential(),
    clientOptions,
);

Modellen voor redeneren

Houd bij het opstellen van prompts voor redeneermodellen rekening met het volgende:

  • Gebruik eenvoudige instructies en vermijd het gebruik van ketting-van-gedachtetechnieken.
  • Ingebouwde redeneringsmogelijkheden zorgen ervoor dat eenvoudige zero-shot prompts net zo effectief zijn als complexere methoden.
  • Wanneer u aanvullende context of documenten opgeeft, zoals in RAG-scenario's, met inbegrip van alleen de meest relevante informatie, kan dit helpen voorkomen dat het model het antwoord te veel compliceert.
  • Redeneringsmodellen kunnen het gebruik van systeemberichten ondersteunen. Ze volgen ze echter mogelijk niet zo strikt als andere niet-redenerende modellen.
  • Bij het maken van toepassingen met meerdere wendingen, overweeg alleen het uiteindelijke antwoord van het model toe te voegen, zonder de redeneringsinhoud ervan, zoals uitgelegd in de sectie Redeneringsinhoud.

U ziet dat het langer kan duren voordat modellen met redeneringen antwoorden genereren. Ze gebruiken lange redeneringsketens van gedachten die dieper en meer gestructureerde probleemoplossing mogelijk maken. Ze voeren ook zelfverificatie uit om hun antwoorden kruislings te controleren en hun fouten te corrigeren, waardoor het opkomende zelf reflecterende gedrag wordt getoond.

Een aanvraag voor het voltooien van een chat maken

Het volgende voorbeeld laat zien hoe je een eenvoudig chatverzoek naar het model kunt maken.

ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestUserMessage("How many languages are in the world?")
    },
    Model = "deepseek-r1",
};

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

Het antwoord is als volgt, waar u de gebruiksstatistieken van het model kunt zien:

Console.WriteLine($"Response: {response.Value.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: <think>Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate...</think>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

Redeneringsinhoud

Opmerking

Deze informatie over redeneringsinhoud is niet van toepassing op Azure OpenAI-modellen. Azure OpenAI-redeneringsmodellen gebruiken de redeneringsfunctie voor samenvattingen.

Sommige redeneringsmodellen, zoals DeepSeek-R1, genereren voltooiingen en bevatten de redenering erachter. De redenering die verband houdt met de voltooiing is opgenomen in de inhoud van de reactie binnen de tags <think> en </think>. Het model kan selecteren welke scenario's u wilt gebruiken om redeneringsinhoud te genereren. Je kunt de inhoud van de redenering uit de reactie halen om het denkproces van het model te begrijpen als volgt:

Regex regex = new Regex(pattern, RegexOptions.Singleline);
Match match = regex.Match(response.Value.Content);

Console.WriteLine("Response:");
if (match.Success)
{
    Console.WriteLine($"\tThinking: {match.Groups[1].Value}");
    Console.WriteLine($"\tAnswer: {match.Groups[2].Value}");
else
{
    Console.WriteLine($"Response: {response.Value.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}");
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 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. \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

Wanneer u gesprekken met meerdere rondes maakt, is het handig om te voorkomen dat de inhoud van de redenering in de chatgeschiedenis wordt verzonden, omdat beredenatie vaak lange uitleg genereert.

Inhoud streamen

Standaard retourneert de voltooiings-API de volledige gegenereerde inhoud in één antwoord. Als je lange voltooiingen genereert, kan het enkele seconden duren voordat je de reactie krijgt.

U kunt de inhoud streamen om deze te verkrijgen terwijl deze wordt gegenereerd. Met streaming-inhoud kunt u beginnen met het verwerken van het voltooide proces zodra inhoud beschikbaar komt. Deze modus retourneert een object dat het antwoord terug streamt als door de server verzonden gebeurtenissen met alleen data. Extraheer segmenten uit het delta veld, in plaats van het berichtenveld.

static async Task StreamMessageAsync(ChatCompletionsClient client)
{
    ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
    {
        Messages = {
            new ChatRequestUserMessage("How many languages are in the world?")
        },
        MaxTokens=4096,
        Model = "deepseek-r1",
    };

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

    await PrintStream(streamResponse);
}

Om de output te visualiseren, definieer een hulpfunctie om de stream te printen. Het volgende voorbeeld implementeert een routing die alleen het antwoord streamt zonder de redeneerinhoud.

static void PrintStream(StreamingResponse<StreamingChatCompletionsUpdate> response)
{
    bool isThinking = false;
    await foreach (StreamingChatCompletionsUpdate chatUpdate in response)
    {
        if (!string.IsNullOrEmpty(chatUpdate.ContentUpdate))
        {
            string content = chatUpdate.ContentUpdate;
            if (content == "<think>")
            {
                isThinking = true;
                Console.Write("🧠 Thinking...");
                Console.Out.Flush();
            }
            else if (content == "</think>")
            {
                isThinking = false;
                Console.WriteLine("🛑\n\n");
            }
            else if (!string.IsNullOrEmpty(content))
            {
                Console.Write(content);
                Console.Out.Flush();
            }
        }
    }
}

U kunt visualiseren hoe streaming inhoud genereert:

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

Parameterwaarden

In het algemeen bieden redeneringsmodellen geen ondersteuning voor de volgende parameters die u kunt vinden in voltooiingsmodellen voor chats:

  • Temperatuur
  • Aanwezigheidsstraf
  • Herhalingsstraf
  • Parameter top_p

Sommige modellen ondersteunen het gebruik van tools of gestructureerde uitvoer (inclusief JSON-schema's). Lees de detailpagina van de Modellen om inzicht te krijgen in de ondersteuning van elk model.

Richtlijnen en controlemechanismen toepassen

De Azure AI-modeldeductie-API ondersteunt Azure AI Content Safety. Wanneer u implementaties gebruikt met Azure AI Content Safety ingeschakeld, passeren invoer en uitvoer een ensemble van classificatiemodellen die zijn gericht op het detecteren en voorkomen van de uitvoer van schadelijke inhoud. Het inhoudsfiltersysteem detecteert en onderneemt actie op specifieke categorieën van mogelijk schadelijke inhoud in zowel invoerprompts als uitvoervoltooiingen.

In het volgende voorbeeld ziet u hoe gebeurtenissen worden verwerkt wanneer het model schadelijke inhoud detecteert in de invoerprompt.

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."
            ),
        },
        Model = "deepseek-r1",
    };

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

Aanbeveling

Raadpleeg de documentatie over Azure AI Content Safety voor meer informatie over hoe u Azure AI Content Safety-instellingen kunt configureren en beheren.

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

In dit artikel wordt uitgelegd hoe u de redeneringsmogelijkheden van chatvoltooiingsmodellen gebruikt die zijn geïmplementeerd in Azure AI Foundry-modellen.

Redeneringsmodellen

Redeneringsmodellen kunnen hogere prestatieniveaus bereiken in domeinen zoals wiskunde, codering, wetenschap, strategie en logistiek. De manier waarop deze modellen uitvoer produceren, is door expliciet een keten van gedachte te gebruiken om alle mogelijke paden te verkennen voordat een antwoord wordt gegenereerd. Ze controleren hun antwoorden wanneer ze ze produceren, wat helpt bij het bereiken van nauwkeurigere conclusies. Als gevolg hiervan vereisen redeneringsmodellen mogelijk minder context bij het vragen om effectieve resultaten te produceren.

Deze manier om de prestaties van een model te schalen, wordt de inference rekentijd genoemd, omdat de prestaties worden verhandeld ten opzichte van hogere latentie en kosten. Andere benaderingen kunnen daarentegen worden geschaald door de rekentijd van de training.

Redeneringsmodellen produceren twee soorten inhoud als uitvoer:

  • Voltooien van redeneringen
  • Uitvoer voltooiingen

Beide voltooiingen tellen mee voor inhoud die is gegenereerd op basis van het model. Daarom dragen ze bij aan de tokenlimieten en kosten die aan het model zijn gekoppeld. Sommige modellen, zoals DeepSeek-R1, reageren mogelijk met de redeneringsinhoud. Andere, zoals o1, voeren alleen de voltooiingen uit.

Vereiste voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

Redeneringsmogelijkheden gebruiken met chatten

Maak eerst de client om het model te gebruiken. De volgende code maakt gebruik van een eindpunt-URL en -sleutel die zijn opgeslagen in omgevingsvariabelen.

POST https://<resource>.services.ai.azure.com/openai/deployments/deepseek-r1/chat/completions?api-version=2024-10-21
Content-Type: application/json
api-key: <key>

Als u de resource hebt geconfigureerd met ondersteuning voor Microsoft Entra ID, geeft u het token mee in de Authorization header in het formaat Bearer <token>. Gebruik scope https://cognitiveservices.azure.com/.default.

POST https://<resource>.services.ai.azure.com/openai/deployments/deepseek-r1/chat/completions?api-version=2024-10-21
Content-Type: application/json
Authorization: Bearer <token>

Het gebruik van Microsoft Entra-id vereist mogelijk extra configuratie in uw resource om toegang te verlenen. Meer informatie over het configureren van sleutelloze verificatie met Microsoft Entra-id.

Modellen voor redeneren

Houd bij het opstellen van prompts voor redeneermodellen rekening met het volgende:

  • Gebruik eenvoudige instructies en vermijd het gebruik van ketting-van-gedachtetechnieken.
  • Ingebouwde redeneringsmogelijkheden zorgen ervoor dat eenvoudige zero-shot prompts net zo effectief zijn als complexere methoden.
  • Wanneer u aanvullende context of documenten opgeeft, zoals in RAG-scenario's, met inbegrip van alleen de meest relevante informatie, kan dit helpen voorkomen dat het model het antwoord te veel compliceert.
  • Redeneringsmodellen kunnen het gebruik van systeemberichten ondersteunen. Ze volgen ze echter mogelijk niet zo strikt als andere niet-redenerende modellen.
  • Bij het maken van toepassingen met meerdere wendingen, overweeg alleen het uiteindelijke antwoord van het model toe te voegen, zonder de redeneringsinhoud ervan, zoals uitgelegd in de sectie Redeneringsinhoud.

U ziet dat het langer kan duren voordat modellen met redeneringen antwoorden genereren. Ze gebruiken lange redeneringsketens van gedachten die dieper en meer gestructureerde probleemoplossing mogelijk maken. Ze voeren ook zelfverificatie uit om hun antwoorden kruislings te controleren en hun fouten te corrigeren, waardoor het opkomende zelf reflecterende gedrag wordt getoond.

Een aanvraag voor het voltooien van een chat maken

Het volgende voorbeeld laat zien hoe je een eenvoudig chatverzoek naar het model kunt maken.

{
    "model": "deepseek-r1",
    "messages": [
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ]
}

Het antwoord is als volgt, waar u de gebruiksstatistieken van het model kunt zien:

{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "DeepSeek-R1",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "reasoning_content": "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 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. \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.\n",
                "content": "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.",
                "tool_calls": null
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 11,
        "total_tokens": 897,
        "completion_tokens": 886
    }
}

Redeneringsinhoud

Opmerking

Deze informatie over redeneringsinhoud is niet van toepassing op Azure OpenAI-modellen. Azure OpenAI-redeneringsmodellen gebruiken de redeneringsfunctie voor samenvattingen.

Sommige redeneringsmodellen, zoals DeepSeek-R1, genereren voltooiingen en bevatten de redenering erachter.

De redenering die aan de voltooiing is gekoppeld, is opgenomen in het veld reasoning_content. Het model kan selecteren welke scenario's u wilt gebruiken om redeneringsinhoud te genereren.

Wanneer u gesprekken met meerdere rondes maakt, is het handig om te voorkomen dat de inhoud van de redenering in de chatgeschiedenis wordt verzonden, omdat beredenatie vaak lange uitleg genereert.

Inhoud streamen

Standaard retourneert de voltooiings-API de volledige gegenereerde inhoud in één antwoord. Als je lange voltooiingen genereert, kan het enkele seconden duren voordat je de reactie krijgt.

U kunt de inhoud streamen om deze te verkrijgen terwijl deze wordt gegenereerd. Met streaming-inhoud kunt u beginnen met het verwerken van het voltooide proces zodra inhoud beschikbaar komt. Deze modus retourneert een object dat het antwoord terug streamt als door de server verzonden gebeurtenissen met alleen data. Extraheer segmenten uit het delta veld, in plaats van het berichtenveld.

Om voltooiingen te streamen, stelt u "stream": true in wanneer u het model aanroept.

{
    "model": "DeepSeek-R1",
    "messages": [
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "stream": true,
    "max_tokens": 2048
}

Om de output te visualiseren, definieer een hulpfunctie om de stream te printen. Het volgende voorbeeld implementeert een routing die alleen het antwoord streamt zonder de redeneerinhoud.

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "DeepSeek-R1",
    "choices": [
        {
            "index": 0,
            "delta": {
                "role": "assistant",
                "reasoning_content": "Okay,",
                "content": ""
            },
            "finish_reason": null,
            "logprobs": null
        }
    ]
}

Het laatste bericht in de stream is finish_reason ingesteld, wat de reden aangeeft waarom het generatieproces moet worden gestopt.

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "DeepSeek-R1",
    "choices": [
        {
            "index": 0,
            "delta": {
                "reasoning_content": "",
                "content": ""
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 11,
        "total_tokens": 897,
        "completion_tokens": 886
    }
}

Parameterwaarden

In het algemeen bieden redeneringsmodellen geen ondersteuning voor de volgende parameters die u kunt vinden in voltooiingsmodellen voor chats:

  • Temperatuur
  • Aanwezigheidsstraf
  • Herhalingsstraf
  • Parameter top_p

Sommige modellen ondersteunen het gebruik van tools of gestructureerde uitvoer (inclusief JSON-schema's). Lees de detailpagina van de Modellen om inzicht te krijgen in de ondersteuning van elk model.

Richtlijnen en controlemechanismen toepassen

De Azure AI-modeldeductie-API ondersteunt Azure AI Content Safety. Wanneer u implementaties gebruikt met Azure AI Content Safety ingeschakeld, passeren invoer en uitvoer een ensemble van classificatiemodellen die zijn gericht op het detecteren en voorkomen van de uitvoer van schadelijke inhoud. Het inhoudsfiltersysteem detecteert en onderneemt actie op specifieke categorieën van mogelijk schadelijke inhoud in zowel invoerprompts als uitvoervoltooiingen.

In het volgende voorbeeld ziet u hoe gebeurtenissen worden verwerkt wanneer het model schadelijke inhoud detecteert in de invoerprompt.

{
    "model": "DeepSeek-R1",
    "messages": [
        {
            "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
    }
}

Aanbeveling

Raadpleeg de documentatie over Azure AI Content Safety voor meer informatie over hoe u Azure AI Content Safety-instellingen kunt configureren en beheren.