Jak používat modely chatu Mistral Premium
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
V tomto článku se dozvíte o prémiových chatovacích modelech Mistral a o tom, jak je používat. Mistral AI nabízí dvě kategorie modelů. Prémiové modely, včetně Mistral Large, Mistral Small a Ministral 3B, jsou k dispozici jako bezserverová rozhraní API s fakturací na základě tokenů s průběžnými platbami. Otevřené modely, mezi které patří Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 a Mistral-7B-v01; dostupné také ke stažení a spuštění na spravovaných koncových bodech v místním prostředí.
Důležité
Modely, které jsou ve verzi Preview, jsou na kartách modelu v katalogu modelů označené jako náhled .
Mistral premium chat modely
Modely chatu Mistral Premium zahrnují následující modely:
Mistral Large je nejpokročilejší velký jazykový model (LLM) mistral AI. Dá se použít na libovolném úkolu založeném na jazyce, a to díky svým špičkovým možnostem a schopnostem znalostí.
Kromě toho mistral Large je:
- Specializované na RAG. Klíčové informace se neztratí uprostřed dlouhých kontextových oken (až 32 K tokenů).
- Silná v kódování. Generování, revize a komentáře kódu Podporuje všechny hlavní programovací jazyky.
- Vícejazyčné podle návrhu. Nejlepší výkon ve francouzštině, němčině, španělštině, italštině a angličtině. Podporují se desítky dalších jazyků.
- Zodpovědné dodržování předpisů umělé inteligence. Efektivní mantinely pečené v modelu a dodatečná bezpečnostní vrstva s možností safe_mode.
A atributy Mistral Large (2407) zahrnují:
- Vícejazyčné podle návrhu. Podporuje desítky jazyků, včetně angličtiny, francouzštiny, němčiny, španělštiny a italštiny.
- Znalost psaní kódu. Trénováno na více než 80 programovacích jazycích, včetně Pythonu, Javy, C, C++, JavaScriptu a bashe. Vytrénovali jsme také konkrétnější jazyky, jako je Swift a Fortran.
- Agent-orientovaný na agenta. Má funkce agentů s nativním voláním funkce a výstupem JSON.
- Upřesňující argumenty. Demonstruje nejmodernější matematické a logické funkce.
K dispozici jsou následující modely:
Tip
MistralAI navíc podporuje použití přizpůsobeného rozhraní API pro použití s konkrétními funkcemi modelu. Pokud chcete použít rozhraní API specifické pro poskytovatele modelů, podívejte se do dokumentace mistralAI nebo si projděte část příklady odvozování příkladů kódu.
Požadavky
Pokud chcete používat modely chatu Mistral Premium s Azure AI Studio, potřebujete následující požadavky:
Nasazení modelu
Nasazení do bezserverových rozhraní API
Modely chatu Mistral Premium je možné nasadit na koncové body bezserverového rozhraní API s průběžnými platbami. Tento druh nasazení poskytuje způsob, jak využívat modely jako rozhraní API bez jejich hostování ve vašem předplatném a současně udržovat podnikové zabezpečení a dodržování předpisů, které organizace potřebují.
Nasazení do koncového bodu bezserverového rozhraní API nevyžaduje kvótu z vašeho předplatného. Pokud váš model ještě není nasazený, nasaďte model jako bezserverové rozhraní API pomocí sady Azure AI Studio, sady Azure Machine Learning SDK pro Python, Azure CLI nebo šablon ARM.
Nainstalovaný balíček odvození
Predikce z tohoto modelu můžete využívat pomocí azure-ai-inference
balíčku s Pythonem. K instalaci tohoto balíčku potřebujete následující požadavky:
- Nainstalovaný Python 3.8 nebo novější, včetně pipu.
- Adresa URL koncového bodu. Pokud chcete vytvořit klientskou knihovnu, musíte předat adresu URL koncového bodu. Adresa URL koncového bodu má formulář
https://your-host-name.your-azure-region.inference.ai.azure.com
, kdeyour-host-name
je jedinečný název hostitele nasazení modelu ayour-azure-region
oblast Azure, ve které je model nasazený (například eastus2). - V závislosti na nasazení modelu a předvolbě ověřování potřebujete klíč k ověření ve službě nebo přihlašovací údaje Microsoft Entra ID. Klíč je řetězec s 32 znaky.
Jakmile budete mít tyto požadavky, nainstalujte balíček odvození Azure AI pomocí následujícího příkazu:
pip install azure-ai-inference
Přečtěte si další informace o balíčku a referenci pro odvození AI v Azure.
Práce s dokončováním chatu
V této části použijete rozhraní API pro odvozování modelů Azure AI s modelem dokončování chatu pro chat.
Tip
Rozhraní API pro odvozování modelů Azure AI umožňuje komunikovat s většinou modelů nasazených v Azure AI Studiu se stejným kódem a strukturou, včetně modelů chatu Mistral Premium.
Vytvoření klienta pro využívání modelu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential
client = ChatCompletionsClient(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=AzureKeyCredential(os.environ["AZURE_INFERENCE_CREDENTIAL"]),
)
Získání možností modelu
Trasa /info
vrátí informace o modelu, který je nasazený do koncového bodu. Informace o modelu vrátíte voláním následující metody:
model_info = client.get_model_info()
Odpověď je následující:
print("Model name:", model_info.model_name)
print("Model type:", model_info.model_type)
print("Model provider name:", model_info.model_provider_name)
Model name: Mistral-Large
Model type: chat-completions
Model provider name: MistralAI
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní požadavek na dokončení chatu do modelu.
from azure.ai.inference.models import SystemMessage, UserMessage
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
)
Odpověď je následující, kde vidíte statistiku využití modelu:
print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: 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: Mistral-Large
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
usage
Zkontrolujte část v odpovědi a podívejte se na počet tokenů použitých pro výzvu, celkový počet vygenerovaných tokenů a počet tokenů použitých k dokončení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
result = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
temperature=0,
top_p=1,
max_tokens=2048,
stream=True,
)
Pokud chcete streamovat dokončení, nastavte stream=True
při volání modelu.
Pokud chcete vizualizovat výstup, definujte pomocnou funkci pro tisk datového proudu.
def print_stream(result):
"""
Prints the chat completion with streaming.
"""
import time
for update in result:
if update.choices:
print(update.choices[0].delta.content, end="")
Můžete vizualizovat, jak streamování generuje obsah:
print_stream(result)
Prozkoumání dalších parametrů podporovaných klientem odvozováním
Prozkoumejte další parametry, které můžete zadat v klientovi odvození. Úplný seznam všech podporovaných parametrů a jejich odpovídající dokumentace najdete v referenčních informacích k rozhraní API pro odvozování modelů Azure AI.
from azure.ai.inference.models import ChatCompletionsResponseFormatText
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
presence_penalty=0.1,
frequency_penalty=0.8,
max_tokens=2048,
stop=["<|endoftext|>"],
temperature=0,
top_p=1,
response_format={ "type": ChatCompletionsResponseFormatText() },
)
Pokud chcete předat parametr, který není v seznamu podporovaných parametrů, můžete ho předat podkladovému modelu pomocí dalších parametrů. Viz Předání dalších parametrů do modelu.
Vytváření výstupů JSON
Modely chatu Mistral Premium můžou vytvářet výstupy JSON. Nastavte response_format
na json_object
povolení režimu JSON a zaručte, že zpráva, kterou model vygeneruje, je platný JSON. Model také musíte instruovat, aby vygeneroval JSON sami prostřednictvím systémové nebo uživatelské zprávy. Obsah zprávy může být také částečně oříznut, pokud finish_reason="length"
, což znamená, že generování překročilo max_tokens
nebo že konverzace překročila maximální délku kontextu.
from azure.ai.inference.models import ChatCompletionsResponseFormatJSON
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant that always generate responses in JSON format, using."
" the following format: { ""answer"": ""response"" }."),
UserMessage(content="How many languages are in the world?"),
],
response_format={ "type": ChatCompletionsResponseFormatJSON() }
)
Předání dalších parametrů do modelu
Rozhraní API pro odvozování modelů Azure AI umožňuje předat do modelu další parametry. Následující příklad kódu ukazuje, jak předat další parametr logprobs
modelu.
Než předáte do rozhraní API pro odvozování modelů Azure AI další parametry, ujistěte se, že váš model tyto dodatečné parametry podporuje. Při provedení požadavku do podkladového modelu se hlavička extra-parameters
předá modelu s hodnotou pass-through
. Tato hodnota říká koncovému bodu, aby předal do modelu další parametry. Použití dalších parametrů s modelem nezaručuje, že je model dokáže skutečně zpracovat. Přečtěte si dokumentaci k modelu, abyste pochopili, které další parametry jsou podporované.
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
Do modelů chatu Mistral Premium je možné předat následující dodatečné parametry:
Název | Popis | Typ |
---|---|---|
ignore_eos |
Zda se má ignorovat token EOS a pokračovat v generování tokenů po vygenerování tokenu EOS. | boolean |
safe_mode |
Zda chcete před všemi konverzacemi vložit bezpečnostní výzvu. | boolean |
Nouzový režim
Parametr podporují modely chatu safe_prompt
Mistral Premium . Pomocí následujícího systémového příkazového řádku můžete přepnout bezpečnou výzvu k předpřipravení zpráv:
Vždy pomáhá s opatrností, respektem a pravdou. Zareagujte co nejužším nástrojem, který je ještě bezpečný. Vyhněte se škodlivému, neetickému, dotčenému nebo negativnímu obsahu. Zajistěte, aby odpovědi podporovaly nestrannost a pozitivitu.
Rozhraní API pro odvozování modelů Azure AI umožňuje předat tento dodatečný parametr následujícím způsobem:
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"safe_mode": True
}
)
Použití nástrojů
Modely chatu Mistral Premium podporují použití nástrojů, které mohou být mimořádným zdrojem, když potřebujete přesměrovat konkrétní úlohy z jazykového modelu a místo toho spoléhat na deterministický systém nebo dokonce jiný jazykový model. Rozhraní API pro odvozování modelů Azure AI umožňuje definovat nástroje následujícím způsobem.
Následující příklad kódu vytvoří definici nástroje, která dokáže hledat z informací o letu ze dvou různých měst.
from azure.ai.inference.models import FunctionDefinition, ChatCompletionsFunctionToolDefinition
flight_info = ChatCompletionsFunctionToolDefinition(
function=FunctionDefinition(
name="get_flight_info",
description="Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
parameters={
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates",
},
"destination_city": {
"type": "string",
"description": "The flight destination city",
},
},
"required": ["origin_city", "destination_city"],
},
)
)
tools = [flight_info]
V tomto příkladu výstup funkce spočívá v tom, že pro vybranou trasu nejsou k dispozici žádné lety, ale uživatel by měl zvážit pořízení vlaku.
def get_flight_info(loc_origin: str, loc_destination: str):
return {
"info": f"There are no flights available from {loc_origin} to {loc_destination}. You should take a train, specially if it helps to reduce CO2 emissions."
}
Vyzvat model k rezervaci letů pomocí této funkce:
messages = [
SystemMessage(
content="You are a helpful assistant that help users to find information about traveling, how to get"
" to places and the different transportations options. You care about the environment and you"
" always have that in mind when answering inqueries.",
),
UserMessage(
content="When is the next flight from Miami to Seattle?",
),
]
response = client.complete(
messages=messages, tools=tools, tool_choice="auto"
)
Můžete zkontrolovat odpověď a zjistit, jestli je potřeba nástroj volat. Zkontrolujte důvod dokončení a zjistěte, jestli se má nástroj volat. Mějte na paměti, že lze určit více typů nástrojů. Tento příklad ukazuje nástroj typu function
.
response_message = response.choices[0].message
tool_calls = response_message.tool_calls
print("Finish reason:", response.choices[0].finish_reason)
print("Tool call:", tool_calls)
Pokud chcete pokračovat, připojte tuto zprávu do historie chatu:
messages.append(
response_message
)
Teď je čas volat příslušnou funkci pro zpracování volání nástroje. Následující fragment kódu iteruje přes všechna volání nástroje uvedená v odpovědi a volá odpovídající funkci s příslušnými parametry. Odpověď je také připojena k historii chatu.
import json
from azure.ai.inference.models import ToolMessage
for tool_call in tool_calls:
# Get the tool details:
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments.replace("\'", "\""))
tool_call_id = tool_call.id
print(f"Calling function `{function_name}` with arguments {function_args}")
# Call the function defined above using `locals()`, which returns the list of all functions
# available in the scope as a dictionary. Notice that this is just done as a simple way to get
# the function callable from its string name. Then we can call it with the corresponding
# arguments.
callable_func = locals()[function_name]
function_response = callable_func(**function_args)
print("->", function_response)
# Once we have a response from the function and its arguments, we can append a new message to the chat
# history. Notice how we are telling to the model that this chat message came from a tool:
messages.append(
ToolMessage(
tool_call_id=tool_call_id,
content=json.dumps(function_response)
)
)
Zobrazte odpověď z modelu:
response = client.complete(
messages=messages,
tools=tools,
)
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu (Preview) detekuje a provádí akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
try:
response = client.complete(
messages=[
SystemMessage(content="You are an AI assistant that helps people find information."),
UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
]
)
print(response.choices[0].message.content)
except HttpResponseError as ex:
if ex.status_code == 400:
response = ex.response.json()
if isinstance(response, dict) and "error" in response:
print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
else:
raise
raise
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Mistral premium chat modely
Modely chatu Mistral Premium zahrnují následující modely:
Mistral Large je nejpokročilejší velký jazykový model (LLM) mistral AI. Dá se použít na libovolném úkolu založeném na jazyce, a to díky svým špičkovým možnostem a schopnostem znalostí.
Kromě toho mistral Large je:
- Specializované na RAG. Klíčové informace se neztratí uprostřed dlouhých kontextových oken (až 32 K tokenů).
- Silná v kódování. Generování, revize a komentáře kódu Podporuje všechny hlavní programovací jazyky.
- Vícejazyčné podle návrhu. Nejlepší výkon ve francouzštině, němčině, španělštině, italštině a angličtině. Podporují se desítky dalších jazyků.
- Zodpovědné dodržování předpisů umělé inteligence. Efektivní mantinely pečené v modelu a dodatečná bezpečnostní vrstva s možností safe_mode.
A atributy Mistral Large (2407) zahrnují:
- Vícejazyčné podle návrhu. Podporuje desítky jazyků, včetně angličtiny, francouzštiny, němčiny, španělštiny a italštiny.
- Znalost psaní kódu. Trénováno na více než 80 programovacích jazycích, včetně Pythonu, Javy, C, C++, JavaScriptu a bashe. Vytrénovali jsme také konkrétnější jazyky, jako je Swift a Fortran.
- Agent-orientovaný na agenta. Má funkce agentů s nativním voláním funkce a výstupem JSON.
- Upřesňující argumenty. Demonstruje nejmodernější matematické a logické funkce.
K dispozici jsou následující modely:
Tip
MistralAI navíc podporuje použití přizpůsobeného rozhraní API pro použití s konkrétními funkcemi modelu. Pokud chcete použít rozhraní API specifické pro poskytovatele modelů, podívejte se do dokumentace mistralAI nebo si projděte část příklady odvozování příkladů kódu.
Požadavky
Pokud chcete používat modely chatu Mistral Premium s Azure AI Studio, potřebujete následující požadavky:
Nasazení modelu
Nasazení do bezserverových rozhraní API
Modely chatu Mistral Premium je možné nasadit na koncové body bezserverového rozhraní API s průběžnými platbami. Tento druh nasazení poskytuje způsob, jak využívat modely jako rozhraní API bez jejich hostování ve vašem předplatném a současně udržovat podnikové zabezpečení a dodržování předpisů, které organizace potřebují.
Nasazení do koncového bodu bezserverového rozhraní API nevyžaduje kvótu z vašeho předplatného. Pokud váš model ještě není nasazený, nasaďte model jako bezserverové rozhraní API pomocí sady Azure AI Studio, sady Azure Machine Learning SDK pro Python, Azure CLI nebo šablon ARM.
Nainstalovaný balíček odvození
Predikce z tohoto modelu můžete využívat pomocí @azure-rest/ai-inference
balíčku z npm
. K instalaci tohoto balíčku potřebujete následující požadavky:
- VERZE LTS s
Node.js
npm
. - Adresa URL koncového bodu. Pokud chcete vytvořit klientskou knihovnu, musíte předat adresu URL koncového bodu. Adresa URL koncového bodu má formulář
https://your-host-name.your-azure-region.inference.ai.azure.com
, kdeyour-host-name
je jedinečný název hostitele nasazení modelu ayour-azure-region
oblast Azure, ve které je model nasazený (například eastus2). - V závislosti na nasazení modelu a předvolbě ověřování potřebujete klíč k ověření ve službě nebo přihlašovací údaje Microsoft Entra ID. Klíč je řetězec s 32 znaky.
Jakmile budete mít tyto požadavky, nainstalujte knihovnu Azure Inference pro JavaScript pomocí následujícího příkazu:
npm install @azure-rest/ai-inference
Práce s dokončováním chatu
V této části použijete rozhraní API pro odvozování modelů Azure AI s modelem dokončování chatu pro chat.
Tip
Rozhraní API pro odvozování modelů Azure AI umožňuje komunikovat s většinou modelů nasazených v Azure AI Studiu se stejným kódem a strukturou, včetně modelů chatu Mistral Premium.
Vytvoření klienta pro využívání modelu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { AzureKeyCredential } from "@azure/core-auth";
const client = new ModelClient(
process.env.AZURE_INFERENCE_ENDPOINT,
new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);
Získání možností modelu
Trasa /info
vrátí informace o modelu, který je nasazený do koncového bodu. Informace o modelu vrátíte voláním následující metody:
var model_info = await client.path("/info").get()
Odpověď je následující:
console.log("Model name: ", model_info.body.model_name)
console.log("Model type: ", model_info.body.model_type)
console.log("Model provider name: ", model_info.body.model_provider_name)
Model name: Mistral-Large
Model type: chat-completions
Model provider name: MistralAI
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní požadavek na dokončení chatu do modelu.
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
});
Odpověď je následující, kde vidíte statistiku využití modelu:
if (isUnexpected(response)) {
throw response.body.error;
}
console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: 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: Mistral-Large
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
usage
Zkontrolujte část v odpovědi a podívejte se na počet tokenů použitých pro výzvu, celkový počet vygenerovaných tokenů a počet tokenů použitých k dokončení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
}).asNodeStream();
K dokončení datových proudů použijte .asNodeStream()
při volání modelu.
Můžete vizualizovat, jak streamování generuje obsah:
var stream = response.body;
if (!stream) {
stream.destroy();
throw new Error(`Failed to get chat completions with status: ${response.status}`);
}
if (response.status !== "200") {
throw new Error(`Failed to get chat completions: ${response.body.error}`);
}
var sses = createSseStream(stream);
for await (const event of sses) {
if (event.data === "[DONE]") {
return;
}
for (const choice of (JSON.parse(event.data)).choices) {
console.log(choice.delta?.content ?? "");
}
}
Prozkoumání dalších parametrů podporovaných klientem odvozováním
Prozkoumejte další parametry, které můžete zadat v klientovi odvození. Úplný seznam všech podporovaných parametrů a jejich odpovídající dokumentace najdete v referenčních informacích k rozhraní API pro odvozování modelů Azure AI.
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
presence_penalty: "0.1",
frequency_penalty: "0.8",
max_tokens: 2048,
stop: ["<|endoftext|>"],
temperature: 0,
top_p: 1,
response_format: { type: "text" },
}
});
Pokud chcete předat parametr, který není v seznamu podporovaných parametrů, můžete ho předat podkladovému modelu pomocí dalších parametrů. Viz Předání dalších parametrů do modelu.
Vytváření výstupů JSON
Modely chatu Mistral Premium můžou vytvářet výstupy JSON. Nastavte response_format
na json_object
povolení režimu JSON a zaručte, že zpráva, kterou model vygeneruje, je platný JSON. Model také musíte instruovat, aby vygeneroval JSON sami prostřednictvím systémové nebo uživatelské zprávy. Obsah zprávy může být také částečně oříznut, pokud finish_reason="length"
, což znamená, že generování překročilo max_tokens
nebo že konverzace překročila maximální délku kontextu.
var messages = [
{ role: "system", content: "You are a helpful assistant that always generate responses in JSON format, using."
+ " the following format: { \"answer\": \"response\" }." },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
response_format: { type: "json_object" }
}
});
Předání dalších parametrů do modelu
Rozhraní API pro odvozování modelů Azure AI umožňuje předat do modelu další parametry. Následující příklad kódu ukazuje, jak předat další parametr logprobs
modelu.
Než předáte do rozhraní API pro odvozování modelů Azure AI další parametry, ujistěte se, že váš model tyto dodatečné parametry podporuje. Při provedení požadavku do podkladového modelu se hlavička extra-parameters
předá modelu s hodnotou pass-through
. Tato hodnota říká koncovému bodu, aby předal do modelu další parametry. Použití dalších parametrů s modelem nezaručuje, že je model dokáže skutečně zpracovat. Přečtěte si dokumentaci k modelu, abyste pochopili, které další parametry jsou podporované.
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
headers: {
"extra-params": "pass-through"
},
body: {
messages: messages,
logprobs: true
}
});
Do modelů chatu Mistral Premium je možné předat následující dodatečné parametry:
Název | Popis | Typ |
---|---|---|
ignore_eos |
Zda se má ignorovat token EOS a pokračovat v generování tokenů po vygenerování tokenu EOS. | boolean |
safe_mode |
Zda chcete před všemi konverzacemi vložit bezpečnostní výzvu. | boolean |
Nouzový režim
Parametr podporují modely chatu safe_prompt
Mistral Premium . Pomocí následujícího systémového příkazového řádku můžete přepnout bezpečnou výzvu k předpřipravení zpráv:
Vždy pomáhá s opatrností, respektem a pravdou. Zareagujte co nejužším nástrojem, který je ještě bezpečný. Vyhněte se škodlivému, neetickému, dotčenému nebo negativnímu obsahu. Zajistěte, aby odpovědi podporovaly nestrannost a pozitivitu.
Rozhraní API pro odvozování modelů Azure AI umožňuje předat tento dodatečný parametr následujícím způsobem:
var messages = [
{ role: "system", content: "You are a helpful assistant" },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
headers: {
"extra-params": "pass-through"
},
body: {
messages: messages,
safe_mode: true
}
});
Použití nástrojů
Modely chatu Mistral Premium podporují použití nástrojů, které mohou být mimořádným zdrojem, když potřebujete přesměrovat konkrétní úlohy z jazykového modelu a místo toho spoléhat na deterministický systém nebo dokonce jiný jazykový model. Rozhraní API pro odvozování modelů Azure AI umožňuje definovat nástroje následujícím způsobem.
Následující příklad kódu vytvoří definici nástroje, která dokáže hledat z informací o letu ze dvou různých měst.
const flight_info = {
name: "get_flight_info",
description: "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
parameters: {
type: "object",
properties: {
origin_city: {
type: "string",
description: "The name of the city where the flight originates",
},
destination_city: {
type: "string",
description: "The flight destination city",
},
},
required: ["origin_city", "destination_city"],
},
}
const tools = [
{
type: "function",
function: flight_info,
},
];
V tomto příkladu výstup funkce spočívá v tom, že pro vybranou trasu nejsou k dispozici žádné lety, ale uživatel by měl zvážit pořízení vlaku.
function get_flight_info(loc_origin, loc_destination) {
return {
info: "There are no flights available from " + loc_origin + " to " + loc_destination + ". You should take a train, specially if it helps to reduce CO2 emissions."
}
}
Vyzvat model k rezervaci letů pomocí této funkce:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
tool_choice: "auto"
}
});
Můžete zkontrolovat odpověď a zjistit, jestli je potřeba nástroj volat. Zkontrolujte důvod dokončení a zjistěte, jestli se má nástroj volat. Mějte na paměti, že lze určit více typů nástrojů. Tento příklad ukazuje nástroj typu function
.
const response_message = response.body.choices[0].message;
const tool_calls = response_message.tool_calls;
console.log("Finish reason: " + response.body.choices[0].finish_reason);
console.log("Tool call: " + tool_calls);
Pokud chcete pokračovat, připojte tuto zprávu do historie chatu:
messages.push(response_message);
Teď je čas volat příslušnou funkci pro zpracování volání nástroje. Následující fragment kódu iteruje přes všechna volání nástroje uvedená v odpovědi a volá odpovídající funkci s příslušnými parametry. Odpověď je také připojena k historii chatu.
function applyToolCall({ function: call, id }) {
// Get the tool details:
const tool_params = JSON.parse(call.arguments);
console.log("Calling function " + call.name + " with arguments " + tool_params);
// Call the function defined above using `window`, which returns the list of all functions
// available in the scope as a dictionary. Notice that this is just done as a simple way to get
// the function callable from its string name. Then we can call it with the corresponding
// arguments.
const function_response = tool_params.map(window[call.name]);
console.log("-> " + function_response);
return function_response
}
for (const tool_call of tool_calls) {
var tool_response = tool_call.apply(applyToolCall);
messages.push(
{
role: "tool",
tool_call_id: tool_call.id,
content: tool_response
}
);
}
Zobrazte odpověď z modelu:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
}
});
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu (Preview) detekuje a provádí akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
try {
var messages = [
{ role: "system", content: "You are an AI assistant that helps people find information." },
{ role: "user", content: "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills." },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
}
});
console.log(response.body.choices[0].message.content);
}
catch (error) {
if (error.status_code == 400) {
var response = JSON.parse(error.response._content);
if (response.error) {
console.log(`Your request triggered an ${response.error.code} error:\n\t ${response.error.message}`);
}
else
{
throw error;
}
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Mistral premium chat modely
Modely chatu Mistral Premium zahrnují následující modely:
Mistral Large je nejpokročilejší velký jazykový model (LLM) mistral AI. Dá se použít na libovolném úkolu založeném na jazyce, a to díky svým špičkovým možnostem a schopnostem znalostí.
Kromě toho mistral Large je:
- Specializované na RAG. Klíčové informace se neztratí uprostřed dlouhých kontextových oken (až 32 K tokenů).
- Silná v kódování. Generování, revize a komentáře kódu Podporuje všechny hlavní programovací jazyky.
- Vícejazyčné podle návrhu. Nejlepší výkon ve francouzštině, němčině, španělštině, italštině a angličtině. Podporují se desítky dalších jazyků.
- Zodpovědné dodržování předpisů umělé inteligence. Efektivní mantinely pečené v modelu a dodatečná bezpečnostní vrstva s možností safe_mode.
A atributy Mistral Large (2407) zahrnují:
- Vícejazyčné podle návrhu. Podporuje desítky jazyků, včetně angličtiny, francouzštiny, němčiny, španělštiny a italštiny.
- Znalost psaní kódu. Trénováno na více než 80 programovacích jazycích, včetně Pythonu, Javy, C, C++, JavaScriptu a bashe. Vytrénovali jsme také konkrétnější jazyky, jako je Swift a Fortran.
- Agent-orientovaný na agenta. Má funkce agentů s nativním voláním funkce a výstupem JSON.
- Upřesňující argumenty. Demonstruje nejmodernější matematické a logické funkce.
K dispozici jsou následující modely:
Tip
MistralAI navíc podporuje použití přizpůsobeného rozhraní API pro použití s konkrétními funkcemi modelu. Pokud chcete použít rozhraní API specifické pro poskytovatele modelů, podívejte se do dokumentace mistralAI nebo si projděte část příklady odvozování příkladů kódu.
Požadavky
Pokud chcete používat modely chatu Mistral Premium s Azure AI Studio, potřebujete následující požadavky:
Nasazení modelu
Nasazení do bezserverových rozhraní API
Modely chatu Mistral Premium je možné nasadit na koncové body bezserverového rozhraní API s průběžnými platbami. Tento druh nasazení poskytuje způsob, jak využívat modely jako rozhraní API bez jejich hostování ve vašem předplatném a současně udržovat podnikové zabezpečení a dodržování předpisů, které organizace potřebují.
Nasazení do koncového bodu bezserverového rozhraní API nevyžaduje kvótu z vašeho předplatného. Pokud váš model ještě není nasazený, nasaďte model jako bezserverové rozhraní API pomocí sady Azure AI Studio, sady Azure Machine Learning SDK pro Python, Azure CLI nebo šablon ARM.
Nainstalovaný balíček odvození
Predikce z tohoto modelu můžete využívat pomocí Azure.AI.Inference
balíčku z NuGetu. K instalaci tohoto balíčku potřebujete následující požadavky:
- Adresa URL koncového bodu. Pokud chcete vytvořit klientskou knihovnu, musíte předat adresu URL koncového bodu. Adresa URL koncového bodu má formulář
https://your-host-name.your-azure-region.inference.ai.azure.com
, kdeyour-host-name
je jedinečný název hostitele nasazení modelu ayour-azure-region
oblast Azure, ve které je model nasazený (například eastus2). - V závislosti na nasazení modelu a předvolbě ověřování potřebujete klíč k ověření ve službě nebo přihlašovací údaje Microsoft Entra ID. Klíč je řetězec s 32 znaky.
Jakmile budete mít tyto požadavky, nainstalujte knihovnu odvození Azure AI pomocí následujícího příkazu:
dotnet add package Azure.AI.Inference --prerelease
Můžete se také ověřit pomocí Microsoft Entra ID (dříve Azure Active Directory). Pokud chcete používat zprostředkovatele přihlašovacích údajů poskytované sadou Azure SDK, nainstalujte Azure.Identity
balíček:
dotnet add package Azure.Identity
Naimportujte následující obory názvů:
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
Tento příklad také používá následující obory názvů, ale nemusí je vždy potřebovat:
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
Práce s dokončováním chatu
V této části použijete rozhraní API pro odvozování modelů Azure AI s modelem dokončování chatu pro chat.
Tip
Rozhraní API pro odvozování modelů Azure AI umožňuje komunikovat s většinou modelů nasazených v Azure AI Studiu se stejným kódem a strukturou, včetně modelů chatu Mistral Premium.
Vytvoření klienta pro využívání modelu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Získání možností modelu
Trasa /info
vrátí informace o modelu, který je nasazený do koncového bodu. Informace o modelu vrátíte voláním následující metody:
Response<ModelInfo> modelInfo = client.GetModelInfo();
Odpověď je následující:
Console.WriteLine($"Model name: {modelInfo.Value.ModelName}");
Console.WriteLine($"Model type: {modelInfo.Value.ModelType}");
Console.WriteLine($"Model provider name: {modelInfo.Value.ModelProviderName}");
Model name: Mistral-Large
Model type: chat-completions
Model provider name: MistralAI
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní požadavek na dokončení chatu do modelu.
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
};
Response<ChatCompletions> response = client.Complete(requestOptions);
Odpověď je následující, kde vidíte statistiku využití modelu:
Console.WriteLine($"Response: {response.Value.Choices[0].Message.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: 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: Mistral-Large
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
usage
Zkontrolujte část v odpovědi a podívejte se na počet tokenů použitých pro výzvu, celkový počet vygenerovaných tokenů a počet tokenů použitých k dokončení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
static async Task StreamMessageAsync(ChatCompletionsClient client)
{
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world? Write an essay about it.")
},
MaxTokens=4096
};
StreamingResponse<StreamingChatCompletionsUpdate> streamResponse = await client.CompleteStreamingAsync(requestOptions);
await PrintStream(streamResponse);
}
K dokončení streamu použijte CompleteStreamingAsync
metodu při volání modelu. Všimněte si, že v tomto příkladu je volání zabaleno do asynchronní metody.
Pokud chcete vizualizovat výstup, definujte asynchronní metodu pro tisk datového proudu v konzole.
static async Task PrintStream(StreamingResponse<StreamingChatCompletionsUpdate> response)
{
await foreach (StreamingChatCompletionsUpdate chatUpdate in response)
{
if (chatUpdate.Role.HasValue)
{
Console.Write($"{chatUpdate.Role.Value.ToString().ToUpperInvariant()}: ");
}
if (!string.IsNullOrEmpty(chatUpdate.ContentUpdate))
{
Console.Write(chatUpdate.ContentUpdate);
}
}
}
Můžete vizualizovat, jak streamování generuje obsah:
StreamMessageAsync(client).GetAwaiter().GetResult();
Prozkoumání dalších parametrů podporovaných klientem odvozováním
Prozkoumejte další parametry, které můžete zadat v klientovi odvození. Úplný seznam všech podporovaných parametrů a jejich odpovídající dokumentace najdete v referenčních informacích k rozhraní API pro odvozování modelů Azure AI.
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
PresencePenalty = 0.1f,
FrequencyPenalty = 0.8f,
MaxTokens = 2048,
StopSequences = { "<|endoftext|>" },
Temperature = 0,
NucleusSamplingFactor = 1,
ResponseFormat = new ChatCompletionsResponseFormatText()
};
response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Pokud chcete předat parametr, který není v seznamu podporovaných parametrů, můžete ho předat podkladovému modelu pomocí dalších parametrů. Viz Předání dalších parametrů do modelu.
Vytváření výstupů JSON
Modely chatu Mistral Premium můžou vytvářet výstupy JSON. Nastavte response_format
na json_object
povolení režimu JSON a zaručte, že zpráva, kterou model vygeneruje, je platný JSON. Model také musíte instruovat, aby vygeneroval JSON sami prostřednictvím systémové nebo uživatelské zprávy. Obsah zprávy může být také částečně oříznut, pokud finish_reason="length"
, což znamená, že generování překročilo max_tokens
nebo že konverzace překročila maximální délku kontextu.
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage(
"You are a helpful assistant that always generate responses in JSON format, " +
"using. the following format: { \"answer\": \"response\" }."
),
new ChatRequestUserMessage(
"How many languages are in the world?"
)
},
ResponseFormat = new ChatCompletionsResponseFormatJSON()
};
response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Předání dalších parametrů do modelu
Rozhraní API pro odvozování modelů Azure AI umožňuje předat do modelu další parametry. Následující příklad kódu ukazuje, jak předat další parametr logprobs
modelu.
Než předáte do rozhraní API pro odvozování modelů Azure AI další parametry, ujistěte se, že váš model tyto dodatečné parametry podporuje. Při provedení požadavku do podkladového modelu se hlavička extra-parameters
předá modelu s hodnotou pass-through
. Tato hodnota říká koncovému bodu, aby předal do modelu další parametry. Použití dalších parametrů s modelem nezaručuje, že je model dokáže skutečně zpracovat. Přečtěte si dokumentaci k modelu, abyste pochopili, které další parametry jsou podporované.
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
AdditionalProperties = { { "logprobs", BinaryData.FromString("true") } },
};
response = client.Complete(requestOptions, extraParams: ExtraParameters.PassThrough);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Do modelů chatu Mistral Premium je možné předat následující dodatečné parametry:
Název | Popis | Typ |
---|---|---|
ignore_eos |
Zda se má ignorovat token EOS a pokračovat v generování tokenů po vygenerování tokenu EOS. | boolean |
safe_mode |
Zda chcete před všemi konverzacemi vložit bezpečnostní výzvu. | boolean |
Nouzový režim
Parametr podporují modely chatu safe_prompt
Mistral Premium . Pomocí následujícího systémového příkazového řádku můžete přepnout bezpečnou výzvu k předpřipravení zpráv:
Vždy pomáhá s opatrností, respektem a pravdou. Zareagujte co nejužším nástrojem, který je ještě bezpečný. Vyhněte se škodlivému, neetickému, dotčenému nebo negativnímu obsahu. Zajistěte, aby odpovědi podporovaly nestrannost a pozitivitu.
Rozhraní API pro odvozování modelů Azure AI umožňuje předat tento dodatečný parametr následujícím způsobem:
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("How many languages are in the world?")
},
AdditionalProperties = { { "safe_mode", BinaryData.FromString("true") } },
};
response = client.Complete(requestOptions, extraParams: ExtraParameters.PassThrough);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Použití nástrojů
Modely chatu Mistral Premium podporují použití nástrojů, které mohou být mimořádným zdrojem, když potřebujete přesměrovat konkrétní úlohy z jazykového modelu a místo toho spoléhat na deterministický systém nebo dokonce jiný jazykový model. Rozhraní API pro odvozování modelů Azure AI umožňuje definovat nástroje následujícím způsobem.
Následující příklad kódu vytvoří definici nástroje, která dokáže hledat z informací o letu ze dvou různých měst.
FunctionDefinition flightInfoFunction = new FunctionDefinition("getFlightInfo")
{
Description = "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
Parameters = BinaryData.FromObjectAsJson(new
{
Type = "object",
Properties = new
{
origin_city = new
{
Type = "string",
Description = "The name of the city where the flight originates"
},
destination_city = new
{
Type = "string",
Description = "The flight destination city"
}
}
},
new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
)
};
ChatCompletionsFunctionToolDefinition getFlightTool = new ChatCompletionsFunctionToolDefinition(flightInfoFunction);
V tomto příkladu výstup funkce spočívá v tom, že pro vybranou trasu nejsou k dispozici žádné lety, ale uživatel by měl zvážit pořízení vlaku.
static string getFlightInfo(string loc_origin, string loc_destination)
{
return JsonSerializer.Serialize(new
{
info = $"There are no flights available from {loc_origin} to {loc_destination}. You " +
"should take a train, specially if it helps to reduce CO2 emissions."
});
}
Vyzvat model k rezervaci letů pomocí této funkce:
var chatHistory = new List<ChatRequestMessage>(){
new ChatRequestSystemMessage(
"You are a helpful assistant that help users to find information about traveling, " +
"how to get to places and the different transportations options. You care about the" +
"environment and you always have that in mind when answering inqueries."
),
new ChatRequestUserMessage("When is the next flight from Miami to Seattle?")
};
requestOptions = new ChatCompletionsOptions(chatHistory);
requestOptions.Tools.Add(getFlightTool);
requestOptions.ToolChoice = ChatCompletionsToolChoice.Auto;
response = client.Complete(requestOptions);
Můžete zkontrolovat odpověď a zjistit, jestli je potřeba nástroj volat. Zkontrolujte důvod dokončení a zjistěte, jestli se má nástroj volat. Mějte na paměti, že lze určit více typů nástrojů. Tento příklad ukazuje nástroj typu function
.
var responseMenssage = response.Value.Choices[0].Message;
var toolsCall = responseMenssage.ToolCalls;
Console.WriteLine($"Finish reason: {response.Value.Choices[0].FinishReason}");
Console.WriteLine($"Tool call: {toolsCall[0].Id}");
Pokud chcete pokračovat, připojte tuto zprávu do historie chatu:
requestOptions.Messages.Add(new ChatRequestAssistantMessage(response.Value.Choices[0].Message));
Teď je čas volat příslušnou funkci pro zpracování volání nástroje. Následující fragment kódu iteruje přes všechna volání nástroje uvedená v odpovědi a volá odpovídající funkci s příslušnými parametry. Odpověď je také připojena k historii chatu.
foreach (ChatCompletionsToolCall tool in toolsCall)
{
if (tool is ChatCompletionsFunctionToolCall functionTool)
{
// Get the tool details:
string callId = functionTool.Id;
string toolName = functionTool.Name;
string toolArgumentsString = functionTool.Arguments;
Dictionary<string, object> toolArguments = JsonSerializer.Deserialize<Dictionary<string, object>>(toolArgumentsString);
// Here you have to call the function defined. In this particular example we use
// reflection to find the method we definied before in an static class called
// `ChatCompletionsExamples`. Using reflection allows us to call a function
// by string name. Notice that this is just done for demonstration purposes as a
// simple way to get the function callable from its string name. Then we can call
// it with the corresponding arguments.
var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
string toolResponse = (string)typeof(ChatCompletionsExamples).GetMethod(toolName, flags).Invoke(null, toolArguments.Values.Cast<object>().ToArray());
Console.WriteLine("->", toolResponse);
requestOptions.Messages.Add(new ChatRequestToolMessage(toolResponse, callId));
}
else
throw new Exception("Unsupported tool type");
}
Zobrazte odpověď z modelu:
response = client.Complete(requestOptions);
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu (Preview) detekuje a provádí akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
try
{
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are an AI assistant that helps people find information."),
new ChatRequestUserMessage(
"Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
),
},
};
response = client.Complete(requestOptions);
Console.WriteLine(response.Value.Choices[0].Message.Content);
}
catch (RequestFailedException ex)
{
if (ex.ErrorCode == "content_filter")
{
Console.WriteLine($"Your query has trigger Azure Content Safety: {ex.Message}");
}
else
{
throw;
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Mistral premium chat modely
Modely chatu Mistral Premium zahrnují následující modely:
Mistral Large je nejpokročilejší velký jazykový model (LLM) mistral AI. Dá se použít na libovolném úkolu založeném na jazyce, a to díky svým špičkovým možnostem a schopnostem znalostí.
Kromě toho mistral Large je:
- Specializované na RAG. Klíčové informace se neztratí uprostřed dlouhých kontextových oken (až 32 K tokenů).
- Silná v kódování. Generování, revize a komentáře kódu Podporuje všechny hlavní programovací jazyky.
- Vícejazyčné podle návrhu. Nejlepší výkon ve francouzštině, němčině, španělštině, italštině a angličtině. Podporují se desítky dalších jazyků.
- Zodpovědné dodržování předpisů umělé inteligence. Efektivní mantinely pečené v modelu a dodatečná bezpečnostní vrstva s možností safe_mode.
A atributy Mistral Large (2407) zahrnují:
- Vícejazyčné podle návrhu. Podporuje desítky jazyků, včetně angličtiny, francouzštiny, němčiny, španělštiny a italštiny.
- Znalost psaní kódu. Trénováno na více než 80 programovacích jazycích, včetně Pythonu, Javy, C, C++, JavaScriptu a bashe. Vytrénovali jsme také konkrétnější jazyky, jako je Swift a Fortran.
- Agent-orientovaný na agenta. Má funkce agentů s nativním voláním funkce a výstupem JSON.
- Upřesňující argumenty. Demonstruje nejmodernější matematické a logické funkce.
K dispozici jsou následující modely:
Tip
MistralAI navíc podporuje použití přizpůsobeného rozhraní API pro použití s konkrétními funkcemi modelu. Pokud chcete použít rozhraní API specifické pro poskytovatele modelů, podívejte se do dokumentace mistralAI nebo si projděte část příklady odvozování příkladů kódu.
Požadavky
Pokud chcete používat modely chatu Mistral Premium s Azure AI Studio, potřebujete následující požadavky:
Nasazení modelu
Nasazení do bezserverových rozhraní API
Modely chatu Mistral Premium je možné nasadit na koncové body bezserverového rozhraní API s průběžnými platbami. Tento druh nasazení poskytuje způsob, jak využívat modely jako rozhraní API bez jejich hostování ve vašem předplatném a současně udržovat podnikové zabezpečení a dodržování předpisů, které organizace potřebují.
Nasazení do koncového bodu bezserverového rozhraní API nevyžaduje kvótu z vašeho předplatného. Pokud váš model ještě není nasazený, nasaďte model jako bezserverové rozhraní API pomocí sady Azure AI Studio, sady Azure Machine Learning SDK pro Python, Azure CLI nebo šablon ARM.
Klient REST
Modely nasazené s rozhraním API pro odvozování modelů Azure AI je možné využívat pomocí libovolného klienta REST. Pokud chcete použít klienta REST, potřebujete následující požadavky:
- K vytvoření požadavků je potřeba předat adresu URL koncového bodu. Adresa URL koncového bodu má formulář
https://your-host-name.your-azure-region.inference.ai.azure.com
, ve kterémyour-host-name`` is your unique model deployment host name and
je oblast Azure, ve které je model nasazený (například eastus2). - V závislosti na nasazení modelu a předvolbě ověřování potřebujete klíč k ověření ve službě nebo přihlašovací údaje Microsoft Entra ID. Klíč je řetězec s 32 znaky.
Práce s dokončováním chatu
V této části použijete rozhraní API pro odvozování modelů Azure AI s modelem dokončování chatu pro chat.
Tip
Rozhraní API pro odvozování modelů Azure AI umožňuje komunikovat s většinou modelů nasazených v Azure AI Studiu se stejným kódem a strukturou, včetně modelů chatu Mistral Premium.
Vytvoření klienta pro využívání modelu
Nejprve vytvořte klienta, který bude model využívat. Následující kód používá adresu URL koncového bodu a klíč, které jsou uložené v proměnných prostředí.
Získání možností modelu
Trasa /info
vrátí informace o modelu, který je nasazený do koncového bodu. Informace o modelu vrátíte voláním následující metody:
GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
Odpověď je následující:
{
"model_name": "Mistral-Large",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
Vytvoření žádosti o dokončení chatu
Následující příklad ukazuje, jak můžete vytvořit základní požadavek na dokončení chatu do modelu.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Odpověď je následující, kde vidíte statistiku využití modelu:
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "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.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
usage
Zkontrolujte část v odpovědi a podívejte se na počet tokenů použitých pro výzvu, celkový počet vygenerovaných tokenů a počet tokenů použitých k dokončení.
Streamování obsahu
Ve výchozím nastavení rozhraní API pro dokončování vrátí celý vygenerovaný obsah v jedné odpovědi. Pokud generujete dlouhé dokončení, čekání na odpověď může trvat mnoho sekund.
Obsah můžete streamovat , abyste ho získali při generování. Streamování obsahu umožňuje zahájit zpracování dokončení, jakmile bude obsah k dispozici. Tento režim vrátí objekt, který streamuje odpověď zpět jako události odesílané pouze serverem. Extrahujte bloky dat z rozdílového pole, nikoli z pole zprávy.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"stream": true,
"temperature": 0,
"top_p": 1,
"max_tokens": 2048
}
Můžete vizualizovat, jak streamování generuje obsah:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
Poslední zpráva ve streamu je nastavená finish_reason
, což označuje důvod zastavení procesu generování.
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"delta": {
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Prozkoumání dalších parametrů podporovaných klientem odvozováním
Prozkoumejte další parametry, které můžete zadat v klientovi odvození. Úplný seznam všech podporovaných parametrů a jejich odpovídající dokumentace najdete v referenčních informacích k rozhraní API pro odvozování modelů Azure AI.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"presence_penalty": 0.1,
"frequency_penalty": 0.8,
"max_tokens": 2048,
"stop": ["<|endoftext|>"],
"temperature" :0,
"top_p": 1,
"response_format": { "type": "text" }
}
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "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.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Pokud chcete předat parametr, který není v seznamu podporovaných parametrů, můžete ho předat podkladovému modelu pomocí dalších parametrů. Viz Předání dalších parametrů do modelu.
Vytváření výstupů JSON
Modely chatu Mistral Premium můžou vytvářet výstupy JSON. Nastavte response_format
na json_object
povolení režimu JSON a zaručte, že zpráva, kterou model vygeneruje, je platný JSON. Model také musíte instruovat, aby vygeneroval JSON sami prostřednictvím systémové nebo uživatelské zprávy. Obsah zprávy může být také částečně oříznut, pokud finish_reason="length"
, což znamená, že generování překročilo max_tokens
nebo že konverzace překročila maximální délku kontextu.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that always generate responses in JSON format, using the following format: { \"answer\": \"response\" }"
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"response_format": { "type": "json_object" }
}
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718727522,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"answer\": \"There are approximately 7,117 living languages in the world today, according to the latest estimates. However, this number can vary as some languages become extinct and others are newly discovered or classified.\"}",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 39,
"total_tokens": 87,
"completion_tokens": 48
}
}
Předání dalších parametrů do modelu
Rozhraní API pro odvozování modelů Azure AI umožňuje předat do modelu další parametry. Následující příklad kódu ukazuje, jak předat další parametr logprobs
modelu.
Než předáte do rozhraní API pro odvozování modelů Azure AI další parametry, ujistěte se, že váš model tyto dodatečné parametry podporuje. Při provedení požadavku do podkladového modelu se hlavička extra-parameters
předá modelu s hodnotou pass-through
. Tato hodnota říká koncovému bodu, aby předal do modelu další parametry. Použití dalších parametrů s modelem nezaručuje, že je model dokáže skutečně zpracovat. Přečtěte si dokumentaci k modelu, abyste pochopili, které další parametry jsou podporované.
POST /chat/completions HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"logprobs": true
}
Do modelů chatu Mistral Premium je možné předat následující dodatečné parametry:
Název | Popis | Typ |
---|---|---|
ignore_eos |
Zda se má ignorovat token EOS a pokračovat v generování tokenů po vygenerování tokenu EOS. | boolean |
safe_mode |
Zda chcete před všemi konverzacemi vložit bezpečnostní výzvu. | boolean |
Nouzový režim
Parametr podporují modely chatu safe_prompt
Mistral Premium . Pomocí následujícího systémového příkazového řádku můžete přepnout bezpečnou výzvu k předpřipravení zpráv:
Vždy pomáhá s opatrností, respektem a pravdou. Zareagujte co nejužším nástrojem, který je ještě bezpečný. Vyhněte se škodlivému, neetickému, dotčenému nebo negativnímu obsahu. Zajistěte, aby odpovědi podporovaly nestrannost a pozitivitu.
Rozhraní API pro odvozování modelů Azure AI umožňuje předat tento dodatečný parametr následujícím způsobem:
POST /chat/completions HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"safemode": true
}
Použití nástrojů
Modely chatu Mistral Premium podporují použití nástrojů, které mohou být mimořádným zdrojem, když potřebujete přesměrovat konkrétní úlohy z jazykového modelu a místo toho spoléhat na deterministický systém nebo dokonce jiný jazykový model. Rozhraní API pro odvozování modelů Azure AI umožňuje definovat nástroje následujícím způsobem.
Následující příklad kódu vytvoří definici nástroje, která dokáže hledat z informací o letu ze dvou různých měst.
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters": {
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": [
"origin_city",
"destination_city"
]
}
}
}
V tomto příkladu výstup funkce spočívá v tom, že pro vybranou trasu nejsou k dispozici žádné lety, ale uživatel by měl zvážit pořízení vlaku.
Vyzvat model k rezervaci letů pomocí této funkce:
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that help users to find information about traveling, how to get to places and the different transportations options. You care about the environment and you always have that in mind when answering inqueries"
},
{
"role": "user",
"content": "When is the next flight from Miami to Seattle?"
}
],
"tool_choice": "auto",
"tools": [
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters": {
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": [
"origin_city",
"destination_city"
]
}
}
}
]
}
Můžete zkontrolovat odpověď a zjistit, jestli je potřeba nástroj volat. Zkontrolujte důvod dokončení a zjistěte, jestli se má nástroj volat. Mějte na paměti, že lze určit více typů nástrojů. Tento příklad ukazuje nástroj typu function
.
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726007,
"model": "Mistral-Large",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "abc0dF1gh",
"type": "function",
"function": {
"name": "get_flight_info",
"arguments": "{\"origin_city\": \"Miami\", \"destination_city\": \"Seattle\"}",
"call_id": null
}
}
]
},
"finish_reason": "tool_calls",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 190,
"total_tokens": 226,
"completion_tokens": 36
}
}
Pokud chcete pokračovat, připojte tuto zprávu do historie chatu:
Teď je čas volat příslušnou funkci pro zpracování volání nástroje. Následující fragment kódu iteruje přes všechna volání nástroje uvedená v odpovědi a volá odpovídající funkci s příslušnými parametry. Odpověď je také připojena k historii chatu.
Zobrazte odpověď z modelu:
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that help users to find information about traveling, how to get to places and the different transportations options. You care about the environment and you always have that in mind when answering inqueries"
},
{
"role": "user",
"content": "When is the next flight from Miami to Seattle?"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "abc0DeFgH",
"type": "function",
"function": {
"name": "get_flight_info",
"arguments": "{\"origin_city\": \"Miami\", \"destination_city\": \"Seattle\"}",
"call_id": null
}
}
]
},
{
"role": "tool",
"content": "{ \"info\": \"There are no flights available from Miami to Seattle. You should take a train, specially if it helps to reduce CO2 emissions.\" }",
"tool_call_id": "abc0DeFgH"
}
],
"tool_choice": "auto",
"tools": [
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters":{
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": ["origin_city", "destination_city"]
}
}
}
]
}
Použití bezpečnosti obsahu
Rozhraní API pro odvozování modelů Azure AI podporuje bezpečnost obsahu Azure AI. Když používáte nasazení se zapnutou bezpečností obsahu Azure AI, vstupy a výstupy procházejí sadou klasifikačních modelů určených k detekci a zabránění výstupu škodlivého obsahu. Systém filtrování obsahu zjistí a provede akce s konkrétními kategoriemi potenciálně škodlivého obsahu ve vstupních výzev i dokončení výstupu.
Následující příklad ukazuje, jak zpracovat události, když model zjistí škodlivý obsah ve vstupní výzvě a bezpečnost obsahu je povolen.
{
"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."
}
]
}
{
"error": {
"message": "The response was filtered due to the prompt triggering Microsoft's content management policy. Please modify your prompt and retry.",
"type": null,
"param": "prompt",
"code": "content_filter",
"status": 400
}
}
Tip
Další informace o tom, jak nakonfigurovat a řídit nastavení zabezpečení obsahu Azure AI, najdete v dokumentaci k zabezpečení obsahu Azure AI.
Další příklady odvození
Další příklady použití modelů Mistral najdete v následujících příkladech a kurzech:
Popis | Jazyk | Vzorek |
---|---|---|
Žádost CURL | Bash | Odkaz |
Balíček odvozování Azure AI pro JavaScript | JavaScript | Odkaz |
Balíček odvozování Azure AI pro Python | Python | Odkaz |
Webové požadavky Pythonu | Python | Odkaz |
OpenAI SDK (experimentální) | Python | Odkaz |
LangChain | Python | Odkaz |
Mistral AI | Python | Odkaz |
LiteLLM | Python | Odkaz |
Důležité informace o nákladech a kvótách pro modely Mistral nasazené jako koncové body bezserverového rozhraní API
Kvóta se spravuje podle nasazení. Každé nasazení má limit rychlosti 200 000 tokenů za minutu a 1 000 požadavků rozhraní API za minutu. V současné době ale omezujeme jedno nasazení na model na jeden projekt. Pokud aktuální limity sazeb pro vaše scénáře nestačí, obraťte se na podporu Microsoft Azure.
Modely Mistral nasazené jako bezserverové rozhraní API nabízí MistralAI prostřednictvím Azure Marketplace a integrované s Azure AI Studio pro použití. Ceny na Azure Marketplace najdete při nasazení modelu.
Pokaždé, když si projekt předplatí danou nabídku z tržiště Azure Marketplace, vytvoří se nový prostředek pro sledování nákladů spojených s jeho spotřebou. Stejný zdroj se používá ke sledování nákladů spojených s odvozováním; Pro nezávislé sledování jednotlivých scénářů je však k dispozici více měřičů.
Další informace o sledování nákladů naleznete v části Sledování nákladů na modely nabízené prostřednictvím služby Azure Marketplace.
Související obsah
- Rozhraní API pro odvozování modelů Azure AI
- Nasazení modelů jako bezserverových rozhraní API
- Využívání koncových bodů rozhraní API bez serveru z jiného projektu nebo centra Azure AI Studio
- Dostupnost oblastí pro modely v koncových bodech bezserverového rozhraní API
- Plánování a správa nákladů (marketplace)