Como usar os modelos de chat Mistral-7B e Mixtral
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 os modelos de bate-papo Mistral-7B e Mixtral 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.
Modelos de chat Mistral-7B e Mixtral
Os modelos de chat Mistral-7B e Mixtral incluem os seguintes modelos:
O Mistral-7B-Instruct Large Language Model (LLM) é 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 Janela Deslizante
- Tokenizador BPE de fallback de bytes
Estão disponíveis os seguintes modelos:
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 os modelos de chat Mistral-7B e Mixtral com o Azure AI Studio, 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, você pode usar nosso acesso à cota temporária selecionando a opção Quero usar a 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 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 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 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"]),
)
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(),
)
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: mistralai-Mistral-7B-Instruct-v01
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?"),
],
)
Nota
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não suportam mensagens do sistema (role="system"
). Quando você usa a API de inferência de modelo de IA do Azure, as mensagens do sistema são convertidas em mensagens do usuário, que é o recurso mais próximo disponível. Essa tradução é oferecida por conveniência, mas é importante que você verifique se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
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: mistralai-Mistral-7B-Instruct-v01
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() },
)
Aviso
Os modelos Mistral não suportam a formatação de saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não é garantido que tais saídas sejam JSON válidas.
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.
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 os modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Type |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizador) para um valor de viés associado de -100 a 100. Matematicamente, o viés é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; Valores como -100 ou 100 devem resultar em um banimento ou seleção exclusiva do token relevante. | float |
logprobs |
Se deve retornar as probabilidades de log dos tokens de saída ou não. Se true, retorna 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 de retornar em cada posição de token, cada um com uma probabilidade de log associada. logprobs deve ser definido como true se este parâmetro for usado. |
float |
n |
Quantas opções de conclusão de chat gerar para cada mensagem de entrada. Observe que 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 Mistral-7B-Instruct Large Language Model (LLM) é 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 Janela Deslizante
- Tokenizador BPE de fallback de bytes
Estão disponíveis os seguintes modelos:
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 os modelos de chat Mistral-7B e Mixtral com o Azure AI Studio, 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, você pode usar nosso acesso à cota temporária selecionando a opção Quero usar a 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 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 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 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)
);
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()
);
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: mistralai-Mistral-7B-Instruct-v01
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,
}
});
Nota
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não suportam mensagens do sistema (role="system"
). Quando você usa a API de inferência de modelo de IA do Azure, as mensagens do sistema são convertidas em mensagens do usuário, que é o recurso mais próximo disponível. Essa tradução é oferecida por conveniência, mas é importante que você verifique se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
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: mistralai-Mistral-7B-Instruct-v01
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" },
}
});
Aviso
Os modelos Mistral não suportam a formatação de saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não é garantido que tais saídas sejam JSON válidas.
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.
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 os modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Type |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizador) para um valor de viés associado de -100 a 100. Matematicamente, o viés é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; Valores como -100 ou 100 devem resultar em um banimento ou seleção exclusiva do token relevante. | float |
logprobs |
Se deve retornar as probabilidades de log dos tokens de saída ou não. Se true, retorna 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 de retornar em cada posição de token, cada um com uma probabilidade de log associada. logprobs deve ser definido como true se este parâmetro for usado. |
float |
n |
Quantas opções de conclusão de chat gerar para cada mensagem de entrada. Observe que 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 Mistral-7B-Instruct Large Language Model (LLM) é 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 Janela Deslizante
- Tokenizador BPE de fallback de bytes
Estão disponíveis os seguintes modelos:
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 os modelos de chat Mistral-7B e Mixtral com o Azure AI Studio, 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, você pode usar nosso acesso à cota temporária selecionando a opção Quero usar a 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 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 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 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"))
);
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)
);
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: mistralai-Mistral-7B-Instruct-v01
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);
Nota
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não suportam mensagens do sistema (role="system"
). Quando você usa a API de inferência de modelo de IA do Azure, as mensagens do sistema são convertidas em mensagens do usuário, que é o recurso mais próximo disponível. Essa tradução é oferecida por conveniência, mas é importante que você verifique se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
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: mistralai-Mistral-7B-Instruct-v01
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}");
Aviso
Os modelos Mistral não suportam a formatação de saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não é garantido que tais saídas sejam JSON válidas.
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.
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 os modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Type |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizador) para um valor de viés associado de -100 a 100. Matematicamente, o viés é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; Valores como -100 ou 100 devem resultar em um banimento ou seleção exclusiva do token relevante. | float |
logprobs |
Se deve retornar as probabilidades de log dos tokens de saída ou não. Se true, retorna 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 de retornar em cada posição de token, cada um com uma probabilidade de log associada. logprobs deve ser definido como true se este parâmetro for usado. |
float |
n |
Quantas opções de conclusão de chat gerar para cada mensagem de entrada. Observe que 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 Mistral-7B-Instruct Large Language Model (LLM) é 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 Janela Deslizante
- Tokenizador BPE de fallback de bytes
Estão disponíveis os seguintes modelos:
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 os modelos de chat Mistral-7B e Mixtral com o Azure AI Studio, 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, você pode usar nosso acesso à cota temporária selecionando a opção Quero usar a cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.
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 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 uma URL de ponto de extremidade e uma chave que são armazenadas 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.
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": "mistralai-Mistral-7B-Instruct-v01",
"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?"
}
]
}
Nota
mistralai-Mistral-7B-Instruct-v01, mistralai-Mistral-7B-Instruct-v02 e mistralai-Mixtral-8x22B-Instruct-v0-1 não suportam mensagens do sistema (role="system"
). Quando você usa a API de inferência de modelo de IA do Azure, as mensagens do sistema são convertidas em mensagens do usuário, que é o recurso mais próximo disponível. Essa tradução é oferecida por conveniência, mas é importante que você verifique se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.
A resposta é a seguinte, onde 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 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": "mistralai-Mistral-7B-Instruct-v01",
"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": "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
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": "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
Os modelos Mistral não suportam a formatação de saída JSON (response_format = { "type": "json_object" }
). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não é garantido que tais saídas sejam JSON válidas.
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.
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 os modelos de chat Mistral-7B e Mixtral:
Nome | Descrição | Type |
---|---|---|
logit_bias |
Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizador) para um valor de viés associado de -100 a 100. Matematicamente, o viés é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas valores entre -1 e 1 devem diminuir ou aumentar a probabilidade de seleção; Valores como -100 ou 100 devem resultar em um banimento ou seleção exclusiva do token relevante. | float |
logprobs |
Se deve retornar as probabilidades de log dos tokens de saída ou não. Se true, retorna 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 de retornar em cada posição de token, cada um com uma probabilidade de log associada. logprobs deve ser definido como true se este parâmetro for usado. |
float |
n |
Quantas opções de conclusão de chat gerar para cada mensagem de entrada. Observe que você será cobrado com base no número de tokens gerados em todas as opções. | int |
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 em 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 aumentar a escala conforme necessário. Você pode monitorar o custo da instância de computação no portal do Azure.
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)