Udostępnij za pośrednictwem


Jak używać modeli czatów Mistral Premium

Ważne

Elementy oznaczone (wersja zapoznawcza) w tym artykule są obecnie dostępne w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Z tego artykułu dowiesz się więcej o modelach czatów w warstwie Premium Mistral i sposobie ich używania. Mistral AI oferuje dwie kategorie modeli. Modele Premium, w tym Mistral Large, Mistral Small i Ministral 3B, dostępne jako bezserwerowe interfejsy API z rozliczeniami opartymi na tokenach płatności zgodnie z rzeczywistym użyciem. Otwarte modele, w tym Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 i Mistral-7B-v01; dostępne do pobierania i uruchamiania na własnych zarządzanych punktach końcowych.

Ważne

Modele, które są w wersji zapoznawczej, są oznaczone jako wersja zapoznawcza na kartach modeli w wykazie modeli.

Modele rozmów Mistral Premium

Modele czatów Mistral w warstwie Premium obejmują następujące modele:

Mistral Large to najbardziej zaawansowany model dużego języka (LLM, Large Language Model) mistral AI. Można go używać w dowolnym zadaniu opartym na języku, dzięki swoim najnowocześniejszemu rozumowaniu i możliwościom wiedzy.

Ponadto Mistral Large to:

  • Specjalizowała się w RAG. Kluczowe informacje nie są tracone w środku długich okien kontekstu (do 32-K tokenów).
  • Silne w kodowaniu. Generowanie, przeglądanie i komentarze kodu. Obsługuje wszystkie języki kodowania podstawowego.
  • Wiele języków wg projektu. Najlepszy występ w klasie w języku francuskim, niemieckim, hiszpańskim, włoskim i angielskim. Obsługiwane są dziesiątki innych języków.
  • Zgodność ze odpowiedzialną sztuczną inteligencją. Wydajne poręcze upieczone w modelu i dodatkową warstwę bezpieczeństwa z opcją safe_mode.

Atrybuty Mistral Large (2407) obejmują:

  • Wiele języków wg projektu. Obsługuje dziesiątki języków, w tym angielski, francuski, niemiecki, hiszpański i włoski.
  • Biegłość w kodowaniu. Trenowane na ponad 80 językach kodowania, w tym Python, Java, C, C++, JavaScript i Bash. Szkolił się również na bardziej konkretnych językach, takich jak Swift i Fortran.
  • Skoncentrowane na agencie. Posiada możliwości agentów z natywnym wywoływaniem funkcji i wyprowadzania danych wyjściowych JSON.
  • Zaawansowane w rozumowaniu. Przedstawia najnowocześniejsze możliwości matematyczne i rozumowania.

Są dostępne następujące modele:

Napiwek

Ponadto program MistralAI obsługuje korzystanie z dostosowanego interfejsu API do użycia z określonymi funkcjami modelu. Aby użyć interfejsu API specyficznego dla dostawcy modelu, zapoznaj się z dokumentacją programu MistralAI lub zapoznaj się z sekcją przykłady wnioskowania, aby zapoznać się z przykładami kodu.

Wymagania wstępne

Aby korzystać z modeli czatów Mistral w warstwie Premium z usługą Azure AI Foundry, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów w warstwie Mistral w warstwie Premium można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj portalu usługi Azure AI Foundry, zestawu AZURE Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu azure-ai-inference pakietu w języku Python. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Zainstalowano środowisko Python w wersji 3.8 lub nowszej, w tym narzędzie.
  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj pakiet wnioskowania usługi Azure AI za pomocą następującego polecenia:

pip install azure-ai-inference

Dowiedz się więcej na temat pakietu wnioskowania i dokumentacji dotyczącej wnioskowania na platformie Azure.

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu AI platformy Azure umożliwia komunikację z większością modeli wdrożonych w portalu Azure AI Foundry przy użyciu tego samego kodu i struktury, w tym modeli czatów w warstwie Mistral w warstwie Premium.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

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"]),
)

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

model_info = client.get_model_info()

Odpowiedź jest następująca:

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

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu 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?"),
    ],
)

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia 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

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

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,
)

Aby przesłać strumieniowo uzupełnienia, ustaw stream=True podczas wywoływania modelu.

Aby zwizualizować dane wyjściowe, zdefiniuj funkcję pomocnika, aby wydrukować strumień.

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="")

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

print_stream(result)

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

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() },
)

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Tworzenie danych wyjściowych JSON

Modele czatów Mistral w warstwie Premium mogą tworzyć dane wyjściowe JSON. Ustaw response_format wartość na wartość , aby json_object włączyć tryb JSON i zagwarantować, że komunikat generowany przez model jest prawidłowym kodem JSON. Należy również poinstruować model, aby samodzielnie wygenerował kod JSON za pośrednictwem komunikatu systemu lub użytkownika. Ponadto zawartość wiadomości może być częściowo odcięta, jeśli finish_reason="length", co wskazuje, że generacja przekroczyła max_tokens lub że konwersacja przekroczyła maksymalną długość kontekstu.

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() }
)

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    model_extras={
        "logprobs": True
    }
)

Następujące dodatkowe parametry można przekazać do modeli czatów w warstwie Premium Mistral:

Nazwa/nazwisko opis Type
ignore_eos Czy zignorować token EOS i kontynuować generowanie tokenów po wygenerowaniu tokenu EOS. boolean
safe_mode Czy wstrzyknąć monit o bezpieczeństwo przed wszystkimi konwersacjami. boolean

Tryb awaryjny

Modele czatów Mistral w warstwie Premium obsługują parametr safe_prompt. Możesz przełączyć bezpieczny monit o wstępne tworzenie komunikatów za pomocą następującego monitu systemowego:

Zawsze pomagaj w opiece, szacunku i prawdzie. Odpowiedź za pomocą jak największego narzędzia jeszcze bezpiecznie. Unikaj szkodliwych, nieetycznych, uprzedzonych lub negatywnych treści. Upewnij się, że odpowiedzi promują sprawiedliwość i pozytywność.

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazanie tego dodatkowego parametru w następujący sposób:

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
    }
)

Używanie narzędzi

Modele czatów Mistral w warstwie Premium obsługują korzystanie z narzędzi, które mogą być niezwykłym zasobem, gdy trzeba odciążyć określone zadania z modelu językowego i zamiast tego polegać na bardziej deterministycznym systemie, a nawet innym modelu językowym. Interfejs API wnioskowania modelu AI platformy Azure umożliwia definiowanie narzędzi w następujący sposób.

Poniższy przykład kodu tworzy definicję narzędzia, która umożliwia wyszukiwanie informacji o locie z dwóch różnych miast.

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]

W tym przykładzie dane wyjściowe funkcji to brak dostępnych lotów dla wybranej trasy, ale użytkownik powinien rozważyć pociąg.

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."
    }

Monituj model o zarezerwowanie lotów przy użyciu tej funkcji:

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"
)

Możesz sprawdzić odpowiedź, aby dowiedzieć się, czy należy wywołać narzędzie. Sprawdź przyczynę zakończenia, aby określić, czy narzędzie ma być wywoływane. Należy pamiętać, że można wskazać wiele typów narzędzi. W tym przykładzie pokazano narzędzie 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)

Aby kontynuować, dołącz tę wiadomość do historii czatów:

messages.append(
    response_message
)

Teraz nadszedł czas, aby wywołać odpowiednią funkcję do obsługi wywołania narzędzia. Poniższy fragment kodu iteruje wszystkie wywołania narzędzia wskazane w odpowiedzi i wywołuje odpowiednią funkcję z odpowiednimi parametrami. Odpowiedź jest również dołączana do historii czatów.

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)
        )
    )

Wyświetl odpowiedź z modelu:

response = client.complete(
    messages=messages,
    tools=tools,
)

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

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

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Modele rozmów Mistral Premium

Modele czatów Mistral w warstwie Premium obejmują następujące modele:

Mistral Large to najbardziej zaawansowany model dużego języka (LLM, Large Language Model) mistral AI. Można go używać w dowolnym zadaniu opartym na języku, dzięki swoim najnowocześniejszemu rozumowaniu i możliwościom wiedzy.

Ponadto Mistral Large to:

  • Specjalizowała się w RAG. Kluczowe informacje nie są tracone w środku długich okien kontekstu (do 32-K tokenów).
  • Silne w kodowaniu. Generowanie, przeglądanie i komentarze kodu. Obsługuje wszystkie języki kodowania podstawowego.
  • Wiele języków wg projektu. Najlepszy występ w klasie w języku francuskim, niemieckim, hiszpańskim, włoskim i angielskim. Obsługiwane są dziesiątki innych języków.
  • Zgodność ze odpowiedzialną sztuczną inteligencją. Wydajne poręcze upieczone w modelu i dodatkową warstwę bezpieczeństwa z opcją safe_mode.

Atrybuty Mistral Large (2407) obejmują:

  • Wiele języków wg projektu. Obsługuje dziesiątki języków, w tym angielski, francuski, niemiecki, hiszpański i włoski.
  • Biegłość w kodowaniu. Trenowane na ponad 80 językach kodowania, w tym Python, Java, C, C++, JavaScript i Bash. Szkolił się również na bardziej konkretnych językach, takich jak Swift i Fortran.
  • Skoncentrowane na agencie. Posiada możliwości agentów z natywnym wywoływaniem funkcji i wyprowadzania danych wyjściowych JSON.
  • Zaawansowane w rozumowaniu. Przedstawia najnowocześniejsze możliwości matematyczne i rozumowania.

Są dostępne następujące modele:

Napiwek

Ponadto program MistralAI obsługuje korzystanie z dostosowanego interfejsu API do użycia z określonymi funkcjami modelu. Aby użyć interfejsu API specyficznego dla dostawcy modelu, zapoznaj się z dokumentacją programu MistralAI lub zapoznaj się z sekcją przykłady wnioskowania, aby zapoznać się z przykładami kodu.

Wymagania wstępne

Aby korzystać z modeli czatów Mistral w warstwie Premium z usługą Azure AI Foundry, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów w warstwie Mistral w warstwie Premium można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj portalu usługi Azure AI Foundry, zestawu AZURE Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu @azure-rest/ai-inference pakietu z pliku npm. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Wersje LTS programu z programem Node.js npm.
  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj bibliotekę wnioskowania platformy Azure dla języka JavaScript za pomocą następującego polecenia:

npm install @azure-rest/ai-inference

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu AI platformy Azure umożliwia komunikację z większością modeli wdrożonych w portalu Azure AI Foundry przy użyciu tego samego kodu i struktury, w tym modeli czatów w warstwie Mistral w warstwie Premium.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

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)
);

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

var model_info = await client.path("/info").get()

Odpowiedź jest następująca:

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

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu 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,
    }
});

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia 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

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

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();

Aby przesłać strumieniowo uzupełnienia, użyj .asNodeStream() polecenia podczas wywoływania modelu.

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

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 ?? "");
    }
}

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

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" },
    }
});

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Tworzenie danych wyjściowych JSON

Modele czatów Mistral w warstwie Premium mogą tworzyć dane wyjściowe JSON. Ustaw response_format wartość na wartość , aby json_object włączyć tryb JSON i zagwarantować, że komunikat generowany przez model jest prawidłowym kodem JSON. Należy również poinstruować model, aby samodzielnie wygenerował kod JSON za pośrednictwem komunikatu systemu lub użytkownika. Ponadto zawartość wiadomości może być częściowo odcięta, jeśli finish_reason="length", co wskazuje, że generacja przekroczyła max_tokens lub że konwersacja przekroczyła maksymalną długość kontekstu.

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" }
    }
});

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

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
    }
});

Następujące dodatkowe parametry można przekazać do modeli czatów w warstwie Premium Mistral:

Nazwa/nazwisko opis Type
ignore_eos Czy zignorować token EOS i kontynuować generowanie tokenów po wygenerowaniu tokenu EOS. boolean
safe_mode Czy wstrzyknąć monit o bezpieczeństwo przed wszystkimi konwersacjami. boolean

Tryb awaryjny

Modele czatów Mistral w warstwie Premium obsługują parametr safe_prompt. Możesz przełączyć bezpieczny monit o wstępne tworzenie komunikatów za pomocą następującego monitu systemowego:

Zawsze pomagaj w opiece, szacunku i prawdzie. Odpowiedź za pomocą jak największego narzędzia jeszcze bezpiecznie. Unikaj szkodliwych, nieetycznych, uprzedzonych lub negatywnych treści. Upewnij się, że odpowiedzi promują sprawiedliwość i pozytywność.

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazanie tego dodatkowego parametru w następujący sposób:

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
    }
});

Używanie narzędzi

Modele czatów Mistral w warstwie Premium obsługują korzystanie z narzędzi, które mogą być niezwykłym zasobem, gdy trzeba odciążyć określone zadania z modelu językowego i zamiast tego polegać na bardziej deterministycznym systemie, a nawet innym modelu językowym. Interfejs API wnioskowania modelu AI platformy Azure umożliwia definiowanie narzędzi w następujący sposób.

Poniższy przykład kodu tworzy definicję narzędzia, która umożliwia wyszukiwanie informacji o locie z dwóch różnych miast.

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,
    },
];

W tym przykładzie dane wyjściowe funkcji to brak dostępnych lotów dla wybranej trasy, ale użytkownik powinien rozważyć pociąg.

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."
    }
}

Monituj model o zarezerwowanie lotów przy użyciu tej funkcji:

var result = await client.path("/chat/completions").post({
    body: {
        messages: messages,
        tools: tools,
        tool_choice: "auto"
    }
});

Możesz sprawdzić odpowiedź, aby dowiedzieć się, czy należy wywołać narzędzie. Sprawdź przyczynę zakończenia, aby określić, czy narzędzie ma być wywoływane. Należy pamiętać, że można wskazać wiele typów narzędzi. W tym przykładzie pokazano narzędzie 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);

Aby kontynuować, dołącz tę wiadomość do historii czatów:

messages.push(response_message);

Teraz nadszedł czas, aby wywołać odpowiednią funkcję do obsługi wywołania narzędzia. Poniższy fragment kodu iteruje wszystkie wywołania narzędzia wskazane w odpowiedzi i wywołuje odpowiednią funkcję z odpowiednimi parametrami. Odpowiedź jest również dołączana do historii czatów.

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
        }
    );
}

Wyświetl odpowiedź z modelu:

var result = await client.path("/chat/completions").post({
    body: {
        messages: messages,
        tools: tools,
    }
});

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

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;
        }
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Modele rozmów Mistral Premium

Modele czatów Mistral w warstwie Premium obejmują następujące modele:

Mistral Large to najbardziej zaawansowany model dużego języka (LLM, Large Language Model) mistral AI. Można go używać w dowolnym zadaniu opartym na języku, dzięki swoim najnowocześniejszemu rozumowaniu i możliwościom wiedzy.

Ponadto Mistral Large to:

  • Specjalizowała się w RAG. Kluczowe informacje nie są tracone w środku długich okien kontekstu (do 32-K tokenów).
  • Silne w kodowaniu. Generowanie, przeglądanie i komentarze kodu. Obsługuje wszystkie języki kodowania podstawowego.
  • Wiele języków wg projektu. Najlepszy występ w klasie w języku francuskim, niemieckim, hiszpańskim, włoskim i angielskim. Obsługiwane są dziesiątki innych języków.
  • Zgodność ze odpowiedzialną sztuczną inteligencją. Wydajne poręcze upieczone w modelu i dodatkową warstwę bezpieczeństwa z opcją safe_mode.

Atrybuty Mistral Large (2407) obejmują:

  • Wiele języków wg projektu. Obsługuje dziesiątki języków, w tym angielski, francuski, niemiecki, hiszpański i włoski.
  • Biegłość w kodowaniu. Trenowane na ponad 80 językach kodowania, w tym Python, Java, C, C++, JavaScript i Bash. Szkolił się również na bardziej konkretnych językach, takich jak Swift i Fortran.
  • Skoncentrowane na agencie. Posiada możliwości agentów z natywnym wywoływaniem funkcji i wyprowadzania danych wyjściowych JSON.
  • Zaawansowane w rozumowaniu. Przedstawia najnowocześniejsze możliwości matematyczne i rozumowania.

Są dostępne następujące modele:

Napiwek

Ponadto program MistralAI obsługuje korzystanie z dostosowanego interfejsu API do użycia z określonymi funkcjami modelu. Aby użyć interfejsu API specyficznego dla dostawcy modelu, zapoznaj się z dokumentacją programu MistralAI lub zapoznaj się z sekcją przykłady wnioskowania, aby zapoznać się z przykładami kodu.

Wymagania wstępne

Aby korzystać z modeli czatów Mistral w warstwie Premium z usługą Azure AI Foundry, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów w warstwie Mistral w warstwie Premium można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj portalu usługi Azure AI Foundry, zestawu AZURE Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu Azure.AI.Inference pakietu z pakietu NuGet. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj bibliotekę wnioskowania usługi Azure AI przy użyciu następującego polecenia:

dotnet add package Azure.AI.Inference --prerelease

Możesz również uwierzytelnić się za pomocą identyfikatora Entra firmy Microsoft (dawniej Azure Active Directory). Aby użyć dostawców poświadczeń dostarczanych z zestawem Azure SDK, zainstaluj Azure.Identity pakiet:

dotnet add package Azure.Identity

Zaimportuj następujące przestrzenie nazw:

using Azure;
using Azure.Identity;
using Azure.AI.Inference;

W tym przykładzie są również używane następujące przestrzenie nazw, ale mogą nie zawsze być potrzebne:

using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu AI platformy Azure umożliwia komunikację z większością modeli wdrożonych w portalu Azure AI Foundry przy użyciu tego samego kodu i struktury, w tym modeli czatów w warstwie Mistral w warstwie Premium.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

ChatCompletionsClient client = new ChatCompletionsClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
    new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

Response<ModelInfo> modelInfo = client.GetModelInfo();

Odpowiedź jest następująca:

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

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu 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);

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia 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

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

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);
}

Aby przesłać strumieniowo uzupełnienia, użyj CompleteStreamingAsync metody podczas wywoływania modelu. Zwróć uwagę, że w tym przykładzie wywołanie jest opakowane w metodę asynchroniczną.

Aby zwizualizować dane wyjściowe, zdefiniuj metodę asynchroniczną, aby wydrukować strumień w konsoli programu .

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);
        }
    }
}

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

StreamMessageAsync(client).GetAwaiter().GetResult();

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

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}");

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Tworzenie danych wyjściowych JSON

Modele czatów Mistral w warstwie Premium mogą tworzyć dane wyjściowe JSON. Ustaw response_format wartość na wartość , aby json_object włączyć tryb JSON i zagwarantować, że komunikat generowany przez model jest prawidłowym kodem JSON. Należy również poinstruować model, aby samodzielnie wygenerował kod JSON za pośrednictwem komunikatu systemu lub użytkownika. Ponadto zawartość wiadomości może być częściowo odcięta, jeśli finish_reason="length", co wskazuje, że generacja przekroczyła max_tokens lub że konwersacja przekroczyła maksymalną długość kontekstu.

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}");

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

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}");

Następujące dodatkowe parametry można przekazać do modeli czatów w warstwie Premium Mistral:

Nazwa/nazwisko opis Type
ignore_eos Czy zignorować token EOS i kontynuować generowanie tokenów po wygenerowaniu tokenu EOS. boolean
safe_mode Czy wstrzyknąć monit o bezpieczeństwo przed wszystkimi konwersacjami. boolean

Tryb awaryjny

Modele czatów Mistral w warstwie Premium obsługują parametr safe_prompt. Możesz przełączyć bezpieczny monit o wstępne tworzenie komunikatów za pomocą następującego monitu systemowego:

Zawsze pomagaj w opiece, szacunku i prawdzie. Odpowiedź za pomocą jak największego narzędzia jeszcze bezpiecznie. Unikaj szkodliwych, nieetycznych, uprzedzonych lub negatywnych treści. Upewnij się, że odpowiedzi promują sprawiedliwość i pozytywność.

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazanie tego dodatkowego parametru w następujący sposób:

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}");

Używanie narzędzi

Modele czatów Mistral w warstwie Premium obsługują korzystanie z narzędzi, które mogą być niezwykłym zasobem, gdy trzeba odciążyć określone zadania z modelu językowego i zamiast tego polegać na bardziej deterministycznym systemie, a nawet innym modelu językowym. Interfejs API wnioskowania modelu AI platformy Azure umożliwia definiowanie narzędzi w następujący sposób.

Poniższy przykład kodu tworzy definicję narzędzia, która umożliwia wyszukiwanie informacji o locie z dwóch różnych miast.

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);

W tym przykładzie dane wyjściowe funkcji to brak dostępnych lotów dla wybranej trasy, ale użytkownik powinien rozważyć pociąg.

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."
    });
}

Monituj model o zarezerwowanie lotów przy użyciu tej funkcji:

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);

Możesz sprawdzić odpowiedź, aby dowiedzieć się, czy należy wywołać narzędzie. Sprawdź przyczynę zakończenia, aby określić, czy narzędzie ma być wywoływane. Należy pamiętać, że można wskazać wiele typów narzędzi. W tym przykładzie pokazano narzędzie 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}");

Aby kontynuować, dołącz tę wiadomość do historii czatów:

requestOptions.Messages.Add(new ChatRequestAssistantMessage(response.Value.Choices[0].Message));

Teraz nadszedł czas, aby wywołać odpowiednią funkcję do obsługi wywołania narzędzia. Poniższy fragment kodu iteruje wszystkie wywołania narzędzia wskazane w odpowiedzi i wywołuje odpowiednią funkcję z odpowiednimi parametrami. Odpowiedź jest również dołączana do historii czatów.

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");
}

Wyświetl odpowiedź z modelu:

response = client.Complete(requestOptions);

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

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;
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Modele rozmów Mistral Premium

Modele czatów Mistral w warstwie Premium obejmują następujące modele:

Mistral Large to najbardziej zaawansowany model dużego języka (LLM, Large Language Model) mistral AI. Można go używać w dowolnym zadaniu opartym na języku, dzięki swoim najnowocześniejszemu rozumowaniu i możliwościom wiedzy.

Ponadto Mistral Large to:

  • Specjalizowała się w RAG. Kluczowe informacje nie są tracone w środku długich okien kontekstu (do 32-K tokenów).
  • Silne w kodowaniu. Generowanie, przeglądanie i komentarze kodu. Obsługuje wszystkie języki kodowania podstawowego.
  • Wiele języków wg projektu. Najlepszy występ w klasie w języku francuskim, niemieckim, hiszpańskim, włoskim i angielskim. Obsługiwane są dziesiątki innych języków.
  • Zgodność ze odpowiedzialną sztuczną inteligencją. Wydajne poręcze upieczone w modelu i dodatkową warstwę bezpieczeństwa z opcją safe_mode.

Atrybuty Mistral Large (2407) obejmują:

  • Wiele języków wg projektu. Obsługuje dziesiątki języków, w tym angielski, francuski, niemiecki, hiszpański i włoski.
  • Biegłość w kodowaniu. Trenowane na ponad 80 językach kodowania, w tym Python, Java, C, C++, JavaScript i Bash. Szkolił się również na bardziej konkretnych językach, takich jak Swift i Fortran.
  • Skoncentrowane na agencie. Posiada możliwości agentów z natywnym wywoływaniem funkcji i wyprowadzania danych wyjściowych JSON.
  • Zaawansowane w rozumowaniu. Przedstawia najnowocześniejsze możliwości matematyczne i rozumowania.

Są dostępne następujące modele:

Napiwek

Ponadto program MistralAI obsługuje korzystanie z dostosowanego interfejsu API do użycia z określonymi funkcjami modelu. Aby użyć interfejsu API specyficznego dla dostawcy modelu, zapoznaj się z dokumentacją programu MistralAI lub zapoznaj się z sekcją przykłady wnioskowania, aby zapoznać się z przykładami kodu.

Wymagania wstępne

Aby korzystać z modeli czatów Mistral w warstwie Premium z usługą Azure AI Foundry, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów w warstwie Mistral w warstwie Premium można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj portalu usługi Azure AI Foundry, zestawu AZURE Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Klient REST

Modele wdrożone za pomocą interfejsu API wnioskowania modelu AI platformy Azure można używać przy użyciu dowolnego klienta REST. Do korzystania z klienta REST potrzebne są następujące wymagania wstępne:

  • Aby utworzyć żądania, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie twój-region-azure-region'' to region świadczenia usługi Azure, w którym your-host-name`` is your unique model deployment host name and wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu AI platformy Azure umożliwia komunikację z większością modeli wdrożonych w portalu Azure AI Foundry przy użyciu tego samego kodu i struktury, w tym modeli czatów w warstwie Mistral w warstwie Premium.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json

Odpowiedź jest następująca:

{
    "model_name": "Mistral-Large",
    "model_type": "chat-completions",
    "model_provider_name": "MistralAI"
}

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu do modelu.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ]
}

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia 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
    }
}

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

{
    "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
}

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "Mistral-Large",
    "choices": [
        {
            "index": 0,
            "delta": {
                "role": "assistant",
                "content": ""
            },
            "finish_reason": null,
            "logprobs": null
        }
    ]
}

Ostatni komunikat w strumieniu został finish_reason ustawiony, wskazujący przyczynę zatrzymania procesu generowania.

{
    "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
    }
}

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

{
    "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
    }
}

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Tworzenie danych wyjściowych JSON

Modele czatów Mistral w warstwie Premium mogą tworzyć dane wyjściowe JSON. Ustaw response_format wartość na wartość , aby json_object włączyć tryb JSON i zagwarantować, że komunikat generowany przez model jest prawidłowym kodem JSON. Należy również poinstruować model, aby samodzielnie wygenerował kod JSON za pośrednictwem komunikatu systemu lub użytkownika. Ponadto zawartość wiadomości może być częściowo odcięta, jeśli finish_reason="length", co wskazuje, że generacja przekroczyła max_tokens lub że konwersacja przekroczyła maksymalną długość kontekstu.

{
    "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
    }
}

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

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
}

Następujące dodatkowe parametry można przekazać do modeli czatów w warstwie Premium Mistral:

Nazwa/nazwisko opis Type
ignore_eos Czy zignorować token EOS i kontynuować generowanie tokenów po wygenerowaniu tokenu EOS. boolean
safe_mode Czy wstrzyknąć monit o bezpieczeństwo przed wszystkimi konwersacjami. boolean

Tryb awaryjny

Modele czatów Mistral w warstwie Premium obsługują parametr safe_prompt. Możesz przełączyć bezpieczny monit o wstępne tworzenie komunikatów za pomocą następującego monitu systemowego:

Zawsze pomagaj w opiece, szacunku i prawdzie. Odpowiedź za pomocą jak największego narzędzia jeszcze bezpiecznie. Unikaj szkodliwych, nieetycznych, uprzedzonych lub negatywnych treści. Upewnij się, że odpowiedzi promują sprawiedliwość i pozytywność.

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazanie tego dodatkowego parametru w następujący sposób:

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
}

Używanie narzędzi

Modele czatów Mistral w warstwie Premium obsługują korzystanie z narzędzi, które mogą być niezwykłym zasobem, gdy trzeba odciążyć określone zadania z modelu językowego i zamiast tego polegać na bardziej deterministycznym systemie, a nawet innym modelu językowym. Interfejs API wnioskowania modelu AI platformy Azure umożliwia definiowanie narzędzi w następujący sposób.

Poniższy przykład kodu tworzy definicję narzędzia, która umożliwia wyszukiwanie informacji o locie z dwóch różnych miast.

{
    "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"
            ]
        }
    }
}

W tym przykładzie dane wyjściowe funkcji to brak dostępnych lotów dla wybranej trasy, ale użytkownik powinien rozważyć pociąg.

Monituj model o zarezerwowanie lotów przy użyciu tej funkcji:

{
    "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"
                    ]
                }
            }
        }
    ]
}

Możesz sprawdzić odpowiedź, aby dowiedzieć się, czy należy wywołać narzędzie. Sprawdź przyczynę zakończenia, aby określić, czy narzędzie ma być wywoływane. Należy pamiętać, że można wskazać wiele typów narzędzi. W tym przykładzie pokazano narzędzie 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
    }
}

Aby kontynuować, dołącz tę wiadomość do historii czatów:

Teraz nadszedł czas, aby wywołać odpowiednią funkcję do obsługi wywołania narzędzia. Poniższy fragment kodu iteruje wszystkie wywołania narzędzia wskazane w odpowiedzi i wywołuje odpowiednią funkcję z odpowiednimi parametrami. Odpowiedź jest również dołączana do historii czatów.

Wyświetl odpowiedź 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"]
            }
            }
        }
    ]
}

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości wykrywa i podejmuje działania na określonych kategoriach potencjalnie szkodliwej zawartości w monitach wejściowych i uzupełnianiu danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

{
    "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
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Więcej przykładów wnioskowania

Aby uzyskać więcej przykładów używania modeli Mistral, zobacz następujące przykłady i samouczki:

opis Language Przykład
Żądanie CURL Bash Link
Pakiet wnioskowania usługi Azure AI dla języka JavaScript JavaScript Link
Pakiet wnioskowania usługi Azure AI dla języka Python Python Link
Żądania internetowe języka Python Python Link
Zestaw OPENAI SDK (eksperymentalny) Python Link
LangChain Python Link
Mistral AI Python Link
LiteLLM Python Link

Zagadnienia dotyczące kosztów i limitów przydziału dla modeli Mistral wdrożonych jako punkty końcowe bezserwerowego interfejsu API

Limit przydziału jest zarządzany na wdrożenie. Każde wdrożenie ma limit szybkości wynoszący 200 000 tokenów na minutę i 1000 żądań interfejsu API na minutę. Obecnie jednak ograniczamy jedno wdrożenie na model na projekt. Skontaktuj się z pomocą techniczną platformy Microsoft Azure, jeśli bieżące limity szybkości nie są wystarczające dla Twoich scenariuszy.

Modele Mistral wdrożone jako bezserwerowy interfejs API są oferowane przez program MistralAI za pośrednictwem witryny Azure Marketplace i zintegrowane z usługą Azure AI Foundry do użycia. Cennik witryny Azure Marketplace można znaleźć podczas wdrażania modelu.

Za każdym razem, gdy projekt subskrybuje daną ofertę z witryny Azure Marketplace, tworzony jest nowy zasób w celu śledzenia kosztów związanych z jej zużyciem. Ten sam zasób służy do śledzenia kosztów skojarzonych z wnioskowaniem; jednak w ramach śledzenia każdego scenariusza można niezależnie śledzić wiele mierników.

Aby uzyskać więcej informacji na temat śledzenia kosztów, zobacz Monitorowanie kosztów modeli oferowanych w witrynie Azure Marketplace.