Dela via


Så här använder du Mistral Premium-chattmodeller

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

I den här artikeln får du lära dig mer om Mistral Premium-chattmodeller och hur du använder dem. Mistral AI erbjuder två kategorier av modeller. Premium-modeller som Mistral Large, Mistral Small och Ministral 3B, tillgängliga som serverlösa API:er med tokenbaserad betalning per användning. Öppna modeller som Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 och Mistral-7B-v01; finns att ladda ned och köra på lokalt installerade hanterade slutpunkter.

Viktigt!

Modeller som är i förhandsversion markeras som förhandsversioner på sina modellkort i modellkatalogen.

Mistral Premium-chattmodeller

Mistral Premium-chattmodellerna innehåller följande modeller:

Mistral Large är Mistral AI:s mest avancerade storspråksmodell (LLM). Den kan användas på valfri språkbaserad uppgift tack vare dess toppmoderna resonemang och kunskapsfunktioner.

Dessutom är Mistral Large:

  • Specialiserad på RAG. Viktig information går inte förlorad mitt i långa kontextfönster (upp till 32 K-token).
  • Stark i kodning. Kodgenerering, granskning och kommentarer. Stöder alla vanliga kodningsspråk.
  • Flerspråkiga efter design. Förstklassig prestanda på franska, tyska, spanska, italienska och engelska. Dussintals andra språk stöds.
  • Ansvarsfull AI-kompatibel. Effektiva skyddsräcken bakade i modellen och extra säkerhetsskikt med safe_mode alternativ.

Och attribut för Mistral Large (2407) inkluderar:

  • Flerspråkiga efter design. Stöder dussintals språk, inklusive engelska, franska, tyska, spanska och italienska.
  • God kodning. Tränat på fler än 80 kodningsspråk, inklusive Python, Java, C, C++, JavaScript och Bash. Har även tränat på mer specifika språk som Swift och Fortran.
  • Agentcentrerad. Har agentiska funktioner med inbyggt funktionsanrop och JSON-utdata.
  • Avancerat i resonemang. Visar toppmoderna matematiska funktioner och resonemangsfunktioner.

Följande modeller är tillgängliga:

Dricks

Dessutom stöder MistralAI användning av ett skräddarsytt API för användning med specifika funktioner i modellen. Om du vill använda det specifika API:et för modellprovidern läser du MistralAI-dokumentationen eller läser avsnittet slutsatsdragningsexempel för kodexempel.

Förutsättningar

Om du vill använda Mistral Premium-chattmodeller med Azure AI Foundry behöver du följande förutsättningar:

En modelldistribution

Distribution till serverlösa API:er

Mistral Premium-chattmodeller kan distribueras till serverlösa API-slutpunkter med betala per användning-fakturering. Den här typen av distribution ger ett sätt att använda modeller som ett API utan att vara värd för dem i din prenumeration, samtidigt som den företagssäkerhet och efterlevnad som organisationer behöver bevaras.

Distribution till en serverlös API-slutpunkt kräver inte kvot från din prenumeration. Om din modell inte redan har distribuerats använder du Azure AI Foundry-portalen, Azure Machine Learning SDK för Python, Azure CLI eller ARM-mallar för att distribuera modellen som ett serverlöst API.

Inferenspaketet installerat

Du kan använda förutsägelser från den här modellen med hjälp azure-ai-inference av paketet med Python. För att installera det här paketet behöver du följande krav:

  • Python 3.8 eller senare installerat, inklusive pip.
  • Slutpunkts-URL:en. Om du vill skapa klientbiblioteket måste du skicka in slutpunkts-URL:en. Slutpunkts-URL:en har formuläret https://your-host-name.your-azure-region.inference.ai.azure.com, där your-host-name är värdnamnet för din unika modelldistribution och your-azure-region är den Azure-region där modellen distribueras (till exempel eastus2).
  • Beroende på din modelldistribution och autentiseringsinställning behöver du antingen en nyckel för att autentisera mot tjänsten eller autentiseringsuppgifter för Microsoft Entra-ID. Nyckeln är en sträng på 32 tecken.

När du har dessa förutsättningar installerar du Azure AI-slutsatsdragningspaketet med följande kommando:

pip install azure-ai-inference

Läs mer om Azure AI-slutsatsdragningspaketet och referensen.

Arbeta med chattens slutföranden

I det här avsnittet använder du Azure AI-modellinferens-API :et med en modell för chattavslut för chatt.

Dricks

Med Azure AI-modellinferens-API:et kan du prata med de flesta modeller som distribueras i Azure AI Foundry-portalen med samma kod och struktur, inklusive Mistral Premium-chattmodeller.

Skapa en klient för att använda modellen

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Hämta modellens funktioner

Vägen /info returnerar information om den modell som distribueras till slutpunkten. Returnera modellens information genom att anropa följande metod:

model_info = client.get_model_info()

Svaret är följande:

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande begäran om att slutföra chatten till modellen.

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

Svaret är följande, där du kan se modellens användningsstatistik:

print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Large
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

usage Granska avsnittet i svaret för att se antalet token som används för prompten, det totala antalet token som genererats och antalet token som används för slutförandet.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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

Om du vill strömma slutföranden anger stream=True du när du anropar modellen.

Om du vill visualisera utdata definierar du en hjälpfunktion för att skriva ut strömmen.

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

Du kan visualisera hur strömning genererar innehåll:

print_stream(result)

Utforska fler parametrar som stöds av slutsatsdragningsklienten

Utforska andra parametrar som du kan ange i slutsatsdragningsklienten. En fullständig lista över alla parametrar som stöds och deras motsvarande dokumentation finns i API-referensen för Azure AI-modellinferens.

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

Om du vill skicka en parameter som inte finns med i listan över parametrar som stöds kan du skicka den till den underliggande modellen med hjälp av extra parametrar. Se Skicka extra parametrar till modellen.

Skapa JSON-utdata

Mistral Premium-chattmodeller kan skapa JSON-utdata. Ange response_format till json_object för att aktivera JSON-läge och garantera att meddelandet som modellen genererar är giltigt JSON. Du måste också instruera modellen att skapa JSON själv via ett system- eller användarmeddelande. Dessutom kan meddelandeinnehållet vara delvis avskuret om finish_reason="length", vilket indikerar att genereringen överskred max_tokens eller att konversationen överskred den maximala kontextlängden.

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

Skicka extra parametrar till modellen

Med AZURE AI Model Inference API kan du skicka extra parametrar till modellen. Följande kodexempel visar hur du skickar den extra parametern logprobs till modellen.

Innan du skickar extra parametrar till Azure AI-modellinferens-API:et kontrollerar du att din modell stöder dessa extra parametrar. När begäran görs till den underliggande modellen skickas rubriken extra-parameters till modellen med värdet pass-through. Det här värdet anger att slutpunkten ska skicka de extra parametrarna till modellen. Användning av extra parametrar med modellen garanterar inte att modellen faktiskt kan hantera dem. Läs modellens dokumentation för att förstå vilka extra parametrar som stöds.

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

Följande extra parametrar kan skickas till Mistral Premium-chattmodeller:

Name beskrivning Typ
ignore_eos Om du vill ignorera EOS-token och fortsätta generera token när EOS-token har genererats. boolean
safe_mode Om du vill mata in en säkerhetsfråga före alla konversationer. boolean

Felsäkert läge

Mistral Premium-chattmodeller stöder parametern safe_prompt. Du kan växla den säkra prompten för att förbereda dina meddelanden med följande systemprompt:

Hjälp alltid med omsorg, respekt och sanning. Svara med största möjliga verktyg men ändå säkert. Undvik skadligt, oetiskt, fördomsfullt eller negativt innehåll. Se till att svaren främjar rättvisa och positivitet.

Med AZURE AI Model Inference API kan du skicka den här extra parametern på följande sätt:

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

Använda verktyg

Mistral Premium-chattmodeller stöder användning av verktyg, vilket kan vara en extraordinär resurs när du behöver avlasta specifika uppgifter från språkmodellen och i stället förlitar dig på ett mer deterministiskt system eller till och med en annan språkmodell. Med AZURE AI Model Inference API kan du definiera verktyg på följande sätt.

I följande kodexempel skapas en verktygsdefinition som kan titta från flyginformation från två olika städer.

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]

I det här exemplet är funktionens utdata att det inte finns några tillgängliga flyg för den valda rutten, men användaren bör överväga att ta ett tå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."
    }

Uppmana modellen att boka flyg med hjälp av den här funktionen:

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

Du kan kontrollera svaret för att ta reda på om ett verktyg behöver anropas. Kontrollera avslutsorsaken för att avgöra om verktyget ska anropas. Kom ihåg att flera verktygstyper kan anges. Det här exemplet visar ett verktyg av typen 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)

Om du vill fortsätta lägger du till det här meddelandet i chatthistoriken:

messages.append(
    response_message
)

Nu är det dags att anropa rätt funktion för att hantera verktygsanropet. Följande kodfragment itererar över alla verktygsanrop som anges i svaret och anropar motsvarande funktion med lämpliga parametrar. Svaret läggs också till i chatthistoriken.

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

Visa svaret från modellen:

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

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering (förhandsversion) identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Mistral Premium-chattmodeller

Mistral Premium-chattmodellerna innehåller följande modeller:

Mistral Large är Mistral AI:s mest avancerade storspråksmodell (LLM). Den kan användas på valfri språkbaserad uppgift tack vare dess toppmoderna resonemang och kunskapsfunktioner.

Dessutom är Mistral Large:

  • Specialiserad på RAG. Viktig information går inte förlorad mitt i långa kontextfönster (upp till 32 K-token).
  • Stark i kodning. Kodgenerering, granskning och kommentarer. Stöder alla vanliga kodningsspråk.
  • Flerspråkiga efter design. Förstklassig prestanda på franska, tyska, spanska, italienska och engelska. Dussintals andra språk stöds.
  • Ansvarsfull AI-kompatibel. Effektiva skyddsräcken bakade i modellen och extra säkerhetsskikt med safe_mode alternativ.

Och attribut för Mistral Large (2407) inkluderar:

  • Flerspråkiga efter design. Stöder dussintals språk, inklusive engelska, franska, tyska, spanska och italienska.
  • God kodning. Tränat på fler än 80 kodningsspråk, inklusive Python, Java, C, C++, JavaScript och Bash. Har även tränat på mer specifika språk som Swift och Fortran.
  • Agentcentrerad. Har agentiska funktioner med inbyggt funktionsanrop och JSON-utdata.
  • Avancerat i resonemang. Visar toppmoderna matematiska funktioner och resonemangsfunktioner.

Följande modeller är tillgängliga:

Dricks

Dessutom stöder MistralAI användning av ett skräddarsytt API för användning med specifika funktioner i modellen. Om du vill använda det specifika API:et för modellprovidern läser du MistralAI-dokumentationen eller läser avsnittet slutsatsdragningsexempel för kodexempel.

Förutsättningar

Om du vill använda Mistral Premium-chattmodeller med Azure AI Foundry behöver du följande förutsättningar:

En modelldistribution

Distribution till serverlösa API:er

Mistral Premium-chattmodeller kan distribueras till serverlösa API-slutpunkter med betala per användning-fakturering. Den här typen av distribution ger ett sätt att använda modeller som ett API utan att vara värd för dem i din prenumeration, samtidigt som den företagssäkerhet och efterlevnad som organisationer behöver bevaras.

Distribution till en serverlös API-slutpunkt kräver inte kvot från din prenumeration. Om din modell inte redan har distribuerats använder du Azure AI Foundry-portalen, Azure Machine Learning SDK för Python, Azure CLI eller ARM-mallar för att distribuera modellen som ett serverlöst API.

Inferenspaketet installerat

Du kan använda förutsägelser från den här modellen med hjälp @azure-rest/ai-inference av paketet från npm. För att installera det här paketet behöver du följande krav:

  • LTS-versioner av Node.js med npm.
  • Slutpunkts-URL:en. Om du vill skapa klientbiblioteket måste du skicka in slutpunkts-URL:en. Slutpunkts-URL:en har formuläret https://your-host-name.your-azure-region.inference.ai.azure.com, där your-host-name är värdnamnet för din unika modelldistribution och your-azure-region är den Azure-region där modellen distribueras (till exempel eastus2).
  • Beroende på din modelldistribution och autentiseringsinställning behöver du antingen en nyckel för att autentisera mot tjänsten eller autentiseringsuppgifter för Microsoft Entra-ID. Nyckeln är en sträng på 32 tecken.

När du har dessa förutsättningar installerar du Azure Inference-biblioteket för JavaScript med följande kommando:

npm install @azure-rest/ai-inference

Arbeta med chattens slutföranden

I det här avsnittet använder du Azure AI-modellinferens-API :et med en modell för chattavslut för chatt.

Dricks

Med Azure AI-modellinferens-API:et kan du prata med de flesta modeller som distribueras i Azure AI Foundry-portalen med samma kod och struktur, inklusive Mistral Premium-chattmodeller.

Skapa en klient för att använda modellen

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Hämta modellens funktioner

Vägen /info returnerar information om den modell som distribueras till slutpunkten. Returnera modellens information genom att anropa följande metod:

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

Svaret är följande:

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande begäran om att slutföra chatten till modellen.

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

Svaret är följande, där du kan se modellens användningsstatistik:

if (isUnexpected(response)) {
    throw response.body.error;
}

console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Large
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

usage Granska avsnittet i svaret för att se antalet token som används för prompten, det totala antalet token som genererats och antalet token som används för slutförandet.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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

Om du vill strömma slutföranden använder .asNodeStream() du när du anropar modellen.

Du kan visualisera hur strömning genererar innehåll:

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

Utforska fler parametrar som stöds av slutsatsdragningsklienten

Utforska andra parametrar som du kan ange i slutsatsdragningsklienten. En fullständig lista över alla parametrar som stöds och deras motsvarande dokumentation finns i API-referensen för Azure AI-modellinferens.

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

Om du vill skicka en parameter som inte finns med i listan över parametrar som stöds kan du skicka den till den underliggande modellen med hjälp av extra parametrar. Se Skicka extra parametrar till modellen.

Skapa JSON-utdata

Mistral Premium-chattmodeller kan skapa JSON-utdata. Ange response_format till json_object för att aktivera JSON-läge och garantera att meddelandet som modellen genererar är giltigt JSON. Du måste också instruera modellen att skapa JSON själv via ett system- eller användarmeddelande. Dessutom kan meddelandeinnehållet vara delvis avskuret om finish_reason="length", vilket indikerar att genereringen överskred max_tokens eller att konversationen överskred den maximala kontextlängden.

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

Skicka extra parametrar till modellen

Med AZURE AI Model Inference API kan du skicka extra parametrar till modellen. Följande kodexempel visar hur du skickar den extra parametern logprobs till modellen.

Innan du skickar extra parametrar till Azure AI-modellinferens-API:et kontrollerar du att din modell stöder dessa extra parametrar. När begäran görs till den underliggande modellen skickas rubriken extra-parameters till modellen med värdet pass-through. Det här värdet anger att slutpunkten ska skicka de extra parametrarna till modellen. Användning av extra parametrar med modellen garanterar inte att modellen faktiskt kan hantera dem. Läs modellens dokumentation för att förstå vilka extra parametrar som stöds.

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

Följande extra parametrar kan skickas till Mistral Premium-chattmodeller:

Name beskrivning Typ
ignore_eos Om du vill ignorera EOS-token och fortsätta generera token när EOS-token har genererats. boolean
safe_mode Om du vill mata in en säkerhetsfråga före alla konversationer. boolean

Felsäkert läge

Mistral Premium-chattmodeller stöder parametern safe_prompt. Du kan växla den säkra prompten för att förbereda dina meddelanden med följande systemprompt:

Hjälp alltid med omsorg, respekt och sanning. Svara med största möjliga verktyg men ändå säkert. Undvik skadligt, oetiskt, fördomsfullt eller negativt innehåll. Se till att svaren främjar rättvisa och positivitet.

Med AZURE AI Model Inference API kan du skicka den här extra parametern på följande sätt:

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

Använda verktyg

Mistral Premium-chattmodeller stöder användning av verktyg, vilket kan vara en extraordinär resurs när du behöver avlasta specifika uppgifter från språkmodellen och i stället förlitar dig på ett mer deterministiskt system eller till och med en annan språkmodell. Med AZURE AI Model Inference API kan du definiera verktyg på följande sätt.

I följande kodexempel skapas en verktygsdefinition som kan titta från flyginformation från två olika städer.

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

I det här exemplet är funktionens utdata att det inte finns några tillgängliga flyg för den valda rutten, men användaren bör överväga att ta ett tå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."
    }
}

Uppmana modellen att boka flyg med hjälp av den här funktionen:

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

Du kan kontrollera svaret för att ta reda på om ett verktyg behöver anropas. Kontrollera avslutsorsaken för att avgöra om verktyget ska anropas. Kom ihåg att flera verktygstyper kan anges. Det här exemplet visar ett verktyg av typen 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);

Om du vill fortsätta lägger du till det här meddelandet i chatthistoriken:

messages.push(response_message);

Nu är det dags att anropa rätt funktion för att hantera verktygsanropet. Följande kodfragment itererar över alla verktygsanrop som anges i svaret och anropar motsvarande funktion med lämpliga parametrar. Svaret läggs också till i chatthistoriken.

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

Visa svaret från modellen:

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

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering (förhandsversion) identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Mistral Premium-chattmodeller

Mistral Premium-chattmodellerna innehåller följande modeller:

Mistral Large är Mistral AI:s mest avancerade storspråksmodell (LLM). Den kan användas på valfri språkbaserad uppgift tack vare dess toppmoderna resonemang och kunskapsfunktioner.

Dessutom är Mistral Large:

  • Specialiserad på RAG. Viktig information går inte förlorad mitt i långa kontextfönster (upp till 32 K-token).
  • Stark i kodning. Kodgenerering, granskning och kommentarer. Stöder alla vanliga kodningsspråk.
  • Flerspråkiga efter design. Förstklassig prestanda på franska, tyska, spanska, italienska och engelska. Dussintals andra språk stöds.
  • Ansvarsfull AI-kompatibel. Effektiva skyddsräcken bakade i modellen och extra säkerhetsskikt med safe_mode alternativ.

Och attribut för Mistral Large (2407) inkluderar:

  • Flerspråkiga efter design. Stöder dussintals språk, inklusive engelska, franska, tyska, spanska och italienska.
  • God kodning. Tränat på fler än 80 kodningsspråk, inklusive Python, Java, C, C++, JavaScript och Bash. Har även tränat på mer specifika språk som Swift och Fortran.
  • Agentcentrerad. Har agentiska funktioner med inbyggt funktionsanrop och JSON-utdata.
  • Avancerat i resonemang. Visar toppmoderna matematiska funktioner och resonemangsfunktioner.

Följande modeller är tillgängliga:

Dricks

Dessutom stöder MistralAI användning av ett skräddarsytt API för användning med specifika funktioner i modellen. Om du vill använda det specifika API:et för modellprovidern läser du MistralAI-dokumentationen eller läser avsnittet slutsatsdragningsexempel för kodexempel.

Förutsättningar

Om du vill använda Mistral Premium-chattmodeller med Azure AI Foundry behöver du följande förutsättningar:

En modelldistribution

Distribution till serverlösa API:er

Mistral Premium-chattmodeller kan distribueras till serverlösa API-slutpunkter med betala per användning-fakturering. Den här typen av distribution ger ett sätt att använda modeller som ett API utan att vara värd för dem i din prenumeration, samtidigt som den företagssäkerhet och efterlevnad som organisationer behöver bevaras.

Distribution till en serverlös API-slutpunkt kräver inte kvot från din prenumeration. Om din modell inte redan har distribuerats använder du Azure AI Foundry-portalen, Azure Machine Learning SDK för Python, Azure CLI eller ARM-mallar för att distribuera modellen som ett serverlöst API.

Inferenspaketet installerat

Du kan använda förutsägelser från den här modellen med hjälp Azure.AI.Inference av paketet från NuGet. För att installera det här paketet behöver du följande krav:

  • Slutpunkts-URL:en. Om du vill skapa klientbiblioteket måste du skicka in slutpunkts-URL:en. Slutpunkts-URL:en har formuläret https://your-host-name.your-azure-region.inference.ai.azure.com, där your-host-name är värdnamnet för din unika modelldistribution och your-azure-region är den Azure-region där modellen distribueras (till exempel eastus2).
  • Beroende på din modelldistribution och autentiseringsinställning behöver du antingen en nyckel för att autentisera mot tjänsten eller autentiseringsuppgifter för Microsoft Entra-ID. Nyckeln är en sträng på 32 tecken.

När du har dessa förutsättningar installerar du Azure AI-slutsatsdragningsbiblioteket med följande kommando:

dotnet add package Azure.AI.Inference --prerelease

Du kan också autentisera med Microsoft Entra-ID (tidigare Azure Active Directory). Om du vill använda autentiseringsprovidrar som medföljer Azure SDK installerar du Azure.Identity paketet:

dotnet add package Azure.Identity

Importera följande namnområden:

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

I det här exemplet används även följande namnområden, men du kanske inte alltid behöver dem:

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

Arbeta med chattens slutföranden

I det här avsnittet använder du Azure AI-modellinferens-API :et med en modell för chattavslut för chatt.

Dricks

Med Azure AI-modellinferens-API:et kan du prata med de flesta modeller som distribueras i Azure AI Foundry-portalen med samma kod och struktur, inklusive Mistral Premium-chattmodeller.

Skapa en klient för att använda modellen

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

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

Hämta modellens funktioner

Vägen /info returnerar information om den modell som distribueras till slutpunkten. Returnera modellens information genom att anropa följande metod:

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

Svaret är följande:

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande begäran om att slutföra chatten till modellen.

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

Svaret är följande, där du kan se modellens användningsstatistik:

Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Console.WriteLine($"Model: {response.Value.Model}");
Console.WriteLine("Usage:");
Console.WriteLine($"\tPrompt tokens: {response.Value.Usage.PromptTokens}");
Console.WriteLine($"\tTotal tokens: {response.Value.Usage.TotalTokens}");
Console.WriteLine($"\tCompletion tokens: {response.Value.Usage.CompletionTokens}");
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Large
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

usage Granska avsnittet i svaret för att se antalet token som används för prompten, det totala antalet token som genererats och antalet token som används för slutförandet.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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

Om du vill strömma slutföranden använder CompleteStreamingAsync du metoden när du anropar modellen. Observera att i det här exemplet omsluts anropet i en asynkron metod.

Om du vill visualisera utdata definierar du en asynkron metod för att skriva ut strömmen i konsolen.

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

Du kan visualisera hur strömning genererar innehåll:

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

Utforska fler parametrar som stöds av slutsatsdragningsklienten

Utforska andra parametrar som du kan ange i slutsatsdragningsklienten. En fullständig lista över alla parametrar som stöds och deras motsvarande dokumentation finns i API-referensen för Azure AI-modellinferens.

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

Om du vill skicka en parameter som inte finns med i listan över parametrar som stöds kan du skicka den till den underliggande modellen med hjälp av extra parametrar. Se Skicka extra parametrar till modellen.

Skapa JSON-utdata

Mistral Premium-chattmodeller kan skapa JSON-utdata. Ange response_format till json_object för att aktivera JSON-läge och garantera att meddelandet som modellen genererar är giltigt JSON. Du måste också instruera modellen att skapa JSON själv via ett system- eller användarmeddelande. Dessutom kan meddelandeinnehållet vara delvis avskuret om finish_reason="length", vilket indikerar att genereringen överskred max_tokens eller att konversationen överskred den maximala kontextlängden.

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

Skicka extra parametrar till modellen

Med AZURE AI Model Inference API kan du skicka extra parametrar till modellen. Följande kodexempel visar hur du skickar den extra parametern logprobs till modellen.

Innan du skickar extra parametrar till Azure AI-modellinferens-API:et kontrollerar du att din modell stöder dessa extra parametrar. När begäran görs till den underliggande modellen skickas rubriken extra-parameters till modellen med värdet pass-through. Det här värdet anger att slutpunkten ska skicka de extra parametrarna till modellen. Användning av extra parametrar med modellen garanterar inte att modellen faktiskt kan hantera dem. Läs modellens dokumentation för att förstå vilka extra parametrar som stöds.

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

Följande extra parametrar kan skickas till Mistral Premium-chattmodeller:

Name beskrivning Typ
ignore_eos Om du vill ignorera EOS-token och fortsätta generera token när EOS-token har genererats. boolean
safe_mode Om du vill mata in en säkerhetsfråga före alla konversationer. boolean

Felsäkert läge

Mistral Premium-chattmodeller stöder parametern safe_prompt. Du kan växla den säkra prompten för att förbereda dina meddelanden med följande systemprompt:

Hjälp alltid med omsorg, respekt och sanning. Svara med största möjliga verktyg men ändå säkert. Undvik skadligt, oetiskt, fördomsfullt eller negativt innehåll. Se till att svaren främjar rättvisa och positivitet.

Med AZURE AI Model Inference API kan du skicka den här extra parametern på följande sätt:

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

Använda verktyg

Mistral Premium-chattmodeller stöder användning av verktyg, vilket kan vara en extraordinär resurs när du behöver avlasta specifika uppgifter från språkmodellen och i stället förlitar dig på ett mer deterministiskt system eller till och med en annan språkmodell. Med AZURE AI Model Inference API kan du definiera verktyg på följande sätt.

I följande kodexempel skapas en verktygsdefinition som kan titta från flyginformation från två olika städer.

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

I det här exemplet är funktionens utdata att det inte finns några tillgängliga flyg för den valda rutten, men användaren bör överväga att ta ett tå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."
    });
}

Uppmana modellen att boka flyg med hjälp av den här funktionen:

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

Du kan kontrollera svaret för att ta reda på om ett verktyg behöver anropas. Kontrollera avslutsorsaken för att avgöra om verktyget ska anropas. Kom ihåg att flera verktygstyper kan anges. Det här exemplet visar ett verktyg av typen 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}");

Om du vill fortsätta lägger du till det här meddelandet i chatthistoriken:

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

Nu är det dags att anropa rätt funktion för att hantera verktygsanropet. Följande kodfragment itererar över alla verktygsanrop som anges i svaret och anropar motsvarande funktion med lämpliga parametrar. Svaret läggs också till i chatthistoriken.

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

Visa svaret från modellen:

response = client.Complete(requestOptions);

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering (förhandsversion) identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Mistral Premium-chattmodeller

Mistral Premium-chattmodellerna innehåller följande modeller:

Mistral Large är Mistral AI:s mest avancerade storspråksmodell (LLM). Den kan användas på valfri språkbaserad uppgift tack vare dess toppmoderna resonemang och kunskapsfunktioner.

Dessutom är Mistral Large:

  • Specialiserad på RAG. Viktig information går inte förlorad mitt i långa kontextfönster (upp till 32 K-token).
  • Stark i kodning. Kodgenerering, granskning och kommentarer. Stöder alla vanliga kodningsspråk.
  • Flerspråkiga efter design. Förstklassig prestanda på franska, tyska, spanska, italienska och engelska. Dussintals andra språk stöds.
  • Ansvarsfull AI-kompatibel. Effektiva skyddsräcken bakade i modellen och extra säkerhetsskikt med safe_mode alternativ.

Och attribut för Mistral Large (2407) inkluderar:

  • Flerspråkiga efter design. Stöder dussintals språk, inklusive engelska, franska, tyska, spanska och italienska.
  • God kodning. Tränat på fler än 80 kodningsspråk, inklusive Python, Java, C, C++, JavaScript och Bash. Har även tränat på mer specifika språk som Swift och Fortran.
  • Agentcentrerad. Har agentiska funktioner med inbyggt funktionsanrop och JSON-utdata.
  • Avancerat i resonemang. Visar toppmoderna matematiska funktioner och resonemangsfunktioner.

Följande modeller är tillgängliga:

Dricks

Dessutom stöder MistralAI användning av ett skräddarsytt API för användning med specifika funktioner i modellen. Om du vill använda det specifika API:et för modellprovidern läser du MistralAI-dokumentationen eller läser avsnittet slutsatsdragningsexempel för kodexempel.

Förutsättningar

Om du vill använda Mistral Premium-chattmodeller med Azure AI Foundry behöver du följande förutsättningar:

En modelldistribution

Distribution till serverlösa API:er

Mistral Premium-chattmodeller kan distribueras till serverlösa API-slutpunkter med betala per användning-fakturering. Den här typen av distribution ger ett sätt att använda modeller som ett API utan att vara värd för dem i din prenumeration, samtidigt som den företagssäkerhet och efterlevnad som organisationer behöver bevaras.

Distribution till en serverlös API-slutpunkt kräver inte kvot från din prenumeration. Om din modell inte redan har distribuerats använder du Azure AI Foundry-portalen, Azure Machine Learning SDK för Python, Azure CLI eller ARM-mallar för att distribuera modellen som ett serverlöst API.

En REST-klient

Modeller som distribueras med Azure AI-modellinferens-API :et kan användas med valfri REST-klient. Om du vill använda REST-klienten behöver du följande krav:

  • Om du vill skapa begäranden måste du skicka in slutpunkts-URL:en. Slutpunkts-URL:en har formuläret https://your-host-name.your-azure-region.inference.ai.azure.com, där your-host-name`` is your unique model deployment host name and din-azure-region är den Azure-region där modellen distribueras (till exempel eastus2).
  • Beroende på din modelldistribution och autentiseringsinställning behöver du antingen en nyckel för att autentisera mot tjänsten eller autentiseringsuppgifter för Microsoft Entra-ID. Nyckeln är en sträng på 32 tecken.

Arbeta med chattens slutföranden

I det här avsnittet använder du Azure AI-modellinferens-API :et med en modell för chattavslut för chatt.

Dricks

Med Azure AI-modellinferens-API:et kan du prata med de flesta modeller som distribueras i Azure AI Foundry-portalen med samma kod och struktur, inklusive Mistral Premium-chattmodeller.

Skapa en klient för att använda modellen

Skapa först klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler.

Hämta modellens funktioner

Vägen /info returnerar information om den modell som distribueras till slutpunkten. Returnera modellens information genom att anropa följande metod:

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

Svaret är följande:

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

Skapa en begäran om att chatten ska slutföras

I följande exempel visas hur du kan skapa en grundläggande begäran om att slutföra chatten till modellen.

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

Svaret är följande, där du kan se modellens användningsstatistik:

{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "Mistral-Large",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
                "tool_calls": null
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

usage Granska avsnittet i svaret för att se antalet token som används för prompten, det totala antalet token som genererats och antalet token som används för slutförandet.

Strömma innehåll

Som standard returnerar API:et för slutförande hela det genererade innehållet i ett enda svar. Om du genererar långa slutföranden kan det ta många sekunder att vänta på svaret.

Du kan strömma innehållet för att hämta det när det genereras. Med strömmande innehåll kan du börja bearbeta slutförandet när innehållet blir tillgängligt. Det här läget returnerar ett objekt som strömmar tillbaka svaret som databaserade serverutskickade händelser. Extrahera segment från deltafältet i stället för meddelandefältet.

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

Du kan visualisera hur strömning genererar innehåll:

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

Det sista meddelandet i strömmen har finish_reason angetts, vilket anger orsaken till att genereringsprocessen stoppas.

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

Utforska fler parametrar som stöds av slutsatsdragningsklienten

Utforska andra parametrar som du kan ange i slutsatsdragningsklienten. En fullständig lista över alla parametrar som stöds och deras motsvarande dokumentation finns i API-referensen för Azure AI-modellinferens.

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

Om du vill skicka en parameter som inte finns med i listan över parametrar som stöds kan du skicka den till den underliggande modellen med hjälp av extra parametrar. Se Skicka extra parametrar till modellen.

Skapa JSON-utdata

Mistral Premium-chattmodeller kan skapa JSON-utdata. Ange response_format till json_object för att aktivera JSON-läge och garantera att meddelandet som modellen genererar är giltigt JSON. Du måste också instruera modellen att skapa JSON själv via ett system- eller användarmeddelande. Dessutom kan meddelandeinnehållet vara delvis avskuret om finish_reason="length", vilket indikerar att genereringen överskred max_tokens eller att konversationen överskred den maximala kontextlängden.

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

Skicka extra parametrar till modellen

Med AZURE AI Model Inference API kan du skicka extra parametrar till modellen. Följande kodexempel visar hur du skickar den extra parametern logprobs till modellen.

Innan du skickar extra parametrar till Azure AI-modellinferens-API:et kontrollerar du att din modell stöder dessa extra parametrar. När begäran görs till den underliggande modellen skickas rubriken extra-parameters till modellen med värdet pass-through. Det här värdet anger att slutpunkten ska skicka de extra parametrarna till modellen. Användning av extra parametrar med modellen garanterar inte att modellen faktiskt kan hantera dem. Läs modellens dokumentation för att förstå vilka extra parametrar som stöds.

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
}

Följande extra parametrar kan skickas till Mistral Premium-chattmodeller:

Name beskrivning Typ
ignore_eos Om du vill ignorera EOS-token och fortsätta generera token när EOS-token har genererats. boolean
safe_mode Om du vill mata in en säkerhetsfråga före alla konversationer. boolean

Felsäkert läge

Mistral Premium-chattmodeller stöder parametern safe_prompt. Du kan växla den säkra prompten för att förbereda dina meddelanden med följande systemprompt:

Hjälp alltid med omsorg, respekt och sanning. Svara med största möjliga verktyg men ändå säkert. Undvik skadligt, oetiskt, fördomsfullt eller negativt innehåll. Se till att svaren främjar rättvisa och positivitet.

Med AZURE AI Model Inference API kan du skicka den här extra parametern på följande sätt:

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
}

Använda verktyg

Mistral Premium-chattmodeller stöder användning av verktyg, vilket kan vara en extraordinär resurs när du behöver avlasta specifika uppgifter från språkmodellen och i stället förlitar dig på ett mer deterministiskt system eller till och med en annan språkmodell. Med AZURE AI Model Inference API kan du definiera verktyg på följande sätt.

I följande kodexempel skapas en verktygsdefinition som kan titta från flyginformation från två olika städer.

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

I det här exemplet är funktionens utdata att det inte finns några tillgängliga flyg för den valda rutten, men användaren bör överväga att ta ett tåg.

Uppmana modellen att boka flyg med hjälp av den här funktionen:

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

Du kan kontrollera svaret för att ta reda på om ett verktyg behöver anropas. Kontrollera avslutsorsaken för att avgöra om verktyget ska anropas. Kom ihåg att flera verktygstyper kan anges. Det här exemplet visar ett verktyg av typen 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
    }
}

Om du vill fortsätta lägger du till det här meddelandet i chatthistoriken:

Nu är det dags att anropa rätt funktion för att hantera verktygsanropet. Följande kodfragment itererar över alla verktygsanrop som anges i svaret och anropar motsvarande funktion med lämpliga parametrar. Svaret läggs också till i chatthistoriken.

Visa svaret från modellen:

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

Tillämpa innehållssäkerhet

Azure AI-modellinferens-API:et stöder Azure AI-innehållssäkerhet. När du använder distributioner med Azure AI-innehållssäkerhet aktiverad passerar indata och utdata genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

I följande exempel visas hur du hanterar händelser när modellen identifierar skadligt innehåll i indataprompten och innehållssäkerhet är aktiverat.

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

Dricks

Mer information om hur du kan konfigurera och kontrollera säkerhetsinställningar för Azure AI-innehåll finns i säkerhetsdokumentationen för Azure AI-innehåll.

Fler slutsatsdragningsexempel

Fler exempel på hur du använder Mistral-modeller finns i följande exempel och självstudier:

beskrivning Språk Exempel
CURL-begäran Bash Länk
Azure AI-slutsatsdragningspaket för JavaScript JavaScript Länk
Azure AI-slutsatsdragningspaket för Python Python Länk
Python-webbbegäranden Python Länk
OpenAI SDK (experimentell) Python Länk
LangChain Python Länk
Mistral AI Python Länk
LiteLLM Python Länk

Kostnads- och kvotöverväganden för Mistral-modeller som distribueras som serverlösa API-slutpunkter

Kvot hanteras per distribution. Varje distribution har en hastighetsgräns på 200 000 token per minut och 1 000 API-begäranden per minut. För närvarande begränsar vi dock en distribution per modell per projekt. Kontakta Microsoft Azure Support om de aktuella hastighetsgränserna inte räcker för dina scenarier.

Mistral-modeller som distribueras som ett serverlöst API erbjuds av MistralAI via Azure Marketplace och integreras med Azure AI Foundry för användning. Du hittar prissättningen för Azure Marketplace när du distribuerar modellen.

Varje gång ett projekt prenumererar på ett visst erbjudande från Azure Marketplace skapas en ny resurs för att spåra de kostnader som är kopplade till förbrukningen. Samma resurs används för att spåra kostnader som är associerade med slutsatsdragning. Flera mätare är dock tillgängliga för att spåra varje scenario oberoende av varandra.

Mer information om hur du spårar kostnader finns i Övervaka kostnader för modeller som erbjuds via Azure Marketplace.