Jak používat modely zdůvodňování s odvozováním modelu Azure AI
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Tento článek vysvětluje, jak používat možnosti odůvodnění modelů dokončování chatu nasazených do odvozování modelů Azure AI ve službách Azure AI.
Modely odůvodnění
Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně pomocí řetězu myšlenek prozkoumat všechny možné cesty před generováním odpovědi. Ověří své odpovědi, jakmile je vytvoří, což jim pomůže přijít k přesnějším závěrům. To znamená, že zdůvodnění modelů může vyžadovat při zobrazení výzvy méně kontextu, aby vznikly efektivní výsledky.
Takový způsob škálování výkonu modelu se označuje jako doba odvozování výpočetních prostředků , protože obchoduje s výkonem s vyšší latencí a náklady. Je na rozdíl od jiných přístupů, které se škálují prostřednictvím trénovacího výpočetního času.
Modely zdůvodnění pak vytvoří dva typy výstupů:
- Odůvodnění dokončení
- Dokončení výstupu
Obě tyto dokončování se počítají do obsahu generovaného z modelu, a proto se k limitům tokenů a nákladům přidruženým k modelu. Některé modely můžou vypíše obsah odůvodnění, například DeepSeek-R1
. Některé jiné, například o1
, pouze výstupem výstupu dokončení.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Předplatné Azure. Pokud používáte modely GitHubu, můžete prostředí upgradovat a v procesu vytvořit předplatné Azure. Pokud se jedná o váš případ, přečtěte si upgrade z modelů GitHubu na odvození modelu Azure AI.
Prostředek služeb Azure AI Další informace najdete v tématu Vytvoření prostředku Azure AI Services.
Adresa URL a klíč koncového bodu.
Model s možnostmi odůvodnění nasazení modelu. Pokud nemáte možnost Přidat a nakonfigurovat modely do služeb Azure AI, abyste mohli přidat model zdůvodnění.
- Tento příklad používá
DeepSeek-R1
.
- Tento příklad používá
Nainstalujte balíček odvození Azure AI pomocí následujícího příkazu:
pip install -U azure-ai-inference
Použití možností odůvodnění v chatu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
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"
)
Tip
Ověřte, že jste model nasadili do prostředku Azure AI Services pomocí rozhraní API pro odvozování modelu Azure AI.
Deepseek-R1
je také k dispozici jako koncové body bezserverového rozhraní API. Tyto koncové body ale tento parametr model
nepřebírají, jak je vysvětleno v tomto kurzu. To můžete ověřit tak, že přejdete na portál> Azure AI Foundry Models + koncové body a ověříte, že je model uvedený v části Služby Azure AI.
Pokud jste nakonfigurovali prostředek na podporu Microsoft Entra ID , můžete k vytvoření klienta použít následující fragment kódu.
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"
)
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní žádost o chat do modelu.
from azure.ai.inference.models import SystemMessage, UserMessage
response = client.complete(
messages=[
UserMessage(content="How many languages are in the world?"),
],
)
Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:
- Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
- Integrované možnosti zdůvodňování umožňují jednoduché výzvy s nulovým snímkem tak efektivní jako složitější metody.
- Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, včetně pouze nejrelevantních informací, může pomoct zabránit tomu, aby model překomplikoval jeho odpověď.
- Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je však dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
- Při vytváření vícevrstevných aplikací zvažte pouze připojení konečné odpovědi z modelu bez odůvodnění obsahu, jak je vysvětleno v části Odůvodnění obsahu .
Odpověď je následující, kde vidíte statistiku využití modelu:
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
Odůvodnění obsahu
Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think>
a </think>
. Model může vybrat, ve kterých scénářích se má generovat důvod k obsahu. Z odpovědi můžete extrahovat odůvodnění, abyste porozuměli myšlenkovým procesům modelu následujícím způsobem:
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
Při provádění konverzací s více možnostmi je užitečné vyhnout se odesílání obsahu důvodů v historii chatu, protože důvod má tendenci generovat dlouhé vysvětlení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
Pokud chcete streamovat dokončení, nastavte stream=True
při volání modelu.
result = client.complete(
model="deepseek-r1",
messages=[
UserMessage(content="How many languages are in the world?"),
],
max_tokens=2048,
stream=True,
)
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu. Následující příklad implementuje směrování, které streamuje pouze odpověď bez odůvodnění obsahu:
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)
Můžete vizualizovat, jak streamování generuje obsah:
print_stream(result)
Parametry
Obecně platí, že modely odůvodnění nepodporují následující parametry, které najdete v modelech dokončování chatu:
- Teplota
- Trest přítomnosti
- Trest opakování
- Parametr
top_p
Některé modely podporují použití nástrojů nebo strukturovaných výstupů (včetně schémat JSON). Přečtěte si stránku s podrobnostmi o modelech a seznamte se s podporou jednotlivých modelů.
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu zjistí a provede akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
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
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Tento článek vysvětluje, jak používat možnosti odůvodnění modelů dokončování chatu nasazených do odvozování modelů Azure AI ve službách Azure AI.
Modely odůvodnění
Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně pomocí řetězu myšlenek prozkoumat všechny možné cesty před generováním odpovědi. Ověří své odpovědi, jakmile je vytvoří, což jim pomůže přijít k přesnějším závěrům. To znamená, že zdůvodnění modelů může vyžadovat při zobrazení výzvy méně kontextu, aby vznikly efektivní výsledky.
Takový způsob škálování výkonu modelu se označuje jako doba odvozování výpočetních prostředků , protože obchoduje s výkonem s vyšší latencí a náklady. Je na rozdíl od jiných přístupů, které se škálují prostřednictvím trénovacího výpočetního času.
Modely zdůvodnění pak vytvoří dva typy výstupů:
- Odůvodnění dokončení
- Dokončení výstupu
Obě tyto dokončování se počítají do obsahu generovaného z modelu, a proto se k limitům tokenů a nákladům přidruženým k modelu. Některé modely můžou vypíše obsah odůvodnění, například DeepSeek-R1
. Některé jiné, například o1
, pouze výstupem výstupu dokončení.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Předplatné Azure. Pokud používáte modely GitHubu, můžete prostředí upgradovat a v procesu vytvořit předplatné Azure. Pokud se jedná o váš případ, přečtěte si upgrade z modelů GitHubu na odvození modelu Azure AI.
Prostředek služeb Azure AI Další informace najdete v tématu Vytvoření prostředku Azure AI Services.
Adresa URL a klíč koncového bodu.
Model s možnostmi odůvodnění nasazení modelu. Pokud nemáte možnost Přidat a nakonfigurovat modely do služeb Azure AI, abyste mohli přidat model zdůvodnění.
- Tento příklad používá
DeepSeek-R1
.
- Tento příklad používá
Pomocí následujícího příkazu nainstalujte knihovnu Azure Inference pro JavaScript :
npm install @azure-rest/ai-inference
Použití možností odůvodnění v chatu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
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)
);
Tip
Ověřte, že jste model nasadili do prostředku Azure AI Services pomocí rozhraní API pro odvozování modelu Azure AI.
Deepseek-R1
je také k dispozici jako koncové body bezserverového rozhraní API. Tyto koncové body ale tento parametr model
nepřebírají, jak je vysvětleno v tomto kurzu. To můžete ověřit tak, že přejdete na portál> Azure AI Foundry Models + koncové body a ověříte, že je model uvedený v části Služby Azure AI.
Pokud jste nakonfigurovali prostředek na podporu Microsoft Entra ID , můžete k vytvoření klienta použít následující fragment kódu.
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,
);
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní žádost o chat do modelu.
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,
}
});
Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:
- Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
- Integrované možnosti zdůvodňování umožňují jednoduché výzvy s nulovým snímkem tak efektivní jako složitější metody.
- Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, včetně pouze nejrelevantních informací, může pomoct zabránit tomu, aby model překomplikoval jeho odpověď.
- Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je však dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
- Při vytváření vícevrstevných aplikací zvažte pouze připojení konečné odpovědi z modelu bez odůvodnění obsahu, jak je vysvětleno v části Odůvodnění obsahu .
Odpověď je následující, kde vidíte statistiku využití modelu:
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
Odůvodnění obsahu
Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think>
a </think>
. Model může vybrat, ve kterých scénářích se má generovat důvod k obsahu. Z odpovědi můžete extrahovat odůvodnění, abyste porozuměli myšlenkovým procesům modelu následujícím způsobem:
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
Při provádění konverzací s více možnostmi je užitečné vyhnout se odesílání obsahu důvodů v historii chatu, protože důvod má tendenci generovat dlouhé vysvětlení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
Pokud chcete streamovat dokončení, nastavte stream=True
při volání modelu.
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();
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu. Následující příklad implementuje směrování, které streamuje pouze odpověď bez odůvodnění obsahu:
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);
}
}
}
}
Můžete vizualizovat, jak streamování generuje obsah:
var sses = createSseStream(response.body);
printStream(result)
Parametry
Obecně platí, že modely odůvodnění nepodporují následující parametry, které najdete v modelech dokončování chatu:
- Teplota
- Trest přítomnosti
- Trest opakování
- Parametr
top_p
Některé modely podporují použití nástrojů nebo strukturovaných výstupů (včetně schémat JSON). Přečtěte si stránku s podrobnostmi o modelech a seznamte se s podporou jednotlivých modelů.
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu zjistí a provede akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
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;
}
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Tento článek vysvětluje, jak používat možnosti odůvodnění modelů dokončování chatu nasazených do odvozování modelů Azure AI ve službách Azure AI.
Modely odůvodnění
Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně pomocí řetězu myšlenek prozkoumat všechny možné cesty před generováním odpovědi. Ověří své odpovědi, jakmile je vytvoří, což jim pomůže přijít k přesnějším závěrům. To znamená, že zdůvodnění modelů může vyžadovat při zobrazení výzvy méně kontextu, aby vznikly efektivní výsledky.
Takový způsob škálování výkonu modelu se označuje jako doba odvozování výpočetních prostředků , protože obchoduje s výkonem s vyšší latencí a náklady. Je na rozdíl od jiných přístupů, které se škálují prostřednictvím trénovacího výpočetního času.
Modely zdůvodnění pak vytvoří dva typy výstupů:
- Odůvodnění dokončení
- Dokončení výstupu
Obě tyto dokončování se počítají do obsahu generovaného z modelu, a proto se k limitům tokenů a nákladům přidruženým k modelu. Některé modely můžou vypíše obsah odůvodnění, například DeepSeek-R1
. Některé jiné, například o1
, pouze výstupem výstupu dokončení.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Předplatné Azure. Pokud používáte modely GitHubu, můžete prostředí upgradovat a v procesu vytvořit předplatné Azure. Pokud se jedná o váš případ, přečtěte si upgrade z modelů GitHubu na odvození modelu Azure AI.
Prostředek služeb Azure AI Další informace najdete v tématu Vytvoření prostředku Azure AI Services.
Adresa URL a klíč koncového bodu.
Model s možnostmi odůvodnění nasazení modelu. Pokud nemáte možnost Přidat a nakonfigurovat modely do služeb Azure AI, abyste mohli přidat model zdůvodnění.
- Tento příklad používá
DeepSeek-R1
.
- Tento příklad používá
Přidejte do projektu balíček pro odvození Azure AI:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.2</version> </dependency>
Pokud používáte ID Entra, potřebujete také následující balíček:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.13.3</version> </dependency>
Naimportujte následující obor názvů:
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;
Použití možností odůvodnění v chatu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
ChatCompletionsClient client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(System.getProperty("AZURE_INFERENCE_CREDENTIAL")),
Tip
Ověřte, že jste model nasadili do prostředku Azure AI Services pomocí rozhraní API pro odvozování modelu Azure AI.
Deepseek-R1
je také k dispozici jako koncové body bezserverového rozhraní API. Tyto koncové body ale tento parametr model
nepřebírají, jak je vysvětleno v tomto kurzu. To můžete ověřit tak, že přejdete na portál> Azure AI Foundry Models + koncové body a ověříte, že je model uvedený v části Služby Azure AI.
Pokud jste nakonfigurovali prostředek na podporu Microsoft Entra ID , můžete k vytvoření klienta použít následující fragment kódu.
client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredentialBuilder().build()
);
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní žádost o chat do modelu.
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);
Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:
- Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
- Integrované možnosti zdůvodňování umožňují jednoduché výzvy s nulovým snímkem tak efektivní jako složitější metody.
- Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, včetně pouze nejrelevantních informací, může pomoct zabránit tomu, aby model překomplikoval jeho odpověď.
- Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je však dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
- Při vytváření vícevrstevných aplikací zvažte pouze připojení konečné odpovědi z modelu bez odůvodnění obsahu, jak je vysvětleno v části Odůvodnění obsahu .
Odpověď je následující, kde vidíte statistiku využití modelu:
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
Odůvodnění obsahu
Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think>
a </think>
. Model může vybrat, ve kterých scénářích se má generovat důvod k obsahu. Z odpovědi můžete extrahovat odůvodnění, abyste porozuměli myšlenkovým procesům modelu následujícím způsobem:
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
Při provádění konverzací s více možnostmi je užitečné vyhnout se odesílání obsahu důvodů v historii chatu, protože důvod má tendenci generovat dlouhé vysvětlení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
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);
}
});
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu. Následující příklad implementuje směrování, které streamuje pouze odpověď bez odůvodnění obsahu:
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();
}
}
}
}
Můžete vizualizovat, jak streamování generuje obsah:
try {
streamMessageAsync(client).get();
} catch (Exception e) {
throw new RuntimeException(e);
}
Parametry
Obecně platí, že modely odůvodnění nepodporují následující parametry, které najdete v modelech dokončování chatu:
- Teplota
- Trest přítomnosti
- Trest opakování
- Parametr
top_p
Některé modely podporují použití nástrojů nebo strukturovaných výstupů (včetně schémat JSON). Přečtěte si stránku s podrobnostmi o modelech a seznamte se s podporou jednotlivých modelů.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Tento článek vysvětluje, jak používat možnosti odůvodnění modelů dokončování chatu nasazených do odvozování modelů Azure AI ve službách Azure AI.
Modely odůvodnění
Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně pomocí řetězu myšlenek prozkoumat všechny možné cesty před generováním odpovědi. Ověří své odpovědi, jakmile je vytvoří, což jim pomůže přijít k přesnějším závěrům. To znamená, že zdůvodnění modelů může vyžadovat při zobrazení výzvy méně kontextu, aby vznikly efektivní výsledky.
Takový způsob škálování výkonu modelu se označuje jako doba odvozování výpočetních prostředků , protože obchoduje s výkonem s vyšší latencí a náklady. Je na rozdíl od jiných přístupů, které se škálují prostřednictvím trénovacího výpočetního času.
Modely zdůvodnění pak vytvoří dva typy výstupů:
- Odůvodnění dokončení
- Dokončení výstupu
Obě tyto dokončování se počítají do obsahu generovaného z modelu, a proto se k limitům tokenů a nákladům přidruženým k modelu. Některé modely můžou vypíše obsah odůvodnění, například DeepSeek-R1
. Některé jiné, například o1
, pouze výstupem výstupu dokončení.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Předplatné Azure. Pokud používáte modely GitHubu, můžete prostředí upgradovat a v procesu vytvořit předplatné Azure. Pokud se jedná o váš případ, přečtěte si upgrade z modelů GitHubu na odvození modelu Azure AI.
Prostředek služeb Azure AI Další informace najdete v tématu Vytvoření prostředku Azure AI Services.
Adresa URL a klíč koncového bodu.
Model s možnostmi odůvodnění nasazení modelu. Pokud nemáte možnost Přidat a nakonfigurovat modely do služeb Azure AI, abyste mohli přidat model zdůvodnění.
- Tento příklad používá
DeepSeek-R1
.
- Tento příklad používá
Nainstalujte balíček odvození Azure AI pomocí následujícího příkazu:
dotnet add package Azure.AI.Inference --prerelease
Pokud používáte ID Entra, potřebujete také následující balíček:
dotnet add package Azure.Identity
Použití možností odůvodnění v chatu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Tip
Ověřte, že jste model nasadili do prostředku Azure AI Services pomocí rozhraní API pro odvozování modelu Azure AI.
Deepseek-R1
je také k dispozici jako koncové body bezserverového rozhraní API. Tyto koncové body ale tento parametr model
nepřebírají, jak je vysvětleno v tomto kurzu. To můžete ověřit tak, že přejdete na portál> Azure AI Foundry Models + koncové body a ověříte, že je model uvedený v části Služby Azure AI.
Pokud jste nakonfigurovali prostředek na podporu Microsoft Entra ID , můžete k vytvoření klienta použít následující fragment kódu.
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,
);
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní žádost o chat do modelu.
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestUserMessage("How many languages are in the world?")
},
Model = "deepseek-r1",
};
Response<ChatCompletions> response = client.Complete(requestOptions);
Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:
- Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
- Integrované možnosti zdůvodňování umožňují jednoduché výzvy s nulovým snímkem tak efektivní jako složitější metody.
- Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, včetně pouze nejrelevantních informací, může pomoct zabránit tomu, aby model překomplikoval jeho odpověď.
- Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je však dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
- Při vytváření vícevrstevných aplikací zvažte pouze připojení konečné odpovědi z modelu bez odůvodnění obsahu, jak je vysvětleno v části Odůvodnění obsahu .
Odpověď je následující, kde vidíte statistiku využití modelu:
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
Odůvodnění obsahu
Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think>
a </think>
. Model může vybrat, ve kterých scénářích se má generovat důvod k obsahu. Z odpovědi můžete extrahovat odůvodnění, abyste porozuměli myšlenkovým procesům modelu následujícím způsobem:
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
Při provádění konverzací s více možnostmi je užitečné vyhnout se odesílání obsahu důvodů v historii chatu, protože důvod má tendenci generovat dlouhé vysvětlení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
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);
}
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu. Následující příklad implementuje směrování, které streamuje pouze odpověď bez odůvodnění obsahu:
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();
}
}
}
}
Můžete vizualizovat, jak streamování generuje obsah:
StreamMessageAsync(client).GetAwaiter().GetResult();
Parametry
Obecně platí, že modely odůvodnění nepodporují následující parametry, které najdete v modelech dokončování chatu:
- Teplota
- Trest přítomnosti
- Trest opakování
- Parametr
top_p
Některé modely podporují použití nástrojů nebo strukturovaných výstupů (včetně schémat JSON). Přečtěte si stránku s podrobnostmi o modelech a seznamte se s podporou jednotlivých modelů.
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu zjistí a provede akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
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;
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Tento článek vysvětluje, jak používat možnosti odůvodnění modelů dokončování chatu nasazených do odvozování modelů Azure AI ve službách Azure AI.
Modely odůvodnění
Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně pomocí řetězu myšlenek prozkoumat všechny možné cesty před generováním odpovědi. Ověří své odpovědi, jakmile je vytvoří, což jim pomůže přijít k přesnějším závěrům. To znamená, že zdůvodnění modelů může vyžadovat při zobrazení výzvy méně kontextu, aby vznikly efektivní výsledky.
Takový způsob škálování výkonu modelu se označuje jako doba odvozování výpočetních prostředků , protože obchoduje s výkonem s vyšší latencí a náklady. Je na rozdíl od jiných přístupů, které se škálují prostřednictvím trénovacího výpočetního času.
Modely zdůvodnění pak vytvoří dva typy výstupů:
- Odůvodnění dokončení
- Dokončení výstupu
Obě tyto dokončování se počítají do obsahu generovaného z modelu, a proto se k limitům tokenů a nákladům přidruženým k modelu. Některé modely můžou vypíše obsah odůvodnění, například DeepSeek-R1
. Některé jiné, například o1
, pouze výstupem výstupu dokončení.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Předplatné Azure. Pokud používáte modely GitHubu, můžete prostředí upgradovat a v procesu vytvořit předplatné Azure. Pokud se jedná o váš případ, přečtěte si upgrade z modelů GitHubu na odvození modelu Azure AI.
Prostředek služeb Azure AI Další informace najdete v tématu Vytvoření prostředku Azure AI Services.
Adresa URL a klíč koncového bodu.
Model s možnostmi odůvodnění nasazení modelu. Pokud nemáte možnost Přidat a nakonfigurovat modely do služeb Azure AI, abyste mohli přidat model zdůvodnění.
- Tento příklad používá
DeepSeek-R1
.
- Tento příklad používá
Použití možností odůvodnění v chatu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
api-key: <key>
Tip
Ověřte, že jste model nasadili do prostředku Azure AI Services pomocí rozhraní API pro odvozování modelu Azure AI.
Deepseek-R1
je také k dispozici jako koncové body bezserverového rozhraní API. Tyto koncové body ale tento parametr model
nepřebírají, jak je vysvětleno v tomto kurzu. To můžete ověřit tak, že přejdete na portál> Azure AI Foundry Models + koncové body a ověříte, že je model uvedený v části Služby Azure AI.
Pokud jste nakonfigurovali prostředek s podporou Microsoft Entra ID , předejte token v Authorization
hlavičce:
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
Authorization: Bearer <token>
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní žádost o chat do modelu.
{
"model": "deepseek-r1",
"messages": [
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:
- Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
- Integrované možnosti zdůvodňování umožňují jednoduché výzvy s nulovým snímkem tak efektivní jako složitější metody.
- Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, včetně pouze nejrelevantních informací, může pomoct zabránit tomu, aby model překomplikoval jeho odpověď.
- Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je však dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
- Při vytváření vícevrstevných aplikací zvažte pouze připojení konečné odpovědi z modelu bez odůvodnění obsahu, jak je vysvětleno v části Odůvodnění obsahu .
Odpověď je následující, kde vidíte statistiku využití modelu:
{
"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
}
}
Odůvodnění obsahu
Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think>
a </think>
. Model může vybrat, ve kterých scénářích se má generovat důvod k obsahu.
Při provádění konverzací s více možnostmi je užitečné vyhnout se odesílání obsahu důvodů v historii chatu, protože důvod má tendenci generovat dlouhé vysvětlení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
Pokud chcete streamovat dokončení, nastavte "stream": true
při volání modelu.
{
"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
}
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu. Následující příklad implementuje směrování, které streamuje pouze odpověď bez odůvodnění obsahu:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "DeepSeek-R1",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
Poslední zpráva ve streamu je nastavená finish_reason
, což označuje důvod zastavení procesu generování.
{
"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
}
}
Parametry
Obecně platí, že modely odůvodnění nepodporují následující parametry, které najdete v modelech dokončování chatu:
- Teplota
- Trest přítomnosti
- Trest opakování
- Parametr
top_p
Některé modely podporují použití nástrojů nebo strukturovaných výstupů (včetně schémat JSON). Přečtěte si stránku s podrobnostmi o modelech a seznamte se s podporou jednotlivých modelů.
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu zjistí a provede akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
{
"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
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.