Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 i Azure AI Foundry Models.
Resonemangsmodeller
Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Det sätt 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 till att komma fram till mer exakta slutsatser. Därför kan resonemangsmodeller kräva mindre kontext vid uppmaning för att ge effektiva resultat.
Det här sättet att skala en modells prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Andra metoder kan däremot skalas genom träningsberäkningstid.
Resonemangsmodeller skapar två typer av innehåll som utdata:
- Slutförande av resonemang
- Utdatakompletteringar
Båda dessa slutföranden räknas mot innehåll som genereras från modellen. Därför bidrar de till de tokengränser och kostnader som är associerade med modellen. Vissa modeller, till exempel DeepSeek-R1, kan svara med resonemangsinnehållet. Andra, till exempel o1, matar bara ut resultaten.
Förutsättningar
För att slutföra denna handledning behöver du:
Ett Azure-abonnemang. Om du använder GitHub-modeller kan du uppgradera din upplevelse och skapa en Azure-prenumeration i processen. Läs Uppgradera från GitHub-modeller till Azure AI Foundry-modeller om så är fallet.
Ett Azure AI Foundry-projekt. Den här typen av projekt hanteras under en Azure AI Foundry-resurs (kallades tidigare Azure AI Services-resurs). Om du inte har ett Foundry-projekt kan du läsa Skapa ett projekt för Azure AI Foundry (Foundry-projekt).
Slutpunktens URL.
Slutpunktens nyckel (om du väljer att använda API-nyckeln för autentisering).
Installera SDK:et med följande kommando:
pip install -U openai
Distribution av en modell med resonemangsfunktioner. Om du inte har någon, läs Lägg till och konfigurera Foundry Models för att lägga till en resonemangsmodell.
- I det här exemplet används
DeepSeek-R1.
- I det här exemplet används
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 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",
)
Om du har konfigurerat resursen med stöd för Microsoft Entra ID, kan du använda följande kodsnutt för att skapa en klient.
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",
)
Modeller för att stimulera resonemang
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 resonemangsförmågor gör enkla zero-shot-promptar lika effektiva som mer komplexa metoder.
- När du tillhandahåller ytterligare kontext 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 applikationer med flera turer bör du överväga att endast lägga till det slutliga svaret från modellen, utan resonemangsinnehållet, som beskrivs i avsnittet Resonemangsinnehåll.
Observera att det kan ta längre tid för resonemangsmodeller att generera svar. De använder långa tankekedjor som möjliggör djupare och mer strukturerad problemlösning. De utför också självverifiering för att korskontrollera sina svar och korrigera sina misstag, vilket visar framväxande självreflekterande beteenden.
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.
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
]
)
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: 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
Anmärkning
Den här informationen om resonemangsinnehåll gäller inte för Azure OpenAI-modeller. Azure OpenAI-resonemangsmodeller använder funktionen för resonemangssammanfattningar.
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 fältet reasoning_content. Modellen kan välja vilka scenarier som ska generera resonemangsinnehåll.
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...
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 du stream=True när du anropar modellen.
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
],
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:
Resonemangsinnehåll ingår också i deltadelarna i svaret i nyckeln 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)
Du kan visualisera hur strömning genererar innehåll:
print_stream(response)
Parameterar
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 skyddsräcken och kontroller
Azure AI Model Inference API stöder Azure AI Content Safety. När du använder distributioner med Azure AI Content Safety aktiverat 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.
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
Tips/Råd
Mer information om hur du kan konfigurera och kontrollera Inställningar för Azure AI-innehållssäkerhet finns i dokumentationen om Azure AI Content Safety.
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 i Azure AI Foundry Models.
Resonemangsmodeller
Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Det sätt 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 till att komma fram till mer exakta slutsatser. Därför kan resonemangsmodeller kräva mindre kontext vid uppmaning för att ge effektiva resultat.
Det här sättet att skala en modells prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Andra metoder kan däremot skalas genom träningsberäkningstid.
Resonemangsmodeller skapar två typer av innehåll som utdata:
- Slutförande av resonemang
- Utdatakompletteringar
Båda dessa slutföranden räknas mot innehåll som genereras från modellen. Därför bidrar de till de tokengränser och kostnader som är associerade med modellen. Vissa modeller, till exempel DeepSeek-R1, kan svara med resonemangsinnehållet. Andra, till exempel o1, matar bara ut resultaten.
Förutsättningar
För att slutföra denna handledning behöver du:
Ett Azure-abonnemang. Om du använder GitHub-modeller kan du uppgradera din upplevelse och skapa en Azure-prenumeration i processen. Läs Uppgradera från GitHub-modeller till Azure AI Foundry-modeller om så är fallet.
Ett Azure AI Foundry-projekt. Den här typen av projekt hanteras under en Azure AI Foundry-resurs (kallades tidigare Azure AI Services-resurs). Om du inte har ett Foundry-projekt kan du läsa Skapa ett projekt för Azure AI Foundry (Foundry-projekt).
Slutpunktens URL.
Slutpunktens nyckel (om du väljer att använda API-nyckeln för autentisering).
Installera Azure Inference-biblioteket för JavaScript med följande kommando:
npm install @azure-rest/ai-inference npm install @azure/core-auth npm install @azure/identityOm du använder Node.jskan du konfigurera beroendena i 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" } }Importera följande:
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";
Distribution av en modell med resonemangsfunktioner. Om du inte har någon, läs Lägg till och konfigurera Foundry Models för att lägga till en resonemangsmodell.
- I det här exemplet används
DeepSeek-R1.
- I det här exemplet används
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.
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);
Om du har konfigurerat resursen med Microsoft Entra ID-stöd kan du använda följande kodfragment för att skapa en klient.
const clientOptions = { credentials: { "https://cognitiveservices.azure.com/.default" } };
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new DefaultAzureCredential()
clientOptions,
);
Modeller för att stimulera resonemang
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 resonemangsförmågor gör enkla zero-shot-promptar lika effektiva som mer komplexa metoder.
- När du tillhandahåller ytterligare kontext 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 applikationer med flera turer bör du överväga att endast lägga till det slutliga svaret från modellen, utan resonemangsinnehållet, som beskrivs i avsnittet Resonemangsinnehåll.
Observera att det kan ta längre tid för resonemangsmodeller att generera svar. De använder långa tankekedjor som möjliggör djupare och mer strukturerad problemlösning. De utför också självverifiering för att korskontrollera sina svar och korrigera sina misstag, vilket visar framväxande självreflekterande beteenden.
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,
}
});
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
Anmärkning
Den här informationen om resonemangsinnehåll gäller inte för Azure OpenAI-modeller. Azure OpenAI-resonemangsmodeller använder funktionen för resonemangssammanfattningar.
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 du stream=True 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,
stream: true
}
}).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:
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);
}
}
}
}
Du kan visualisera hur strömning genererar innehåll:
var sses = createSseStream(response.body);
await printStream(sses)
Parameterar
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 skyddsräcken och kontroller
Azure AI Model Inference API stöder Azure AI Content Safety. När du använder distributioner med Azure AI Content Safety aktiverat 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.
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;
}
}
}
Tips/Råd
Mer information om hur du kan konfigurera och kontrollera Inställningar för Azure AI-innehållssäkerhet finns i dokumentationen om Azure AI Content Safety.
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 i Azure AI Foundry Models.
Resonemangsmodeller
Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Det sätt 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 till att komma fram till mer exakta slutsatser. Därför kan resonemangsmodeller kräva mindre kontext vid uppmaning för att ge effektiva resultat.
Det här sättet att skala en modells prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Andra metoder kan däremot skalas genom träningsberäkningstid.
Resonemangsmodeller skapar två typer av innehåll som utdata:
- Slutförande av resonemang
- Utdatakompletteringar
Båda dessa slutföranden räknas mot innehåll som genereras från modellen. Därför bidrar de till de tokengränser och kostnader som är associerade med modellen. Vissa modeller, till exempel DeepSeek-R1, kan svara med resonemangsinnehållet. Andra, till exempel o1, matar bara ut resultaten.
Förutsättningar
För att slutföra denna handledning behöver du:
Ett Azure-abonnemang. Om du använder GitHub-modeller kan du uppgradera din upplevelse och skapa en Azure-prenumeration i processen. Läs Uppgradera från GitHub-modeller till Azure AI Foundry-modeller om så är fallet.
Ett Azure AI Foundry-projekt. Den här typen av projekt hanteras under en Azure AI Foundry-resurs (kallades tidigare Azure AI Services-resurs). Om du inte har ett Foundry-projekt kan du läsa Skapa ett projekt för Azure AI Foundry (Foundry-projekt).
Slutpunktens URL.
Slutpunktens nyckel (om du väljer att använda API-nyckeln för autentisering).
Lägg till Azure AI-slutsatsdragningspaketet i projektet:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.4</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.15.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.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;
Distribution av en modell med resonemangsfunktioner. Om du inte har någon, läs Lägg till och konfigurera Foundry Models för att lägga till en resonemangsmodell.
- I det här exemplet används
DeepSeek-R1.
- I det här exemplet används
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")),
Tips/Råd
Kontrollera att du har distribuerat modellen till Azure AI Services-resursen med Azure AI Model Inference API.
Deepseek-R1 är också tillgängligt som serverlösa API-distributioner. Dessa slutpunkter tar dock inte parametern model som förklaras i denna självstudie. 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, kan du använda följande kodsnutt för att skapa en klient.
client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredentialBuilder().build()
);
Modeller för att stimulera resonemang
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 resonemangsförmågor gör enkla zero-shot-promptar lika effektiva som mer komplexa metoder.
- När du tillhandahåller ytterligare kontext 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 applikationer med flera turer bör du överväga att endast lägga till det slutliga svaret från modellen, utan resonemangsinnehållet, som beskrivs i avsnittet Resonemangsinnehåll.
Observera att det kan ta längre tid för resonemangsmodeller att generera svar. De använder långa tankekedjor som möjliggör djupare och mer strukturerad problemlösning. De utför också självverifiering för att korskontrollera sina svar och korrigera sina misstag, vilket visar framväxande självreflekterande beteenden.
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);
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
Anmärkning
Den här informationen om resonemangsinnehåll gäller inte för Azure OpenAI-modeller. Azure OpenAI-resonemangsmodeller använder funktionen för resonemangssammanfattningar.
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);
}
Parameterar
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 i Azure AI Foundry Models.
Resonemangsmodeller
Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Det sätt 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 till att komma fram till mer exakta slutsatser. Därför kan resonemangsmodeller kräva mindre kontext vid uppmaning för att ge effektiva resultat.
Det här sättet att skala en modells prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Andra metoder kan däremot skalas genom träningsberäkningstid.
Resonemangsmodeller skapar två typer av innehåll som utdata:
- Slutförande av resonemang
- Utdatakompletteringar
Båda dessa slutföranden räknas mot innehåll som genereras från modellen. Därför bidrar de till de tokengränser och kostnader som är associerade med modellen. Vissa modeller, till exempel DeepSeek-R1, kan svara med resonemangsinnehållet. Andra, till exempel o1, matar bara ut resultaten.
Förutsättningar
För att slutföra denna handledning behöver du:
Ett Azure-abonnemang. Om du använder GitHub-modeller kan du uppgradera din upplevelse och skapa en Azure-prenumeration i processen. Läs Uppgradera från GitHub-modeller till Azure AI Foundry-modeller om så är fallet.
Ett Azure AI Foundry-projekt. Den här typen av projekt hanteras under en Azure AI Foundry-resurs (kallades tidigare Azure AI Services-resurs). Om du inte har ett Foundry-projekt kan du läsa Skapa ett projekt för Azure AI Foundry (Foundry-projekt).
Slutpunktens URL.
Slutpunktens nyckel (om du väljer att använda API-nyckeln för autentisering).
Installera Azure AI-slutsatsdragningspaketet med följande kommando:
dotnet add package Azure.AI.Inference --prereleaseOm du använder Entra ID behöver du också följande paket:
dotnet add package Azure.Identity
Distribution av en modell med resonemangsfunktioner. Om du inte har någon, läs Lägg till och konfigurera Foundry Models för att lägga till en resonemangsmodell.
- I det här exemplet används
DeepSeek-R1.
- I det här exemplet används
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.
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
);
Om du har konfigurerat resursen med stöd för Microsoft Entra ID, kan du använda följande kodsnutt för att skapa en klient.
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,
);
Modeller för att stimulera resonemang
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 resonemangsförmågor gör enkla zero-shot-promptar lika effektiva som mer komplexa metoder.
- När du tillhandahåller ytterligare kontext 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 applikationer med flera turer bör du överväga att endast lägga till det slutliga svaret från modellen, utan resonemangsinnehållet, som beskrivs i avsnittet Resonemangsinnehåll.
Observera att det kan ta längre tid för resonemangsmodeller att generera svar. De använder långa tankekedjor som möjliggör djupare och mer strukturerad problemlösning. De utför också självverifiering för att korskontrollera sina svar och korrigera sina misstag, vilket visar framväxande självreflekterande beteenden.
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);
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
Anmärkning
Den här informationen om resonemangsinnehåll gäller inte för Azure OpenAI-modeller. Azure OpenAI-resonemangsmodeller använder funktionen för resonemangssammanfattningar.
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();
Parameterar
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 skyddsräcken och kontroller
Azure AI Model Inference API stöder Azure AI Content Safety. När du använder distributioner med Azure AI Content Safety aktiverat 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.
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;
}
}
Tips/Råd
Mer information om hur du kan konfigurera och kontrollera Inställningar för Azure AI-innehållssäkerhet finns i dokumentationen om Azure AI Content Safety.
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 i Azure AI Foundry Models.
Resonemangsmodeller
Resonemangsmodeller kan nå högre prestandanivåer inom domäner som matematik, kodning, vetenskap, strategi och logistik. Det sätt 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 till att komma fram till mer exakta slutsatser. Därför kan resonemangsmodeller kräva mindre kontext vid uppmaning för att ge effektiva resultat.
Det här sättet att skala en modells prestanda kallas inferensberäkningstid eftersom den byter prestanda mot högre svarstid och kostnad. Andra metoder kan däremot skalas genom träningsberäkningstid.
Resonemangsmodeller skapar två typer av innehåll som utdata:
- Slutförande av resonemang
- Utdatakompletteringar
Båda dessa slutföranden räknas mot innehåll som genereras från modellen. Därför bidrar de till de tokengränser och kostnader som är associerade med modellen. Vissa modeller, till exempel DeepSeek-R1, kan svara med resonemangsinnehållet. Andra, till exempel o1, matar bara ut resultaten.
Förutsättningar
För att slutföra denna handledning behöver du:
Ett Azure-abonnemang. Om du använder GitHub-modeller kan du uppgradera din upplevelse och skapa en Azure-prenumeration i processen. Läs Uppgradera från GitHub-modeller till Azure AI Foundry-modeller om så är fallet.
Ett Azure AI Foundry-projekt. Den här typen av projekt hanteras under en Azure AI Foundry-resurs (kallades tidigare Azure AI Services-resurs). Om du inte har ett Foundry-projekt kan du läsa Skapa ett projekt för Azure AI Foundry (Foundry-projekt).
Slutpunktens URL.
Slutpunktens nyckel (om du väljer att använda API-nyckeln för autentisering).
Distribution av en modell med resonemangsfunktioner. Om du inte har någon, läs Lägg till och konfigurera Foundry Models för att lägga till en resonemangsmodell.
- I det här exemplet används
DeepSeek-R1.
- I det här exemplet används
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/openai/deployments/deepseek-r1/chat/completions?api-version=2024-10-21
Content-Type: application/json
api-key: <key>
Om du har konfigurerat resursen med Microsoft Entra ID-stöd, skickar du din token i Authorization-rubriken med formatet Bearer <token>. Använd omfång 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>
Användning av Microsoft Entra-ID kan kräva ytterligare konfiguration i resursen för att bevilja åtkomst. Lär dig hur du konfigurerar nyckellös autentisering med Microsoft Entra-ID.
Modeller för att stimulera resonemang
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 resonemangsförmågor gör enkla zero-shot-promptar lika effektiva som mer komplexa metoder.
- När du tillhandahåller ytterligare kontext 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 applikationer med flera turer bör du överväga att endast lägga till det slutliga svaret från modellen, utan resonemangsinnehållet, som beskrivs i avsnittet Resonemangsinnehåll.
Observera att det kan ta längre tid för resonemangsmodeller att generera svar. De använder långa tankekedjor som möjliggör djupare och mer strukturerad problemlösning. De utför också självverifiering för att korskontrollera sina svar och korrigera sina misstag, vilket visar framväxande självreflekterande beteenden.
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?"
}
]
}
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",
"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
}
}
Resonemangsinnehåll
Anmärkning
Den här informationen om resonemangsinnehåll gäller inte för Azure OpenAI-modeller. Azure OpenAI-resonemangsmodeller använder funktionen för resonemangssammanfattningar.
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 fältet reasoning_content. 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 du "stream": true när du anropar modellen.
{
"model": "DeepSeek-R1",
"messages": [
{
"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",
"reasoning_content": "Okay,",
"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": {
"reasoning_content": "",
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 897,
"completion_tokens": 886
}
}
Parameterar
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 skyddsräcken och kontroller
Azure AI Model Inference API stöder Azure AI Content Safety. När du använder distributioner med Azure AI Content Safety aktiverat 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.
{
"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
}
}
Tips/Råd
Mer information om hur du kan konfigurera och kontrollera Inställningar för Azure AI-innehållssäkerhet finns i dokumentationen om Azure AI Content Safety.