Výukový program: Začínáme s odůvodňovacím modelem DeepSeek-R1 v modelech Microsoft Foundry

V tomto kurzu se dozvíte, jak nasadit a používat model odůvodnění DeepSeek v Microsoft Foundry. Tento kurz používá DeepSeek-R1 jako ilustraci. Obsah se ale vztahuje také na novější model odůvodnění DeepSeek-R1-0528 .

Čeho dosáhnete:

V tomto kurzu nasadíte model DeepSeek-R1 odůvodnění, odešlete žádosti o odvozování programově pomocí kódu a parsujete zdůvodnění výstupu, abyste pochopili, jak model přichází na odpovědi.

Kroky, které provedete v tomto kurzu, jsou:

  • Vytvořte a nakonfigurujte prostředky Azure tak, aby používaly DeepSeek-R1 v modelech Foundry.
  • Nakonfigurujte nasazení modelu.
  • Použijte DeepSeek-R1 s rozhraními API nové generace v1 Azure OpenAI k využívání modelu v kódu.

Předpoklady

K dokončení tohoto článku potřebujete:

  • Předplatné Azure s platným způsobem platby. Pokud nemáte předplatné Azure, vytvořte účet paid Azure začněte. Pokud používáte modely GitHub, můžete přejít z modelů GitHub na modely Microsoft Foundry a během procesu vytvořit předplatné Azure.

  • Přístup k Microsoft Foundry s příslušnými oprávněními k vytváření a správě prostředků Obvykle je vyžadována role přispěvatele nebo vlastníka v rámci skupiny prostředků pro vytváření a nasazování modelů.

  • Role Cognitive Services User (nebo vyšší) je přiřazena k vašemu účtu Azure na prostředku Foundry. Tato role je vyžadována pro provádění inferenčních hovorů pomocí Microsoft Entra ID. Přiřaďte ho na portálu Azure v části Access Control (IAM) prostředku Foundry.

  • Nainstalujte sadu Azure OpenAI SDK pro váš programovací jazyk:

    • Python: pip install openai azure-identity
    • .NET: dotnet add package OpenAI a dotnet add package Azure.Identity
    • JavaScript: npm install openai @azure/identity
    • Java: Přidejte balíčky com.openai:openai-java a com.azure:azure-identity

DeepSeek-R1 je model odůvodnění, který generuje vysvětlení společně s odpověďmi. Podporuje dokončování chatu na základě textu, ale nepodporuje volání nástrojů ani formáty strukturovaného výstupu. Podrobnosti najdete v části O modelech usuzování .

Vytvoření prostředků

Pokud chcete vytvořit projekt Foundry, který podporuje nasazení pro DeepSeek-R1, postupujte takto. Prostředky můžete vytvořit také pomocí Azure CLI nebo infrastruktury jako kódu s Bicep.

  1. Přihlaste se k Microsoft Foundry. Ujistěte se, že je zapnutý přepínač New Foundry . Tyto kroky se týkají nové verze aplikace Foundry.
  2. Projekt, na kterém pracujete, se zobrazí v levém horním rohu.
  3. Pokud chcete vytvořit nový projekt, vyberte název projektu a pak vytvořte nový projekt.
  4. Pojmenujte projekt a vyberte Vytvořit projekt.

Nasazení modelu

  1. Přidejte do projektu model. Vyberte Build uprostřed stránky a poté Model.
  2. Výběrem možnosti Nasadit základní model otevřete katalog modelů.
  3. Najděte a vyberte dlaždici modelu DeepSeek-R1 pro otevření jeho modelové karty a poté vyberte Nasadit. Pokud chcete použít výchozí hodnoty, můžete vybrat možnost Rychlé nasazení , nebo můžete výběrem možnosti Přizpůsobit nasazení zobrazit a změnit nastavení nasazení.

Po dokončení nasazení přejdete na jeho testovací prostředí, kde můžete začít interagovat s nasazením. Ověřte, že je nasazení připravené, a ověřte, že stav nasazení je úspěšný. Poznamenejte si název nasazení a identifikátor URI koncového bodu z podrobností o nasazení – potřebujete obě části kódu.

Pokud chcete model prozkoumat interaktivně, přeskočte na Možnost Použít model v dětském hřišti.

Použijte model v kódu

Pomocí koncového bodu Foundry Models a přihlašovacích údajů se připojte k modelu.

  1. Zvolte podokno Podrobnosti z horního podokna Playgrounds, abyste viděli podrobnosti o nasazení. Tady najdete identifikátor URI nasazení a klíč rozhraní API.
  2. Získejte název prostředku z identifikátoru URI nasazení, který se použije k inferenci modelu pomocí kódu.

Využijte rozhraní API v1 nové generace Azure OpenAI pro konzumaci modelu ve vašem kódu. Tyto příklady kódu používají zabezpečený přístup ověřování bez klíčů Microsoft Entra ID prostřednictvím knihovny identit Azure.

Následující příklady kódu ukazují, jak:

  1. Ověřujte se pomocí Microsoft Entra ID využitím DefaultAzureCredential, který automaticky zkouší více metod ověřování (proměnné prostředí, spravovaná identita, Azure CLI a další). Přesné pořadí závisí na verzi sady AZURE Identity SDK, kterou používáte.

    Návod

    V případě místního vývoje se ujistěte, že jste ověřeni pomocí Azure CLI spuštěním příkazu az login. Pro produkční nasazení v Azure nakonfigurujte spravovanou identitu pro vaši aplikaci.

  2. Vytvoření klienta pro dokončování chatu připojeného k nasazení modelu

  3. Odešlete základní dotaz k modelu DeepSeek-R1

  4. Přijetí a zobrazení odpovědi

Očekávaný výstup: Odpověď JSON obsahující odpověď modelu, proces odůvodnění (v rámci <think> značek), statistiku využití tokenů (tokeny výzvy, tokeny dokončení, celkové tokeny) a informace o modelu.

Nainstalujte balíčky openai a azure-identity použijte správce balíčků, jako je pip:

pip install --upgrade openai azure-identity

Následující příklad ukazuje, jak vytvořit klienta, který bude využívat dokončování chatu, a pak vygenerovat a vytisknout odpověď:


from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)
response = client.chat.completions.create(
  model="DeepSeek-R1", # Replace with your model deployment name.
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "How many languages are in the world?"}
  ]
)

#print(response.choices[0].message)
print(response.model_dump_json(indent=2))

Návod

Po spuštění kódu by se měla zobrazit odpověď JSON, která obsahuje choices[0].message.content odpověď modelu. Pokud model generuje odůvodnění, odpověď obsahuje obsah zabalený do <think>...</think> značek následovaných konečnou odpovědí.

Referenční informace k rozhraní API:

Odůvodnění může generovat delší odpovědi a využívat větší počet tokenů. DeepSeek-R1 podporuje až 5 000 požadavků za minutu a 5 000 000 tokenů za minutu. Podívejte se na limity sazeb , které platí pro DeepSeek-R1 modely. Zvažte strategii opakovaného pokusu pro překonání omezení rychlosti. Můžete také požádat o zvýšení výchozích limitů.

O modelech zdůvodnění

Modely zdůvodňování můžou dosáhnout vyšší úrovně výkonu v oblastech, jako jsou matematika, kódování, věda, strategie a logistika. Způsob, jakým tyto modely vytvářejí výstupy, je explicitně použít řetěz myšlenek k prozkoumání všech možných cest před generováním odpovědi. Ověřují své odpovědi při jejich vytváření, což pomáhá při dosažení přesnějšíchzávěrůch V důsledku toho můžou modely odůvodnění vyžadovat méně kontextových výzev, aby vznikly efektivní výsledky.

Modely odůvodnění vytvářejí dva typy obsahu jako výstupy:

  • Dokončení úvah
  • Dokončení výstupu

Oba tyto dokončování se počítají do obsahu vygenerovaného z modelu. Proto přispívají k limitům tokenů a nákladům přidruženým k modelu. Některé modely, jako je DeepSeek-R1, můžou odpovídat s odůvodněním obsahu. Jiní, jako o1, produkují pouze dokončení.

Odůvodnění obsahu

Některé modely zdůvodnění, jako je DeepSeek-R1, generují dokončení a zahrnují jejich odůvodnění. Odůvodnění spojené s dokončením je součástí obsahu odpovědi v rámci značek <think> a </think>. Model může vybrat scénáře, pro které má být generován důvodový obsah. Následující příklad ukazuje, jak pomocí Python vygenerovat odůvodnění obsahu:

import re

match = re.match(r"<think>(.*?)</think>(.*)", response.choices[0].message.content, re.DOTALL)

print("Response:")
if match:
    print("\tThinking:", match.group(1))
    print("\tAnswer:", match.group(2))
else:
    print("\tAnswer:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Thinking: Okay, the user is asking how many languages exist in the world. I need to provide a clear and accurate answer. Let's start by recalling the general consensus from linguistic sources. I remember that the number often cited is around 7,000, but maybe I should check some reputable organizations.\n\nEthnologue is a well-known resource for language data, and I think they list about 7,000 languages. But wait, do they update their numbers? It might be around 7,100 or so. Also, the exact count can vary because some sources might categorize dialects differently or have more recent data. \n\nAnother thing to consider is language endangerment. Many languages are endangered, with some having only a few speakers left. Organizations like UNESCO track endangered languages, so mentioning that adds context. Also, the distribution isn't even. Some countries or 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

Referenční informace k rozhraní API:

modely pro odůvodňování na základě podnětů

Při vytváření výzev k odůvodnění modelů vezměte v úvahu následující skutečnosti:

  • Používejte jednoduché pokyny a nepoužívejte řetězové techniky.
  • Integrované možnosti zdůvodňování činí jednoduché podněty bez přípravy stejně efektivní jako složitější metody.
  • Pokud poskytujete další kontext nebo dokumenty, například ve scénářích RAG, zahrnutí pouze nejrelevantnějších informací může pomoci zabránit tomu, aby model překomplikoval svou odpověď.
  • Modely odůvodnění můžou podporovat použití systémových zpráv. Nemusí je ale dodržovat tak přísně jako jiné modely, které nejsou zdůvodněné.
  • Při vytváření vícekrokových aplikací zvažte připojení pouze konečné odpovědi z modelu, bez jeho obsahu zdůvodnění, jak je vysvětleno v části Obsah zdůvodnění.

Všimněte si, že modely pro odvozování mohou vyžadovat delší dobu k vytvoření odpovědí. Používají dlouhé řetězy myšlení, které umožňují hlubší a strukturovanější řešení problémů. Také provádějí sebeověření, křížově kontrolují své odpovědi a opravují své chyby, čímž ukazují nově vznikající samoreflexní chování.

Parametry

Modely odůvodnění podporují podmnožinu standardních parametrů dokončování chatu, aby se zachovala integrita jejich procesu odůvodnění.

Podporované parametry:

  • max_tokens - Maximální počet tokenů, které se mají vygenerovat v odpovědi
  • stop – Sekvence, ve kterých rozhraní API přestane generovat tokeny
  • stream - Povolit streamované odpovědi
  • n - Počet dokončení, které se mají vygenerovat

Nepodporované parametry (modely odůvodnění tyto parametry nepodporují):

  • temperature - Opraveno pro optimalizaci kvality odůvodnění
  • top_p - Nelze konfigurovat pro modely uvažování
  • presence_penalty - Není k dispozici
  • repetition_penalty - Není k dispozici pro modely odůvodnění

Příklad použití max_tokens:

response = client.chat.completions.create(
    model="DeepSeek-R1",
    messages=[
        {"role": "user", "content": "Explain quantum computing"}
    ],
    max_tokens=1000  # Limit response length
)

Úplný seznam podporovaných parametrů najdete v referenčních informacích k rozhraní API pro dokončování chatu.

Použití modelu v dětském hřišti

Pomocí modelu v dětském hřišti získáte představu o možnostech modelu.

Jakmile se nasazení dokončí, ocitnete se v modelovém prostředí, kde můžete začít interagovat s nasazením. Můžete například zadat výzvy, například "Kolik jazyků je na světě?" v dětském hřišti.

Řešení problémů

Pokud při sledování tohoto kurzu narazíte na problémy, při řešení běžných problémů využijte následující doprovodné materiály.

Chyby ověřování (401/403)

  • Ujistěte se, že jste přihlášení k Azure CLI. Pro místní vývoj spusťte az login před spuštěním kódu. DefaultAzureCredential používá vaše přihlašovací údaje Azure CLI jako záložní, pokud nejsou k dispozici žádné jiné přihlašovací údaje.
  • Ověřte přiřazení rolí. Váš účet Azure potřebuje na prostředku Foundry roli Cognitive Services User (nebo vyšší) k provádění inferenčních volání pomocí Microsoft Entra ID. Pokud jste tuto roli ještě nepřiřadili, přečtěte si část Požadavky.
  • Zkontrolujte formát koncového bodu. Adresa URL koncového bodu musí odpovídat formátu https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/. Ověřte, že název prostředku odpovídá vašemu prostředku ve Foundry.

Problémy při nasazení

  • Název nasazení vs. název modelu Parametr model ve voláních rozhraní API odkazuje na název vašeho nasazení, nikoli na název modelu. Pokud jste při vytváření přizpůsobili název nasazení, použijte tento název místo DeepSeek-R1.
  • Nasazení není připravené. Pokud se zobrazí chyba 404, před voláním rozhraní API ověřte, že stav nasazení byl na portálu Foundry úspěšný .

Omezování rychlosti (chyby 429)

  • Implementujte logiku opakování. Modely zdůvodňování generují delší odpovědi, které spotřebovávají více tokenů. Použijte exponenciální zpoždění k zpracování chyb 429 (Příliš mnoho požadavků).
  • Monitorování využití tokenů DeepSeek-R1 obsah odůvodnění (v rámci <think> značek) se počítá do vašeho tokenového limitu. Podívejte se na kvóty a limity aktuálních sazeb.
  • Vyžádání navýšení kvóty Pokud konzistentně dosáhnete limitů četnosti, požadavky se zvýší na výchozí limity.

Problémy s instalací balíčků

  • Python. Nainstalujte oba požadované balíčky: pip install openai azure-identity. Balíček azure-identity je vyžadován pro DefaultAzureCredential.
  • JavaScript. Nainstalujte oba požadované balíčky: npm install openai @azure/identity.
  • .NET. Nainstalujte balíček Azure Identity: dotnet add package Azure.Identity.

Co jste se naučili

V tomto kurzu jste provedli následující:

  • Vytvořené prostředky Foundry pro hostování modelů AI
  • Nasadili model dedukce DeepSeek-R1
  • Ověřená volání rozhraní API pomocí Microsoft Entra ID
  • Odeslané žádosti o inferenci a přijaté výstupy inferenčního zpracování
  • Parsování obsahu z odpovědí modelu za účelem pochopení myšlenkového procesu modelu