Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Ce document fait référence au portail Microsoft Foundry (classique).
Consultez la documentation Microsoft Foundry (nouvelle) pour en savoir plus sur le nouveau portail.
Important
Azure SDK bêta d’inférence d’IA est déconseillé et sera mis hors service le 30 mai 2026. Basculez vers l’API OpenAI/v1 généralement disponible avec un SDK OpenAI stable. Suivez le guide de migration pour passer à OpenAI/v1 à l’aide du Kit de développement logiciel (SDK) pour votre langage de programmation préféré.
Important
Les éléments marqués (aperçu) dans cet article sont actuellement en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les préversions Microsoft Azure.
Cet article explique comment utiliser les fonctionnalités de raisonnement des modèles d’achèvement de conversation déployés dans les modèles Microsoft Foundry.
Modèles de raisonnement
Les modèles de raisonnement peuvent atteindre des niveaux de performances plus élevés dans des domaines tels que les mathématiques, le codage, la science, la stratégie et la logistique. La façon dont ces modèles produisent des sorties consiste explicitement à utiliser la chaîne de pensée pour explorer tous les chemins possibles avant de générer une réponse. Ils vérifient leurs réponses à mesure qu’ils les produisent, ce qui permet d’arriver à des conclusions plus précises. Par conséquent, les modèles de raisonnement peuvent nécessiter moins d’invites de contexte afin de produire des résultats efficaces.
Les modèles de raisonnement produisent deux types de contenu en tant que sorties :
- Complétions de raisonnement
- Complétions de sortie
Ces deux complétions comptent pour le contenu généré par le modèle. Par conséquent, ils contribuent aux limites et coûts des jetons associés au modèle. Certains modèles, comme , peuvent répondre avec le contenu du raisonnement. D’autres, comme , ne génèrent que les achèvements.
Prerequisites
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Un abonnement Azure. Si vous utilisez GitHub Models, vous pouvez mettre à niveau votre expérience et créer un abonnement Azure dans le processus. Lisez Upgrader à partir de GitHub Models vers Microsoft Foundry Models si c'est votre cas.
Un projet de fonderie. Ce type de projet est géré sous une ressource Foundry. Si vous n’avez pas de projet Foundry, consultez Créer un projet pour Foundry (projets Foundry).
URL du point de terminaison.
Clé du point de terminaison (si vous choisissez d’utiliser la clé API pour l’authentification).
Installez le Kit de développement logiciel (SDK) avec la commande suivante :
- OpenAI API
- API d’inférence de modèle (préversion)
pip install -U openai
Modèle avec un modèle de déploiement de capacités de raisonnement. Si vous n'en avez pas, lisez Add and configure Foundry Models pour ajouter un modèle de raisonnement.
- Cet exemple utilise .
Utiliser des fonctionnalités de raisonnement avec conversation
Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.
- OpenAI API
- API d’inférence de modèle (préversion)
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",
)
Si vous avez configuré la ressource pour la prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.
- OpenAI API
- API d’inférence de modèle (préversion)
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint = "https://<resource>.services.ai.azure.com",
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
)
Modèles de raisonnement rapide
Lorsque vous élaborez des consignes pour des modèles de raisonnement, tenez compte des éléments suivants :
- Utilisez des instructions simples et évitez d’utiliser des techniques de chaîne de réflexion.
- Les fonctionnalités de raisonnement intégrées rendent les invites zéro coup simples aussi efficace que les méthodes plus complexes.
- Lorsque vous fournissez un contexte ou des documents supplémentaires, comme dans les scénarios RAG, y compris uniquement les informations les plus pertinentes peuvent aider à empêcher le modèle de sur-compliquer sa réponse.
- Les modèles de raisonnement peuvent prendre en charge l’utilisation des messages système. Toutefois, ils peuvent ne pas les suivre aussi strictement que d’autres modèles de non-raisonnement.
- Lors de la création d’applications à plusieurs tour, envisagez d’ajouter uniquement la réponse finale du modèle, sans contenu de raisonnement, comme expliqué dans la section Contenu de raisonnement .
Notez que les modèles de raisonnement peuvent prendre plus de temps pour générer des réponses. Ils utilisent de longues chaînes de raisonnement qui permettent une résolution de problèmes plus profonde et plus structurée. Ils effectuent également une auto-vérification pour vérifier leurs réponses et corriger leurs erreurs, présentant ainsi des comportements autoréflexifs émergents.
Créer une requête de complétion de conversation
L’exemple suivant vous montre comment créer une requête de conversation de base sur le modèle.
- OpenAI API
- API d’inférence de modèle (préversion)
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
]
)
La réponse est la suivante, où vous pouvez voir les statistiques d’utilisation du modèle :
- OpenAI API
- API d’inférence de modèle (préversion)
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
Contenu de raisonnement
Note
Ces informations sur le contenu du raisonnement ne s’appliquent pas à Azure modèles OpenAI. Les modèles de raisonnement Azure OpenAI utilisent la fonctionnalité de résumés de raisonnement .
Certains modèles de raisonnement, comme DeepSeek-R1, génèrent des finalisations et incluent le raisonnement qui les sous-tend.
- OpenAI API
- API d’inférence de modèle (préversion)
Le raisonnement associé à l’achèvement est inclus dans le champ . Le modèle peut sélectionner les scénarios pour lesquels générer le contenu de raisonnement.
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...
Lorsque vous effectuez des conversations à plusieurs tours, il est utile d’éviter d’envoyer le contenu du raisonnement dans l’historique des conversations, car le raisonnement tend à générer de longues explications.
Diffuser du contenu
Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.
Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse sous forme d'événements de serveur envoyant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.
Pour diffuser en continu des complétions, définissez lorsque vous appelez le modèle.
- OpenAI API
- API d’inférence de modèle (préversion)
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "How many languages are in the world?"}
],
stream=True
)
Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux. L’exemple suivant implémente un routage qui diffuse uniquement la réponse sans le contenu du raisonnement :
- OpenAI API
- API d’inférence de modèle (préversion)
Le contenu du raisonnement est également inclus dans les éléments delta de la réponse, dans la clé .
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)
Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :
print_stream(response)
Paramètres
En général, les modèles de raisonnement ne prennent pas en charge les paramètres suivants que vous pouvez trouver dans les modèles de complétion de conversation :
- Température
- Pénalité de présence
- Pénalité de répétition
- Paramètre
Certains modèles prennent en charge l’utilisation d’outils ou de sorties structurées (y compris les schémas JSON). Lisez la page de détails Modèles pour comprendre la prise en charge de chaque modèle.
Appliquer des garde-fous et des contrôles
L’API d’inférence de modèle IA Azure prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec Azure AI Sécurité du Contenu activé, les entrées et les sorties passent par un ensemble de modèles de classification destinés à détecter et empêcher la sortie du contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.
L’exemple suivant montre comment gérer les événements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée.
- OpenAI API
- API d’inférence de modèle (préversion)
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
Conseil / Astuce
Pour en savoir plus sur la configuration et le contrôle des paramètres de Azure AI Sécurité du Contenu, consultez la documentation Azure AI Sécurité du Contenu.
Important
Les éléments marqués (aperçu) dans cet article sont actuellement en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les préversions Microsoft Azure.
Cet article explique comment utiliser les fonctionnalités de raisonnement des modèles d’achèvement de conversation déployés dans les modèles Microsoft Foundry.
Modèles de raisonnement
Les modèles de raisonnement peuvent atteindre des niveaux de performances plus élevés dans des domaines tels que les mathématiques, le codage, la science, la stratégie et la logistique. La façon dont ces modèles produisent des sorties consiste explicitement à utiliser la chaîne de pensée pour explorer tous les chemins possibles avant de générer une réponse. Ils vérifient leurs réponses à mesure qu’ils les produisent, ce qui permet d’arriver à des conclusions plus précises. Par conséquent, les modèles de raisonnement peuvent nécessiter moins d’invites de contexte afin de produire des résultats efficaces.
Les modèles de raisonnement produisent deux types de contenu en tant que sorties :
- Complétions de raisonnement
- Complétions de sortie
Ces deux complétions comptent pour le contenu généré par le modèle. Par conséquent, ils contribuent aux limites et coûts des jetons associés au modèle. Certains modèles, comme , peuvent répondre avec le contenu du raisonnement. D’autres, comme , ne génèrent que les achèvements.
Prerequisites
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Un abonnement Azure. Si vous utilisez GitHub Models, vous pouvez mettre à niveau votre expérience et créer un abonnement Azure dans le processus. Lisez Upgrader à partir de GitHub Models vers Microsoft Foundry Models si c'est votre cas.
Un projet de fonderie. Ce type de projet est géré sous une ressource Foundry. Si vous n’avez pas de projet Foundry, consultez Créer un projet pour Foundry (projets Foundry).
URL du point de terminaison.
Clé du point de terminaison (si vous choisissez d’utiliser la clé API pour l’authentification).
Installez la bibliothèque d’inférence Azure pour JavaScript avec la commande suivante :
npm install @azure-rest/ai-inference npm install @azure/core-auth npm install @azure/identitySi vous utilisez Node.js, vous pouvez configurer les dépendances dans 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" } }Importez les éléments suivants :
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";
Modèle avec un modèle de déploiement de capacités de raisonnement. Si vous n'en avez pas, lisez Add and configure Foundry Models pour ajouter un modèle de raisonnement.
- Cet exemple utilise .
Utiliser des fonctionnalités de raisonnement avec conversation
Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);
Si vous avez configuré la ressource avec le support de Microsoft Entra ID, vous pouvez utiliser l'extrait de code suivant pour créer un client.
const clientOptions = { credentials: { "https://cognitiveservices.azure.com/.default" } };
const client = ModelClient(
"https://<resource>.services.ai.azure.com/models",
new DefaultAzureCredential()
clientOptions,
);
Modèles de raisonnement rapide
Lorsque vous élaborez des consignes pour des modèles de raisonnement, tenez compte des éléments suivants :
- Utilisez des instructions simples et évitez d’utiliser des techniques de chaîne de réflexion.
- Les fonctionnalités de raisonnement intégrées rendent les invites zéro coup simples aussi efficace que les méthodes plus complexes.
- Lorsque vous fournissez un contexte ou des documents supplémentaires, comme dans les scénarios RAG, y compris uniquement les informations les plus pertinentes peuvent aider à empêcher le modèle de sur-compliquer sa réponse.
- Les modèles de raisonnement peuvent prendre en charge l’utilisation des messages système. Toutefois, ils peuvent ne pas les suivre aussi strictement que d’autres modèles de non-raisonnement.
- Lors de la création d’applications à plusieurs tour, envisagez d’ajouter uniquement la réponse finale du modèle, sans contenu de raisonnement, comme expliqué dans la section Contenu de raisonnement .
Notez que les modèles de raisonnement peuvent prendre plus de temps pour générer des réponses. Ils utilisent de longues chaînes de raisonnement qui permettent une résolution de problèmes plus profonde et plus structurée. Ils effectuent également une auto-vérification pour vérifier leurs réponses et corriger leurs erreurs, présentant ainsi des comportements autoréflexifs émergents.
Créer une requête de complétion de conversation
L’exemple suivant vous montre comment créer une requête de conversation de base sur le modèle.
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,
}
});
La réponse est la suivante, où vous pouvez voir les statistiques d’utilisation du modèle :
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
Contenu de raisonnement
Note
Ces informations sur le contenu du raisonnement ne s’appliquent pas à Azure modèles OpenAI. Les modèles de raisonnement Azure OpenAI utilisent la fonctionnalité de résumés de raisonnement .
Certains modèles de raisonnement, comme DeepSeek-R1, génèrent des finalisations et incluent le raisonnement qui les sous-tend. Le raisonnement associé à l’achèvement est inclus dans le contenu de la réponse dans les balises et . Le modèle peut sélectionner les scénarios pour lesquels générer le contenu de raisonnement. Vous pouvez extraire le contenu du raisonnement de la réponse pour comprendre le processus de pensée du modèle comme suit :
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
Lorsque vous effectuez des conversations à plusieurs tours, il est utile d’éviter d’envoyer le contenu du raisonnement dans l’historique des conversations, car le raisonnement tend à générer de longues explications.
Diffuser du contenu
Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.
Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse sous forme d'événements de serveur envoyant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.
Pour diffuser en continu des complétions, définissez lorsque vous appelez le modèle.
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();
Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux. L’exemple suivant implémente un routage qui diffuse uniquement la réponse sans le contenu du raisonnement :
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);
}
}
}
}
Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :
var sses = createSseStream(response.body);
await printStream(sses)
Paramètres
En général, les modèles de raisonnement ne prennent pas en charge les paramètres suivants que vous pouvez trouver dans les modèles de complétion de conversation :
- Température
- Pénalité de présence
- Pénalité de répétition
- Paramètre
Certains modèles prennent en charge l’utilisation d’outils ou de sorties structurées (y compris les schémas JSON). Lisez la page de détails Modèles pour comprendre la prise en charge de chaque modèle.
Appliquer des garde-fous et des contrôles
L’API d’inférence de modèle IA Azure prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec Azure AI Sécurité du Contenu activé, les entrées et les sorties passent par un ensemble de modèles de classification destinés à détecter et empêcher la sortie du contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.
L’exemple suivant montre comment gérer les événements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée.
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;
}
}
}
Conseil / Astuce
Pour en savoir plus sur la configuration et le contrôle des paramètres de Azure AI Sécurité du Contenu, consultez la documentation Azure AI Sécurité du Contenu.
Important
Les éléments marqués (aperçu) dans cet article sont actuellement en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les préversions Microsoft Azure.
Cet article explique comment utiliser les fonctionnalités de raisonnement des modèles d’achèvement de conversation déployés dans les modèles Microsoft Foundry.
Modèles de raisonnement
Les modèles de raisonnement peuvent atteindre des niveaux de performances plus élevés dans des domaines tels que les mathématiques, le codage, la science, la stratégie et la logistique. La façon dont ces modèles produisent des sorties consiste explicitement à utiliser la chaîne de pensée pour explorer tous les chemins possibles avant de générer une réponse. Ils vérifient leurs réponses à mesure qu’ils les produisent, ce qui permet d’arriver à des conclusions plus précises. Par conséquent, les modèles de raisonnement peuvent nécessiter moins d’invites de contexte afin de produire des résultats efficaces.
Les modèles de raisonnement produisent deux types de contenu en tant que sorties :
- Complétions de raisonnement
- Complétions de sortie
Ces deux complétions comptent pour le contenu généré par le modèle. Par conséquent, ils contribuent aux limites et coûts des jetons associés au modèle. Certains modèles, comme , peuvent répondre avec le contenu du raisonnement. D’autres, comme , ne génèrent que les achèvements.
Prerequisites
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Un abonnement Azure. Si vous utilisez GitHub Models, vous pouvez mettre à niveau votre expérience et créer un abonnement Azure dans le processus. Lisez Upgrader à partir de GitHub Models vers Microsoft Foundry Models si c'est votre cas.
Un projet de fonderie. Ce type de projet est géré sous une ressource Foundry. Si vous n’avez pas de projet Foundry, consultez Créer un projet pour Foundry (projets Foundry).
URL du point de terminaison.
Clé du point de terminaison (si vous choisissez d’utiliser la clé API pour l’authentification).
Ajoutez le package d’inférence IA Azure à votre projet :
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.4</version> </dependency>Si vous utilisez Entra ID, vous avez également besoin du package suivant :
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.3</version> </dependency>Importez l’espace de noms suivant :
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;
Modèle avec un modèle de déploiement de capacités de raisonnement. Si vous n'en avez pas, lisez Add and configure Foundry Models pour ajouter un modèle de raisonnement.
- Cet exemple utilise .
Utiliser des fonctionnalités de raisonnement avec conversation
Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.
ChatCompletionsClient client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new AzureKeyCredential(System.getProperty("AZURE_INFERENCE_CREDENTIAL")),
Conseil / Astuce
Vérifiez que vous avez déployé le modèle sur la ressource Foundry Tools avec l’API d’inférence de modèle IA Azure. est également disponible en tant que déploiements d’API sans serveur. Ces points de terminaison ne prennent toutefois pas le paramètre , comme expliqué dans ce tutoriel. Vous pouvez le vérifier en accédant à Foundry portal Models + endpoints, et en confirmant que le modèle est répertorié dans la section Foundry Tools.
Si vous avez configuré la ressource pour la prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.
client = new ChatCompletionsClient(
new URI("https://<resource>.services.ai.azure.com/models"),
new DefaultAzureCredentialBuilder().build()
);
Modèles de raisonnement rapide
Lorsque vous élaborez des consignes pour des modèles de raisonnement, tenez compte des éléments suivants :
- Utilisez des instructions simples et évitez d’utiliser des techniques de chaîne de réflexion.
- Les fonctionnalités de raisonnement intégrées rendent les invites zéro coup simples aussi efficace que les méthodes plus complexes.
- Lorsque vous fournissez un contexte ou des documents supplémentaires, comme dans les scénarios RAG, y compris uniquement les informations les plus pertinentes peuvent aider à empêcher le modèle de sur-compliquer sa réponse.
- Les modèles de raisonnement peuvent prendre en charge l’utilisation des messages système. Toutefois, ils peuvent ne pas les suivre aussi strictement que d’autres modèles de non-raisonnement.
- Lors de la création d’applications à plusieurs tour, envisagez d’ajouter uniquement la réponse finale du modèle, sans contenu de raisonnement, comme expliqué dans la section Contenu de raisonnement .
Notez que les modèles de raisonnement peuvent prendre plus de temps pour générer des réponses. Ils utilisent de longues chaînes de raisonnement qui permettent une résolution de problèmes plus profonde et plus structurée. Ils effectuent également une auto-vérification pour vérifier leurs réponses et corriger leurs erreurs, présentant ainsi des comportements autoréflexifs émergents.
Créer une requête de complétion de conversation
L’exemple suivant vous montre comment créer une requête de conversation de base sur le modèle.
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);
La réponse est la suivante, où vous pouvez voir les statistiques d’utilisation du modèle :
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
Contenu de raisonnement
Note
Ces informations sur le contenu du raisonnement ne s’appliquent pas à Azure modèles OpenAI. Les modèles de raisonnement Azure OpenAI utilisent la fonctionnalité de résumés de raisonnement .
Certains modèles de raisonnement, comme DeepSeek-R1, génèrent des finalisations et incluent le raisonnement qui les sous-tend. Le raisonnement associé à l’achèvement est inclus dans le contenu de la réponse dans les balises et . Le modèle peut sélectionner les scénarios pour lesquels générer le contenu de raisonnement. Vous pouvez extraire le contenu du raisonnement de la réponse pour comprendre le processus de pensée du modèle comme suit :
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
Lorsque vous effectuez des conversations à plusieurs tours, il est utile d’éviter d’envoyer le contenu du raisonnement dans l’historique des conversations, car le raisonnement tend à générer de longues explications.
Diffuser du contenu
Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.
Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse sous forme d'événements de serveur envoyant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.
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);
}
});
Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux. L’exemple suivant implémente un routage qui diffuse uniquement la réponse sans le contenu du raisonnement :
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();
}
}
}
}
Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :
try {
streamMessageAsync(client).get();
} catch (Exception e) {
throw new RuntimeException(e);
}
Paramètres
En général, les modèles de raisonnement ne prennent pas en charge les paramètres suivants que vous pouvez trouver dans les modèles de complétion de conversation :
- Température
- Pénalité de présence
- Pénalité de répétition
- Paramètre
Certains modèles prennent en charge l’utilisation d’outils ou de sorties structurées (y compris les schémas JSON). Lisez la page de détails Modèles pour comprendre la prise en charge de chaque modèle.
Important
Les éléments marqués (aperçu) dans cet article sont actuellement en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les préversions Microsoft Azure.
Cet article explique comment utiliser les fonctionnalités de raisonnement des modèles d’achèvement de conversation déployés dans les modèles Microsoft Foundry.
Modèles de raisonnement
Les modèles de raisonnement peuvent atteindre des niveaux de performances plus élevés dans des domaines tels que les mathématiques, le codage, la science, la stratégie et la logistique. La façon dont ces modèles produisent des sorties consiste explicitement à utiliser la chaîne de pensée pour explorer tous les chemins possibles avant de générer une réponse. Ils vérifient leurs réponses à mesure qu’ils les produisent, ce qui permet d’arriver à des conclusions plus précises. Par conséquent, les modèles de raisonnement peuvent nécessiter moins d’invites de contexte afin de produire des résultats efficaces.
Les modèles de raisonnement produisent deux types de contenu en tant que sorties :
- Complétions de raisonnement
- Complétions de sortie
Ces deux complétions comptent pour le contenu généré par le modèle. Par conséquent, ils contribuent aux limites et coûts des jetons associés au modèle. Certains modèles, comme , peuvent répondre avec le contenu du raisonnement. D’autres, comme , ne génèrent que les achèvements.
Prerequisites
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Un abonnement Azure. Si vous utilisez GitHub Models, vous pouvez mettre à niveau votre expérience et créer un abonnement Azure dans le processus. Lisez Upgrader à partir de GitHub Models vers Microsoft Foundry Models si c'est votre cas.
Un projet de fonderie. Ce type de projet est géré sous une ressource Foundry. Si vous n’avez pas de projet Foundry, consultez Créer un projet pour Foundry (projets Foundry).
URL du point de terminaison.
Clé du point de terminaison (si vous choisissez d’utiliser la clé API pour l’authentification).
Installez le package d’inférence IA Azure avec la commande suivante :
dotnet add package Azure.AI.Inference --prereleaseSi vous utilisez Entra ID, vous avez également besoin du package suivant :
dotnet add package Azure.Identity
Modèle avec un modèle de déploiement de capacités de raisonnement. Si vous n'en avez pas, lisez Add and configure Foundry Models pour ajouter un modèle de raisonnement.
- Cet exemple utilise .
Utiliser des fonctionnalités de raisonnement avec conversation
Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.
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
);
Si vous avez configuré la ressource pour la prise en charge de Microsoft Entra ID, vous pouvez utiliser l’extrait de code suivant pour créer un client.
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,
);
Modèles de raisonnement rapide
Lorsque vous élaborez des consignes pour des modèles de raisonnement, tenez compte des éléments suivants :
- Utilisez des instructions simples et évitez d’utiliser des techniques de chaîne de réflexion.
- Les fonctionnalités de raisonnement intégrées rendent les invites zéro coup simples aussi efficace que les méthodes plus complexes.
- Lorsque vous fournissez un contexte ou des documents supplémentaires, comme dans les scénarios RAG, y compris uniquement les informations les plus pertinentes peuvent aider à empêcher le modèle de sur-compliquer sa réponse.
- Les modèles de raisonnement peuvent prendre en charge l’utilisation des messages système. Toutefois, ils peuvent ne pas les suivre aussi strictement que d’autres modèles de non-raisonnement.
- Lors de la création d’applications à plusieurs tour, envisagez d’ajouter uniquement la réponse finale du modèle, sans contenu de raisonnement, comme expliqué dans la section Contenu de raisonnement .
Notez que les modèles de raisonnement peuvent prendre plus de temps pour générer des réponses. Ils utilisent de longues chaînes de raisonnement qui permettent une résolution de problèmes plus profonde et plus structurée. Ils effectuent également une auto-vérification pour vérifier leurs réponses et corriger leurs erreurs, présentant ainsi des comportements autoréflexifs émergents.
Créer une requête de complétion de conversation
L’exemple suivant vous montre comment créer une requête de conversation de base sur le modèle.
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestUserMessage("How many languages are in the world?")
},
Model = "deepseek-r1",
};
Response<ChatCompletions> response = client.Complete(requestOptions);
La réponse est la suivante, où vous pouvez voir les statistiques d’utilisation du modèle :
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
Contenu de raisonnement
Note
Ces informations sur le contenu du raisonnement ne s’appliquent pas à Azure modèles OpenAI. Les modèles de raisonnement Azure OpenAI utilisent la fonctionnalité de résumés de raisonnement .
Certains modèles de raisonnement, comme DeepSeek-R1, génèrent des finalisations et incluent le raisonnement qui les sous-tend. Le raisonnement associé à l’achèvement est inclus dans le contenu de la réponse dans les balises et . Le modèle peut sélectionner les scénarios pour lesquels générer le contenu de raisonnement. Vous pouvez extraire le contenu du raisonnement de la réponse pour comprendre le processus de pensée du modèle comme suit :
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
Lorsque vous effectuez des conversations à plusieurs tours, il est utile d’éviter d’envoyer le contenu du raisonnement dans l’historique des conversations, car le raisonnement tend à générer de longues explications.
Diffuser du contenu
Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.
Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse sous forme d'événements de serveur envoyant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.
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);
}
Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux. L’exemple suivant implémente un routage qui diffuse uniquement la réponse sans le contenu du raisonnement :
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();
}
}
}
}
Vous pouvez visualiser la façon dont la diffusion en continu génère du contenu :
StreamMessageAsync(client).GetAwaiter().GetResult();
Paramètres
En général, les modèles de raisonnement ne prennent pas en charge les paramètres suivants que vous pouvez trouver dans les modèles de complétion de conversation :
- Température
- Pénalité de présence
- Pénalité de répétition
- Paramètre
Certains modèles prennent en charge l’utilisation d’outils ou de sorties structurées (y compris les schémas JSON). Lisez la page de détails Modèles pour comprendre la prise en charge de chaque modèle.
Appliquer des garde-fous et des contrôles
L’API d’inférence de modèle IA Azure prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec Azure AI Sécurité du Contenu activé, les entrées et les sorties passent par un ensemble de modèles de classification destinés à détecter et empêcher la sortie du contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.
L’exemple suivant montre comment gérer les événements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée.
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;
}
}
Conseil / Astuce
Pour en savoir plus sur la configuration et le contrôle des paramètres de Azure AI Sécurité du Contenu, consultez la documentation Azure AI Sécurité du Contenu.
Important
Les éléments marqués (aperçu) dans cet article sont actuellement en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les préversions Microsoft Azure.
Cet article explique comment utiliser les fonctionnalités de raisonnement des modèles d’achèvement de conversation déployés dans les modèles Microsoft Foundry.
Modèles de raisonnement
Les modèles de raisonnement peuvent atteindre des niveaux de performances plus élevés dans des domaines tels que les mathématiques, le codage, la science, la stratégie et la logistique. La façon dont ces modèles produisent des sorties consiste explicitement à utiliser la chaîne de pensée pour explorer tous les chemins possibles avant de générer une réponse. Ils vérifient leurs réponses à mesure qu’ils les produisent, ce qui permet d’arriver à des conclusions plus précises. Par conséquent, les modèles de raisonnement peuvent nécessiter moins d’invites de contexte afin de produire des résultats efficaces.
Les modèles de raisonnement produisent deux types de contenu en tant que sorties :
- Complétions de raisonnement
- Complétions de sortie
Ces deux complétions comptent pour le contenu généré par le modèle. Par conséquent, ils contribuent aux limites et coûts des jetons associés au modèle. Certains modèles, comme , peuvent répondre avec le contenu du raisonnement. D’autres, comme , ne génèrent que les achèvements.
Prerequisites
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Un abonnement Azure. Si vous utilisez GitHub Models, vous pouvez mettre à niveau votre expérience et créer un abonnement Azure dans le processus. Lisez Upgrader à partir de GitHub Models vers Microsoft Foundry Models si c'est votre cas.
Un projet de fonderie. Ce type de projet est géré sous une ressource Foundry. Si vous n’avez pas de projet Foundry, consultez Créer un projet pour Foundry (projets Foundry).
URL du point de terminaison.
Clé du point de terminaison (si vous choisissez d’utiliser la clé API pour l’authentification).
Modèle avec un modèle de déploiement de capacités de raisonnement. Si vous n'en avez pas, lisez Add and configure Foundry Models pour ajouter un modèle de raisonnement.
- Cet exemple utilise .
Utiliser des fonctionnalités de raisonnement avec conversation
Tout d’abord, créez le client pour consommer le modèle. Le code suivant utilise une URL de point de terminaison et une clé qui sont stockées dans les variables d’environnement.
- OpenAI API
- API d’inférence de modèle (préversion)
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>
Si vous avez configuré la ressource avec le support de Microsoft Entra ID, transmettez votre jeton dans l’en-tête Authorization avec le format Bearer <token>. Utiliser l’étendue .
- OpenAI API
- API d’inférence de modèle (préversion)
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>
L’utilisation de Microsoft Entra ID peut nécessiter une configuration supplémentaire dans votre ressource pour accorder l’accès. Découvrez comment configurer l’authentification sans clé avec Microsoft Entra ID.
Modèles de raisonnement rapide
Lorsque vous élaborez des consignes pour des modèles de raisonnement, tenez compte des éléments suivants :
- Utilisez des instructions simples et évitez d’utiliser des techniques de chaîne de réflexion.
- Les fonctionnalités de raisonnement intégrées rendent les invites zéro coup simples aussi efficace que les méthodes plus complexes.
- Lorsque vous fournissez un contexte ou des documents supplémentaires, comme dans les scénarios RAG, y compris uniquement les informations les plus pertinentes peuvent aider à empêcher le modèle de sur-compliquer sa réponse.
- Les modèles de raisonnement peuvent prendre en charge l’utilisation des messages système. Toutefois, ils peuvent ne pas les suivre aussi strictement que d’autres modèles de non-raisonnement.
- Lors de la création d’applications à plusieurs tour, envisagez d’ajouter uniquement la réponse finale du modèle, sans contenu de raisonnement, comme expliqué dans la section Contenu de raisonnement .
Notez que les modèles de raisonnement peuvent prendre plus de temps pour générer des réponses. Ils utilisent de longues chaînes de raisonnement qui permettent une résolution de problèmes plus profonde et plus structurée. Ils effectuent également une auto-vérification pour vérifier leurs réponses et corriger leurs erreurs, présentant ainsi des comportements autoréflexifs émergents.
Créer une requête de complétion de conversation
L’exemple suivant vous montre comment créer une requête de conversation de base sur le modèle.
{
"model": "deepseek-r1",
"messages": [
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
La réponse est la suivante, où vous pouvez voir les statistiques d’utilisation du modèle :
- OpenAI API
- API d’inférence de modèle (préversion)
{
"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
}
}
Contenu de raisonnement
Note
Ces informations sur le contenu du raisonnement ne s’appliquent pas à Azure modèles OpenAI. Les modèles de raisonnement Azure OpenAI utilisent la fonctionnalité de résumés de raisonnement .
Certains modèles de raisonnement, comme DeepSeek-R1, génèrent des finalisations et incluent le raisonnement qui les sous-tend.
- OpenAI API
- API d’inférence de modèle (préversion)
Le raisonnement associé à l’achèvement est inclus dans le champ . Le modèle peut sélectionner les scénarios pour lesquels générer le contenu de raisonnement.
Lorsque vous effectuez des conversations à plusieurs tours, il est utile d’éviter d’envoyer le contenu du raisonnement dans l’historique des conversations, car le raisonnement tend à générer de longues explications.
Diffuser du contenu
Par défaut, l’API de complétion retourne l’intégralité du contenu généré dans une réponse unique. Si vous générez des complétions longues, l’attente de la réponse peut durer plusieurs secondes.
Vous pouvez diffuser en continu le contenu pour l’obtenir à mesure qu’il est généré. Diffuser le contenu en continu vous permet de commencer à traiter la complétion à mesure que le contenu devient disponible. Ce mode renvoie un objet qui diffuse la réponse sous forme d'événements de serveur envoyant uniquement des données. Extrayez les blocs du champ delta, plutôt que le champ de message.
Pour diffuser en continu des complétions, définissez lorsque vous appelez le modèle.
{
"model": "DeepSeek-R1",
"messages": [
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"stream": true,
"max_tokens": 2048
}
Pour visualiser la sortie, définissez une fonction d’assistance pour imprimer le flux. L’exemple suivant implémente un routage qui diffuse uniquement la réponse sans le contenu du raisonnement :
- OpenAI API
- API d’inférence de modèle (préversion)
{
"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
}
]
}
Le dernier message dans le flux a activé, indiquant la raison pour laquelle le processus de génération s'arrête.
- OpenAI API
- API d’inférence de modèle (préversion)
{
"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
}
}
Paramètres
En général, les modèles de raisonnement ne prennent pas en charge les paramètres suivants que vous pouvez trouver dans les modèles de complétion de conversation :
- Température
- Pénalité de présence
- Pénalité de répétition
- Paramètre
Certains modèles prennent en charge l’utilisation d’outils ou de sorties structurées (y compris les schémas JSON). Lisez la page de détails Modèles pour comprendre la prise en charge de chaque modèle.
Appliquer des garde-fous et des contrôles
L’API d’inférence de modèle IA Azure prend en charge Azure AI Sécurité du Contenu. Lorsque vous utilisez des déploiements avec Azure AI Sécurité du Contenu activé, les entrées et les sorties passent par un ensemble de modèles de classification destinés à détecter et empêcher la sortie du contenu dangereux. Le système de filtrage du contenu détecte les catégories spécifiques de contenu potentiellement nuisible dans les invites d’entrée et les achèvements de sortie et prend des mesures correspondantes.
L’exemple suivant montre comment gérer les événements lorsque le modèle détecte du contenu dangereux dans l’invite d’entrée.
{
"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
}
}
Conseil / Astuce
Pour en savoir plus sur la configuration et le contrôle des paramètres de Azure AI Sécurité du Contenu, consultez la documentation Azure AI Sécurité du Contenu.
Contenu connexe
- Utiliser les modèles d’incorporations
- Utiliser des modèles d’incorporation d’images
- Azure API d’inférence du modèle IA