Verwenden des Mistral Nemo-Chatmodells
Wichtig
Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.
In diesem Artikel erfahren Sie mehr über das Mistral Nemo-Chatmodell und dessen Verwendung. Mistral AI bietet zwei Kategorien von Modellen in KI Studio. Premiummodelle, einschließlich Mistral Large und Mistral Small, verfügbar als serverlose APIs mit tokenbasierter Abrechnung und nutzungsbasierter Bezahlung. Offene Modelle wie Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 und Mistral-7B-v01, verfügbar auch für den Download und die Ausführung auf selbst gehosteten verwalteten Endpunkten.
Wichtig
Modelle, die sich in der Vorschau befinden, werden auf ihren Modellkarten im Modellkatalog als Vorschau gekennzeichnet.
Mistral Nemo-Chatmodell
Mistral Nemo ist ein innovatives Sprachmodell (Large Language Model, LLM) mit modernsten Schlussfolgerungsfunktionen, allgemeinem Weltwissen und Codierungsfunktionen innerhalb seiner Größenkategorie.
Mistral Nemo ist ein 12B-Modell und damit ein leistungsstarker Ersatz für jedes System, das das Mistral 7B-Modell verwendet, das es ersetzt. Es unterstützt eine Kontextlänge von 128K, akzeptiert nur Texteingaben und generiert Textausgaben.
Darüber hinaus zeichnet sich Mistral Nemo durch folgende Merkmale aus:
- Gemeinsam mit Nvidia entwickelt. Diese Zusammenarbeit hat zu einem leistungsfähigen 12B-Modell geführt, das die Grenzen von Language Understanding und Sprachgenerierung verschiebt.
- Mehrsprachig. Mistral Nemo ist mit einem Tokenizer namens Tekken ausgestattet, der für mehrsprachige Anwendungen konzipiert ist. Er unterstützt mehr als 100 Sprachen, z. B. Englisch, Französisch, Deutsch und Spanisch. Tekken ist beim Komprimieren von Text für ca. 85 % aller Sprachen effizienter als der Llama 3-Tokenizer und bietet erhebliche Verbesserungen in Malayalam, Hindi, Arabisch und weit verbreiteten europäischen Sprachen.
- Agent-zentriert. Mistral Nemo verfügt über Agent-Funktionen der obersten Ebene, einschließlich nativer Funktionsaufrufe und JSON-Ausgaben.
- Fortgeschrittene Schlussfolgerungen. Mistral Nemo bietet modernste mathematische Funktionen und Schlussfolgerungsfunktionen in seiner Größenkategorie.
Weitere Informationen zu den Modellen finden Sie auf der jeweiligen Modellkarte:
Tipp
Darüber hinaus unterstützt MistralAI die Verwendung einer maßgeschneiderten API für die Nutzung mit bestimmten Funktionen des Modells. Wenn Sie die modellanbieterspezifische API verwenden möchten, lesen Sie die MistralAI-Dokumentation, oder sehen Sie sich die Codebeispiele im Abschnitt zu Rückschlussbeispielen an.
Voraussetzungen
Um das Mistral Nemo-Chatmodell mit Azure KI Studio zu verwenden, sind folgende Voraussetzungen zu erfüllen:
Modellimplementierung
Bereitstellung als serverlose APIs
Das Mistral Nemo-Chatmodell kann für serverlose API-Endpunkte mit nutzungsbasierter Abrechnung bereitgestellt werden. Diese Art von Bereitstellung bietet eine Möglichkeit, Modelle als API zu nutzen, ohne sie in Ihrem Abonnement zu hosten, während die Unternehmenssicherheit und Compliance beibehalten werden, die Organisationen benötigen.
Zur Bereitstellung für einen serverlosen API-Endpunkt ist kein Kontingent aus Ihrem Abonnement erforderlich. Wenn Ihr Modell noch nicht bereitgestellt wurde, verwenden Sie Azure KI Studio, das Azure Machine Learning SDK für Python, die Azure CLI oder ARM-Vorlagen, um das Modell als serverlose API bereitzustellen.
Installiertes Inferenzpaket
Sie können Vorhersagen aus diesem Modell nutzen, indem Sie das Paket azure-ai-inference
mit Python verwenden. Zum Installieren dieses Pakets müssen folgende Voraussetzungen erfüllt sein:
- Installation von Python 3.8 oder höher (einschließlich pip).
- Endpunkt-URL. Um die Clientbibliothek zu erstellen, müssen Sie die Endpunkt-URL übergeben. Die Endpunkt-URL hat das Format
https://your-host-name.your-azure-region.inference.ai.azure.com
, wobeiyour-host-name
Ihr eindeutiger Hostname für die Modellimplementierung undyour-azure-region
die Azure-Region ist, in der das Modell bereitgestellt wird (z. B. „eastus2“). - Je nach Modellimplementierung und bevorzugter Authentifizierungsmethode benötigen Sie einen Schlüssel, um sich bei dem Dienst zu authentifizieren, oder Microsoft Entra ID-Anmeldeinformationen. Der Schlüssel ist eine Zeichenfolge aus 32 Zeichen.
Sobald diese Voraussetzungen erfüllt sind, installieren Sie das Azure KI-Inferenzpaket mit dem folgenden Befehl:
pip install azure-ai-inference
Lesen Sie mehr über das Azure KI-Inferenzpaket und die zugehörige Referenz.
Arbeiten mit Chatvervollständigungen
In diesem Abschnitt verwenden Sie die Azure KI-Modellinferenz-API mit einem Chatvervollständigungsmodell für Chats.
Tipp
Über die Azure KI-Modellrückschluss-API können Sie mit den meisten in Azure KI Studio bereitgestellten Modellen mit demselben Code und derselben Struktur kommunizieren, einschließlich des Mistral Nemo-Chatmodells.
Erstellen eines Clients zum Nutzen des Modells
Erstellen Sie als Erstes einen Client zum Nutzen des Modells. Der folgende Code verwendet eine Endpunkt-URL und einen Schlüssel, die in Umgebungsvariablen gespeichert sind.
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"]),
)
Abrufen der Funktionen des Modells
Die /info
-Route gibt Informationen zu dem Modell zurück, das für den Endpunkt bereitgestellt wird. Geben Sie die Informationen des Modells zurück, indem Sie die folgende Methode aufrufen:
model_info = client.get_model_info()
Die Antwort lautet wie folgt:
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-Nemo
Model type: chat-completions
Model provider name: MistralAI
Erstellen einer Chatvervollständigungsanforderung
Das folgende Beispiel zeigt, wie Sie eine einfache Chatvervollständigungsanforderung an das Modell erstellen können.
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?"),
],
)
Die Antwort lautet wie folgt, wobei Sie die Nutzungsstatistiken des Modells sehen können:
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-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Überprüfen Sie den Abschnitt usage
in der Antwort, um die Anzahl der Token für den Prompt, die Gesamtzahl der generierten Token und die Anzahl der Token für den Abschluss zu sehen.
Streamen von Inhalten
Standardmäßig gibt die Vervollständigungs-API den gesamten generierten Inhalt in einer einzigen Antwort zurück. Wenn Sie lange Vervollständigungen generieren, kann das Warten auf die Antwort viele Sekunden dauern.
Sie können die Inhalte Streamen, um sie abzurufen, während sie generiert werden. Durch das Streamen von Inhalten können Sie mit der Verarbeitung der Vervollständigung beginnen, sobald Inhalte verfügbar sind. Dieser Modus gibt ein Objekt zurück, das die Antwort als vom Server gesendete Ereignisse (nur Daten) zurückgibt. Extrahieren Sie Blöcke aus dem Deltafeld und nicht aus dem Nachrichtenfeld.
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,
)
Um Vervollständigungen zu streamen, legen Sie stream=True
fest, wenn Sie das Modell aufrufen.
Um die Ausgabe zu visualisieren, definieren Sie eine Hilfsfunktion zum Drucken des Datenstroms.
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="")
Sie können visualisieren, wie beim Streaming Inhalte generiert werden:
print_stream(result)
Erkunden weiterer Parameter, die vom Inferenzclient unterstützt werden
Erkunden Sie weitere Parameter, die Sie im Inferenzclient angeben können. Eine vollständige Liste aller unterstützten Parameter und der entsprechenden Dokumentation finden Sie unter Referenz zur Azure KI-Modellrückschluss-API.
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() },
)
Wenn Sie einen Parameter übergeben möchten, der nicht in der Liste der unterstützten Parameter enthalten ist, können Sie ihn mithilfe zusätzlicher Parameter an das zugrunde liegende Modell übergeben. Weitere Informationen finden Sie unter Übergeben zusätzlicher Parameter an das Modell.
Erstellen von JSON-Ausgaben
Das Mistral Nemo-Chatmodell kann JSON-Ausgaben erstellen. Legen Sie response_format
auf json_object
fest, um den JSON-Modus zu aktivieren und zu gewährleisten, dass die vom Modell generierte Nachricht gültiger JSON-Code ist. Sie müssen das Modell auch selbst anweisen, JSON-Code über eine System- oder Benutzernachricht zu erstellen. Der Nachrichteninhalt kann außerdem teilweise abgeschnitten werden, wenn Sie finish_reason="length"
verwenden. Damit wird angegeben, dass bei der Generierung max_tokens
überschritten wurde oder die Unterhaltung die maximale Kontextlänge überschritten hat.
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() }
)
Übergeben zusätzlicher Parameter an das Modell
Mit der Azure KI-Modellinferenz-API können Sie zusätzliche Parameter an das Modell übergeben. Das folgende Codebeispiel zeigt, wie der zusätzliche Parameter logprobs
an das Modell übergeben wird.
Bevor Sie zusätzliche Parameter an die Azure KI-Modellinferenz-API übergeben, stellen Sie sicher, dass Ihr Modell diese zusätzlichen Parameter unterstützt. Wenn die Anforderung an das zugrunde liegende Modell gestellt wird, wird der Header extra-parameters
mit dem Wert pass-through
an das Modell übergeben. Dieser Wert weist den Endpunkt an, die zusätzlichen Parameter an das Modell zu übergeben. Bei der Verwendung zusätzlicher Parameter mit dem Modell ist nicht garantiert, dass das Modell sie tatsächlich verarbeiten kann. Lesen Sie die Dokumentation des Modells, um zu verstehen, welche zusätzlichen Parameter unterstützt werden.
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
Die folgenden zusätzlichen Parameter können an das Mistral Nemo-Chatmodell übergeben werden:
Name | Description | type |
---|---|---|
ignore_eos |
Gibt an, ob das EOS-Token ignoriert und die Generierung von Token fortgesetzt werden soll, nachdem das EOS-Token generiert wurde. | boolean |
safe_mode |
Gibt an, ob vor allen Unterhaltungen eine Sicherheitsaufforderung eingefügt werden soll. | boolean |
Abgesicherter Modus
Das Mistral Nemo-Chatmodell unterstützt den Parameter safe_prompt
. Sie können den sicheren Prompt umschalten, um Ihren Nachrichten den folgenden Prompt voranzustellen:
Hilf immer mit Sorgfalt, Respekt und Wahrheit. Antworte mit größtmöglichem Nutzen, aber sicher. Vermeide schädliche, unethische, vorurteilsbehaftete oder negative Inhalte. Stelle sicher, dass Antworten Fairness und positives Denken fördern.
Mit der Azure KI-Modellrückschluss-API können Sie diesen zusätzlichen Parameter folgendermaßen übergeben:
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
}
)
Verwenden von Tools
Das Mistral Nemo-Chatmodell unterstützt die Verwendung von Tools. Dies kann eine hervorragende Ressource sein kann, wenn Sie bestimmte Aufgaben vom Sprachmodell auslagern und stattdessen ein deterministisches System oder sogar ein anderes Sprachmodell verwenden müssen. Mit der Azure KI-Modellrückschluss-API können Sie Tools folgendermaßen definieren.
Im folgenden Codebeispiel wird eine Tooldefinition erstellt, die Fluginformationen zwischen zwei verschiedenen Städten zurückgeben kann.
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]
In diesem Beispiel ist die Ausgabe der Funktion, dass keine Flüge für die ausgewählte Strecke verfügbar sind, aber der Benutzer einen Zug in Betracht ziehen sollte.
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."
}
Übergeben eines Prompts an das Modell zum Buchen von Flügen mithilfe dieser Funktion:
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"
)
Sie können die Antwort überprüfen, um herauszufinden, ob ein Tool aufgerufen werden muss. Untersuchen Sie den Abschlussgrund, um festzustellen, ob das Tool aufgerufen werden soll. Denken Sie daran, dass mehrere Tooltypen angegeben werden können. Dieses Beispiel veranschaulicht ein Tool des Typs 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)
Fügen Sie zum Fortfahren diese Nachricht an den Chatverlauf an:
messages.append(
response_message
)
Nun ist es an der Zeit, die geeignete Funktion für den Toolaufruf aufzurufen. Der folgende Codeschnipsel durchläuft alle in der Antwort angegebenen Toolaufrufe und ruft die entsprechende Funktion mit den geeigneten Parametern auf. Die Antwort wird auch an den Chatverlauf angefügt.
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)
)
)
Anzeigen der Antwort des Modells:
response = client.complete(
messages=messages,
tools=tools,
)
Anwenden von Inhaltssicherheit
Die Azure KI-Modellinferenz-API unterstützt Azure KI Inhaltssicherheit. Wenn Sie Bereitstellungen mit aktivierter Azure KI Inhaltssicherheit verwenden, durchlaufen Eingaben und Ausgaben eine Gruppe von Klassifizierungsmodellen, die darauf abzielen, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern. Das System zur Inhaltsfilterung (Vorschau) erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeprompts als auch in Ausgabevervollständigungen und ergreift entsprechende Maßnahmen.
Das folgende Beispiel zeigt, wie Ereignisse behandelt werden, wenn das Modell schädliche Inhalte im Prompt erkennt und die Inhaltssicherheit aktiviert ist.
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
Tipp
Weitere Informationen zum Konfigurieren und Steuern von Einstellungen der Azure KI-Inhaltssicherheit finden Sie in der Dokumentation zu Azure KI-Inhaltssicherheit.
Mistral Nemo-Chatmodell
Mistral Nemo ist ein innovatives Sprachmodell (Large Language Model, LLM) mit modernsten Schlussfolgerungsfunktionen, allgemeinem Weltwissen und Codierungsfunktionen innerhalb seiner Größenkategorie.
Mistral Nemo ist ein 12B-Modell und damit ein leistungsstarker Ersatz für jedes System, das das Mistral 7B-Modell verwendet, das es ersetzt. Es unterstützt eine Kontextlänge von 128K, akzeptiert nur Texteingaben und generiert Textausgaben.
Darüber hinaus zeichnet sich Mistral Nemo durch folgende Merkmale aus:
- Gemeinsam mit Nvidia entwickelt. Diese Zusammenarbeit hat zu einem leistungsfähigen 12B-Modell geführt, das die Grenzen von Language Understanding und Sprachgenerierung verschiebt.
- Mehrsprachig. Mistral Nemo ist mit einem Tokenizer namens Tekken ausgestattet, der für mehrsprachige Anwendungen konzipiert ist. Er unterstützt mehr als 100 Sprachen, z. B. Englisch, Französisch, Deutsch und Spanisch. Tekken ist beim Komprimieren von Text für ca. 85 % aller Sprachen effizienter als der Llama 3-Tokenizer und bietet erhebliche Verbesserungen in Malayalam, Hindi, Arabisch und weit verbreiteten europäischen Sprachen.
- Agent-zentriert. Mistral Nemo verfügt über Agent-Funktionen der obersten Ebene, einschließlich nativer Funktionsaufrufe und JSON-Ausgaben.
- Fortgeschrittene Schlussfolgerungen. Mistral Nemo bietet modernste mathematische Funktionen und Schlussfolgerungsfunktionen in seiner Größenkategorie.
Weitere Informationen zu den Modellen finden Sie auf der jeweiligen Modellkarte:
Tipp
Darüber hinaus unterstützt MistralAI die Verwendung einer maßgeschneiderten API für die Nutzung mit bestimmten Funktionen des Modells. Wenn Sie die modellanbieterspezifische API verwenden möchten, lesen Sie die MistralAI-Dokumentation, oder sehen Sie sich die Codebeispiele im Abschnitt zu Rückschlussbeispielen an.
Voraussetzungen
Um das Mistral Nemo-Chatmodell mit Azure KI Studio zu verwenden, sind folgende Voraussetzungen zu erfüllen:
Modellimplementierung
Bereitstellung als serverlose APIs
Das Mistral Nemo-Chatmodell kann für serverlose API-Endpunkte mit nutzungsbasierter Abrechnung bereitgestellt werden. Diese Art von Bereitstellung bietet eine Möglichkeit, Modelle als API zu nutzen, ohne sie in Ihrem Abonnement zu hosten, während die Unternehmenssicherheit und Compliance beibehalten werden, die Organisationen benötigen.
Zur Bereitstellung für einen serverlosen API-Endpunkt ist kein Kontingent aus Ihrem Abonnement erforderlich. Wenn Ihr Modell noch nicht bereitgestellt wurde, verwenden Sie Azure KI Studio, das Azure Machine Learning SDK für Python, die Azure CLI oder ARM-Vorlagen, um das Modell als serverlose API bereitzustellen.
Installiertes Inferenzpaket
Sie können Vorhersagen aus diesem Modell nutzen, indem Sie das Paket @azure-rest/ai-inference
von npm
verwenden. Zum Installieren dieses Pakets müssen folgende Voraussetzungen erfüllt sein:
- LTS-Versionen von
Node.js
mitnpm
. - Endpunkt-URL. Um die Clientbibliothek zu erstellen, müssen Sie die Endpunkt-URL übergeben. Die Endpunkt-URL hat das Format
https://your-host-name.your-azure-region.inference.ai.azure.com
, wobeiyour-host-name
Ihr eindeutiger Hostname für die Modellimplementierung undyour-azure-region
die Azure-Region ist, in der das Modell bereitgestellt wird (z. B. „eastus2“). - Je nach Modellimplementierung und bevorzugter Authentifizierungsmethode benötigen Sie einen Schlüssel, um sich bei dem Dienst zu authentifizieren, oder Microsoft Entra ID-Anmeldeinformationen. Der Schlüssel ist eine Zeichenfolge aus 32 Zeichen.
Sobald diese Voraussetzungen erfüllt sind, installieren Sie die Azure-Inferenzbibliothek für JavaScript mit dem folgenden Befehl:
npm install @azure-rest/ai-inference
Arbeiten mit Chatvervollständigungen
In diesem Abschnitt verwenden Sie die Azure KI-Modellinferenz-API mit einem Chatvervollständigungsmodell für Chats.
Tipp
Über die Azure KI-Modellrückschluss-API können Sie mit den meisten in Azure KI Studio bereitgestellten Modellen mit demselben Code und derselben Struktur kommunizieren, einschließlich des Mistral Nemo-Chatmodells.
Erstellen eines Clients zum Nutzen des Modells
Erstellen Sie als Erstes einen Client zum Nutzen des Modells. Der folgende Code verwendet eine Endpunkt-URL und einen Schlüssel, die in Umgebungsvariablen gespeichert sind.
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)
);
Abrufen der Funktionen des Modells
Die /info
-Route gibt Informationen zu dem Modell zurück, das für den Endpunkt bereitgestellt wird. Geben Sie die Informationen des Modells zurück, indem Sie die folgende Methode aufrufen:
var model_info = await client.path("/info").get()
Die Antwort lautet wie folgt:
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-Nemo
Model type: chat-completions
Model provider name: MistralAI
Erstellen einer Chatvervollständigungsanforderung
Das folgende Beispiel zeigt, wie Sie eine einfache Chatvervollständigungsanforderung an das Modell erstellen können.
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,
}
});
Die Antwort lautet wie folgt, wobei Sie die Nutzungsstatistiken des Modells sehen können:
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-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Überprüfen Sie den Abschnitt usage
in der Antwort, um die Anzahl der Token für den Prompt, die Gesamtzahl der generierten Token und die Anzahl der Token für den Abschluss zu sehen.
Streamen von Inhalten
Standardmäßig gibt die Vervollständigungs-API den gesamten generierten Inhalt in einer einzigen Antwort zurück. Wenn Sie lange Vervollständigungen generieren, kann das Warten auf die Antwort viele Sekunden dauern.
Sie können die Inhalte Streamen, um sie abzurufen, während sie generiert werden. Durch das Streamen von Inhalten können Sie mit der Verarbeitung der Vervollständigung beginnen, sobald Inhalte verfügbar sind. Dieser Modus gibt ein Objekt zurück, das die Antwort als vom Server gesendete Ereignisse (nur Daten) zurückgibt. Extrahieren Sie Blöcke aus dem Deltafeld und nicht aus dem Nachrichtenfeld.
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();
Um Vervollständigungen zu streamen, verwenden Sie .asNodeStream()
, wenn Sie das Modell aufrufen.
Sie können visualisieren, wie beim Streaming Inhalte generiert werden:
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 ?? "");
}
}
Erkunden weiterer Parameter, die vom Inferenzclient unterstützt werden
Erkunden Sie weitere Parameter, die Sie im Inferenzclient angeben können. Eine vollständige Liste aller unterstützten Parameter und der entsprechenden Dokumentation finden Sie unter Referenz zur Azure KI-Modellrückschluss-API.
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" },
}
});
Wenn Sie einen Parameter übergeben möchten, der nicht in der Liste der unterstützten Parameter enthalten ist, können Sie ihn mithilfe zusätzlicher Parameter an das zugrunde liegende Modell übergeben. Weitere Informationen finden Sie unter Übergeben zusätzlicher Parameter an das Modell.
Erstellen von JSON-Ausgaben
Das Mistral Nemo-Chatmodell kann JSON-Ausgaben erstellen. Legen Sie response_format
auf json_object
fest, um den JSON-Modus zu aktivieren und zu gewährleisten, dass die vom Modell generierte Nachricht gültiger JSON-Code ist. Sie müssen das Modell auch selbst anweisen, JSON-Code über eine System- oder Benutzernachricht zu erstellen. Der Nachrichteninhalt kann außerdem teilweise abgeschnitten werden, wenn Sie finish_reason="length"
verwenden. Damit wird angegeben, dass bei der Generierung max_tokens
überschritten wurde oder die Unterhaltung die maximale Kontextlänge überschritten hat.
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" }
}
});
Übergeben zusätzlicher Parameter an das Modell
Mit der Azure KI-Modellinferenz-API können Sie zusätzliche Parameter an das Modell übergeben. Das folgende Codebeispiel zeigt, wie der zusätzliche Parameter logprobs
an das Modell übergeben wird.
Bevor Sie zusätzliche Parameter an die Azure KI-Modellinferenz-API übergeben, stellen Sie sicher, dass Ihr Modell diese zusätzlichen Parameter unterstützt. Wenn die Anforderung an das zugrunde liegende Modell gestellt wird, wird der Header extra-parameters
mit dem Wert pass-through
an das Modell übergeben. Dieser Wert weist den Endpunkt an, die zusätzlichen Parameter an das Modell zu übergeben. Bei der Verwendung zusätzlicher Parameter mit dem Modell ist nicht garantiert, dass das Modell sie tatsächlich verarbeiten kann. Lesen Sie die Dokumentation des Modells, um zu verstehen, welche zusätzlichen Parameter unterstützt werden.
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
}
});
Die folgenden zusätzlichen Parameter können an das Mistral Nemo-Chatmodell übergeben werden:
Name | Description | type |
---|---|---|
ignore_eos |
Gibt an, ob das EOS-Token ignoriert und die Generierung von Token fortgesetzt werden soll, nachdem das EOS-Token generiert wurde. | boolean |
safe_mode |
Gibt an, ob vor allen Unterhaltungen eine Sicherheitsaufforderung eingefügt werden soll. | boolean |
Abgesicherter Modus
Das Mistral Nemo-Chatmodell unterstützt den Parameter safe_prompt
. Sie können den sicheren Prompt umschalten, um Ihren Nachrichten den folgenden Prompt voranzustellen:
Hilf immer mit Sorgfalt, Respekt und Wahrheit. Antworte mit größtmöglichem Nutzen, aber sicher. Vermeide schädliche, unethische, vorurteilsbehaftete oder negative Inhalte. Stelle sicher, dass Antworten Fairness und positives Denken fördern.
Mit der Azure KI-Modellrückschluss-API können Sie diesen zusätzlichen Parameter folgendermaßen übergeben:
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
}
});
Verwenden von Tools
Das Mistral Nemo-Chatmodell unterstützt die Verwendung von Tools. Dies kann eine hervorragende Ressource sein kann, wenn Sie bestimmte Aufgaben vom Sprachmodell auslagern und stattdessen ein deterministisches System oder sogar ein anderes Sprachmodell verwenden müssen. Mit der Azure KI-Modellrückschluss-API können Sie Tools folgendermaßen definieren.
Im folgenden Codebeispiel wird eine Tooldefinition erstellt, die Fluginformationen zwischen zwei verschiedenen Städten zurückgeben kann.
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,
},
];
In diesem Beispiel ist die Ausgabe der Funktion, dass keine Flüge für die ausgewählte Strecke verfügbar sind, aber der Benutzer einen Zug in Betracht ziehen sollte.
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."
}
}
Übergeben eines Prompts an das Modell zum Buchen von Flügen mithilfe dieser Funktion:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
tool_choice: "auto"
}
});
Sie können die Antwort überprüfen, um herauszufinden, ob ein Tool aufgerufen werden muss. Untersuchen Sie den Abschlussgrund, um festzustellen, ob das Tool aufgerufen werden soll. Denken Sie daran, dass mehrere Tooltypen angegeben werden können. Dieses Beispiel veranschaulicht ein Tool des Typs 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);
Fügen Sie zum Fortfahren diese Nachricht an den Chatverlauf an:
messages.push(response_message);
Nun ist es an der Zeit, die geeignete Funktion für den Toolaufruf aufzurufen. Der folgende Codeschnipsel durchläuft alle in der Antwort angegebenen Toolaufrufe und ruft die entsprechende Funktion mit den geeigneten Parametern auf. Die Antwort wird auch an den Chatverlauf angefügt.
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
}
);
}
Anzeigen der Antwort des Modells:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
}
});
Anwenden von Inhaltssicherheit
Die Azure KI-Modellinferenz-API unterstützt Azure KI Inhaltssicherheit. Wenn Sie Bereitstellungen mit aktivierter Azure KI Inhaltssicherheit verwenden, durchlaufen Eingaben und Ausgaben eine Gruppe von Klassifizierungsmodellen, die darauf abzielen, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern. Das System zur Inhaltsfilterung (Vorschau) erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeprompts als auch in Ausgabevervollständigungen und ergreift entsprechende Maßnahmen.
Das folgende Beispiel zeigt, wie Ereignisse behandelt werden, wenn das Modell schädliche Inhalte im Prompt erkennt und die Inhaltssicherheit aktiviert ist.
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;
}
}
}
Tipp
Weitere Informationen zum Konfigurieren und Steuern von Einstellungen der Azure KI-Inhaltssicherheit finden Sie in der Dokumentation zu Azure KI-Inhaltssicherheit.
Mistral Nemo-Chatmodell
Mistral Nemo ist ein innovatives Sprachmodell (Large Language Model, LLM) mit modernsten Schlussfolgerungsfunktionen, allgemeinem Weltwissen und Codierungsfunktionen innerhalb seiner Größenkategorie.
Mistral Nemo ist ein 12B-Modell und damit ein leistungsstarker Ersatz für jedes System, das das Mistral 7B-Modell verwendet, das es ersetzt. Es unterstützt eine Kontextlänge von 128K, akzeptiert nur Texteingaben und generiert Textausgaben.
Darüber hinaus zeichnet sich Mistral Nemo durch folgende Merkmale aus:
- Gemeinsam mit Nvidia entwickelt. Diese Zusammenarbeit hat zu einem leistungsfähigen 12B-Modell geführt, das die Grenzen von Language Understanding und Sprachgenerierung verschiebt.
- Mehrsprachig. Mistral Nemo ist mit einem Tokenizer namens Tekken ausgestattet, der für mehrsprachige Anwendungen konzipiert ist. Er unterstützt mehr als 100 Sprachen, z. B. Englisch, Französisch, Deutsch und Spanisch. Tekken ist beim Komprimieren von Text für ca. 85 % aller Sprachen effizienter als der Llama 3-Tokenizer und bietet erhebliche Verbesserungen in Malayalam, Hindi, Arabisch und weit verbreiteten europäischen Sprachen.
- Agent-zentriert. Mistral Nemo verfügt über Agent-Funktionen der obersten Ebene, einschließlich nativer Funktionsaufrufe und JSON-Ausgaben.
- Fortgeschrittene Schlussfolgerungen. Mistral Nemo bietet modernste mathematische Funktionen und Schlussfolgerungsfunktionen in seiner Größenkategorie.
Weitere Informationen zu den Modellen finden Sie auf der jeweiligen Modellkarte:
Tipp
Darüber hinaus unterstützt MistralAI die Verwendung einer maßgeschneiderten API für die Nutzung mit bestimmten Funktionen des Modells. Wenn Sie die modellanbieterspezifische API verwenden möchten, lesen Sie die MistralAI-Dokumentation, oder sehen Sie sich die Codebeispiele im Abschnitt zu Rückschlussbeispielen an.
Voraussetzungen
Um das Mistral Nemo-Chatmodell mit Azure KI Studio zu verwenden, sind folgende Voraussetzungen zu erfüllen:
Modellimplementierung
Bereitstellung als serverlose APIs
Das Mistral Nemo-Chatmodell kann für serverlose API-Endpunkte mit nutzungsbasierter Abrechnung bereitgestellt werden. Diese Art von Bereitstellung bietet eine Möglichkeit, Modelle als API zu nutzen, ohne sie in Ihrem Abonnement zu hosten, während die Unternehmenssicherheit und Compliance beibehalten werden, die Organisationen benötigen.
Zur Bereitstellung für einen serverlosen API-Endpunkt ist kein Kontingent aus Ihrem Abonnement erforderlich. Wenn Ihr Modell noch nicht bereitgestellt wurde, verwenden Sie Azure KI Studio, das Azure Machine Learning SDK für Python, die Azure CLI oder ARM-Vorlagen, um das Modell als serverlose API bereitzustellen.
Installiertes Inferenzpaket
Sie können Vorhersagen aus diesem Modell nutzen, indem Sie das Paket Azure.AI.Inference
von NuGet verwenden. Zum Installieren dieses Pakets müssen folgende Voraussetzungen erfüllt sein:
- Endpunkt-URL. Um die Clientbibliothek zu erstellen, müssen Sie die Endpunkt-URL übergeben. Die Endpunkt-URL hat das Format
https://your-host-name.your-azure-region.inference.ai.azure.com
, wobeiyour-host-name
Ihr eindeutiger Hostname für die Modellimplementierung undyour-azure-region
die Azure-Region ist, in der das Modell bereitgestellt wird (z. B. „eastus2“). - Je nach Modellimplementierung und bevorzugter Authentifizierungsmethode benötigen Sie einen Schlüssel, um sich bei dem Dienst zu authentifizieren, oder Microsoft Entra ID-Anmeldeinformationen. Der Schlüssel ist eine Zeichenfolge aus 32 Zeichen.
Sobald diese Voraussetzungen erfüllt sind, installieren Sie die Azure KI-Inferenzbibliothek mit dem folgenden Befehl:
dotnet add package Azure.AI.Inference --prerelease
Sie können Sie auch mit Microsoft Entra ID (ehemals Azure Active Directory) authentifizieren. Um Anmeldeinformationsanbieter zu verwenden, die mit dem Azure SDK bereitgestellt werden, installieren Sie das Paket Azure.Identity
:
dotnet add package Azure.Identity
Importieren Sie die folgenden Namespaces:
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
In diesem Beispiel werden auch die folgenden Namespaces verwendet, allerdings kann es sein, dass Sie diese nicht immer benötigen:
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
Arbeiten mit Chatvervollständigungen
In diesem Abschnitt verwenden Sie die Azure KI-Modellinferenz-API mit einem Chatvervollständigungsmodell für Chats.
Tipp
Über die Azure KI-Modellrückschluss-API können Sie mit den meisten in Azure KI Studio bereitgestellten Modellen mit demselben Code und derselben Struktur kommunizieren, einschließlich des Mistral Nemo-Chatmodells.
Erstellen eines Clients zum Nutzen des Modells
Erstellen Sie als Erstes einen Client zum Nutzen des Modells. Der folgende Code verwendet eine Endpunkt-URL und einen Schlüssel, die in Umgebungsvariablen gespeichert sind.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Abrufen der Funktionen des Modells
Die /info
-Route gibt Informationen zu dem Modell zurück, das für den Endpunkt bereitgestellt wird. Geben Sie die Informationen des Modells zurück, indem Sie die folgende Methode aufrufen:
Response<ModelInfo> modelInfo = client.GetModelInfo();
Die Antwort lautet wie folgt:
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-Nemo
Model type: chat-completions
Model provider name: MistralAI
Erstellen einer Chatvervollständigungsanforderung
Das folgende Beispiel zeigt, wie Sie eine einfache Chatvervollständigungsanforderung an das Modell erstellen können.
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);
Die Antwort lautet wie folgt, wobei Sie die Nutzungsstatistiken des Modells sehen können:
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-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Überprüfen Sie den Abschnitt usage
in der Antwort, um die Anzahl der Token für den Prompt, die Gesamtzahl der generierten Token und die Anzahl der Token für den Abschluss zu sehen.
Streamen von Inhalten
Standardmäßig gibt die Vervollständigungs-API den gesamten generierten Inhalt in einer einzigen Antwort zurück. Wenn Sie lange Vervollständigungen generieren, kann das Warten auf die Antwort viele Sekunden dauern.
Sie können die Inhalte Streamen, um sie abzurufen, während sie generiert werden. Durch das Streamen von Inhalten können Sie mit der Verarbeitung der Vervollständigung beginnen, sobald Inhalte verfügbar sind. Dieser Modus gibt ein Objekt zurück, das die Antwort als vom Server gesendete Ereignisse (nur Daten) zurückgibt. Extrahieren Sie Blöcke aus dem Deltafeld und nicht aus dem Nachrichtenfeld.
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);
}
Um Vervollständigungen zu streamen, verwenden Sie die CompleteStreamingAsync
-Methode, wenn Sie das Modell aufrufen. Beachten Sie, dass in diesem Beispiel der Aufruf in eine asynchrone Methode eingeschlossen wird.
Um die Ausgabe zu visualisieren, definieren Sie eine asynchrone Methode zum Drucken des Datenstroms in der Konsole.
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);
}
}
}
Sie können visualisieren, wie beim Streaming Inhalte generiert werden:
StreamMessageAsync(client).GetAwaiter().GetResult();
Erkunden weiterer Parameter, die vom Inferenzclient unterstützt werden
Erkunden Sie weitere Parameter, die Sie im Inferenzclient angeben können. Eine vollständige Liste aller unterstützten Parameter und der entsprechenden Dokumentation finden Sie unter Referenz zur Azure KI-Modellrückschluss-API.
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}");
Wenn Sie einen Parameter übergeben möchten, der nicht in der Liste der unterstützten Parameter enthalten ist, können Sie ihn mithilfe zusätzlicher Parameter an das zugrunde liegende Modell übergeben. Weitere Informationen finden Sie unter Übergeben zusätzlicher Parameter an das Modell.
Erstellen von JSON-Ausgaben
Das Mistral Nemo-Chatmodell kann JSON-Ausgaben erstellen. Legen Sie response_format
auf json_object
fest, um den JSON-Modus zu aktivieren und zu gewährleisten, dass die vom Modell generierte Nachricht gültiger JSON-Code ist. Sie müssen das Modell auch selbst anweisen, JSON-Code über eine System- oder Benutzernachricht zu erstellen. Der Nachrichteninhalt kann außerdem teilweise abgeschnitten werden, wenn Sie finish_reason="length"
verwenden. Damit wird angegeben, dass bei der Generierung max_tokens
überschritten wurde oder die Unterhaltung die maximale Kontextlänge überschritten hat.
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}");
Übergeben zusätzlicher Parameter an das Modell
Mit der Azure KI-Modellinferenz-API können Sie zusätzliche Parameter an das Modell übergeben. Das folgende Codebeispiel zeigt, wie der zusätzliche Parameter logprobs
an das Modell übergeben wird.
Bevor Sie zusätzliche Parameter an die Azure KI-Modellinferenz-API übergeben, stellen Sie sicher, dass Ihr Modell diese zusätzlichen Parameter unterstützt. Wenn die Anforderung an das zugrunde liegende Modell gestellt wird, wird der Header extra-parameters
mit dem Wert pass-through
an das Modell übergeben. Dieser Wert weist den Endpunkt an, die zusätzlichen Parameter an das Modell zu übergeben. Bei der Verwendung zusätzlicher Parameter mit dem Modell ist nicht garantiert, dass das Modell sie tatsächlich verarbeiten kann. Lesen Sie die Dokumentation des Modells, um zu verstehen, welche zusätzlichen Parameter unterstützt werden.
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}");
Die folgenden zusätzlichen Parameter können an das Mistral Nemo-Chatmodell übergeben werden:
Name | Description | type |
---|---|---|
ignore_eos |
Gibt an, ob das EOS-Token ignoriert und die Generierung von Token fortgesetzt werden soll, nachdem das EOS-Token generiert wurde. | boolean |
safe_mode |
Gibt an, ob vor allen Unterhaltungen eine Sicherheitsaufforderung eingefügt werden soll. | boolean |
Abgesicherter Modus
Das Mistral Nemo-Chatmodell unterstützt den Parameter safe_prompt
. Sie können den sicheren Prompt umschalten, um Ihren Nachrichten den folgenden Prompt voranzustellen:
Hilf immer mit Sorgfalt, Respekt und Wahrheit. Antworte mit größtmöglichem Nutzen, aber sicher. Vermeide schädliche, unethische, vorurteilsbehaftete oder negative Inhalte. Stelle sicher, dass Antworten Fairness und positives Denken fördern.
Mit der Azure KI-Modellrückschluss-API können Sie diesen zusätzlichen Parameter folgendermaßen übergeben:
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}");
Verwenden von Tools
Das Mistral Nemo-Chatmodell unterstützt die Verwendung von Tools. Dies kann eine hervorragende Ressource sein kann, wenn Sie bestimmte Aufgaben vom Sprachmodell auslagern und stattdessen ein deterministisches System oder sogar ein anderes Sprachmodell verwenden müssen. Mit der Azure KI-Modellrückschluss-API können Sie Tools folgendermaßen definieren.
Im folgenden Codebeispiel wird eine Tooldefinition erstellt, die Fluginformationen zwischen zwei verschiedenen Städten zurückgeben kann.
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);
In diesem Beispiel ist die Ausgabe der Funktion, dass keine Flüge für die ausgewählte Strecke verfügbar sind, aber der Benutzer einen Zug in Betracht ziehen sollte.
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."
});
}
Übergeben eines Prompts an das Modell zum Buchen von Flügen mithilfe dieser Funktion:
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);
Sie können die Antwort überprüfen, um herauszufinden, ob ein Tool aufgerufen werden muss. Untersuchen Sie den Abschlussgrund, um festzustellen, ob das Tool aufgerufen werden soll. Denken Sie daran, dass mehrere Tooltypen angegeben werden können. Dieses Beispiel veranschaulicht ein Tool des Typs 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}");
Fügen Sie zum Fortfahren diese Nachricht an den Chatverlauf an:
requestOptions.Messages.Add(new ChatRequestAssistantMessage(response.Value.Choices[0].Message));
Nun ist es an der Zeit, die geeignete Funktion für den Toolaufruf aufzurufen. Der folgende Codeschnipsel durchläuft alle in der Antwort angegebenen Toolaufrufe und ruft die entsprechende Funktion mit den geeigneten Parametern auf. Die Antwort wird auch an den Chatverlauf angefügt.
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");
}
Anzeigen der Antwort des Modells:
response = client.Complete(requestOptions);
Anwenden von Inhaltssicherheit
Die Azure KI-Modellinferenz-API unterstützt Azure KI Inhaltssicherheit. Wenn Sie Bereitstellungen mit aktivierter Azure KI Inhaltssicherheit verwenden, durchlaufen Eingaben und Ausgaben eine Gruppe von Klassifizierungsmodellen, die darauf abzielen, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern. Das System zur Inhaltsfilterung (Vorschau) erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeprompts als auch in Ausgabevervollständigungen und ergreift entsprechende Maßnahmen.
Das folgende Beispiel zeigt, wie Ereignisse behandelt werden, wenn das Modell schädliche Inhalte im Prompt erkennt und die Inhaltssicherheit aktiviert ist.
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;
}
}
Tipp
Weitere Informationen zum Konfigurieren und Steuern von Einstellungen der Azure KI-Inhaltssicherheit finden Sie in der Dokumentation zu Azure KI-Inhaltssicherheit.
Mistral Nemo-Chatmodell
Mistral Nemo ist ein innovatives Sprachmodell (Large Language Model, LLM) mit modernsten Schlussfolgerungsfunktionen, allgemeinem Weltwissen und Codierungsfunktionen innerhalb seiner Größenkategorie.
Mistral Nemo ist ein 12B-Modell und damit ein leistungsstarker Ersatz für jedes System, das das Mistral 7B-Modell verwendet, das es ersetzt. Es unterstützt eine Kontextlänge von 128K, akzeptiert nur Texteingaben und generiert Textausgaben.
Darüber hinaus zeichnet sich Mistral Nemo durch folgende Merkmale aus:
- Gemeinsam mit Nvidia entwickelt. Diese Zusammenarbeit hat zu einem leistungsfähigen 12B-Modell geführt, das die Grenzen von Language Understanding und Sprachgenerierung verschiebt.
- Mehrsprachig. Mistral Nemo ist mit einem Tokenizer namens Tekken ausgestattet, der für mehrsprachige Anwendungen konzipiert ist. Er unterstützt mehr als 100 Sprachen, z. B. Englisch, Französisch, Deutsch und Spanisch. Tekken ist beim Komprimieren von Text für ca. 85 % aller Sprachen effizienter als der Llama 3-Tokenizer und bietet erhebliche Verbesserungen in Malayalam, Hindi, Arabisch und weit verbreiteten europäischen Sprachen.
- Agent-zentriert. Mistral Nemo verfügt über Agent-Funktionen der obersten Ebene, einschließlich nativer Funktionsaufrufe und JSON-Ausgaben.
- Fortgeschrittene Schlussfolgerungen. Mistral Nemo bietet modernste mathematische Funktionen und Schlussfolgerungsfunktionen in seiner Größenkategorie.
Weitere Informationen zu den Modellen finden Sie auf der jeweiligen Modellkarte:
Tipp
Darüber hinaus unterstützt MistralAI die Verwendung einer maßgeschneiderten API für die Nutzung mit bestimmten Funktionen des Modells. Wenn Sie die modellanbieterspezifische API verwenden möchten, lesen Sie die MistralAI-Dokumentation, oder sehen Sie sich die Codebeispiele im Abschnitt zu Rückschlussbeispielen an.
Voraussetzungen
Um das Mistral Nemo-Chatmodell mit Azure KI Studio zu verwenden, sind folgende Voraussetzungen zu erfüllen:
Modellimplementierung
Bereitstellung als serverlose APIs
Das Mistral Nemo-Chatmodell kann für serverlose API-Endpunkte mit nutzungsbasierter Abrechnung bereitgestellt werden. Diese Art von Bereitstellung bietet eine Möglichkeit, Modelle als API zu nutzen, ohne sie in Ihrem Abonnement zu hosten, während die Unternehmenssicherheit und Compliance beibehalten werden, die Organisationen benötigen.
Zur Bereitstellung für einen serverlosen API-Endpunkt ist kein Kontingent aus Ihrem Abonnement erforderlich. Wenn Ihr Modell noch nicht bereitgestellt wurde, verwenden Sie Azure KI Studio, das Azure Machine Learning SDK für Python, die Azure CLI oder ARM-Vorlagen, um das Modell als serverlose API bereitzustellen.
REST-Client
Modelle, die mit der Azure KI-Modellinferenz-API bereitgestellt werden, können mit jedem REST-Client genutzt werden. Zur Verwendung des REST-Clients müssen folgende Voraussetzungen erfüllt sein:
- Um die Anforderungen zu erstellen, müssen Sie die Endpunkt-URL übergeben. Die Endpunkt-URL hat das Format
https://your-host-name.your-azure-region.inference.ai.azure.com
, wobeiyour-host-name`` is your unique model deployment host name and
your-azure-region`` die Azure-Region ist, in der das Modell bereitgestellt wird (z. B. „eastus2“). - Je nach Modellimplementierung und bevorzugter Authentifizierungsmethode benötigen Sie einen Schlüssel, um sich bei dem Dienst zu authentifizieren, oder Microsoft Entra ID-Anmeldeinformationen. Der Schlüssel ist eine Zeichenfolge aus 32 Zeichen.
Arbeiten mit Chatvervollständigungen
In diesem Abschnitt verwenden Sie die Azure KI-Modellinferenz-API mit einem Chatvervollständigungsmodell für Chats.
Tipp
Über die Azure KI-Modellrückschluss-API können Sie mit den meisten in Azure KI Studio bereitgestellten Modellen mit demselben Code und derselben Struktur kommunizieren, einschließlich des Mistral Nemo-Chatmodells.
Erstellen eines Clients zum Nutzen des Modells
Erstellen Sie als Erstes einen Client zum Nutzen des Modells. Der folgende Code verwendet eine Endpunkt-URL und einen Schlüssel, die in Umgebungsvariablen gespeichert sind.
Abrufen der Funktionen des Modells
Die /info
-Route gibt Informationen zu dem Modell zurück, das für den Endpunkt bereitgestellt wird. Geben Sie die Informationen des Modells zurück, indem Sie die folgende Methode aufrufen:
GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
Die Antwort lautet wie folgt:
{
"model_name": "Mistral-Nemo",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
Erstellen einer Chatvervollständigungsanforderung
Das folgende Beispiel zeigt, wie Sie eine einfache Chatvervollständigungsanforderung an das Modell erstellen können.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Die Antwort lautet wie folgt, wobei Sie die Nutzungsstatistiken des Modells sehen können:
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "Mistral-Nemo",
"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
}
}
Überprüfen Sie den Abschnitt usage
in der Antwort, um die Anzahl der Token für den Prompt, die Gesamtzahl der generierten Token und die Anzahl der Token für den Abschluss zu sehen.
Streamen von Inhalten
Standardmäßig gibt die Vervollständigungs-API den gesamten generierten Inhalt in einer einzigen Antwort zurück. Wenn Sie lange Vervollständigungen generieren, kann das Warten auf die Antwort viele Sekunden dauern.
Sie können die Inhalte Streamen, um sie abzurufen, während sie generiert werden. Durch das Streamen von Inhalten können Sie mit der Verarbeitung der Vervollständigung beginnen, sobald Inhalte verfügbar sind. Dieser Modus gibt ein Objekt zurück, das die Antwort als vom Server gesendete Ereignisse (nur Daten) zurückgibt. Extrahieren Sie Blöcke aus dem Deltafeld und nicht aus dem Nachrichtenfeld.
{
"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
}
Sie können visualisieren, wie beim Streaming Inhalte generiert werden:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
In der letzten Nachricht im Stream ist finish_reason
festgelegt, was auf den Grund für das Beenden des Generierungsprozesses hinweist.
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"delta": {
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Erkunden weiterer Parameter, die vom Inferenzclient unterstützt werden
Erkunden Sie weitere Parameter, die Sie im Inferenzclient angeben können. Eine vollständige Liste aller unterstützten Parameter und der entsprechenden Dokumentation finden Sie unter Referenz zur Azure KI-Modellrückschluss-API.
{
"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-Nemo",
"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
}
}
Wenn Sie einen Parameter übergeben möchten, der nicht in der Liste der unterstützten Parameter enthalten ist, können Sie ihn mithilfe zusätzlicher Parameter an das zugrunde liegende Modell übergeben. Weitere Informationen finden Sie unter Übergeben zusätzlicher Parameter an das Modell.
Erstellen von JSON-Ausgaben
Das Mistral Nemo-Chatmodell kann JSON-Ausgaben erstellen. Legen Sie response_format
auf json_object
fest, um den JSON-Modus zu aktivieren und zu gewährleisten, dass die vom Modell generierte Nachricht gültiger JSON-Code ist. Sie müssen das Modell auch selbst anweisen, JSON-Code über eine System- oder Benutzernachricht zu erstellen. Der Nachrichteninhalt kann außerdem teilweise abgeschnitten werden, wenn Sie finish_reason="length"
verwenden. Damit wird angegeben, dass bei der Generierung max_tokens
überschritten wurde oder die Unterhaltung die maximale Kontextlänge überschritten hat.
{
"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-Nemo",
"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
}
}
Übergeben zusätzlicher Parameter an das Modell
Mit der Azure KI-Modellinferenz-API können Sie zusätzliche Parameter an das Modell übergeben. Das folgende Codebeispiel zeigt, wie der zusätzliche Parameter logprobs
an das Modell übergeben wird.
Bevor Sie zusätzliche Parameter an die Azure KI-Modellinferenz-API übergeben, stellen Sie sicher, dass Ihr Modell diese zusätzlichen Parameter unterstützt. Wenn die Anforderung an das zugrunde liegende Modell gestellt wird, wird der Header extra-parameters
mit dem Wert pass-through
an das Modell übergeben. Dieser Wert weist den Endpunkt an, die zusätzlichen Parameter an das Modell zu übergeben. Bei der Verwendung zusätzlicher Parameter mit dem Modell ist nicht garantiert, dass das Modell sie tatsächlich verarbeiten kann. Lesen Sie die Dokumentation des Modells, um zu verstehen, welche zusätzlichen Parameter unterstützt werden.
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
}
Die folgenden zusätzlichen Parameter können an das Mistral Nemo-Chatmodell übergeben werden:
Name | Description | type |
---|---|---|
ignore_eos |
Gibt an, ob das EOS-Token ignoriert und die Generierung von Token fortgesetzt werden soll, nachdem das EOS-Token generiert wurde. | boolean |
safe_mode |
Gibt an, ob vor allen Unterhaltungen eine Sicherheitsaufforderung eingefügt werden soll. | boolean |
Abgesicherter Modus
Das Mistral Nemo-Chatmodell unterstützt den Parameter safe_prompt
. Sie können den sicheren Prompt umschalten, um Ihren Nachrichten den folgenden Prompt voranzustellen:
Hilf immer mit Sorgfalt, Respekt und Wahrheit. Antworte mit größtmöglichem Nutzen, aber sicher. Vermeide schädliche, unethische, vorurteilsbehaftete oder negative Inhalte. Stelle sicher, dass Antworten Fairness und positives Denken fördern.
Mit der Azure KI-Modellrückschluss-API können Sie diesen zusätzlichen Parameter folgendermaßen übergeben:
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
}
Verwenden von Tools
Das Mistral Nemo-Chatmodell unterstützt die Verwendung von Tools. Dies kann eine hervorragende Ressource sein kann, wenn Sie bestimmte Aufgaben vom Sprachmodell auslagern und stattdessen ein deterministisches System oder sogar ein anderes Sprachmodell verwenden müssen. Mit der Azure KI-Modellrückschluss-API können Sie Tools folgendermaßen definieren.
Im folgenden Codebeispiel wird eine Tooldefinition erstellt, die Fluginformationen zwischen zwei verschiedenen Städten zurückgeben kann.
{
"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"
]
}
}
}
In diesem Beispiel ist die Ausgabe der Funktion, dass keine Flüge für die ausgewählte Strecke verfügbar sind, aber der Benutzer einen Zug in Betracht ziehen sollte.
Übergeben eines Prompts an das Modell zum Buchen von Flügen mithilfe dieser Funktion:
{
"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"
]
}
}
}
]
}
Sie können die Antwort überprüfen, um herauszufinden, ob ein Tool aufgerufen werden muss. Untersuchen Sie den Abschlussgrund, um festzustellen, ob das Tool aufgerufen werden soll. Denken Sie daran, dass mehrere Tooltypen angegeben werden können. Dieses Beispiel veranschaulicht ein Tool des Typs function
.
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726007,
"model": "Mistral-Nemo",
"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
}
}
Fügen Sie zum Fortfahren diese Nachricht an den Chatverlauf an:
Nun ist es an der Zeit, die geeignete Funktion für den Toolaufruf aufzurufen. Der folgende Codeschnipsel durchläuft alle in der Antwort angegebenen Toolaufrufe und ruft die entsprechende Funktion mit den geeigneten Parametern auf. Die Antwort wird auch an den Chatverlauf angefügt.
Anzeigen der Antwort des Modells:
{
"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"]
}
}
}
]
}
Anwenden von Inhaltssicherheit
Die Azure KI-Modellinferenz-API unterstützt Azure KI Inhaltssicherheit. Wenn Sie Bereitstellungen mit aktivierter Azure KI Inhaltssicherheit verwenden, durchlaufen Eingaben und Ausgaben eine Gruppe von Klassifizierungsmodellen, die darauf abzielen, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern. Das System zur Inhaltsfilterung (Vorschau) erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeprompts als auch in Ausgabevervollständigungen und ergreift entsprechende Maßnahmen.
Das folgende Beispiel zeigt, wie Ereignisse behandelt werden, wenn das Modell schädliche Inhalte im Prompt erkennt und die Inhaltssicherheit aktiviert ist.
{
"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
}
}
Tipp
Weitere Informationen zum Konfigurieren und Steuern von Einstellungen der Azure KI Inhaltssicherheit finden Sie in der Dokumentation zu Azure KI Inhaltssicherheit.
Modellrückschluss: Beispiele
Weitere Beispiele für die Verwendung von Mistral-Modellen finden Sie in den folgenden Beispielen und Tutorials:
Beschreibung | Sprache | Beispiel |
---|---|---|
cURL-Anforderung | Bash | Link |
Azure KI-Rückschlusspaket für JavaScript | JavaScript | Link |
Azure KI-Inferenzpaket für Python | Python | Link |
Python-Webanforderungen | Python | Link |
OpenAI SDK (experimentell) | Python | Link |
LangChain | Python | Link |
Mistral AI | Python | Link |
LiteLLM | Python | Link |
Überlegungen zu Kosten und Kontingenten für Mistral-Modelle, die als serverlose API-Endpunkte bereitgestellt werden
Das Kontingent wird pro Bereitstellung verwaltet. Jede Bereitstellung hat eine Rate von 200.000 Token pro Minute und 1.000 API-Anforderungen pro Minute. Derzeit wird jedoch eine Bereitstellung pro Modell und Projekt beschränkt. Wenden Sie sich an den Microsoft Azure-Support, wenn die aktuellen Ratenbegrenzungen für Ihre Szenarien nicht ausreichen.
Mistral-Modelle, die als serverlose API bereitgestellt werden, werden von Mistral AI über den Azure Marketplace angeboten und zur Nutzung in Azure KI Studio integriert. Die Preise für den Azure Marketplace finden Sie, wenn Sie das Modell bereitstellen.
Jedes Mal, wenn ein Projekt ein bestimmtes Angebot aus dem Azure Marketplace abonniert, wird eine neue Ressource erstellt, um die mit der Nutzung verbundenen Kosten nachzuverfolgen. Dieselbe Ressource wird verwendet, um die mit der Inferenz verbundenen Kosten zu verfolgen. Es stehen jedoch mehrere Verbrauchseinheiten zur Verfügung, um jedes Szenario unabhängig zu verfolgen.
Weitere Informationen zum Nachverfolgen von Kosten finden Sie unter Überwachen der Kosten für Modelle, die über den Azure Marketplace angeboten werden.