Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares para Versões Prévias do Microsoft Azure.
Neste artigo, você aprenderá sobre os modelos de chat Mistral-7B e Mixtral e como usá-los. O Mistral AI oferece duas categorias de modelos, especificamente:
- Modelos Premium: incluem modelos Mistral Large, Mistral Small, Mistral-OCR-2503, Mistral Medium 3 (25.05) e Ministral 3B e estão disponíveis como API sem servidor com cobrança paga conforme o uso.
- Modelos abertos: incluem Codestral e Mistral Nemo (que estão disponíveis como implantações de API sem servidor) e Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 e Mistral-7B-v01 (que estão disponíveis para download e execução em pontos de extremidade gerenciados auto-hospedados).
Importante
Os modelos que estão em versão prévia são marcados como versão prévia em seus cartões de modelo no catálogo de modelos.
Modelos de chat Mistral-7B e Mixtral
Os modelos de chat Mistral-7B e Mixtral incluem os seguintes modelos:
O Modelo de Linguagem Grande (LLM) Mistral-7B-Instruct é uma versão instruída e ajustada do Mistral-7B, um modelo de transformador com as seguintes opções de arquitetura:
- Atenção de consulta agrupada
- Atenção de janela deslizante
- Token de BPE de fallback de byte
Os seguintes modelos estão disponíveis:
Dica
Além disso, o MistralAI dá suporte ao 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 confira a seção de exemplos de inferência para codificar exemplos.
Pré-requisitos
Para usar modelos de chat Mistral-7B e Mixtral com a Fábrica de IA do Azure, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em uma computação gerenciada auto-hospedada
Os modelos de chat Mistral-7B e Mixtral podem ser implantados em nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.
Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.
O pacote de inferência instalado
É possível consumir previsões desse modelo usando o pacote azure-ai-inference
com o Python. Para instalar esse pacote, você precisará dos seguintes pré-requisitos:
- Python 3.8 ou posterior instalado, incluindo pip.
- A URL do ponto de extremidade. Para construir a biblioteca de clientes, você precisará passar a URL do ponto de extremidade. A URL do ponto de extremidade tem a forma
https://your-host-name.your-azure-region.inference.ai.azure.com
, em queyour-host-name
é seu nome de host de implantação de modelo exclusivo eyour-azure-region
é a região do Azure em que o modelo é implantado (por exemplo, eastus2). - Dependendo da sua preferência de autenticação e implantação de modelo, você precisará de uma chave para autenticar no serviço ou credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.
Depois de ter esses pré-requisitos, instale o pacote de inferência de IA do Azure 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 preenchimentos de chat
Nesta seção, você utilizará a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para conversas.
Dica
A API de Inferência de Modelo permite que você converse com a maioria dos modelos implantados no portal do Azure AI Foundry com o mesmo código e estrutura, incluindo modelos de chat Mistral-7B e Mixtral.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados 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"]),
)
Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.
import os
from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential
client = ChatCompletionsClient(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
)
Obter os recursos do modelo
A rota /info
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: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
Como criar uma solicitação de conclusão de chat
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões 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?"),
],
)
Observação
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não dão suporte a mensagens do sistema (role="system"
). Quando você usa a API de Inferência de Modelo, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
A resposta é a seguinte, em que 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: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a seção usage
na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.
Como transmitir conteúdos
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar completamentos longos, você pode precisar aguardar a resposta por vários segundos.
É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. 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 conclusões, defina stream=True
ao chamar o modelo.
Para exibir a saída, defina uma função auxiliar a fim de imprimir a transmissão.
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="")
É possível observar como o streaming gera conteúdos:
print_stream(result)
Explore mais parâmetros suportados pelo cliente de inferência
Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e sua documentação correspondente, consulte a referência da API de Inferência de Modelo.
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() },
)
Aviso
Modelos da Mistral não dão suporte à formatação com saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, essas saídas não são garantidas como JSON válidas.
Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros adicionais para o modelo.
Passar parâmetros adicionais para o modelo
A API de Inferência de Modelo permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs
ao modelo.
Antes de passar parâmetros extras para a API de Inferência de Modelo, verifique se o modelo dá suporte a esses parâmetros extras. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters
é transmitido a ele com o valor pass-through
. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.
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 modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Tipo |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de desvio associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia por modelo, mas os valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; valores como -100 ou 100 devem resultar em uma proibição ou seleção exclusiva do token relevante. | float |
logprobs |
Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content de message . |
int |
top_logprobs |
Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. |
float |
n |
Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Você será cobrado com base no número de tokens gerados em todas as opções. | int |
Modelos de chat Mistral-7B e Mixtral
Os modelos de chat Mistral-7B e Mixtral incluem os seguintes modelos:
O Modelo de Linguagem Grande (LLM) Mistral-7B-Instruct é uma versão instruída e ajustada do Mistral-7B, um modelo de transformador com as seguintes opções de arquitetura:
- Atenção de consulta agrupada
- Atenção de janela deslizante
- Token de BPE de fallback de byte
Os seguintes modelos estão disponíveis:
Dica
Além disso, o MistralAI dá suporte ao 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 confira a seção de exemplos de inferência para codificar exemplos.
Pré-requisitos
Para usar modelos de chat Mistral-7B e Mixtral com a Fábrica de IA do Azure, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em uma computação gerenciada auto-hospedada
Os modelos de chat Mistral-7B e Mixtral podem ser implantados em nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.
Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.
O pacote de inferência instalado
É possível consumir previsões desse modelo usando o pacote @azure-rest/ai-inference
de npm
. Para instalar esse pacote, você precisará dos seguintes pré-requisitos:
- Versões LTS de
Node.js
comnpm
. - A URL do ponto de extremidade. Para construir a biblioteca de clientes, você precisará passar a URL do ponto de extremidade. A URL do ponto de extremidade tem a forma
https://your-host-name.your-azure-region.inference.ai.azure.com
, em queyour-host-name
é seu nome de host de implantação de modelo exclusivo eyour-azure-region
é a região do Azure em que o modelo é implantado (por exemplo, eastus2). - Dependendo da sua preferência de autenticação e implantação de modelo, você precisará de uma chave para autenticar no serviço ou credenciais do Microsoft Entra ID. 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 preenchimentos de chat
Nesta seção, você utilizará a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para conversas.
Dica
A API de Inferência de Modelo permite que você converse com a maioria dos modelos implantados no portal do Azure AI Foundry com o mesmo código e estrutura, incluindo modelos de chat Mistral-7B e Mixtral.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados 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)
);
Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.
import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { DefaultAzureCredential } from "@azure/identity";
const client = new ModelClient(
process.env.AZURE_INFERENCE_ENDPOINT,
new DefaultAzureCredential()
);
Obter os recursos do modelo
A rota /info
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: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
Como criar uma solicitação de conclusão de chat
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões 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,
}
});
Observação
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não dão suporte a mensagens do sistema (role="system"
). Quando você usa a API de Inferência de Modelo, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
A resposta é a seguinte, em que 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: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a seção usage
na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.
Como transmitir conteúdos
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar completamentos longos, você pode precisar aguardar a resposta por vários segundos.
É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. 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 conclusões, use .asNodeStream()
quando chamar o modelo.
É possível observar como o streaming gera conteúdos:
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
Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e sua documentação correspondente, consulte a referência da API de Inferência de 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,
presence_penalty: "0.1",
frequency_penalty: "0.8",
max_tokens: 2048,
stop: ["<|endoftext|>"],
temperature: 0,
top_p: 1,
response_format: { type: "text" },
}
});
Aviso
Modelos da Mistral não dão suporte à formatação com saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, essas saídas não são garantidas como JSON válidas.
Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros adicionais para o modelo.
Passar parâmetros adicionais para o modelo
A API de Inferência de Modelo permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs
ao modelo.
Antes de passar parâmetros extras para a API de Inferência de Modelo, verifique se o modelo dá suporte a esses parâmetros extras. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters
é transmitido a ele com o valor pass-through
. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.
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 modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Tipo |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de desvio associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia por modelo, mas os valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; valores como -100 ou 100 devem resultar em uma proibição ou seleção exclusiva do token relevante. | float |
logprobs |
Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content de message . |
int |
top_logprobs |
Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. |
float |
n |
Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Você será cobrado com base no número de tokens gerados em todas as opções. | int |
Modelos de chat Mistral-7B e Mixtral
Os modelos de chat Mistral-7B e Mixtral incluem os seguintes modelos:
O Modelo de Linguagem Grande (LLM) Mistral-7B-Instruct é uma versão instruída e ajustada do Mistral-7B, um modelo de transformador com as seguintes opções de arquitetura:
- Atenção de consulta agrupada
- Atenção de janela deslizante
- Token de BPE de fallback de byte
Os seguintes modelos estão disponíveis:
Dica
Além disso, o MistralAI dá suporte ao 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 confira a seção de exemplos de inferência para codificar exemplos.
Pré-requisitos
Para usar modelos de chat Mistral-7B e Mixtral com a Fábrica de IA do Azure, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em uma computação gerenciada auto-hospedada
Os modelos de chat Mistral-7B e Mixtral podem ser implantados em nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.
Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.
O pacote de inferência instalado
Você pode consumir as previsões desse modelo usando o pacote Azure.AI.Inference
do NuGet. Para instalar esse pacote, você precisará dos seguintes pré-requisitos:
- A URL do ponto de extremidade. Para construir a biblioteca de clientes, você precisará passar a URL do ponto de extremidade. A URL do ponto de extremidade tem a forma
https://your-host-name.your-azure-region.inference.ai.azure.com
, em queyour-host-name
é seu nome de host de implantação de modelo exclusivo eyour-azure-region
é a região do Azure em que o modelo é implantado (por exemplo, eastus2). - Dependendo da sua preferência de autenticação e implantação de modelo, você precisará de uma chave para autenticar no serviço ou credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.
Depois de ter esses pré-requisitos, instale a biblioteca de inferência de IA do Azure com o seguinte comando:
dotnet add package Azure.AI.Inference --prerelease
Também é possível autenticar com o Microsoft Entra ID (anteriormente Azure Active Directory). Para usar provedores de credenciais fornecidos com o SDK do Azure, instale o pacote Azure.Identity
:
dotnet add package Azure.Identity
Importe os seguintes namespaces:
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
Esse exemplo também usa os seguintes namespaces, mas você nem sempre precisará deles:
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
Trabalhar com preenchimentos de chat
Nesta seção, você utilizará a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para conversas.
Dica
A API de Inferência de Modelo permite que você converse com a maioria dos modelos implantados no portal do Azure AI Foundry com o mesmo código e estrutura, incluindo modelos de chat Mistral-7B e Mixtral.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados em variáveis de ambiente.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.
client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new DefaultAzureCredential(includeInteractiveCredentials: true)
);
Obter os recursos do modelo
A rota /info
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: mistralai-Mistral-7B-Instruct-v01
Model type: chat-completions
Model provider name: MistralAI
Como criar uma solicitação de conclusão de chat
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões 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);
Observação
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não dão suporte a mensagens do sistema (role="system"
). Quando você usa a API de Inferência de Modelo, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
A resposta é a seguinte, em que 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: mistralai-Mistral-7B-Instruct-v01
Usage:
Prompt tokens: 19
Total tokens: 91
Completion tokens: 72
Inspecione a seção usage
na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.
Como transmitir conteúdos
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar completamentos longos, você pode precisar aguardar a resposta por vários segundos.
É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. 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 preenchimentos, use o método CompleteStreamingAsync
ao chamar o modelo. Observe que, neste exemplo, a chamada é encapsulada em um método assíncrono.
Para exibir a saída, defina um método assíncrono a fim de 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);
}
}
}
É possível observar como o streaming gera conteúdos:
StreamMessageAsync(client).GetAwaiter().GetResult();
Explore mais parâmetros suportados pelo cliente de inferência
Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e sua documentação correspondente, consulte a referência da API de Inferência de Modelo.
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}");
Aviso
Modelos da Mistral não dão suporte à formatação com saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, essas saídas não são garantidas como JSON válidas.
Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros adicionais para o modelo.
Passar parâmetros adicionais para o modelo
A API de Inferência de Modelo permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs
ao modelo.
Antes de passar parâmetros extras para a API de Inferência de Modelo, verifique se o modelo dá suporte a esses parâmetros extras. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters
é transmitido a ele com o valor pass-through
. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.
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 modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Tipo |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de desvio associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia por modelo, mas os valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; valores como -100 ou 100 devem resultar em uma proibição ou seleção exclusiva do token relevante. | float |
logprobs |
Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content de message . |
int |
top_logprobs |
Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. |
float |
n |
Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Você será cobrado com base no número de tokens gerados em todas as opções. | int |
Modelos de chat Mistral-7B e Mixtral
Os modelos de chat Mistral-7B e Mixtral incluem os seguintes modelos:
O Modelo de Linguagem Grande (LLM) Mistral-7B-Instruct é uma versão instruída e ajustada do Mistral-7B, um modelo de transformador com as seguintes opções de arquitetura:
- Atenção de consulta agrupada
- Atenção de janela deslizante
- Token de BPE de fallback de byte
Os seguintes modelos estão disponíveis:
Dica
Além disso, o MistralAI dá suporte ao 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 confira a seção de exemplos de inferência para codificar exemplos.
Pré-requisitos
Para usar modelos de chat Mistral-7B e Mixtral com a Fábrica de IA do Azure, você precisa dos seguintes pré-requisitos:
Uma implantação de modelo
Implantação em uma computação gerenciada auto-hospedada
Os modelos de chat Mistral-7B e Mixtral podem ser implantados em nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.
Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.
Um cliente REST
Modelos implantados com a API de Inferência de Modelo podem ser consumidos usando qualquer cliente REST. Para usar o cliente REST, você precisará dos seguintes pré-requisitos:
- Para construir as solicitações, você precisará passar a URL do ponto de extremidade. A URL do ponto de extremidade tem a forma
https://your-host-name.your-azure-region.inference.ai.azure.com
, em queyour-host-name`` is your unique model deployment host name and
your-azure-region`` é a região do Azure em que o modelo é implantado (por exemplo, eastus2). - Dependendo da sua preferência de autenticação e implantação de modelo, você precisará de uma chave para autenticar no serviço ou credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.
Trabalhar com preenchimentos de chat
Nesta seção, você utilizará a API de inferência de modelo de IA do Azure com um modelo de conclusão de chat para conversas.
Dica
A API de Inferência de Modelo permite que você converse com a maioria dos modelos implantados no portal do Azure AI Foundry com o mesmo código e estrutura, incluindo modelos de chat Mistral-7B e Mixtral.
Criar um cliente para consumir o modelo
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados em variáveis de ambiente.
Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.
Obter os recursos do modelo
A rota /info
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": "mistralai-Mistral-7B-Instruct-v01",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
Como criar uma solicitação de conclusão de chat
O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões de chat para o modelo.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Observação
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não dão suporte a mensagens do sistema (role="system"
). Quando você usa a API de Inferência de Modelo, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726686,
"model": "mistralai-Mistral-7B-Instruct-v01",
"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 seção usage
na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.
Como transmitir conteúdos
Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar completamentos longos, você pode precisar aguardar a resposta por vários segundos.
É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. 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
}
É possível observar como o streaming gera conteúdos:
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "mistralai-Mistral-7B-Instruct-v01",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": ""
},
"finish_reason": null,
"logprobs": null
}
]
}
A última mensagem no fluxo tem finish_reason
definido, o que indica o motivo da interrupção do processo de geração.
{
"id": "23b54589eba14564ad8a2e6978775a39",
"object": "chat.completion.chunk",
"created": 1718726371,
"model": "mistralai-Mistral-7B-Instruct-v01",
"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
Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e sua documentação correspondente, consulte a referência da API de Inferência de Modelo.
{
"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": "mistralai-Mistral-7B-Instruct-v01",
"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
}
}
Aviso
Modelos da Mistral não dão suporte à formatação com saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, essas saídas não são garantidas como JSON válidas.
Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Passar parâmetros adicionais para o modelo.
Passar parâmetros adicionais para o modelo
A API de Inferência de Modelo permite que você passe parâmetros extras para o modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs
ao modelo.
Antes de passar parâmetros extras para a API de Inferência de Modelo, verifique se o modelo dá suporte a esses parâmetros extras. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters
é transmitido a ele com o valor pass-through
. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.
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 modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Tipo |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de desvio associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia por modelo, mas os valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; valores como -100 ou 100 devem resultar em uma proibição ou seleção exclusiva do token relevante. | float |
logprobs |
Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content de message . |
int |
top_logprobs |
Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. |
float |
n |
Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Você será cobrado com base no número de tokens gerados em todas as opções. | int |
Mais exemplos de inferência
Para mais exemplos de como usar modelos Mistral, veja os seguintes exemplos e tutoriais:
Descrição | Idioma | Amostra |
---|---|---|
Solicitação CURL | Bash (interpretador de comandos Unix) | Link |
Pacote de inferência da IA do Azure para C# | C# | Link |
Pacote de inferência da IA do Azure para JavaScript | JavaScript | Link |
Pacote de inferência da IA do Azure para Python | Python | Link |
Solicitações da Web do Python | Python | Link |
SDK do OpenAI (experimental) | Python | Link |
LangChain | Python | Link |
IA Mistral | Python | Link |
LiteLLM | Python | Link |
Considerações de custo e cota para modelos Mistral implantados na computação gerenciada
Os modelos Mistral implantados na computação gerenciada são cobrados com base nas horas principais da instância de computação associada. O custo da instância de computação é determinado pelo tamanho da instância, pelo número de instâncias em execução e pela duração da execução.
É uma boa prática começar com um número baixo de instâncias e escalar verticalmente conforme necessário. Você pode monitorar o custo da instância de computação no portal do Azure.