Como usar modelos de raciocínio com inferência de modelo de IA do Azure
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Este artigo explica como usar os recursos de raciocínio dos modelos de conclusão de chat implantados na inferência de modelo de IA do Azure nos serviços de IA do Azure.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais elevados de desempenho em domínios como matemática, codificação, ciências, estratégia e logística. A maneira como esses modelos produzem resultados é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Verificam as suas respostas à medida que as produzem, o que os ajuda a chegar a conclusões mais precisas. Isso significa que os modelos de raciocínio podem exigir menos contexto na solicitação para produzir resultados eficazes.
Essa forma de dimensionar o desempenho do modelo é conhecida como tempo de computação de inferência, pois negocia o desempenho em relação a latência e custo mais altos. Ele contrasta com outras abordagens que escalam através do tempo de computação de treinamento.
Os modelos de raciocínio produzem então dois tipos de saídas:
- Conclusão do raciocínio
- Conclusão de saída
Ambas as finalizações contam para o conteúdo gerado a partir do modelo e, portanto, para os limites de token e custos associados ao modelo. Alguns modelos podem produzir o conteúdo de raciocínio, como DeepSeek-R1
. Alguns outros, como o1
, só produz a parte de saída das completações.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma subscrição do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualização de modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso de serviços de IA do Azure. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
A URL e a chave do ponto de extremidade.
Um modelo com capacidades de raciocínio de implantação de modelo. Se você não tiver um, leia Adicionar e configurar modelos aos serviços de IA do Azure para adicionar um modelo de raciocínio.
- Estes exemplos usam
DeepSeek-R1
.
- Estes exemplos usam
Instale o pacote de inferência do Azure AI com o seguinte comando:
pip install -U azure-ai-inference
Use recursos de raciocínio com o bate-papo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
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"
)
Gorjeta
Verifique se você implantou o modelo no recurso Serviços de IA do Azure com a API de inferência de modelo de IA do Azure.
Deepseek-R1
também está disponível como pontos de extremidade de API sem servidor. No entanto, esses pontos de extremidade não usam o parâmetro model
conforme explicado neste tutorial. Você pode verificar isso acessando Modelos + pontos de extremidade do portal> do Azure AI Foundry e verificar se o modelo está listado na seção Serviços de IA do Azure.
Se você configurou o recurso para com suporte a ID do Microsoft Entra, você pode usar o trecho de código a seguir para criar um cliente.
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"
)
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
from azure.ai.inference.models import SystemMessage, UserMessage
response = client.complete(
messages=[
UserMessage(content="How many languages are in the world?"),
],
)
Ao criar prompts para modelos de raciocínio, leve em consideração o seguinte:
- Use instruções simples e evite o uso de técnicas de cadeia de pensamento.
- Os recursos de raciocínio integrados tornam os prompts simples de tiro zero tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluir apenas as informações mais relevantes pode ajudar a evitar que o modelo complique demais sua resposta.
- Os modelos de raciocínio podem suportar o uso de mensagens do sistema. No entanto, podem não segui-los tão estritamente como outros modelos sem raciocínio.
- Ao criar aplicativos de várias voltas, considere apenas anexar a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção Conteúdo de raciocínio.
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
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
Conteúdo de raciocínio
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás disso. O raciocínio associado à conclusão está incluído no conteúdo da resposta dentro das tags <think>
e </think>
. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio. Você pode extrair o conteúdo de raciocínio da resposta para entender o processo de pensamento do modelo da seguinte maneira:
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
Ao fazer conversas com vários turnos, é útil evitar enviar o conteúdo de raciocínio no histórico de bate-papo, pois o raciocínio tende a gerar longas explicações.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para transmitir finalizações, defina stream=True
quando você chamar o modelo.
result = client.complete(
model="deepseek-r1",
messages=[
UserMessage(content="How many languages are in the world?"),
],
max_tokens=2048,
stream=True,
)
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo. O exemplo a seguir implementa um roteamento que transmite apenas a resposta sem o conteúdo do raciocínio:
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)
Você pode visualizar como o streaming gera conteúdo:
print_stream(result)
Parâmetros
Em geral, os modelos de raciocínio não suportam os seguintes parâmetros que você pode encontrar nos modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Pena de repetição
- Parâmetro
top_p
Alguns modelos suportam o uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página Detalhes dos modelos para entender o suporte de cada modelo.
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Este artigo explica como usar os recursos de raciocínio dos modelos de conclusão de chat implantados na inferência de modelo de IA do Azure nos serviços de IA do Azure.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais elevados de desempenho em domínios como matemática, codificação, ciências, estratégia e logística. A maneira como esses modelos produzem resultados é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Verificam as suas respostas à medida que as produzem, o que os ajuda a chegar a conclusões mais precisas. Isso significa que os modelos de raciocínio podem exigir menos contexto na solicitação para produzir resultados eficazes.
Essa forma de dimensionar o desempenho do modelo é conhecida como tempo de computação de inferência, pois negocia o desempenho em relação a latência e custo mais altos. Ele contrasta com outras abordagens que escalam através do tempo de computação de treinamento.
Os modelos de raciocínio produzem então dois tipos de saídas:
- Conclusão do raciocínio
- Conclusão de saída
Ambas as finalizações contam para o conteúdo gerado a partir do modelo e, portanto, para os limites de token e custos associados ao modelo. Alguns modelos podem produzir o conteúdo de raciocínio, como DeepSeek-R1
. Alguns outros, como o1
, só produz a parte de saída das completações.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma subscrição do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualização de modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso de serviços de IA do Azure. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
A URL e a chave do ponto de extremidade.
Um modelo com capacidades de raciocínio de implantação de modelo. Se você não tiver um, leia Adicionar e configurar modelos aos serviços de IA do Azure para adicionar um modelo de raciocínio.
- Estes exemplos usam
DeepSeek-R1
.
- Estes exemplos usam
Instale a biblioteca de inferência do Azure para JavaScript com o seguinte comando:
npm install @azure-rest/ai-inference
Use recursos de raciocínio com o bate-papo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
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)
);
Gorjeta
Verifique se você implantou o modelo no recurso Serviços de IA do Azure com a API de inferência de modelo de IA do Azure.
Deepseek-R1
também está disponível como pontos de extremidade de API sem servidor. No entanto, esses pontos de extremidade não usam o parâmetro model
conforme explicado neste tutorial. Você pode verificar isso acessando Modelos + pontos de extremidade do portal> do Azure AI Foundry e verificar se o modelo está listado na seção Serviços de IA do Azure.
Se você configurou o recurso para com suporte a ID do Microsoft Entra, você pode usar o trecho de código a seguir para criar um cliente.
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,
);
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
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,
}
});
Ao criar prompts para modelos de raciocínio, leve em consideração o seguinte:
- Use instruções simples e evite o uso de técnicas de cadeia de pensamento.
- Os recursos de raciocínio integrados tornam os prompts simples de tiro zero tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluir apenas as informações mais relevantes pode ajudar a evitar que o modelo complique demais sua resposta.
- Os modelos de raciocínio podem suportar o uso de mensagens do sistema. No entanto, podem não segui-los tão estritamente como outros modelos sem raciocínio.
- Ao criar aplicativos de várias voltas, considere apenas anexar a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção Conteúdo de raciocínio.
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
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
Conteúdo de raciocínio
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás disso. O raciocínio associado à conclusão está incluído no conteúdo da resposta dentro das tags <think>
e </think>
. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio. Você pode extrair o conteúdo de raciocínio da resposta para entender o processo de pensamento do modelo da seguinte maneira:
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
Ao fazer conversas com vários turnos, é útil evitar enviar o conteúdo de raciocínio no histórico de bate-papo, pois o raciocínio tende a gerar longas explicações.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para transmitir finalizações, defina stream=True
quando você chamar o modelo.
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();
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo. O exemplo a seguir implementa um roteamento que transmite apenas a resposta sem o conteúdo do raciocínio:
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);
}
}
}
}
Você pode visualizar como o streaming gera conteúdo:
var sses = createSseStream(response.body);
printStream(result)
Parâmetros
Em geral, os modelos de raciocínio não suportam os seguintes parâmetros que você pode encontrar nos modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Pena de repetição
- Parâmetro
top_p
Alguns modelos suportam o uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página Detalhes dos modelos para entender o suporte de cada modelo.
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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;
}
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Este artigo explica como usar os recursos de raciocínio dos modelos de conclusão de chat implantados na inferência de modelo de IA do Azure nos serviços de IA do Azure.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais elevados de desempenho em domínios como matemática, codificação, ciências, estratégia e logística. A maneira como esses modelos produzem resultados é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Verificam as suas respostas à medida que as produzem, o que os ajuda a chegar a conclusões mais precisas. Isso significa que os modelos de raciocínio podem exigir menos contexto na solicitação para produzir resultados eficazes.
Essa forma de dimensionar o desempenho do modelo é conhecida como tempo de computação de inferência, pois negocia o desempenho em relação a latência e custo mais altos. Ele contrasta com outras abordagens que escalam através do tempo de computação de treinamento.
Os modelos de raciocínio produzem então dois tipos de saídas:
- Conclusão do raciocínio
- Conclusão de saída
Ambas as finalizações contam para o conteúdo gerado a partir do modelo e, portanto, para os limites de token e custos associados ao modelo. Alguns modelos podem produzir o conteúdo de raciocínio, como DeepSeek-R1
. Alguns outros, como o1
, só produz a parte de saída das completações.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma subscrição do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualização de modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso de serviços de IA do Azure. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
A URL e a chave do ponto de extremidade.
Um modelo com capacidades de raciocínio de implantação de modelo. Se você não tiver um, leia Adicionar e configurar modelos aos serviços de IA do Azure para adicionar um modelo de raciocínio.
- Estes exemplos usam
DeepSeek-R1
.
- Estes exemplos usam
Adicione o pacote de inferência do Azure AI ao seu projeto:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.2</version> </dependency>
Se você estiver usando o Entra ID, você também precisa do seguinte pacote:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.13.3</version> </dependency>
Importe o seguinte namespace:
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;
Use recursos de raciocínio com o bate-papo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
ChatCompletionsClient client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(System.getProperty("AZURE_INFERENCE_CREDENTIAL")),
Gorjeta
Verifique se você implantou o modelo no recurso Serviços de IA do Azure com a API de inferência de modelo de IA do Azure.
Deepseek-R1
também está disponível como pontos de extremidade de API sem servidor. No entanto, esses pontos de extremidade não usam o parâmetro model
conforme explicado neste tutorial. Você pode verificar isso acessando Modelos + pontos de extremidade do portal> do Azure AI Foundry e verificar se o modelo está listado na seção Serviços de IA do Azure.
Se você configurou o recurso para com suporte a ID do Microsoft Entra, você pode usar o trecho de código a seguir para criar um cliente.
client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredentialBuilder().build()
);
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
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);
Ao criar prompts para modelos de raciocínio, leve em consideração o seguinte:
- Use instruções simples e evite o uso de técnicas de cadeia de pensamento.
- Os recursos de raciocínio integrados tornam os prompts simples de tiro zero tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluir apenas as informações mais relevantes pode ajudar a evitar que o modelo complique demais sua resposta.
- Os modelos de raciocínio podem suportar o uso de mensagens do sistema. No entanto, podem não segui-los tão estritamente como outros modelos sem raciocínio.
- Ao criar aplicativos de várias voltas, considere apenas anexar a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção Conteúdo de raciocínio.
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
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
Conteúdo de raciocínio
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás disso. O raciocínio associado à conclusão está incluído no conteúdo da resposta dentro das tags <think>
e </think>
. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio. Você pode extrair o conteúdo de raciocínio da resposta para entender o processo de pensamento do modelo da seguinte maneira:
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
Ao fazer conversas com vários turnos, é útil evitar enviar o conteúdo de raciocínio no histórico de bate-papo, pois o raciocínio tende a gerar longas explicações.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
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);
}
});
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo. O exemplo a seguir implementa um roteamento que transmite apenas a resposta sem o conteúdo do raciocínio:
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();
}
}
}
}
Você pode visualizar como o streaming gera conteúdo:
try {
streamMessageAsync(client).get();
} catch (Exception e) {
throw new RuntimeException(e);
}
Parâmetros
Em geral, os modelos de raciocínio não suportam os seguintes parâmetros que você pode encontrar nos modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Pena de repetição
- Parâmetro
top_p
Alguns modelos suportam o uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página Detalhes dos modelos para entender o suporte de cada modelo.
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Este artigo explica como usar os recursos de raciocínio dos modelos de conclusão de chat implantados na inferência de modelo de IA do Azure nos serviços de IA do Azure.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais elevados de desempenho em domínios como matemática, codificação, ciências, estratégia e logística. A maneira como esses modelos produzem resultados é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Verificam as suas respostas à medida que as produzem, o que os ajuda a chegar a conclusões mais precisas. Isso significa que os modelos de raciocínio podem exigir menos contexto na solicitação para produzir resultados eficazes.
Essa forma de dimensionar o desempenho do modelo é conhecida como tempo de computação de inferência, pois negocia o desempenho em relação a latência e custo mais altos. Ele contrasta com outras abordagens que escalam através do tempo de computação de treinamento.
Os modelos de raciocínio produzem então dois tipos de saídas:
- Conclusão do raciocínio
- Conclusão de saída
Ambas as finalizações contam para o conteúdo gerado a partir do modelo e, portanto, para os limites de token e custos associados ao modelo. Alguns modelos podem produzir o conteúdo de raciocínio, como DeepSeek-R1
. Alguns outros, como o1
, só produz a parte de saída das completações.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma subscrição do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualização de modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso de serviços de IA do Azure. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
A URL e a chave do ponto de extremidade.
Um modelo com capacidades de raciocínio de implantação de modelo. Se você não tiver um, leia Adicionar e configurar modelos aos serviços de IA do Azure para adicionar um modelo de raciocínio.
- Este exemplo utiliza
DeepSeek-R1
.
- Este exemplo utiliza
Instale o pacote de inferência do Azure AI com o seguinte comando:
dotnet add package Azure.AI.Inference --prerelease
Se você estiver usando o Entra ID, você também precisa do seguinte pacote:
dotnet add package Azure.Identity
Use recursos de raciocínio com o bate-papo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Gorjeta
Verifique se você implantou o modelo no recurso Serviços de IA do Azure com a API de inferência de modelo de IA do Azure.
Deepseek-R1
também está disponível como pontos de extremidade de API sem servidor. No entanto, esses pontos de extremidade não usam o parâmetro model
conforme explicado neste tutorial. Você pode verificar isso acessando Modelos + pontos de extremidade do portal> do Azure AI Foundry e verificar se o modelo está listado na seção Serviços de IA do Azure.
Se você configurou o recurso para com suporte a ID do Microsoft Entra, você pode usar o trecho de código a seguir para criar um cliente.
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,
);
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestUserMessage("How many languages are in the world?")
},
Model = "deepseek-r1",
};
Response<ChatCompletions> response = client.Complete(requestOptions);
Ao criar prompts para modelos de raciocínio, leve em consideração o seguinte:
- Use instruções simples e evite o uso de técnicas de cadeia de pensamento.
- Os recursos de raciocínio integrados tornam os prompts simples de tiro zero tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluir apenas as informações mais relevantes pode ajudar a evitar que o modelo complique demais sua resposta.
- Os modelos de raciocínio podem suportar o uso de mensagens do sistema. No entanto, podem não segui-los tão estritamente como outros modelos sem raciocínio.
- Ao criar aplicativos de várias voltas, considere apenas anexar a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção Conteúdo de raciocínio.
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
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
Conteúdo de raciocínio
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás disso. O raciocínio associado à conclusão está incluído no conteúdo da resposta dentro das tags <think>
e </think>
. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio. Você pode extrair o conteúdo de raciocínio da resposta para entender o processo de pensamento do modelo da seguinte maneira:
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
Ao fazer conversas com vários turnos, é útil evitar enviar o conteúdo de raciocínio no histórico de bate-papo, pois o raciocínio tende a gerar longas explicações.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
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);
}
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo. O exemplo a seguir implementa um roteamento que transmite apenas a resposta sem o conteúdo do raciocínio:
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();
}
}
}
}
Você pode visualizar como o streaming gera conteúdo:
StreamMessageAsync(client).GetAwaiter().GetResult();
Parâmetros
Em geral, os modelos de raciocínio não suportam os seguintes parâmetros que você pode encontrar nos modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Pena de repetição
- Parâmetro
top_p
Alguns modelos suportam o uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página Detalhes dos modelos para entender o suporte de cada modelo.
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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;
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Este artigo explica como usar os recursos de raciocínio dos modelos de conclusão de chat implantados na inferência de modelo de IA do Azure nos serviços de IA do Azure.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais elevados de desempenho em domínios como matemática, codificação, ciências, estratégia e logística. A maneira como esses modelos produzem resultados é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Verificam as suas respostas à medida que as produzem, o que os ajuda a chegar a conclusões mais precisas. Isso significa que os modelos de raciocínio podem exigir menos contexto na solicitação para produzir resultados eficazes.
Essa forma de dimensionar o desempenho do modelo é conhecida como tempo de computação de inferência, pois negocia o desempenho em relação a latência e custo mais altos. Ele contrasta com outras abordagens que escalam através do tempo de computação de treinamento.
Os modelos de raciocínio produzem então dois tipos de saídas:
- Conclusão do raciocínio
- Conclusão de saída
Ambas as finalizações contam para o conteúdo gerado a partir do modelo e, portanto, para os limites de token e custos associados ao modelo. Alguns modelos podem produzir o conteúdo de raciocínio, como DeepSeek-R1
. Alguns outros, como o1
, só produz a parte de saída das completações.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma subscrição do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualização de modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso de serviços de IA do Azure. Para obter mais informações, consulte Criar um recurso dos Serviços de IA do Azure.
A URL e a chave do ponto de extremidade.
Um modelo com capacidades de raciocínio de implantação de modelo. Se você não tiver um, leia Adicionar e configurar modelos aos serviços de IA do Azure para adicionar um modelo de raciocínio.
- Estes exemplos usam
DeepSeek-R1
.
- Estes exemplos usam
Use recursos de raciocínio com o bate-papo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
api-key: <key>
Gorjeta
Verifique se você implantou o modelo no recurso Serviços de IA do Azure com a API de inferência de modelo de IA do Azure.
Deepseek-R1
também está disponível como pontos de extremidade de API sem servidor. No entanto, esses pontos de extremidade não usam o parâmetro model
conforme explicado neste tutorial. Você pode verificar isso acessando Modelos + pontos de extremidade do portal> do Azure AI Foundry e verificar se o modelo está listado na seção Serviços de IA do Azure.
Se você configurou o recurso com suporte ao Microsoft Entra ID , passe o Authorization
token no cabeçalho:
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
Authorization: Bearer <token>
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
{
"model": "deepseek-r1",
"messages": [
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Ao criar prompts para modelos de raciocínio, leve em consideração o seguinte:
- Use instruções simples e evite o uso de técnicas de cadeia de pensamento.
- Os recursos de raciocínio integrados tornam os prompts simples de tiro zero tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluir apenas as informações mais relevantes pode ajudar a evitar que o modelo complique demais sua resposta.
- Os modelos de raciocínio podem suportar o uso de mensagens do sistema. No entanto, podem não segui-los tão estritamente como outros modelos sem raciocínio.
- Ao criar aplicativos de várias voltas, considere apenas anexar a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção Conteúdo de raciocínio.
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
{
"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
}
}
Conteúdo de raciocínio
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás disso. O raciocínio associado à conclusão está incluído no conteúdo da resposta dentro das tags <think>
e </think>
. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio.
Ao fazer conversas com vários turnos, é útil evitar enviar o conteúdo de raciocínio no histórico de bate-papo, pois o raciocínio tende a gerar longas explicações.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para transmitir finalizações, defina "stream": true
quando você chamar o modelo.
{
"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
}
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo. O exemplo a seguir implementa um roteamento que transmite apenas a resposta sem o conteúdo do raciocínio:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "DeepSeek-R1",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
A última mensagem no fluxo foi finish_reason
definida, indicando o motivo para o processo de geração parar.
{
"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
}
}
Parâmetros
Em geral, os modelos de raciocínio não suportam os seguintes parâmetros que você pode encontrar nos modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Pena de repetição
- Parâmetro
top_p
Alguns modelos suportam o uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página Detalhes dos modelos para entender o suporte de cada modelo.
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
{
"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
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.