Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se somente a:Portal Foundry (clássico). Este artigo não está disponível para o novo portal do Foundry.
Saiba mais sobre o novo portal.
Nota
Links neste artigo podem abrir conteúdo na nova documentação do Microsoft Foundry em vez da documentação da Foundry (clássica) que você está exibindo agora.
Importante
Azure SDK beta de inferência de IA foi preterido e será desativado em 26 de agosto de 2026. Mudar para a API OpenAI/v1 geralmente disponível com um SDK estável da OpenAI. Siga o guia de migração para alternar para OpenAI/v1 usando o SDK para sua linguagem de programação preferida.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Este artigo explica como usar os recursos de raciocínio de modelos de conclusão de chat implantados em modelos de Microsoft Foundry.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais altos de desempenho em domínios como matemática, codificação, ciência, estratégia e logística. A maneira como esses modelos produzem saídas é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Eles verificam suas respostas à medida que as produzem, o que ajuda a chegar a conclusões mais precisas. Como resultado, os modelos de raciocínio lógico podem exigir menos indicações de contexto para produzir resultados eficazes.
Os modelos de raciocínio produzem dois tipos de conteúdo como saídas:
- Conclusões de raciocínio
- Conclusões de saída
Ambas as conclusões contam para o conteúdo gerado a partir do modelo. Portanto, eles contribuem para os limites de token e os custos associados ao modelo. Alguns modelos, como DeepSeek-R1, podem responder com o conteúdo do raciocínio. Outros, como o1, geram apenas as conclusões.
Pré-requisitos
Para concluir este tutorial, você precisa:
Uma assinatura Azure. Se você estiver usando modelos GitHub, poderá atualizar sua experiência e criar uma assinatura Azure no processo. Leia Upgrade de modelos de GitHub para Modelos de Microsoft Foundry se esse for o seu caso.
Um projeto do Foundry. Esse tipo de projeto é gerenciado sob um recurso Foundry. Se você não tiver um projeto do Foundry, consulte Criar um projeto Foundry (projetos Foundry).
O endereço do endpoint.
A chave do endpoint (se você optar por usar uma chave de API para autenticação).
Instale o SDK com o seguinte comando:
pip install -U openai
Um modelo com capacidades de raciocínio para implantação de modelos. Se você não tiver um, leia Adicionar e configurar Foundry Models para inserir um modelo de raciocínio.
- Este exemplo usa
DeepSeek-R1.
- Este exemplo usa
Usar recursos de raciocínio com chat
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 openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = "https://<resource>.services.ai.azure.com",
api_key=os.getenv("AZURE_INFERENCE_CREDENTIAL"),
api_version="2024-10-21",
)
Se você configurou o recurso com suporte Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = "https://<resource>.services.ai.azure.com",
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
)
Modelos de raciocínio de prompt
Ao criar solicitações para modelos de raciocínio, leve o seguinte em consideração:
- Use instruções simples e evite usar técnicas de cadeia de pensamento.
- Os recursos internos de raciocínio tornam os prompts de zero-shot simples tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluindo apenas as informações mais relevantes pode ajudar a impedir que o modelo complique excessivamente sua resposta.
- Modelos de raciocínio podem dar suporte ao uso de mensagens do sistema. No entanto, eles podem não segui-los tão estritamente quanto outros modelos não-racionais.
- Ao criar aplicativos de várias rodadas, considere acrescentar apenas a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção de conteúdo de raciocínio.
Observe que os modelos de raciocínio podem levar mais tempo para gerar respostas. Eles usam cadeias de raciocínio longas de pensamento que permitem uma solução de problemas mais profunda e estruturada. Eles também executam a auto-verificação para verificar suas respostas e corrigir seus erros, mostrando assim comportamentos auto-reflexivos emergentes.
Criar uma solicitação de conclusão de chat
O exemplo a seguir mostra como você pode criar uma solicitação de chat básica para o modelo.
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
]
)
A resposta é a seguinte, em que 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: 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
Nota
Essas informações sobre o conteúdo do raciocínio não se aplicam a modelos Azure OpenAI. Modelos de raciocínio do Azure OpenAI usam o recurso de resumos de raciocínio.
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás dele.
O raciocínio associado à conclusão está incluído no campo reasoning_content. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio.
print("Thinking:", response.choices[0].message.reasoning_content)
Thinking: Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer...
Ao fazer conversas de vários turnos, é útil evitar o envio do conteúdo de raciocínio no histórico de chat, pois o raciocínio tende a gerar explicações longas.
Transmitir conteúdo
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando completamentos longos, aguardar a resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo conforme ele está sendo gerado. O conteúdo de streaming permite que você comece a processar a conclusão à medida que o conteúdo estiver disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor contendo apenas dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para fluxo de conclusões, defina stream=True quando você chamar o modelo.
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
],
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 de raciocínio:
O conteúdo do raciocínio também é incluído dentro das partes delta da resposta, na chave reasoning_content.
def print_stream(completion):
"""
Prints the chat completion with streaming.
"""
is_thinking = False
for event in completion:
if event.choices:
content = event.choices[0].delta.content
reasoning_content = event.choices[0].delta.reasoning_content if hasattr(event.choices[0].delta, "reasoning_content") else None
if reasoning_content and not is_thinking:
is_thinking = True
print("🧠 Thinking...", end="", flush=True)
elif content:
if is_thinking:
is_thinking = False
print("🛑\n\n")
print(content or reasoning_content, end="", flush=True)
print_stream(response)
Você pode visualizar como o streaming gera conteúdo:
print_stream(response)
Parâmetros
Em geral, os modelos de raciocínio não dão suporte aos seguintes parâmetros que você pode encontrar em modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Penalidade de repetição
- Parâmetro
top_p
Alguns modelos dão suporte ao uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página de detalhes dos Modelos para entender o suporte de cada modelo.
Aplicar Guardrails e controles
A API de Inferência do Modelo de IA Azure dá suporte a Segurança de Conteúdo de IA do Azure. Quando você usa implantações com Segurança de Conteúdo de IA do Azure ativado, entradas e saídas passam por um conjunto de modelos de classificação que visam detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial em solicitações de entrada e resultados de saída.
O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo prejudicial no prompt de entrada.
try:
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."}
],
)
print(response.choices[0].message.content)
except HttpResponseError as ex:
if ex.status_code == 400:
response = ex.response.json()
if isinstance(response, dict) and "error" in response:
print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
else:
raise
raise
Dica
Para saber mais sobre como você pode definir e controlar as configurações de Segurança de Conteúdo de IA do Azure, verifique a documentação Segurança de Conteúdo de IA do Azure.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Este artigo explica como usar os recursos de raciocínio de modelos de conclusão de chat implantados em modelos de Microsoft Foundry.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais altos de desempenho em domínios como matemática, codificação, ciência, estratégia e logística. A maneira como esses modelos produzem saídas é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Eles verificam suas respostas à medida que as produzem, o que ajuda a chegar a conclusões mais precisas. Como resultado, os modelos de raciocínio lógico podem exigir menos indicações de contexto para produzir resultados eficazes.
Os modelos de raciocínio produzem dois tipos de conteúdo como saídas:
- Conclusões de raciocínio
- Conclusões de saída
Ambas as conclusões contam para o conteúdo gerado a partir do modelo. Portanto, eles contribuem para os limites de token e os custos associados ao modelo. Alguns modelos, como DeepSeek-R1, podem responder com o conteúdo do raciocínio. Outros, como o1, geram apenas as conclusões.
Pré-requisitos
Para concluir este tutorial, você precisa:
Uma assinatura Azure. Se você estiver usando modelos GitHub, poderá atualizar sua experiência e criar uma assinatura Azure no processo. Leia Upgrade de modelos de GitHub para Modelos de Microsoft Foundry se esse for o seu caso.
Um projeto do Foundry. Esse tipo de projeto é gerenciado sob um recurso Foundry. Se você não tiver um projeto do Foundry, consulte Criar um projeto Foundry (projetos Foundry).
O endereço do endpoint.
A chave do endpoint (se você optar por usar uma chave de API para autenticação).
Instale a biblioteca de inferência Azure para JavaScript com o seguinte comando:
npm install @azure-rest/ai-inference npm install @azure/core-auth npm install @azure/identitySe você estiver usando Node.js, poderá configurar as dependências no package.json:
package.json
{ "name": "main_app", "version": "1.0.0", "description": "", "main": "app.js", "type": "module", "dependencies": { "@azure-rest/ai-inference": "1.0.0-beta.6", "@azure/core-auth": "1.9.0", "@azure/core-sse": "2.2.0", "@azure/identity": "4.8.0" } }Importe o seguinte:
import ModelClient from "@azure-rest/ai-inference"; import { isUnexpected } from "@azure-rest/ai-inference"; import { createSseStream } from "@azure/core-sse"; import { AzureKeyCredential } from "@azure/core-auth"; import { DefaultAzureCredential } from "@azure/identity";
Um modelo com capacidades de raciocínio para implantação de modelos. Se você não tiver um, leia Adicionar e configurar Foundry Models para inserir um modelo de raciocínio.
- Este exemplo usa
DeepSeek-R1.
- Este exemplo usa
Usar recursos de raciocínio com chat
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.
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);
Se você configurou o recurso com suporte Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
const clientOptions = { credentials: { "https://cognitiveservices.azure.com/.default" } };
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new DefaultAzureCredential()
clientOptions,
);
Modelos de raciocínio de prompt
Ao criar solicitações para modelos de raciocínio, leve o seguinte em consideração:
- Use instruções simples e evite usar técnicas de cadeia de pensamento.
- Os recursos internos de raciocínio tornam os prompts de zero-shot simples tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluindo apenas as informações mais relevantes pode ajudar a impedir que o modelo complique excessivamente sua resposta.
- Modelos de raciocínio podem dar suporte ao uso de mensagens do sistema. No entanto, eles podem não segui-los tão estritamente quanto outros modelos não-racionais.
- Ao criar aplicativos de várias rodadas, considere acrescentar apenas a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção de conteúdo de raciocínio.
Observe que os modelos de raciocínio podem levar mais tempo para gerar respostas. Eles usam cadeias de raciocínio longas de pensamento que permitem uma solução de problemas mais profunda e estruturada. Eles também executam a auto-verificação para verificar suas respostas e corrigir seus erros, mostrando assim comportamentos auto-reflexivos emergentes.
Criar uma solicitação de conclusão de chat
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,
}
});
A resposta é a seguinte, em que 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
Nota
Essas informações sobre o conteúdo do raciocínio não se aplicam a modelos Azure OpenAI. Modelos de raciocínio do Azure OpenAI usam o recurso de resumos de raciocínio.
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás dele. O raciocínio associado à conclusão é incluído no conteúdo da resposta dentro das marcas <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/regions 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/region. \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 de vários turnos, é útil evitar o envio do conteúdo de raciocínio no histórico de chat, pois o raciocínio tende a gerar explicações longas.
Transmitir conteúdo
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando completamentos longos, aguardar a resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo conforme ele está sendo gerado. O conteúdo de streaming permite que você comece a processar a conclusão à medida que o conteúdo estiver disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor contendo apenas dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para fluxo de conclusõ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,
stream: true
}
}).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 de raciocínio:
async function printStream(sses) {
let isThinking = false;
for await (const event of sses) {
if (event.data === "[DONE]") {
return;
}
for (const choice of (JSON.parse(event.data)).choices) {
const content = choice.delta?.content ?? "";
if (content === "<think>") {
isThinking = true;
process.stdout.write("🧠 Thinking...");
} else if (content === "</think>") {
isThinking = false;
console.log("🛑\n\n");
} else if (content) {
process.stdout.write(content);
}
}
}
}
Você pode visualizar como o streaming gera conteúdo:
var sses = createSseStream(response.body);
await printStream(sses)
Parâmetros
Em geral, os modelos de raciocínio não dão suporte aos seguintes parâmetros que você pode encontrar em modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Penalidade de repetição
- Parâmetro
top_p
Alguns modelos dão suporte ao uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página de detalhes dos Modelos para entender o suporte de cada modelo.
Aplicar limites e controles
A API de Inferência do Modelo de IA Azure dá suporte a Segurança de Conteúdo de IA do Azure. Quando você usa implantações com Segurança de Conteúdo de IA do Azure ativado, entradas e saídas passam por um conjunto de modelos de classificação que visam detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial em solicitações de entrada e resultados de saída.
O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo prejudicial no prompt de entrada.
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;
}
}
}
Dica
Para saber mais sobre como você pode definir e controlar as configurações de Segurança de Conteúdo de IA do Azure, verifique a documentação Segurança de Conteúdo de IA do Azure.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Este artigo explica como usar os recursos de raciocínio de modelos de conclusão de chat implantados em modelos de Microsoft Foundry.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais altos de desempenho em domínios como matemática, codificação, ciência, estratégia e logística. A maneira como esses modelos produzem saídas é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Eles verificam suas respostas à medida que as produzem, o que ajuda a chegar a conclusões mais precisas. Como resultado, os modelos de raciocínio lógico podem exigir menos indicações de contexto para produzir resultados eficazes.
Os modelos de raciocínio produzem dois tipos de conteúdo como saídas:
- Conclusões de raciocínio
- Conclusões de saída
Ambas as conclusões contam para o conteúdo gerado a partir do modelo. Portanto, eles contribuem para os limites de token e os custos associados ao modelo. Alguns modelos, como DeepSeek-R1, podem responder com o conteúdo do raciocínio. Outros, como o1, geram apenas as conclusões.
Pré-requisitos
Para concluir este tutorial, você precisa:
Uma assinatura Azure. Se você estiver usando modelos GitHub, poderá atualizar sua experiência e criar uma assinatura Azure no processo. Leia Upgrade de modelos de GitHub para Modelos de Microsoft Foundry se esse for o seu caso.
Um projeto do Foundry. Esse tipo de projeto é gerenciado sob um recurso Foundry. Se você não tiver um projeto do Foundry, consulte Criar um projeto Foundry (projetos Foundry).
O endereço do endpoint.
A chave do endpoint (se você optar por usar uma chave de API para autenticação).
Adicione o pacote de inferência de IA Azure ao seu projeto:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.4</version> </dependency>Se você estiver usando Entra ID, também precisará do seguinte pacote:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.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.ChatCompletionsClient; import com.azure.ai.inference.ChatCompletionsClientBuilder; import com.azure.ai.inference.models.EmbeddingsResult; import com.azure.ai.inference.models.EmbeddingItem; import com.azure.ai.inference.models.ChatCompletions; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.Configuration; import java.util.ArrayList; import java.util.List;
Um modelo com capacidades de raciocínio para implantação de modelos. Se você não tiver um, leia Adicionar e configurar Foundry Models para inserir um modelo de raciocínio.
- Este exemplo usa
DeepSeek-R1.
- Este exemplo usa
Usar recursos de raciocínio com chat
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")),
Dica
Verifique se você implantou o modelo no recurso de Ferramentas Foundry com a API de Inferência do Modelo do Azure AI.
Deepseek-R1 também está disponível como implantações de API sem servidor. No entanto, esses pontos de extremidade não tomam o parâmetro model conforme explicado neste tutorial. Você pode verificar isso acessando o portal do Foundry>, selecionando Modelos e endpoints, e confirmar que o modelo está listado na seção Foundry Tools.
Se você configurou o recurso com suporte Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredentialBuilder().build()
);
Modelos de raciocínio de prompt
Ao criar solicitações para modelos de raciocínio, leve o seguinte em consideração:
- Use instruções simples e evite usar técnicas de cadeia de pensamento.
- Os recursos internos de raciocínio tornam os prompts de zero-shot simples tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluindo apenas as informações mais relevantes pode ajudar a impedir que o modelo complique excessivamente sua resposta.
- Modelos de raciocínio podem dar suporte ao uso de mensagens do sistema. No entanto, eles podem não segui-los tão estritamente quanto outros modelos não-racionais.
- Ao criar aplicativos de várias rodadas, considere acrescentar apenas a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção de conteúdo de raciocínio.
Observe que os modelos de raciocínio podem levar mais tempo para gerar respostas. Eles usam cadeias de raciocínio longas de pensamento que permitem uma solução de problemas mais profunda e estruturada. Eles também executam a auto-verificação para verificar suas respostas e corrigir seus erros, mostrando assim comportamentos auto-reflexivos emergentes.
Criar uma solicitação de conclusão de chat
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);
A resposta é a seguinte, em que 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
Nota
Essas informações sobre o conteúdo do raciocínio não se aplicam a modelos Azure OpenAI. Modelos de raciocínio do Azure OpenAI usam o recurso de resumos de raciocínio.
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás dele. O raciocínio associado à conclusão é incluído no conteúdo da resposta dentro das marcas <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/regions 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/region. \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 de vários turnos, é útil evitar o envio do conteúdo de raciocínio no histórico de chat, pois o raciocínio tende a gerar explicações longas.
Transmitir conteúdo
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando completamentos longos, aguardar a resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo conforme ele está sendo gerado. O conteúdo de streaming permite que você comece a processar a conclusão à medida que o conteúdo estiver disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor contendo apenas 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 de 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 dão suporte aos seguintes parâmetros que você pode encontrar em modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Penalidade de repetição
- Parâmetro
top_p
Alguns modelos dão suporte ao uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página de detalhes dos Modelos para entender o suporte de cada modelo.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Este artigo explica como usar os recursos de raciocínio de modelos de conclusão de chat implantados em modelos de Microsoft Foundry.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais altos de desempenho em domínios como matemática, codificação, ciência, estratégia e logística. A maneira como esses modelos produzem saídas é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Eles verificam suas respostas à medida que as produzem, o que ajuda a chegar a conclusões mais precisas. Como resultado, os modelos de raciocínio lógico podem exigir menos indicações de contexto para produzir resultados eficazes.
Os modelos de raciocínio produzem dois tipos de conteúdo como saídas:
- Conclusões de raciocínio
- Conclusões de saída
Ambas as conclusões contam para o conteúdo gerado a partir do modelo. Portanto, eles contribuem para os limites de token e os custos associados ao modelo. Alguns modelos, como DeepSeek-R1, podem responder com o conteúdo do raciocínio. Outros, como o1, geram apenas as conclusões.
Pré-requisitos
Para concluir este tutorial, você precisa:
Uma assinatura Azure. Se você estiver usando modelos GitHub, poderá atualizar sua experiência e criar uma assinatura Azure no processo. Leia Upgrade de modelos de GitHub para Modelos de Microsoft Foundry se esse for o seu caso.
Um projeto do Foundry. Esse tipo de projeto é gerenciado sob um recurso Foundry. Se você não tiver um projeto do Foundry, consulte Criar um projeto Foundry (projetos Foundry).
O endereço do endpoint.
A chave do endpoint (se você optar por usar uma chave de API para autenticação).
Instale o pacote de inferência de IA Azure com o seguinte comando:
dotnet add package Azure.AI.Inference --prereleaseSe você estiver usando Entra ID, também precisará do seguinte pacote:
dotnet add package Azure.Identity
Um modelo com capacidades de raciocínio para implantação de modelos. Se você não tiver um, leia Adicionar e configurar Foundry Models para inserir um modelo de raciocínio.
- Este exemplo usa
DeepSeek-R1.
- Este exemplo usa
Usar recursos de raciocínio com chat
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.
AzureAIInferenceClientOptions clientOptions = new AzureAIInferenceClientOptions(apiVersion);
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL")),
clientOptions
);
Se você configurou o recurso com suporte Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
AzureAIInferenceClientOptions clientOptions = new AzureAIInferenceClientOptions(
"2024-05-01-preview",
new string[] { "https://cognitiveservices.azure.com/.default" }
);
client = new ChatCompletionsClient(
new Uri("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredential(),
clientOptions,
);
Modelos de raciocínio de prompt
Ao criar solicitações para modelos de raciocínio, leve o seguinte em consideração:
- Use instruções simples e evite usar técnicas de cadeia de pensamento.
- Os recursos internos de raciocínio tornam os prompts de zero-shot simples tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluindo apenas as informações mais relevantes pode ajudar a impedir que o modelo complique excessivamente sua resposta.
- Modelos de raciocínio podem dar suporte ao uso de mensagens do sistema. No entanto, eles podem não segui-los tão estritamente quanto outros modelos não-racionais.
- Ao criar aplicativos de várias rodadas, considere acrescentar apenas a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção de conteúdo de raciocínio.
Observe que os modelos de raciocínio podem levar mais tempo para gerar respostas. Eles usam cadeias de raciocínio longas de pensamento que permitem uma solução de problemas mais profunda e estruturada. Eles também executam a auto-verificação para verificar suas respostas e corrigir seus erros, mostrando assim comportamentos auto-reflexivos emergentes.
Criar uma solicitação de conclusão de chat
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);
A resposta é a seguinte, em que 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
Nota
Essas informações sobre o conteúdo do raciocínio não se aplicam a modelos Azure OpenAI. Modelos de raciocínio do Azure OpenAI usam o recurso de resumos de raciocínio.
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás dele. O raciocínio associado à conclusão é incluído no conteúdo da resposta dentro das marcas <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/regions 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/region. \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 de vários turnos, é útil evitar o envio do conteúdo de raciocínio no histórico de chat, pois o raciocínio tende a gerar explicações longas.
Transmitir conteúdo
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando completamentos longos, aguardar a resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo conforme ele está sendo gerado. O conteúdo de streaming permite que você comece a processar a conclusão à medida que o conteúdo estiver disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor contendo apenas 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 de 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 dão suporte aos seguintes parâmetros que você pode encontrar em modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Penalidade de repetição
- Parâmetro
top_p
Alguns modelos dão suporte ao uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página de detalhes dos Modelos para entender o suporte de cada modelo.
Aplicar limites e controles
A API de Inferência do Modelo de IA Azure dá suporte a Segurança de Conteúdo de IA do Azure. Quando você usa implantações com Segurança de Conteúdo de IA do Azure ativado, entradas e saídas passam por um conjunto de modelos de classificação que visam detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial em solicitações de entrada e resultados de saída.
O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo prejudicial no prompt de entrada.
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;
}
}
Dica
Para saber mais sobre como você pode definir e controlar as configurações de Segurança de Conteúdo de IA do Azure, verifique a documentação Segurança de Conteúdo de IA do Azure.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Este artigo explica como usar os recursos de raciocínio de modelos de conclusão de chat implantados em modelos de Microsoft Foundry.
Modelos de raciocínio
Os modelos de raciocínio podem atingir níveis mais altos de desempenho em domínios como matemática, codificação, ciência, estratégia e logística. A maneira como esses modelos produzem saídas é usando explicitamente a cadeia de pensamento para explorar todos os caminhos possíveis antes de gerar uma resposta. Eles verificam suas respostas à medida que as produzem, o que ajuda a chegar a conclusões mais precisas. Como resultado, os modelos de raciocínio lógico podem exigir menos indicações de contexto para produzir resultados eficazes.
Os modelos de raciocínio produzem dois tipos de conteúdo como saídas:
- Conclusões de raciocínio
- Conclusões de saída
Ambas as conclusões contam para o conteúdo gerado a partir do modelo. Portanto, eles contribuem para os limites de token e os custos associados ao modelo. Alguns modelos, como DeepSeek-R1, podem responder com o conteúdo do raciocínio. Outros, como o1, geram apenas as conclusões.
Pré-requisitos
Para concluir este tutorial, você precisa:
Uma assinatura Azure. Se você estiver usando modelos GitHub, poderá atualizar sua experiência e criar uma assinatura Azure no processo. Leia Upgrade de modelos de GitHub para Modelos de Microsoft Foundry se esse for o seu caso.
Um projeto do Foundry. Esse tipo de projeto é gerenciado sob um recurso Foundry. Se você não tiver um projeto do Foundry, consulte Criar um projeto Foundry (projetos Foundry).
O endereço do endpoint.
A chave do endpoint (se você optar por usar uma chave de API para autenticação).
Um modelo com capacidades de raciocínio para implantação de modelos. Se você não tiver um, leia Adicionar e configurar Foundry Models para inserir um modelo de raciocínio.
- Este exemplo usa
DeepSeek-R1.
- Este exemplo usa
Usar recursos de raciocínio com chat
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/openai/deployments/deepseek-r1/chat/completions?api-version=2024-10-21
Content-Type: application/json
api-key: <key>
Se você configurou o recurso com suporte Microsoft Entra ID, passe o token no cabeçalho Authorization com o formato Bearer <token>. Use o escopo https://ai.azure.com/.default.
POST https://<resource>.services.ai.azure.com/openai/deployments/deepseek-r1/chat/completions?api-version=2024-10-21
Content-Type: application/json
Authorization: Bearer <token>
Usar Microsoft Entra ID pode exigir uma configuração adicional em seu recurso para conceder acesso. Saiba como configure autenticação sem chave com Microsoft Entra ID.
Modelos de raciocínio de prompt
Ao criar solicitações para modelos de raciocínio, leve o seguinte em consideração:
- Use instruções simples e evite usar técnicas de cadeia de pensamento.
- Os recursos internos de raciocínio tornam os prompts de zero-shot simples tão eficazes quanto métodos mais complexos.
- Ao fornecer contexto ou documentos adicionais, como em cenários RAG, incluindo apenas as informações mais relevantes pode ajudar a impedir que o modelo complique excessivamente sua resposta.
- Modelos de raciocínio podem dar suporte ao uso de mensagens do sistema. No entanto, eles podem não segui-los tão estritamente quanto outros modelos não-racionais.
- Ao criar aplicativos de várias rodadas, considere acrescentar apenas a resposta final do modelo, sem o conteúdo de raciocínio, conforme explicado na seção de conteúdo de raciocínio.
Observe que os modelos de raciocínio podem levar mais tempo para gerar respostas. Eles usam cadeias de raciocínio longas de pensamento que permitem uma solução de problemas mais profunda e estruturada. Eles também executam a auto-verificação para verificar suas respostas e corrigir seus erros, mostrando assim comportamentos auto-reflexivos emergentes.
Criar uma solicitação de conclusão de chat
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?"
}
]
}
A resposta é a seguinte, em que 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",
"reasoning_content": "Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer. Let's start by recalling the general consensus from linguistic sources. I remember that the number often cited is around 7,000, but maybe I should check some reputable organizations.\n\nEthnologue is a well-known resource for language data, and I think they list about 7,000 languages. But wait, do they update their numbers? It might be around 7,100 or so. Also, the exact count can vary because some sources might categorize dialects differently or have more recent data. \n\nAnother thing to consider is language endangerment. Many languages are endangered, with some having only a few speakers left. Organizations like UNESCO track endangered languages, so mentioning that adds context. Also, the distribution isn't even. Some countries/regions 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/region. \n\nWait, let me verify Ethnologue's current number. As of their latest edition (25th, 2022), they list 7,168 living languages. But I should check if that's the case. Some sources might round to 7,000. Also, SIL International publishes Ethnologue, so citing them as reference makes sense. \n\nOther sources, like Glottolog, might have a different count because they use different criteria. Glottolog might list around 7,000 as well, but exact numbers vary. It's important to highlight that the count isn't exact because of differing definitions and ongoing research. \n\nIn conclusion, the approximate number is 7,000, with Ethnologue being a key source, considerations of endangerment, and the challenges in counting due to dialect vs. language distinctions. I should make sure the answer is clear, acknowledges the variability, and provides key points succinctly.\n",
"content": "The exact number of languages in the world is challenging to determine due to differences in definitions (e.g., distinguishing languages from dialects) and ongoing documentation efforts. However, widely cited estimates suggest there are approximately **7,000 languages** globally.",
"tool_calls": null
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 897,
"completion_tokens": 886
}
}
Conteúdo de raciocínio
Nota
Essas informações sobre o conteúdo do raciocínio não se aplicam a modelos Azure OpenAI. Modelos de raciocínio do Azure OpenAI usam o recurso de resumos de raciocínio.
Alguns modelos de raciocínio, como o DeepSeek-R1, geram conclusões e incluem o raciocínio por trás dele.
O raciocínio associado à conclusão está incluído no campo reasoning_content. O modelo pode selecionar em quais cenários gerar conteúdo de raciocínio.
Ao fazer conversas de vários turnos, é útil evitar o envio do conteúdo de raciocínio no histórico de chat, pois o raciocínio tende a gerar explicações longas.
Transmitir conteúdo
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando completamentos longos, aguardar a resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo conforme ele está sendo gerado. O conteúdo de streaming permite que você comece a processar a conclusão à medida que o conteúdo estiver disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor contendo apenas dados. Extraia partes do campo delta, em vez do campo de mensagem.
Para fluxo de conclusões, defina "stream": true quando você chamar o modelo.
{
"model": "DeepSeek-R1",
"messages": [
{
"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 de raciocínio:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "DeepSeek-R1",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"reasoning_content": "Okay,",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
A última mensagem no fluxo tem o valor finish_reason definido, o que indica o motivo para a interrupção do processo de geração.
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "DeepSeek-R1",
"choices": [
{
"index": 0,
"delta": {
"reasoning_content": "",
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 897,
"completion_tokens": 886
}
}
Parâmetros
Em geral, os modelos de raciocínio não dão suporte aos seguintes parâmetros que você pode encontrar em modelos de conclusão de chat:
- Temperatura
- Penalidade de presença
- Penalidade de repetição
- Parâmetro
top_p
Alguns modelos dão suporte ao uso de ferramentas ou saídas estruturadas (incluindo esquemas JSON). Leia a página de detalhes dos Modelos para entender o suporte de cada modelo.
Aplicar limites e controles
A API de Inferência do Modelo de IA Azure dá suporte a Segurança de Conteúdo de IA do Azure. Quando você usa implantações com Segurança de Conteúdo de IA do Azure ativado, entradas e saídas passam por um conjunto de modelos de classificação que visam detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial em solicitações de entrada e resultados de saída.
O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo prejudicial no prompt de entrada.
{
"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
}
}
Dica
Para saber mais sobre como você pode definir e controlar as configurações de Segurança de Conteúdo de IA do Azure, verifique a documentação Segurança de Conteúdo de IA do Azure.