Como usar o modelo de chat Mistral Nemo
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Neste artigo, você aprenderá sobre o modelo de bate-papo Mistral Nemo e como usá-los. Mistral AI oferece duas categorias de modelos. Modelos premium, incluindo Mistral Large e Mistral Small, disponíveis como APIs sem servidor com faturamento baseado em token pré-pago. Modelos abertos, incluindo Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 e Mistral-7B-v01; disponíveis para download e execução em endpoints gerenciados auto-hospedados.
Importante
Os modelos que estão em pré-visualização são marcados como pré-visualização nos respetivos cartões de modelo no catálogo de modelos.
Modelo de chat Mistral Nemo
O Mistral Nemo é um Modelo de Linguagem (LLM) de ponta com raciocínio de última geração, conhecimento do mundo e recursos de codificação dentro de sua categoria de tamanho.
Mistral Nemo é um modelo 12B, tornando-se um poderoso substituto drop-in para qualquer sistema usando Mistral 7B, que ele substitui. Ele suporta um comprimento de contexto de 128K, e aceita apenas entradas de texto e gera saídas de texto.
Além disso, Mistral Nemo é:
- Desenvolvido em conjunto com a Nvidia. Esta colaboração resultou num poderoso modelo 12B que ultrapassa os limites da compreensão e geração da língua.
- Multilingue proficiente. Mistral Nemo está equipado com um tokenizador chamado Tekken, que é projetado para aplicações multilingues. Ele suporta mais de 100 idiomas, como inglês, francês, alemão e espanhol. O Tekken é mais eficiente do que o tokenizador Llama 3 na compressão de texto para aproximadamente 85% de todas as línguas, com melhorias significativas no malaiala, hindi, árabe e línguas europeias predominantes.
- Centrada no agente. O Mistral Nemo possui recursos agenticos de primeira linha, incluindo chamada de função nativa e saída JSON.
- Raciocínio avançado. Mistral Nemo demonstra capacidades matemáticas e de raciocínio de última geração dentro de sua categoria de tamanho.
Você pode saber mais sobre os modelos em seus respetivos modelos de cartão:
Gorjeta
Além disso, o MistralAI suporta o uso de uma API personalizada para uso com recursos específicos do modelo. Para usar a API específica do provedor de modelos, verifique a documentação do MistralAI ou consulte a seção de exemplos de inferência para exemplos de código.
Pré-requisitos
Para usar o modelo de chat do Mistral Nemo com o Azure AI Studio, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em APIs sem servidor
O modelo de bate-papo Mistral Nemo pode ser implantado em pontos de extremidade de API sem servidor com faturamento pré-pago. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, mantendo a segurança e a conformidade corporativas de que as organizações precisam.
A implantação em um ponto de extremidade de API sem servidor não requer cota da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Azure AI Studio, o SDK do Azure Machine Learning para Python, a CLI do Azure ou os modelos ARM para implantar o modelo como uma API sem servidor.
O pacote de inferência instalado
Você pode consumir previsões desse modelo usando o azure-ai-inference
pacote com Python. Para instalar este pacote, você precisa dos seguintes pré-requisitos:
- Python 3.8 ou posterior instalado, incluindo pip.
- O URL do ponto de extremidade. Para construir a biblioteca do cliente, você precisa passar a URL do ponto de extremidade. A URL do ponto de extremidade tem o formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, ondeyour-host-name
é o nome exclusivo do host de implantação do modelo eyour-azure-region
é a região do Azure onde o modelo é implantado (por exemplo, eastus2). - Dependendo da implantação do modelo e da preferência de autenticação, você precisa de uma chave para autenticar no serviço ou credenciais de ID do Microsoft Entra. A chave é uma cadeia de caracteres de 32 caracteres.
Depois de ter esses pré-requisitos, instale o pacote de inferência do Azure AI com o seguinte comando:
pip install azure-ai-inference
Leia mais sobre o pacote de inferência e a referência da IA do Azure.
Trabalhar com finalizações de chat
Nesta seção, você usa a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para bate-papo.
Gorjeta
A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Azure AI Studio com o mesmo código e estrutura, incluindo o modelo de chat Mistral Nemo.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
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"]),
)
Obtenha as capacidades do modelo
A /info
rota retorna informações sobre o modelo implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:
model_info = client.get_model_info()
A resposta é a seguinte:
print("Model name:", model_info.model_name)
print("Model type:", model_info.model_type)
print("Model provider name:", model_info.model_provider_name)
Model name: Mistral-Nemo
Model type: chat-completions
Model provider name: MistralAI
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusão de chat para o modelo.
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?"),
],
)
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a usage
seção na resposta para ver o número de tokens usados para o prompt, o número total de tokens gerados e o número de tokens usados para a conclusão.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
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,
)
Para transmitir finalizações, defina stream=True
quando você chamar o modelo.
Para visualizar a saída, defina uma função auxiliar para imprimir o fluxo.
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="")
Você pode visualizar como o streaming gera conteúdo:
print_stream(result)
Explore mais parâmetros suportados pelo cliente de inferência
Explore outros parâmetros que você pode especificar no cliente de inferência. Para obter uma lista completa de todos os parâmetros suportados e sua documentação correspondente, consulte Referência da API de Inferência de Modelo de IA do 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() },
)
Se quiser passar um parâmetro que não esteja na lista de parâmetros suportados, você pode passá-lo para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros extras para o modelo.
Criar saídas JSON
O modelo de chat Mistral Nemo pode criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem pode ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo de contexto.
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() }
)
Passar parâmetros extras para o modelo
A API de Inferência de Modelo de IA do Azure permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como passar o parâmetro logprobs
extra para o modelo.
Antes de passar parâmetros extras para a API de inferência de modelo de IA do Azure, verifique se seu modelo oferece suporte a esses parâmetros extras. Quando a solicitação é feita para o modelo subjacente, o cabeçalho extra-parameters
é passado para o modelo com o valor pass-through
. Esse valor diz ao ponto de extremidade para passar os parâmetros extras para o modelo. O uso de parâmetros extras com o modelo não garante que o modelo possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros extras são suportados.
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
Os seguintes parâmetros extras podem ser passados para o modelo de chat Mistral Nemo:
Nome | Descrição | Type |
---|---|---|
ignore_eos |
Se o token EOS deve ser ignorado e continuar gerando tokens depois que o token EOS for gerado. | boolean |
safe_mode |
Se deve injetar um aviso de segurança antes de todas as conversas. | boolean |
Modo de segurança
O modelo de chat Mistral Nemo suporta o parâmetro safe_prompt
. Você pode alternar o prompt seguro para antecipar suas mensagens com o seguinte prompt do sistema:
Ajude sempre com cuidado, respeito e verdade. Responda com a máxima utilidade, mas com segurança. Evite conteúdo prejudicial, antiético, preconceituoso ou negativo. Garantir que as respostas promovem a equidade e a positividade.
A API de Inferência de Modelo de IA do Azure permite que você passe esse parâmetro extra da seguinte maneira:
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
}
)
Utilizar ferramentas
O modelo de chat Mistral Nemo suporta o uso de ferramentas, o que pode ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, confiar em um sistema mais determinístico ou até mesmo em um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite definir ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de olhar a partir de informações de voo de duas cidades diferentes.
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]
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
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."
}
Solicite ao modelo que reserve voos com a ajuda desta função:
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"
)
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo do término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo 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)
Para continuar, anexe esta mensagem ao histórico de bate-papo:
messages.append(
response_message
)
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é anexada ao histórico de bate-papo.
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)
)
)
Veja a resposta do modelo:
response = client.complete(
messages=messages,
tools=tools,
)
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo (visualização) deteta e executa ações em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Modelo de chat Mistral Nemo
O Mistral Nemo é um Modelo de Linguagem (LLM) de ponta com raciocínio de última geração, conhecimento do mundo e recursos de codificação dentro de sua categoria de tamanho.
Mistral Nemo é um modelo 12B, tornando-se um poderoso substituto drop-in para qualquer sistema usando Mistral 7B, que ele substitui. Ele suporta um comprimento de contexto de 128K, e aceita apenas entradas de texto e gera saídas de texto.
Além disso, Mistral Nemo é:
- Desenvolvido em conjunto com a Nvidia. Esta colaboração resultou num poderoso modelo 12B que ultrapassa os limites da compreensão e geração da língua.
- Multilingue proficiente. Mistral Nemo está equipado com um tokenizador chamado Tekken, que é projetado para aplicações multilingues. Ele suporta mais de 100 idiomas, como inglês, francês, alemão e espanhol. O Tekken é mais eficiente do que o tokenizador Llama 3 na compressão de texto para aproximadamente 85% de todas as línguas, com melhorias significativas no malaiala, hindi, árabe e línguas europeias predominantes.
- Centrada no agente. O Mistral Nemo possui recursos agenticos de primeira linha, incluindo chamada de função nativa e saída JSON.
- Raciocínio avançado. Mistral Nemo demonstra capacidades matemáticas e de raciocínio de última geração dentro de sua categoria de tamanho.
Você pode saber mais sobre os modelos em seus respetivos modelos de cartão:
Gorjeta
Além disso, o MistralAI suporta o uso de uma API personalizada para uso com recursos específicos do modelo. Para usar a API específica do provedor de modelos, verifique a documentação do MistralAI ou consulte a seção de exemplos de inferência para exemplos de código.
Pré-requisitos
Para usar o modelo de chat do Mistral Nemo com o Azure AI Studio, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em APIs sem servidor
O modelo de bate-papo Mistral Nemo pode ser implantado em pontos de extremidade de API sem servidor com faturamento pré-pago. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, mantendo a segurança e a conformidade corporativas de que as organizações precisam.
A implantação em um ponto de extremidade de API sem servidor não requer cota da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Azure AI Studio, o SDK do Azure Machine Learning para Python, a CLI do Azure ou os modelos ARM para implantar o modelo como uma API sem servidor.
O pacote de inferência instalado
Você pode consumir previsões desse modelo usando o @azure-rest/ai-inference
pacote de npm
. Para instalar este pacote, você precisa dos seguintes pré-requisitos:
- Versões LTS do
Node.js
comnpm
. - O URL do ponto de extremidade. Para construir a biblioteca do cliente, você precisa passar a URL do ponto de extremidade. A URL do ponto de extremidade tem o formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, ondeyour-host-name
é o nome exclusivo do host de implantação do modelo eyour-azure-region
é a região do Azure onde o modelo é implantado (por exemplo, eastus2). - Dependendo da implantação do modelo e da preferência de autenticação, você precisa de uma chave para autenticar no serviço ou credenciais de ID do Microsoft Entra. A chave é uma cadeia de caracteres de 32 caracteres.
Depois de ter esses pré-requisitos, instale a biblioteca de inferência do Azure para JavaScript com o seguinte comando:
npm install @azure-rest/ai-inference
Trabalhar com finalizações de chat
Nesta seção, você usa a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para bate-papo.
Gorjeta
A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Azure AI Studio com o mesmo código e estrutura, incluindo o modelo de chat Mistral Nemo.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
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)
);
Obtenha as capacidades do modelo
A /info
rota retorna informações sobre o modelo implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:
var model_info = await client.path("/info").get()
A resposta é a seguinte:
console.log("Model name: ", model_info.body.model_name)
console.log("Model type: ", model_info.body.model_type)
console.log("Model provider name: ", model_info.body.model_provider_name)
Model name: Mistral-Nemo
Model type: chat-completions
Model provider name: MistralAI
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusão de chat para o modelo.
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,
}
});
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
if (isUnexpected(response)) {
throw response.body.error;
}
console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a usage
seção na resposta para ver o número de tokens usados para o prompt, o número total de tokens gerados e o número de tokens usados para a conclusão.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
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();
Para transmitir finalizações, use .asNodeStream()
quando chamar o modelo.
Você pode visualizar como o streaming gera conteúdo:
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 ?? "");
}
}
Explore mais parâmetros suportados pelo cliente de inferência
Explore outros parâmetros que você pode especificar no cliente de inferência. Para obter uma lista completa de todos os parâmetros suportados e sua documentação correspondente, consulte Referência da API de Inferência de Modelo de IA do 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" },
}
});
Se quiser passar um parâmetro que não esteja na lista de parâmetros suportados, você pode passá-lo para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros extras para o modelo.
Criar saídas JSON
O modelo de chat Mistral Nemo pode criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem pode ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo de contexto.
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" }
}
});
Passar parâmetros extras para o modelo
A API de Inferência de Modelo de IA do Azure permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como passar o parâmetro logprobs
extra para o modelo.
Antes de passar parâmetros extras para a API de inferência de modelo de IA do Azure, verifique se seu modelo oferece suporte a esses parâmetros extras. Quando a solicitação é feita para o modelo subjacente, o cabeçalho extra-parameters
é passado para o modelo com o valor pass-through
. Esse valor diz ao ponto de extremidade para passar os parâmetros extras para o modelo. O uso de parâmetros extras com o modelo não garante que o modelo possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros extras são suportados.
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
}
});
Os seguintes parâmetros extras podem ser passados para o modelo de chat Mistral Nemo:
Nome | Descrição | Type |
---|---|---|
ignore_eos |
Se o token EOS deve ser ignorado e continuar gerando tokens depois que o token EOS for gerado. | boolean |
safe_mode |
Se deve injetar um aviso de segurança antes de todas as conversas. | boolean |
Modo de segurança
O modelo de chat Mistral Nemo suporta o parâmetro safe_prompt
. Você pode alternar o prompt seguro para antecipar suas mensagens com o seguinte prompt do sistema:
Ajude sempre com cuidado, respeito e verdade. Responda com a máxima utilidade, mas com segurança. Evite conteúdo prejudicial, antiético, preconceituoso ou negativo. Garantir que as respostas promovem a equidade e a positividade.
A API de Inferência de Modelo de IA do Azure permite que você passe esse parâmetro extra da seguinte maneira:
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
}
});
Utilizar ferramentas
O modelo de chat Mistral Nemo suporta o uso de ferramentas, o que pode ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, confiar em um sistema mais determinístico ou até mesmo em um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite definir ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de olhar a partir de informações de voo de duas cidades diferentes.
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,
},
];
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
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."
}
}
Solicite ao modelo que reserve voos com a ajuda desta função:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
tool_choice: "auto"
}
});
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo do término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo 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);
Para continuar, anexe esta mensagem ao histórico de bate-papo:
messages.push(response_message);
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é anexada ao histórico de bate-papo.
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
}
);
}
Veja a resposta do modelo:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
}
});
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo (visualização) deteta e executa ações em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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;
}
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Modelo de chat Mistral Nemo
O Mistral Nemo é um Modelo de Linguagem (LLM) de ponta com raciocínio de última geração, conhecimento do mundo e recursos de codificação dentro de sua categoria de tamanho.
Mistral Nemo é um modelo 12B, tornando-se um poderoso substituto drop-in para qualquer sistema usando Mistral 7B, que ele substitui. Ele suporta um comprimento de contexto de 128K, e aceita apenas entradas de texto e gera saídas de texto.
Além disso, Mistral Nemo é:
- Desenvolvido em conjunto com a Nvidia. Esta colaboração resultou num poderoso modelo 12B que ultrapassa os limites da compreensão e geração da língua.
- Multilingue proficiente. Mistral Nemo está equipado com um tokenizador chamado Tekken, que é projetado para aplicações multilingues. Ele suporta mais de 100 idiomas, como inglês, francês, alemão e espanhol. O Tekken é mais eficiente do que o tokenizador Llama 3 na compressão de texto para aproximadamente 85% de todas as línguas, com melhorias significativas no malaiala, hindi, árabe e línguas europeias predominantes.
- Centrada no agente. O Mistral Nemo possui recursos agenticos de primeira linha, incluindo chamada de função nativa e saída JSON.
- Raciocínio avançado. Mistral Nemo demonstra capacidades matemáticas e de raciocínio de última geração dentro de sua categoria de tamanho.
Você pode saber mais sobre os modelos em seus respetivos modelos de cartão:
Gorjeta
Além disso, o MistralAI suporta o uso de uma API personalizada para uso com recursos específicos do modelo. Para usar a API específica do provedor de modelos, verifique a documentação do MistralAI ou consulte a seção de exemplos de inferência para exemplos de código.
Pré-requisitos
Para usar o modelo de chat do Mistral Nemo com o Azure AI Studio, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em APIs sem servidor
O modelo de bate-papo Mistral Nemo pode ser implantado em pontos de extremidade de API sem servidor com faturamento pré-pago. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, mantendo a segurança e a conformidade corporativas de que as organizações precisam.
A implantação em um ponto de extremidade de API sem servidor não requer cota da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Azure AI Studio, o SDK do Azure Machine Learning para Python, a CLI do Azure ou os modelos ARM para implantar o modelo como uma API sem servidor.
O pacote de inferência instalado
Você pode consumir previsões desse modelo usando o Azure.AI.Inference
pacote do NuGet. Para instalar este pacote, você precisa dos seguintes pré-requisitos:
- O URL do ponto de extremidade. Para construir a biblioteca do cliente, você precisa passar a URL do ponto de extremidade. A URL do ponto de extremidade tem o formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, ondeyour-host-name
é o nome exclusivo do host de implantação do modelo eyour-azure-region
é a região do Azure onde o modelo é implantado (por exemplo, eastus2). - Dependendo da implantação do modelo e da preferência de autenticação, você precisa de uma chave para autenticar no serviço ou credenciais de ID do Microsoft Entra. A chave é uma cadeia de caracteres de 32 caracteres.
Depois de ter esses pré-requisitos, instale a biblioteca de inferência do Azure AI com o seguinte comando:
dotnet add package Azure.AI.Inference --prerelease
Você também pode autenticar com o Microsoft Entra ID (anteriormente Azure Ative Directory). Para usar provedores de credenciais fornecidos com o SDK do Azure, instale o Azure.Identity
pacote:
dotnet add package Azure.Identity
Importe os seguintes namespaces:
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
Este exemplo também usa os seguintes namespaces, mas nem sempre você pode precisar deles:
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
Trabalhar com finalizações de chat
Nesta seção, você usa a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para bate-papo.
Gorjeta
A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Azure AI Studio com o mesmo código e estrutura, incluindo o modelo de chat Mistral Nemo.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Obtenha as capacidades do modelo
A /info
rota retorna informações sobre o modelo implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:
Response<ModelInfo> modelInfo = client.GetModelInfo();
A resposta é a seguinte:
Console.WriteLine($"Model name: {modelInfo.Value.ModelName}");
Console.WriteLine($"Model type: {modelInfo.Value.ModelType}");
Console.WriteLine($"Model provider name: {modelInfo.Value.ModelProviderName}");
Model name: Mistral-Nemo
Model type: chat-completions
Model provider name: MistralAI
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusão de chat para o modelo.
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);
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Console.WriteLine($"Model: {response.Value.Model}");
Console.WriteLine("Usage:");
Console.WriteLine($"\tPrompt tokens: {response.Value.Usage.PromptTokens}");
Console.WriteLine($"\tTotal tokens: {response.Value.Usage.TotalTokens}");
Console.WriteLine($"\tCompletion tokens: {response.Value.Usage.CompletionTokens}");
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Mistral-Nemo
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a usage
seção na resposta para ver o número de tokens usados para o prompt, o número total de tokens gerados e o número de tokens usados para a conclusão.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
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);
}
Para transmitir conclusão, use CompleteStreamingAsync
o método quando você chamar o modelo. Observe que, neste exemplo, a chamada é encapsulada em um método assíncrono.
Para visualizar a saída, defina um método assíncrono para imprimir o fluxo no console.
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);
}
}
}
Você pode visualizar como o streaming gera conteúdo:
StreamMessageAsync(client).GetAwaiter().GetResult();
Explore mais parâmetros suportados pelo cliente de inferência
Explore outros parâmetros que você pode especificar no cliente de inferência. Para obter uma lista completa de todos os parâmetros suportados e sua documentação correspondente, consulte Referência da API de Inferência de Modelo de IA do 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}");
Se quiser passar um parâmetro que não esteja na lista de parâmetros suportados, você pode passá-lo para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros extras para o modelo.
Criar saídas JSON
O modelo de chat Mistral Nemo pode criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem pode ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo de contexto.
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}");
Passar parâmetros extras para o modelo
A API de Inferência de Modelo de IA do Azure permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como passar o parâmetro logprobs
extra para o modelo.
Antes de passar parâmetros extras para a API de inferência de modelo de IA do Azure, verifique se seu modelo oferece suporte a esses parâmetros extras. Quando a solicitação é feita para o modelo subjacente, o cabeçalho extra-parameters
é passado para o modelo com o valor pass-through
. Esse valor diz ao ponto de extremidade para passar os parâmetros extras para o modelo. O uso de parâmetros extras com o modelo não garante que o modelo possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros extras são suportados.
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}");
Os seguintes parâmetros extras podem ser passados para o modelo de chat Mistral Nemo:
Nome | Descrição | Type |
---|---|---|
ignore_eos |
Se o token EOS deve ser ignorado e continuar gerando tokens depois que o token EOS for gerado. | boolean |
safe_mode |
Se deve injetar um aviso de segurança antes de todas as conversas. | boolean |
Modo de segurança
O modelo de chat Mistral Nemo suporta o parâmetro safe_prompt
. Você pode alternar o prompt seguro para antecipar suas mensagens com o seguinte prompt do sistema:
Ajude sempre com cuidado, respeito e verdade. Responda com a máxima utilidade, mas com segurança. Evite conteúdo prejudicial, antiético, preconceituoso ou negativo. Garantir que as respostas promovem a equidade e a positividade.
A API de Inferência de Modelo de IA do Azure permite que você passe esse parâmetro extra da seguinte maneira:
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}");
Utilizar ferramentas
O modelo de chat Mistral Nemo suporta o uso de ferramentas, o que pode ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, confiar em um sistema mais determinístico ou até mesmo em um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite definir ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de olhar a partir de informações de voo de duas cidades diferentes.
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);
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
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."
});
}
Solicite ao modelo que reserve voos com a ajuda desta função:
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);
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo do término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo 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}");
Para continuar, anexe esta mensagem ao histórico de bate-papo:
requestOptions.Messages.Add(new ChatRequestAssistantMessage(response.Value.Choices[0].Message));
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é anexada ao histórico de bate-papo.
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");
}
Veja a resposta do modelo:
response = client.Complete(requestOptions);
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo (visualização) deteta e executa ações em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
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;
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Modelo de chat Mistral Nemo
O Mistral Nemo é um Modelo de Linguagem (LLM) de ponta com raciocínio de última geração, conhecimento do mundo e recursos de codificação dentro de sua categoria de tamanho.
Mistral Nemo é um modelo 12B, tornando-se um poderoso substituto drop-in para qualquer sistema usando Mistral 7B, que ele substitui. Ele suporta um comprimento de contexto de 128K, e aceita apenas entradas de texto e gera saídas de texto.
Além disso, Mistral Nemo é:
- Desenvolvido em conjunto com a Nvidia. Esta colaboração resultou num poderoso modelo 12B que ultrapassa os limites da compreensão e geração da língua.
- Multilingue proficiente. Mistral Nemo está equipado com um tokenizador chamado Tekken, que é projetado para aplicações multilingues. Ele suporta mais de 100 idiomas, como inglês, francês, alemão e espanhol. O Tekken é mais eficiente do que o tokenizador Llama 3 na compressão de texto para aproximadamente 85% de todas as línguas, com melhorias significativas no malaiala, hindi, árabe e línguas europeias predominantes.
- Centrada no agente. O Mistral Nemo possui recursos agenticos de primeira linha, incluindo chamada de função nativa e saída JSON.
- Raciocínio avançado. Mistral Nemo demonstra capacidades matemáticas e de raciocínio de última geração dentro de sua categoria de tamanho.
Você pode saber mais sobre os modelos em seus respetivos modelos de cartão:
Gorjeta
Além disso, o MistralAI suporta o uso de uma API personalizada para uso com recursos específicos do modelo. Para usar a API específica do provedor de modelos, verifique a documentação do MistralAI ou consulte a seção de exemplos de inferência para exemplos de código.
Pré-requisitos
Para usar o modelo de chat do Mistral Nemo com o Azure AI Studio, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em APIs sem servidor
O modelo de bate-papo Mistral Nemo pode ser implantado em pontos de extremidade de API sem servidor com faturamento pré-pago. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, mantendo a segurança e a conformidade corporativas de que as organizações precisam.
A implantação em um ponto de extremidade de API sem servidor não requer cota da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Azure AI Studio, o SDK do Azure Machine Learning para Python, a CLI do Azure ou os modelos ARM para implantar o modelo como uma API sem servidor.
Um cliente REST
Os modelos implantados com a API de inferência de modelo de IA do Azure podem ser consumidos usando qualquer cliente REST. Para usar o cliente REST, você precisa dos seguintes pré-requisitos:
- Para construir as solicitações, você precisa passar a URL do ponto de extremidade. A URL do ponto de extremidade tem o formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, ondeyour-host-name`` is your unique model deployment host name and
your-azure-region'' é a região do Azure onde o modelo é implantado (por exemplo, eastus2). - Dependendo da implantação do modelo e da preferência de autenticação, você precisa de uma chave para autenticar no serviço ou credenciais de ID do Microsoft Entra. A chave é uma cadeia de caracteres de 32 caracteres.
Trabalhar com finalizações de chat
Nesta seção, você usa a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para bate-papo.
Gorjeta
A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Azure AI Studio com o mesmo código e estrutura, incluindo o modelo de chat Mistral Nemo.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
Obtenha as capacidades do modelo
A /info
rota retorna informações sobre o modelo implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:
GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
A resposta é a seguinte:
{
"model_name": "Mistral-Nemo",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
Criar uma solicitação de conclusão de bate-papo
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusão de chat para o modelo.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
A resposta é a seguinte, onde você pode ver as estatísticas de uso do modelo:
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Inspecione a usage
seção na resposta para ver o número de tokens usados para o prompt, o número total de tokens gerados e o número de tokens usados para a conclusão.
Transmitir conteúdo
Por padrão, a API de conclusão retorna todo o conteúdo gerado em uma única resposta. Se você estiver gerando longas conclusões, esperar pela resposta pode levar muitos segundos.
Você pode transmitir o conteúdo para obtê-lo à medida que ele está sendo gerado. O streaming de conteúdo permite que você comece a processar a conclusão à medida que o conteúdo fica disponível. Esse modo retorna um objeto que transmite a resposta como eventos enviados pelo servidor somente dados. Extraia partes do campo delta, em vez do campo de mensagem.
{
"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
}
Você pode visualizar como o streaming gera conteúdo:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
A última mensagem no fluxo foi finish_reason
definida, indicando o motivo para o processo de geração parar.
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"delta": {
"content": ""
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Explore mais parâmetros suportados pelo cliente de inferência
Explore outros parâmetros que você pode especificar no cliente de inferência. Para obter uma lista completa de todos os parâmetros suportados e sua documentação correspondente, consulte Referência da API de Inferência de Modelo de IA do 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-Nemo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 19,
"total_tokens": 91,
"completion_tokens": 72
}
}
Se quiser passar um parâmetro que não esteja na lista de parâmetros suportados, você pode passá-lo para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros extras para o modelo.
Criar saídas JSON
O modelo de chat Mistral Nemo pode criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem pode ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo de contexto.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that always generate responses in JSON format, using the following format: { \"answer\": \"response\" }"
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"response_format": { "type": "json_object" }
}
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718727522,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"answer\": \"There are approximately 7,117 living languages in the world today, according to the latest estimates. However, this number can vary as some languages become extinct and others are newly discovered or classified.\"}",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 39,
"total_tokens": 87,
"completion_tokens": 48
}
}
Passar parâmetros extras para o modelo
A API de Inferência de Modelo de IA do Azure permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como passar o parâmetro logprobs
extra para o modelo.
Antes de passar parâmetros extras para a API de inferência de modelo de IA do Azure, verifique se seu modelo oferece suporte a esses parâmetros extras. Quando a solicitação é feita para o modelo subjacente, o cabeçalho extra-parameters
é passado para o modelo com o valor pass-through
. Esse valor diz ao ponto de extremidade para passar os parâmetros extras para o modelo. O uso de parâmetros extras com o modelo não garante que o modelo possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros extras são suportados.
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
}
Os seguintes parâmetros extras podem ser passados para o modelo de chat Mistral Nemo:
Nome | Descrição | Type |
---|---|---|
ignore_eos |
Se o token EOS deve ser ignorado e continuar gerando tokens depois que o token EOS for gerado. | boolean |
safe_mode |
Se deve injetar um aviso de segurança antes de todas as conversas. | boolean |
Modo de segurança
O modelo de chat Mistral Nemo suporta o parâmetro safe_prompt
. Você pode alternar o prompt seguro para antecipar suas mensagens com o seguinte prompt do sistema:
Ajude sempre com cuidado, respeito e verdade. Responda com a máxima utilidade, mas com segurança. Evite conteúdo prejudicial, antiético, preconceituoso ou negativo. Garantir que as respostas promovem a equidade e a positividade.
A API de Inferência de Modelo de IA do Azure permite que você passe esse parâmetro extra da seguinte maneira:
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
}
Utilizar ferramentas
O modelo de chat Mistral Nemo suporta o uso de ferramentas, o que pode ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, confiar em um sistema mais determinístico ou até mesmo em um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite definir ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de olhar a partir de informações de voo de duas cidades diferentes.
{
"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"
]
}
}
}
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
Solicite ao modelo que reserve voos com a ajuda desta função:
{
"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"
]
}
}
}
]
}
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo do término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726007,
"model": "Mistral-Nemo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "abc0dF1gh",
"type": "function",
"function": {
"name": "get_flight_info",
"arguments": "{\"origin_city\": \"Miami\", \"destination_city\": \"Seattle\"}",
"call_id": null
}
}
]
},
"finish_reason": "tool_calls",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 190,
"total_tokens": 226,
"completion_tokens": 36
}
}
Para continuar, anexe esta mensagem ao histórico de bate-papo:
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é anexada ao histórico de bate-papo.
Veja a resposta do modelo:
{
"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"]
}
}
}
]
}
Aplicar a segurança do conteúdo
A API de inferência de modelo de IA do Azure dá suporte à segurança de conteúdo de IA do Azure. Quando você usa implantações com a segurança de conteúdo de IA do Azure ativada, as entradas e saídas passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo (visualização) deteta e executa ações em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída.
O exemplo a seguir mostra como manipular eventos quando o modelo deteta conteúdo prejudicial no prompt de entrada e a segurança do conteúdo está habilitada.
{
"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
}
}
Gorjeta
Para saber mais sobre como você pode configurar e controlar as configurações de segurança de conteúdo do Azure AI, consulte a documentação de segurança de conteúdo do Azure AI.
Mais exemplos de inferência
Para obter mais exemplos de como usar modelos Mistral, consulte os seguintes exemplos e tutoriais:
Description | Linguagem | Exemplo |
---|---|---|
Pedido CURL | Bash | Ligação |
Pacote Azure AI Inference para JavaScript | JavaScript | Ligação |
Pacote de inferência do Azure AI para Python | Python | Ligação |
Solicitações da Web Python | Python | Ligação |
OpenAI SDK (experimental) | Python | Ligação |
LangChain | Python | Ligação |
Mistral AI | Python | Ligação |
LiteLLM | Python | Ligação |
Considerações sobre custo e cota para modelos Mistral implantados como pontos de extremidade de API sem servidor
A quota é gerida por implementação. Cada implementação tem um limite de taxa de 200 000 tokens por minuto e 1000 pedidos de API por minuto. No entanto, atualmente, limitamos uma implementação por modelo por projeto. Contacte o Suporte do Microsoft Azure se os limites de taxa atuais não forem suficientes para os seus cenários.
Os modelos Mistral implantados como uma API sem servidor são oferecidos pelo MistralAI por meio do Azure Marketplace e integrados ao Azure AI Studio para uso. Pode obter os preços do Azure Marketplace quando implementar o modelo.
Sempre que um projeto subscreve uma determinada oferta do Azure Marketplace, é criado um novo recurso para controlar os custos associados ao seu consumo. O mesmo recurso é usado para monitorizar os custos associados à inferência; no entanto, estão disponíveis vários medidores para monitorizar cada cenário de forma independente.
Para obter mais informações sobre como controlar os custos, consulte Monitorizar custos dos modelos oferecidos através do Azure Marketplace.
Conteúdos relacionados
- API de Inferência de Modelos do Azure AI
- Implantar modelos como APIs sem servidor
- Consumir pontos de extremidade de API sem servidor de um projeto ou hub diferente do Azure AI Studio
- Disponibilidade de região para modelos em pontos de extremidade de API sem servidor
- Planear e gerir custos (marketplace)