Dela via


Använda resonemangsmodeller med Azure AI-modellinferens

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln beskriver hur du använder resonemangsfunktionerna i modeller för chattavslut som distribuerats till Azure AI-modellinferens i Azure AI-tjänster.

Resonemangsmodeller

Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Sättet som dessa modeller producerar utdata på är genom att uttryckligen använda tankekedjan för att utforska alla möjliga sökvägar innan du genererar ett svar. De verifierar sina svar när de producerar dem, vilket hjälper dem att komma fram till bättre mer exakta slutsatser. Det innebär att resonemangsmodeller kan kräva mindre kontext i fråga för att ge effektiva resultat.

Ett sådant sätt att skala modellens prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Det står i kontrast till andra metoder som skalas genom träningsberäkningstid.

Resonemangsmodeller skapar sedan två typer av utdata:

  • Slutförande av resonemang
  • Slutförande av utdata

Båda dessa slutföranden räknas mot innehåll som genererats från modellen och därmed mot de tokengränser och kostnader som är associerade med modellen. Vissa modeller kan mata ut resonemangsinnehållet, till exempel DeepSeek-R1. Vissa andra, till exempel o1, matar bara ut utdatadelen av slutförandena.

Förutsättningar

För att slutföra självstudierna behöver du:

  • En modell med en modelldistribution med resonemangsfunktioner. Om du inte har någon läser du Lägg till och konfigurera modeller i Azure AI-tjänster för att lägga till en resonemangsmodell.

    • I de här exemplen används DeepSeek-R1.
  • Installera Azure AI-slutsatsdragningspaketet med följande kommando:

    pip install -U azure-ai-inference
    

Använda resonemangsfunktioner med chatt

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

client = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZURE_INFERENCE_CREDENTIAL"]),
    model="deepseek-r1"
)

Dricks

Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI-modellinferens-API:et. Deepseek-R1 är också tillgängligt som serverlösa API-slutpunkter. Dessa slutpunkter tar dock inte parametern model enligt beskrivningen i den här självstudien. Du kan kontrollera det genom att gå till Azure AI Foundry-portalen> Modeller + slutpunkter och kontrollera att modellen visas under avsnittet Azure AI Services.

Om du har konfigurerat resursen till med Stöd för Microsoft Entra-ID kan du använda följande kodfragment för att skapa en klient.

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

client = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=DefaultAzureCredential(),
    credential_scopes=["https://cognitiveservices.azure.com/.default"],
    model="deepseek-r1"
)

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande chattbegäran till modellen.

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

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

När du skapar frågor om resonemangsmodeller bör du tänka på följande:

  • Använd enkla instruktioner och undvik att använda tankekedja.
  • Inbyggda resonemangsfunktioner gör enkla nollskottsprompter lika effektiva som mer komplexa metoder.
  • När du tillhandahåller ytterligare kontexter eller dokument, till exempel i RAG-scenarier, kan endast den mest relevanta informationen bidra till att förhindra att modellen överkomplicerar sitt svar.
  • Resonemangsmodeller kan ha stöd för användning av systemmeddelanden. De kanske dock inte följer dem lika strikt som andra modeller som inte är resonemangsmodeller.
  • När du skapar program med flera svängar bör du bara överväga att lägga till det slutliga svaret från modellen, utan att det är resonemangsinnehåll som förklaras i avsnittet Resonemangsinnehåll .

Svaret är följande, där du kan se modellens användningsstatistik:

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: <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

Resonemangsinnehåll

Vissa resonemangsmodeller, till exempel DeepSeek-R1, genererar slutföranden och inkluderar resonemanget bakom det. Det resonemang som är associerat med slutförandet ingår i svarets innehåll i taggarna <think> och </think>. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll. Du kan extrahera resonemangsinnehållet från svaret för att förstå modellens tankeprocess på följande sätt:

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

När du skapar konversationer med flera turer är det bra att undvika att skicka resonemangsinnehållet i chatthistoriken eftersom resonemang tenderar att generera långa förklaringar.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

Om du vill strömma slutföranden anger stream=True du när du anropar modellen.

result = client.complete(
    model="deepseek-r1",
    messages=[
        UserMessage(content="How many languages are in the world?"),
    ],
    max_tokens=2048,
    stream=True,
)

Om du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen. I följande exempel implementeras en routning som endast strömmar svaret utan det resonemangsinnehållet:

def print_stream(result):
    """
    Prints the chat completion with streaming.
    """
    is_thinking = False
    for event in completion:
        if event.choices:
            content = event.choices[0].delta.content
            if content == "<think>":
                is_thinking = True
                print("🧠 Thinking...", end="", flush=True)
            elif content == "</think>":
                is_thinking = False
                print("🛑\n\n")
            elif content:
                print(content, end="", flush=True)

Du kan visualisera hur strömning genererar innehåll:

print_stream(result)

Parametrar

I allmänhet stöder inte resonemangsmodeller följande parametrar som du kan hitta i modeller för chattens slutförande:

  • Temperatur
  • Närvarostraff
  • Upprepningsstraff
  • Parameter top_p

Vissa modeller stöder användning av verktyg eller strukturerade utdata (inklusive JSON-scheman). Läs informationssidan Modeller för att förstå varje modells stöd.

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

try:
    response = client.complete(
        model="deepseek-r1",
        messages=[
            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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln beskriver hur du använder resonemangsfunktionerna i modeller för chattavslut som distribuerats till Azure AI-modellinferens i Azure AI-tjänster.

Resonemangsmodeller

Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Sättet som dessa modeller producerar utdata på är genom att uttryckligen använda tankekedjan för att utforska alla möjliga sökvägar innan du genererar ett svar. De verifierar sina svar när de producerar dem, vilket hjälper dem att komma fram till bättre mer exakta slutsatser. Det innebär att resonemangsmodeller kan kräva mindre kontext i fråga för att ge effektiva resultat.

Ett sådant sätt att skala modellens prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Det står i kontrast till andra metoder som skalas genom träningsberäkningstid.

Resonemangsmodeller skapar sedan två typer av utdata:

  • Slutförande av resonemang
  • Slutförande av utdata

Båda dessa slutföranden räknas mot innehåll som genererats från modellen och därmed mot de tokengränser och kostnader som är associerade med modellen. Vissa modeller kan mata ut resonemangsinnehållet, till exempel DeepSeek-R1. Vissa andra, till exempel o1, matar bara ut utdatadelen av slutförandena.

Förutsättningar

För att slutföra självstudierna behöver du:

Använda resonemangsfunktioner med chatt

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Dricks

Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI-modellinferens-API:et. Deepseek-R1 är också tillgängligt som serverlösa API-slutpunkter. Dessa slutpunkter tar dock inte parametern model enligt beskrivningen i den här självstudien. Du kan kontrollera det genom att gå till Azure AI Foundry-portalen> Modeller + slutpunkter och kontrollera att modellen visas under avsnittet Azure AI Services.

Om du har konfigurerat resursen till med Stöd för Microsoft Entra-ID kan du använda följande kodfragment för att skapa en klient.

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

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

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande chattbegäran till modellen.

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

När du skapar frågor om resonemangsmodeller bör du tänka på följande:

  • Använd enkla instruktioner och undvik att använda tankekedja.
  • Inbyggda resonemangsfunktioner gör enkla nollskottsprompter lika effektiva som mer komplexa metoder.
  • När du tillhandahåller ytterligare kontexter eller dokument, till exempel i RAG-scenarier, kan endast den mest relevanta informationen bidra till att förhindra att modellen överkomplicerar sitt svar.
  • Resonemangsmodeller kan ha stöd för användning av systemmeddelanden. De kanske dock inte följer dem lika strikt som andra modeller som inte är resonemangsmodeller.
  • När du skapar program med flera svängar bör du bara överväga att lägga till det slutliga svaret från modellen, utan att det är resonemangsinnehåll som förklaras i avsnittet Resonemangsinnehåll .

Svaret är följande, där du kan se modellens användningsstatistik:

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

Resonemangsinnehåll

Vissa resonemangsmodeller, till exempel DeepSeek-R1, genererar slutföranden och inkluderar resonemanget bakom det. Det resonemang som är associerat med slutförandet ingår i svarets innehåll i taggarna <think> och </think>. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll. Du kan extrahera resonemangsinnehållet från svaret för att förstå modellens tankeprocess på följande sätt:

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

När du skapar konversationer med flera turer är det bra att undvika att skicka resonemangsinnehållet i chatthistoriken eftersom resonemang tenderar att generera långa förklaringar.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

Om du vill strömma slutföranden anger stream=True du när du anropar modellen.

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

Om du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen. I följande exempel implementeras en routning som endast strömmar svaret utan det resonemangsinnehållet:

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

Du kan visualisera hur strömning genererar innehåll:

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

Parametrar

I allmänhet stöder inte resonemangsmodeller följande parametrar som du kan hitta i modeller för chattens slutförande:

  • Temperatur
  • Närvarostraff
  • Upprepningsstraff
  • Parameter top_p

Vissa modeller stöder användning av verktyg eller strukturerade utdata (inklusive JSON-scheman). Läs informationssidan Modeller för att förstå varje modells stöd.

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln beskriver hur du använder resonemangsfunktionerna i modeller för chattavslut som distribuerats till Azure AI-modellinferens i Azure AI-tjänster.

Resonemangsmodeller

Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Sättet som dessa modeller producerar utdata på är genom att uttryckligen använda tankekedjan för att utforska alla möjliga sökvägar innan du genererar ett svar. De verifierar sina svar när de producerar dem, vilket hjälper dem att komma fram till bättre mer exakta slutsatser. Det innebär att resonemangsmodeller kan kräva mindre kontext i fråga för att ge effektiva resultat.

Ett sådant sätt att skala modellens prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Det står i kontrast till andra metoder som skalas genom träningsberäkningstid.

Resonemangsmodeller skapar sedan två typer av utdata:

  • Slutförande av resonemang
  • Slutförande av utdata

Båda dessa slutföranden räknas mot innehåll som genererats från modellen och därmed mot de tokengränser och kostnader som är associerade med modellen. Vissa modeller kan mata ut resonemangsinnehållet, till exempel DeepSeek-R1. Vissa andra, till exempel o1, matar bara ut utdatadelen av slutförandena.

Förutsättningar

För att slutföra självstudierna behöver du:

  • En modell med en modelldistribution med resonemangsfunktioner. Om du inte har någon läser du Lägg till och konfigurera modeller i Azure AI-tjänster för att lägga till en resonemangsmodell.

    • I de här exemplen används DeepSeek-R1.
  • Lägg till Azure AI-slutsatsdragningspaketet i projektet:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-ai-inference</artifactId>
        <version>1.0.0-beta.2</version>
    </dependency>
    
  • Om du använder Entra-ID behöver du också följande paket:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.13.3</version>
    </dependency>
    
  • Importera följande namnområde:

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

Använda resonemangsfunktioner med chatt

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Dricks

Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI-modellinferens-API:et. Deepseek-R1 är också tillgängligt som serverlösa API-slutpunkter. Dessa slutpunkter tar dock inte parametern model enligt beskrivningen i den här självstudien. Du kan kontrollera det genom att gå till Azure AI Foundry-portalen> Modeller + slutpunkter och kontrollera att modellen visas under avsnittet Azure AI Services.

Om du har konfigurerat resursen till med Stöd för Microsoft Entra-ID kan du använda följande kodfragment för att skapa en klient.

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande chattbegäran till modellen.

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

När du skapar frågor om resonemangsmodeller bör du tänka på följande:

  • Använd enkla instruktioner och undvik att använda tankekedja.
  • Inbyggda resonemangsfunktioner gör enkla nollskottsprompter lika effektiva som mer komplexa metoder.
  • När du tillhandahåller ytterligare kontexter eller dokument, till exempel i RAG-scenarier, kan endast den mest relevanta informationen bidra till att förhindra att modellen överkomplicerar sitt svar.
  • Resonemangsmodeller kan ha stöd för användning av systemmeddelanden. De kanske dock inte följer dem lika strikt som andra modeller som inte är resonemangsmodeller.
  • När du skapar program med flera svängar bör du bara överväga att lägga till det slutliga svaret från modellen, utan att det är resonemangsinnehåll som förklaras i avsnittet Resonemangsinnehåll .

Svaret är följande, där du kan se modellens användningsstatistik:

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

Resonemangsinnehåll

Vissa resonemangsmodeller, till exempel DeepSeek-R1, genererar slutföranden och inkluderar resonemanget bakom det. Det resonemang som är associerat med slutförandet ingår i svarets innehåll i taggarna <think> och </think>. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll. Du kan extrahera resonemangsinnehållet från svaret för att förstå modellens tankeprocess på följande sätt:

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

När du skapar konversationer med flera turer är det bra att undvika att skicka resonemangsinnehållet i chatthistoriken eftersom resonemang tenderar att generera långa förklaringar.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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 du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen. I följande exempel implementeras en routning som endast strömmar svaret utan det resonemangsinnehållet:

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

Du kan visualisera hur strömning genererar innehåll:

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

Parametrar

I allmänhet stöder inte resonemangsmodeller följande parametrar som du kan hitta i modeller för chattens slutförande:

  • Temperatur
  • Närvarostraff
  • Upprepningsstraff
  • Parameter top_p

Vissa modeller stöder användning av verktyg eller strukturerade utdata (inklusive JSON-scheman). Läs informationssidan Modeller för att förstå varje modells stöd.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln beskriver hur du använder resonemangsfunktionerna i modeller för chattavslut som distribuerats till Azure AI-modellinferens i Azure AI-tjänster.

Resonemangsmodeller

Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Sättet som dessa modeller producerar utdata på är genom att uttryckligen använda tankekedjan för att utforska alla möjliga sökvägar innan du genererar ett svar. De verifierar sina svar när de producerar dem, vilket hjälper dem att komma fram till bättre mer exakta slutsatser. Det innebär att resonemangsmodeller kan kräva mindre kontext i fråga för att ge effektiva resultat.

Ett sådant sätt att skala modellens prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Det står i kontrast till andra metoder som skalas genom träningsberäkningstid.

Resonemangsmodeller skapar sedan två typer av utdata:

  • Slutförande av resonemang
  • Slutförande av utdata

Båda dessa slutföranden räknas mot innehåll som genererats från modellen och därmed mot de tokengränser och kostnader som är associerade med modellen. Vissa modeller kan mata ut resonemangsinnehållet, till exempel DeepSeek-R1. Vissa andra, till exempel o1, matar bara ut utdatadelen av slutförandena.

Förutsättningar

För att slutföra självstudierna behöver du:

  • En modell med en modelldistribution med resonemangsfunktioner. Om du inte har någon läser du Lägg till och konfigurera modeller i Azure AI-tjänster för att lägga till en resonemangsmodell.

    • I det här exemplet används DeepSeek-R1.
  • Installera Azure AI-slutsatsdragningspaketet med följande kommando:

    dotnet add package Azure.AI.Inference --prerelease
    
  • Om du använder Entra-ID behöver du också följande paket:

    dotnet add package Azure.Identity
    

Använda resonemangsfunktioner med chatt

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Dricks

Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI-modellinferens-API:et. Deepseek-R1 är också tillgängligt som serverlösa API-slutpunkter. Dessa slutpunkter tar dock inte parametern model enligt beskrivningen i den här självstudien. Du kan kontrollera det genom att gå till Azure AI Foundry-portalen> Modeller + slutpunkter och kontrollera att modellen visas under avsnittet Azure AI Services.

Om du har konfigurerat resursen till med Stöd för Microsoft Entra-ID kan du använda följande kodfragment för att skapa en klient.

TokenCredential credential = new DefaultAzureCredential(includeInteractiveCredentials: true);
AzureAIInferenceClientOptions clientOptions = new AzureAIInferenceClientOptions();
BearerTokenAuthenticationPolicy tokenPolicy = new BearerTokenAuthenticationPolicy(credential, new string[] { "https://cognitiveservices.azure.com/.default" });

clientOptions.AddPolicy(tokenPolicy, HttpPipelinePosition.PerRetry);

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande chattbegäran till modellen.

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

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

När du skapar frågor om resonemangsmodeller bör du tänka på följande:

  • Använd enkla instruktioner och undvik att använda tankekedja.
  • Inbyggda resonemangsfunktioner gör enkla nollskottsprompter lika effektiva som mer komplexa metoder.
  • När du tillhandahåller ytterligare kontexter eller dokument, till exempel i RAG-scenarier, kan endast den mest relevanta informationen bidra till att förhindra att modellen överkomplicerar sitt svar.
  • Resonemangsmodeller kan ha stöd för användning av systemmeddelanden. De kanske dock inte följer dem lika strikt som andra modeller som inte är resonemangsmodeller.
  • När du skapar program med flera svängar bör du bara överväga att lägga till det slutliga svaret från modellen, utan att det är resonemangsinnehåll som förklaras i avsnittet Resonemangsinnehåll .

Svaret är följande, där du kan se modellens användningsstatistik:

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

Resonemangsinnehåll

Vissa resonemangsmodeller, till exempel DeepSeek-R1, genererar slutföranden och inkluderar resonemanget bakom det. Det resonemang som är associerat med slutförandet ingår i svarets innehåll i taggarna <think> och </think>. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll. Du kan extrahera resonemangsinnehållet från svaret för att förstå modellens tankeprocess på följande sätt:

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

När du skapar konversationer med flera turer är det bra att undvika att skicka resonemangsinnehållet i chatthistoriken eftersom resonemang tenderar att generera långa förklaringar.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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 du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen. I följande exempel implementeras en routning som endast strömmar svaret utan det resonemangsinnehållet:

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

Du kan visualisera hur strömning genererar innehåll:

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

Parametrar

I allmänhet stöder inte resonemangsmodeller följande parametrar som du kan hitta i modeller för chattens slutförande:

  • Temperatur
  • Närvarostraff
  • Upprepningsstraff
  • Parameter top_p

Vissa modeller stöder användning av verktyg eller strukturerade utdata (inklusive JSON-scheman). Läs informationssidan Modeller för att förstå varje modells stöd.

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln beskriver hur du använder resonemangsfunktionerna i modeller för chattavslut som distribuerats till Azure AI-modellinferens i Azure AI-tjänster.

Resonemangsmodeller

Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Sättet som dessa modeller producerar utdata på är genom att uttryckligen använda tankekedjan för att utforska alla möjliga sökvägar innan du genererar ett svar. De verifierar sina svar när de producerar dem, vilket hjälper dem att komma fram till bättre mer exakta slutsatser. Det innebär att resonemangsmodeller kan kräva mindre kontext i fråga för att ge effektiva resultat.

Ett sådant sätt att skala modellens prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Det står i kontrast till andra metoder som skalas genom träningsberäkningstid.

Resonemangsmodeller skapar sedan två typer av utdata:

  • Slutförande av resonemang
  • Slutförande av utdata

Båda dessa slutföranden räknas mot innehåll som genererats från modellen och därmed mot de tokengränser och kostnader som är associerade med modellen. Vissa modeller kan mata ut resonemangsinnehållet, till exempel DeepSeek-R1. Vissa andra, till exempel o1, matar bara ut utdatadelen av slutförandena.

Förutsättningar

För att slutföra självstudierna behöver du:

Använda resonemangsfunktioner med chatt

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
api-key: <key>

Dricks

Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI-modellinferens-API:et. Deepseek-R1 är också tillgängligt som serverlösa API-slutpunkter. Dessa slutpunkter tar dock inte parametern model enligt beskrivningen i den här självstudien. Du kan kontrollera det genom att gå till Azure AI Foundry-portalen> Modeller + slutpunkter och kontrollera att modellen visas under avsnittet Azure AI Services.

Om du har konfigurerat resursen med Stöd för Microsoft Entra-ID skickar du token i Authorization rubriken:

POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
Authorization: Bearer <token>

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande chattbegäran till modellen.

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

När du skapar frågor om resonemangsmodeller bör du tänka på följande:

  • Använd enkla instruktioner och undvik att använda tankekedja.
  • Inbyggda resonemangsfunktioner gör enkla nollskottsprompter lika effektiva som mer komplexa metoder.
  • När du tillhandahåller ytterligare kontexter eller dokument, till exempel i RAG-scenarier, kan endast den mest relevanta informationen bidra till att förhindra att modellen överkomplicerar sitt svar.
  • Resonemangsmodeller kan ha stöd för användning av systemmeddelanden. De kanske dock inte följer dem lika strikt som andra modeller som inte är resonemangsmodeller.
  • När du skapar program med flera svängar bör du bara överväga att lägga till det slutliga svaret från modellen, utan att det är resonemangsinnehåll som förklaras i avsnittet Resonemangsinnehåll .

Svaret är följande, där du kan se modellens användningsstatistik:

{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "DeepSeek-R1",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "<think>\nOkay, 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</think>\n\nThe 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
    }
}

Resonemangsinnehåll

Vissa resonemangsmodeller, till exempel DeepSeek-R1, genererar slutföranden och inkluderar resonemanget bakom det. Det resonemang som är associerat med slutförandet ingår i svarets innehåll i taggarna <think> och </think>. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll.

När du skapar konversationer med flera turer är det bra att undvika att skicka resonemangsinnehållet i chatthistoriken eftersom resonemang tenderar att generera långa förklaringar.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

Om du vill strömma slutföranden anger "stream": true du när du anropar modellen.

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

Om du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen. I följande exempel implementeras en routning som endast strömmar svaret utan det resonemangsinnehållet:

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

Det sista meddelandet i strömmen har finish_reason angetts, vilket anger orsaken till att genereringsprocessen stoppas.

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

Parametrar

I allmänhet stöder inte resonemangsmodeller följande parametrar som du kan hitta i modeller för chattens slutförande:

  • Temperatur
  • Närvarostraff
  • Upprepningsstraff
  • Parameter top_p

Vissa modeller stöder användning av verktyg eller strukturerade utdata (inklusive JSON-scheman). Läs informationssidan Modeller för att förstå varje modells stöd.

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.