Cómo usar modelos de chat de Mistral-7B y Mixtral
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
En este artículo, obtendrá información sobre los modelos de chat de Mistral-7B y Mixtral y cómo usarlos. La IA de Mistral ofrece dos categorías de modelos. Los modelos premium, incluyendo Mistral Large y Mistral Small, están disponibles como API sin servidor con facturación basada en tokens de pago por uso. Los modelos abiertos, incluyendo Mistral Nemo, Mixtral-8x7B-Instruct-v01, Mixtral-8x7B-v01, Mistral-7B-Instruct-v01 y Mistral-7B-v01 están disponibles para descargarse y ejecutarse también en puntos de conexión administrados autohospedados.
Importante
Los modelos que están en versión preliminar se marcan como versión preliminar en sus tarjetas de modelo en el catálogo de modelos.
Modelos de chat de Mistral-7B y Mixtral
Los modelos de chat Mistral-7B y Mixtral incluyen los siguientes modelos:
El modelo de lenguaje grande Mistral-7B-Instruct (LLM) es una versión instruida y ajustada del Mistral-7B, un modelo de transformador con las siguientes opciones de arquitectura:
- Atención de consulta agrupada
- Atención de ventanas deslizantes
- Tokenizador BPE de reserva de bytes
Están disponibles los siguientes modelos:
Sugerencia
Además, MistralAI admite el uso de una API adaptada para su uso con características específicas del modelo. Para usar la API específica del proveedor de modelos, consulte la documentación de MistralAI o vea la sección de ejemplos de inferencia para obtener ejemplos de código.
Requisitos previos
Para usar los modelos de chat Mistral-7B y Mixtral con Inteligencia artificial de Azure Studio, necesita los siguientes requisitos previos:
Implementación de modelo
Implementación en un proceso administrado autohospedado
Los modelos de chat Mistral-7B y Mixtral se pueden implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles sobre cómo se sirve el modelo.
Para la implementación en un proceso administrado autohospedado, se debe tener suficiente cuota en la suscripción. Si no tuviera suficiente cuota disponible, use el acceso de cuota temporal seleccionando la opción Quiero usar la cuota compartida y confirmo que este punto de conexión se eliminará en 168 horas.
El paquete de inferencia instalado
Puede consumir predicciones de este modelo mediante el paquete azure-ai-inference
con Python. Para instalar este paquete, necesita los siguientes requisitos previos:
- Python 3.8 o posterior instalado, incluido pip.
- Dirección URL del punto de conexión. Para construir la biblioteca cliente, debe pasar la dirección URL del punto de conexión. La dirección URL del punto de conexión tiene el formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, dondeyour-host-name
es el nombre de host de implementación del modelo único yyour-azure-region
es la región de Azure donde se implementa el modelo (por ejemplo, eastus2). - En función de la preferencia de autenticación y implementación de modelo, necesita una clave para autenticarse en el servicio o en las credenciales de Microsoft Entra ID. La clave es una cadena de 32 caracteres.
Una vez que tenga estos requisitos previos, instale el paquete de inferencia de Azure AI con el siguiente comando:
pip install azure-ai-inference
Más información sobre el Paquete de inferencia y referencia de Azure AI.
Trabajar con finalizaciones de chat
En esta sección, usará API de inferencia de modelos de Azure AI con un modelo de finalizaciones de chat para chat.
Sugerencia
La API de inferencia de modelos de Azure AI permite hablar con la mayoría de los modelos implementados en Inteligencia artificial de Azure Studio con el mismo código y estructura, incluyendo los modelos de chat Mistral-7B and Mixtral.
Creación de un cliente para consumir el modelo
En primer lugar, cree el cliente para consumir el modelo. El código siguiente usa una dirección URL de punto de conexión y una clave que se almacenan en variables de entorno.
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"]),
)
Al implementar el modelo en un punto de conexión en línea autohospedado con compatibilidad con Microsoft Entra ID, use el siguiente fragmento de código para crear un cliente.
import os
from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential
client = ChatCompletionsClient(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
)
Obtención de las funcionalidades del modelo
La ruta /info
devuelve información sobre el modelo que se implementa en el punto de conexión. Devuelva la información del modelo llamando al método siguiente:
model_info = client.get_model_info()
La respuesta es la siguiente:
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
Creación de una solicitud de finalización de chat
En el ejemplo siguiente, se muestra cómo crear solicitudes básicas de finalizaciones de chat al 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 y mistralai-Mixtral-8x22B-Instruct-v0-1 no admiten mensajes del sistema (role="system"
). Cuando se usa la API de inferencia del modelo de Azure AI, los mensajes del sistema se traducen a los mensajes de usuario, que es la funcionalidad más cercana disponible. Esta traducción se ofrece para mayor comodidad, pero es importante comprobar que el modelo sigue las instrucciones del mensaje del sistema con el nivel de confianza correcto.
La respuesta es la siguiente, donde se pueden ver las estadísticas de uso del 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
Inspeccione la sección usage
de la respuesta para ver el número de tokens usados para el aviso, el número total de tokens generados y el número de tokens usados para la finalización.
Streaming de contenido
De forma predeterminada, la API de finalizaciones devuelve todo el contenido generado en una única respuesta. Si está generando finalizaciones largas, esperar la respuesta puede tardar muchos segundos.
Puede transmitir el contenido para obtenerlo a medida que se genera. El contenido de streaming permite empezar a procesar la finalización a medida que el contenido está disponible. Este modo devuelve un objeto que transmite la respuesta como eventos enviados por el servidor de solo datos. Extraiga fragmentos del campo delta, en lugar del campo de mensaje.
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 finalizaciones, establezca stream=True
al llamar al modelo.
Para visualizar la salida, defina una función auxiliar para imprimir la secuencia.
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="")
Puede visualizar cómo el streaming genera contenido:
print_stream(result)
Exploración de más parámetros admitidos por el cliente de inferencia
Explore otros parámetros que puede especificar en el cliente de inferencia. Para obtener una lista completa de todos los parámetros admitidos y su documentación correspondiente, vea Referencia de la API de inferencia de modelos de Azure AI.
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() },
)
Advertencia
Los modelos mistrales no admiten el formato de salida JSON (response_format = { "type": "json_object" }
). Siempre puede pedir al modelo que genere salidas JSON. Sin embargo, no se garantiza que estas salidas sean JSON válidas.
Si desea pasar un parámetro que no está en la lista de parámetros admitidos, puede pasarlo al modelo subyacente mediante parámetros adicionales. Vea Pasar parámetros adicionales al modelo.
Pasar parámetros adicionales al modelo
La API de inferencia de modelos de Azure AI permite pasar parámetros adicionales al modelo. En el ejemplo de código siguiente se muestra cómo pasar el parámetro adicional logprobs
al modelo.
Antes de pasar parámetros adicionales a la API de inferencia del modelo de Azure AI, asegúrese de que el modelo admite esos parámetros adicionales. Cuando se realiza la solicitud al modelo subyacente, el encabezado extra-parameters
se pasa al modelo con el valor pass-through
. Este valor indica al punto de conexión que pase los parámetros adicionales al modelo. El uso de parámetros adicionales con el modelo no garantiza que el modelo pueda controlarlos realmente. Lea la documentación del modelo para comprender qué parámetros adicionales se admiten.
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
Los siguientes parámetros adicionales se pueden pasar al modelo de chat Mistral-7B y Mixtral:
Nombre | Description | Tipo |
---|---|---|
logit_bias |
Acepta un objeto JSON que asigna tokens (especificados por su Id. de token en el tokenizador) a un valor de sesgo asociado de -100 a 100. Matemáticamente, el sesgo se agrega a los logits generados por el modelo antes del muestreo. El efecto exacto variará según el modelo, pero los valores entre -1 y 1 deberían disminuir o aumentar la probabilidad de selección; valores como -100 o 100 deberían dar lugar a una prohibición o selección exclusiva del token correspondiente. | float |
logprobs |
Si se devuelven probabilidades de registro de los tokens de salida o no. Si es true, devuelve las probabilidades de registro de cada token de salida devuelto en el content de message . |
int |
top_logprobs |
Entero entre 0 y 20 que especifica el número de tokens más probables que se devolverán en cada posición del token, cada uno con una probabilidad de registro asociada. logprobs debe establecerse en true si se usa este parámetro. |
float |
n |
Cuántas opciones de finalización de chat se van a generar para cada mensaje de entrada. Tenga en cuenta que se le cobrará en función del número de tokens generados en todas las opciones. | int |
Modelos de chat de Mistral-7B y Mixtral
Los modelos de chat Mistral-7B y Mixtral incluyen los siguientes modelos:
El modelo de lenguaje grande Mistral-7B-Instruct (LLM) es una versión instruida y ajustada del Mistral-7B, un modelo de transformador con las siguientes opciones de arquitectura:
- Atención de consulta agrupada
- Atención de ventanas deslizantes
- Tokenizador BPE de reserva de bytes
Están disponibles los siguientes modelos:
Sugerencia
Además, MistralAI admite el uso de una API adaptada para su uso con características específicas del modelo. Para usar la API específica del proveedor de modelos, consulte la documentación de MistralAI o vea la sección de ejemplos de inferencia para obtener ejemplos de código.
Requisitos previos
Para usar los modelos de chat Mistral-7B y Mixtral con Inteligencia artificial de Azure Studio, necesita los siguientes requisitos previos:
Implementación de modelo
Implementación en un proceso administrado autohospedado
Los modelos de chat Mistral-7B y Mixtral se pueden implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles sobre cómo se sirve el modelo.
Para la implementación en un proceso administrado autohospedado, se debe tener suficiente cuota en la suscripción. Si no tuviera suficiente cuota disponible, use el acceso de cuota temporal seleccionando la opción Quiero usar la cuota compartida y confirmo que este punto de conexión se eliminará en 168 horas.
El paquete de inferencia instalado
Puede consumir predicciones de este modelo mediante el paquete @azure-rest/ai-inference
de npm
. Para instalar este paquete, necesita los siguientes requisitos previos:
- Versiones LTS de
Node.js
connpm
. - Dirección URL del punto de conexión. Para construir la biblioteca cliente, debe pasar la dirección URL del punto de conexión. La dirección URL del punto de conexión tiene el formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, dondeyour-host-name
es el nombre de host de implementación del modelo único yyour-azure-region
es la región de Azure donde se implementa el modelo (por ejemplo, eastus2). - En función de la preferencia de autenticación y implementación de modelo, necesita una clave para autenticarse en el servicio o en las credenciales de Microsoft Entra ID. La clave es una cadena de 32 caracteres.
Una vez que tenga estos requisitos previos, instale la biblioteca de Inferencia de Azure para JavaScript con el siguiente comando:
npm install @azure-rest/ai-inference
Trabajar con finalizaciones de chat
En esta sección, usará API de inferencia de modelos de Azure AI con un modelo de finalizaciones de chat para chat.
Sugerencia
La API de inferencia de modelos de Azure AI permite hablar con la mayoría de los modelos implementados en Inteligencia artificial de Azure Studio con el mismo código y estructura, incluyendo los modelos de chat Mistral-7B and Mixtral.
Creación de un cliente para consumir el modelo
En primer lugar, cree el cliente para consumir el modelo. El código siguiente usa una dirección URL de punto de conexión y una clave que se almacenan en variables de entorno.
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)
);
Al implementar el modelo en un punto de conexión en línea autohospedado con compatibilidad con Microsoft Entra ID, use el siguiente fragmento de código para crear un 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()
);
Obtención de las funcionalidades del modelo
La ruta /info
devuelve información sobre el modelo que se implementa en el punto de conexión. Devuelva la información del modelo llamando al método siguiente:
var model_info = await client.path("/info").get()
La respuesta es la siguiente:
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
Creación de una solicitud de finalización de chat
En el ejemplo siguiente, se muestra cómo crear solicitudes básicas de finalizaciones de chat al 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 y mistralai-Mixtral-8x22B-Instruct-v0-1 no admiten mensajes del sistema (role="system"
). Cuando se usa la API de inferencia del modelo de Azure AI, los mensajes del sistema se traducen a los mensajes de usuario, que es la funcionalidad más cercana disponible. Esta traducción se ofrece para mayor comodidad, pero es importante comprobar que el modelo sigue las instrucciones del mensaje del sistema con el nivel de confianza correcto.
La respuesta es la siguiente, donde se pueden ver las estadísticas de uso del 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
Inspeccione la sección usage
de la respuesta para ver el número de tokens usados para el aviso, el número total de tokens generados y el número de tokens usados para la finalización.
Streaming de contenido
De forma predeterminada, la API de finalizaciones devuelve todo el contenido generado en una única respuesta. Si está generando finalizaciones largas, esperar la respuesta puede tardar muchos segundos.
Puede transmitir el contenido para obtenerlo a medida que se genera. El contenido de streaming permite empezar a procesar la finalización a medida que el contenido está disponible. Este modo devuelve un objeto que transmite la respuesta como eventos enviados por el servidor de solo datos. Extraiga fragmentos del campo delta, en lugar del campo de mensaje.
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 finalizaciones, use .asNodeStream()
al llamar al modelo.
Puede visualizar cómo el streaming genera contenido:
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 ?? "");
}
}
Exploración de más parámetros admitidos por el cliente de inferencia
Explore otros parámetros que puede especificar en el cliente de inferencia. Para obtener una lista completa de todos los parámetros admitidos y su documentación correspondiente, vea Referencia de la API de inferencia de modelos de Azure AI.
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" },
}
});
Advertencia
Los modelos mistrales no admiten el formato de salida JSON (response_format = { "type": "json_object" }
). Siempre puede pedir al modelo que genere salidas JSON. Sin embargo, no se garantiza que estas salidas sean JSON válidas.
Si desea pasar un parámetro que no está en la lista de parámetros admitidos, puede pasarlo al modelo subyacente mediante parámetros adicionales. Vea Pasar parámetros adicionales al modelo.
Pasar parámetros adicionales al modelo
La API de inferencia de modelos de Azure AI permite pasar parámetros adicionales al modelo. En el ejemplo de código siguiente se muestra cómo pasar el parámetro adicional logprobs
al modelo.
Antes de pasar parámetros adicionales a la API de inferencia del modelo de Azure AI, asegúrese de que el modelo admite esos parámetros adicionales. Cuando se realiza la solicitud al modelo subyacente, el encabezado extra-parameters
se pasa al modelo con el valor pass-through
. Este valor indica al punto de conexión que pase los parámetros adicionales al modelo. El uso de parámetros adicionales con el modelo no garantiza que el modelo pueda controlarlos realmente. Lea la documentación del modelo para comprender qué parámetros adicionales se admiten.
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
}
});
Los siguientes parámetros adicionales se pueden pasar al modelo de chat Mistral-7B y Mixtral:
Nombre | Description | Tipo |
---|---|---|
logit_bias |
Acepta un objeto JSON que asigna tokens (especificados por su Id. de token en el tokenizador) a un valor de sesgo asociado de -100 a 100. Matemáticamente, el sesgo se agrega a los logits generados por el modelo antes del muestreo. El efecto exacto variará según el modelo, pero los valores entre -1 y 1 deberían disminuir o aumentar la probabilidad de selección; valores como -100 o 100 deberían dar lugar a una prohibición o selección exclusiva del token correspondiente. | float |
logprobs |
Si se devuelven probabilidades de registro de los tokens de salida o no. Si es true, devuelve las probabilidades de registro de cada token de salida devuelto en el content de message . |
int |
top_logprobs |
Entero entre 0 y 20 que especifica el número de tokens más probables que se devolverán en cada posición del token, cada uno con una probabilidad de registro asociada. logprobs debe establecerse en true si se usa este parámetro. |
float |
n |
Cuántas opciones de finalización de chat se van a generar para cada mensaje de entrada. Tenga en cuenta que se le cobrará en función del número de tokens generados en todas las opciones. | int |
Modelos de chat de Mistral-7B y Mixtral
Los modelos de chat Mistral-7B y Mixtral incluyen los siguientes modelos:
El modelo de lenguaje grande Mistral-7B-Instruct (LLM) es una versión instruida y ajustada del Mistral-7B, un modelo de transformador con las siguientes opciones de arquitectura:
- Atención de consulta agrupada
- Atención de ventanas deslizantes
- Tokenizador BPE de reserva de bytes
Están disponibles los siguientes modelos:
Sugerencia
Además, MistralAI admite el uso de una API adaptada para su uso con características específicas del modelo. Para usar la API específica del proveedor de modelos, consulte la documentación de MistralAI o vea la sección de ejemplos de inferencia para obtener ejemplos de código.
Requisitos previos
Para usar los modelos de chat Mistral-7B y Mixtral con Inteligencia artificial de Azure Studio, necesita los siguientes requisitos previos:
Implementación de modelo
Implementación en un proceso administrado autohospedado
Los modelos de chat Mistral-7B y Mixtral se pueden implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles sobre cómo se sirve el modelo.
Para la implementación en un proceso administrado autohospedado, se debe tener suficiente cuota en la suscripción. Si no tuviera suficiente cuota disponible, use el acceso de cuota temporal seleccionando la opción Quiero usar la cuota compartida y confirmo que este punto de conexión se eliminará en 168 horas.
El paquete de inferencia instalado
Puede consumir predicciones de este modelo mediante el paquete Azure.AI.Inference
de NuGet. Para instalar este paquete, necesita los siguientes requisitos previos:
- Dirección URL del punto de conexión. Para construir la biblioteca cliente, debe pasar la dirección URL del punto de conexión. La dirección URL del punto de conexión tiene el formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, dondeyour-host-name
es el nombre de host de implementación del modelo único yyour-azure-region
es la región de Azure donde se implementa el modelo (por ejemplo, eastus2). - En función de la preferencia de autenticación y implementación de modelo, necesita una clave para autenticarse en el servicio o en las credenciales de Microsoft Entra ID. La clave es una cadena de 32 caracteres.
Una vez que tenga estos requisitos previos, instale la biblioteca de inferencia de Azure AI con el siguiente comando:
dotnet add package Azure.AI.Inference --prerelease
También puede autenticarse con el Microsoft Entra ID (anteriormente Azure Active Directory). Para usar proveedores de credenciales proporcionados con el SDK de Azure, instale el paquete de Azure.Identity
:
dotnet add package Azure.Identity
Importe los siguientes espacios de nombres:
using Azure;
using Azure.Identity;
using Azure.AI.Inference;
En este ejemplo también se usan los siguientes espacios de nombres, pero es posible que no siempre los necesite:
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;
Trabajar con finalizaciones de chat
En esta sección, usará API de inferencia de modelos de Azure AI con un modelo de finalizaciones de chat para chat.
Sugerencia
La API de inferencia de modelos de Azure AI permite hablar con la mayoría de los modelos implementados en Inteligencia artificial de Azure Studio con el mismo código y estructura, incluyendo los modelos de chat Mistral-7B and Mixtral.
Creación de un cliente para consumir el modelo
En primer lugar, cree el cliente para consumir el modelo. El código siguiente usa una dirección URL de punto de conexión y una clave que se almacenan en variables de entorno.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);
Al implementar el modelo en un punto de conexión en línea autohospedado con compatibilidad con Microsoft Entra ID, use el siguiente fragmento de código para crear un cliente.
client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new DefaultAzureCredential(includeInteractiveCredentials: true)
);
Obtención de las funcionalidades del modelo
La ruta /info
devuelve información sobre el modelo que se implementa en el punto de conexión. Devuelva la información del modelo llamando al método siguiente:
Response<ModelInfo> modelInfo = client.GetModelInfo();
La respuesta es la siguiente:
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
Creación de una solicitud de finalización de chat
En el ejemplo siguiente, se muestra cómo crear solicitudes básicas de finalizaciones de chat al 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 y mistralai-Mixtral-8x22B-Instruct-v0-1 no admiten mensajes del sistema (role="system"
). Cuando se usa la API de inferencia del modelo de Azure AI, los mensajes del sistema se traducen a los mensajes de usuario, que es la funcionalidad más cercana disponible. Esta traducción se ofrece para mayor comodidad, pero es importante comprobar que el modelo sigue las instrucciones del mensaje del sistema con el nivel de confianza correcto.
La respuesta es la siguiente, donde se pueden ver las estadísticas de uso del 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
Inspeccione la sección usage
de la respuesta para ver el número de tokens usados para el aviso, el número total de tokens generados y el número de tokens usados para la finalización.
Streaming de contenido
De forma predeterminada, la API de finalizaciones devuelve todo el contenido generado en una única respuesta. Si está generando finalizaciones largas, esperar la respuesta puede tardar muchos segundos.
Puede transmitir el contenido para obtenerlo a medida que se genera. El contenido de streaming permite empezar a procesar la finalización a medida que el contenido está disponible. Este modo devuelve un objeto que transmite la respuesta como eventos enviados por el servidor de solo datos. Extraiga fragmentos del campo delta, en lugar del campo de mensaje.
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 finalizaciones, use CompleteStreamingAsync
método al llamar al modelo. Observe que en este ejemplo, la llamada se ajusta en un método asincrónico.
Para visualizar la salida, defina un método asincrónico para imprimir la secuencia en la consola.
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);
}
}
}
Puede visualizar cómo el streaming genera contenido:
StreamMessageAsync(client).GetAwaiter().GetResult();
Exploración de más parámetros admitidos por el cliente de inferencia
Explore otros parámetros que puede especificar en el cliente de inferencia. Para obtener una lista completa de todos los parámetros admitidos y su documentación correspondiente, vea Referencia de la API de inferencia de modelos de Azure AI.
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}");
Advertencia
Los modelos mistrales no admiten el formato de salida JSON (response_format = { "type": "json_object" }
). Siempre puede pedir al modelo que genere salidas JSON. Sin embargo, no se garantiza que estas salidas sean JSON válidas.
Si desea pasar un parámetro que no está en la lista de parámetros admitidos, puede pasarlo al modelo subyacente mediante parámetros adicionales. Vea Pasar parámetros adicionales al modelo.
Pasar parámetros adicionales al modelo
La API de inferencia de modelos de Azure AI permite pasar parámetros adicionales al modelo. En el ejemplo de código siguiente se muestra cómo pasar el parámetro adicional logprobs
al modelo.
Antes de pasar parámetros adicionales a la API de inferencia del modelo de Azure AI, asegúrese de que el modelo admite esos parámetros adicionales. Cuando se realiza la solicitud al modelo subyacente, el encabezado extra-parameters
se pasa al modelo con el valor pass-through
. Este valor indica al punto de conexión que pase los parámetros adicionales al modelo. El uso de parámetros adicionales con el modelo no garantiza que el modelo pueda controlarlos realmente. Lea la documentación del modelo para comprender qué parámetros adicionales se admiten.
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}");
Los siguientes parámetros adicionales se pueden pasar al modelo de chat Mistral-7B y Mixtral:
Nombre | Description | Tipo |
---|---|---|
logit_bias |
Acepta un objeto JSON que asigna tokens (especificados por su Id. de token en el tokenizador) a un valor de sesgo asociado de -100 a 100. Matemáticamente, el sesgo se agrega a los logits generados por el modelo antes del muestreo. El efecto exacto variará según el modelo, pero los valores entre -1 y 1 deberían disminuir o aumentar la probabilidad de selección; valores como -100 o 100 deberían dar lugar a una prohibición o selección exclusiva del token correspondiente. | float |
logprobs |
Si se devuelven probabilidades de registro de los tokens de salida o no. Si es true, devuelve las probabilidades de registro de cada token de salida devuelto en el content de message . |
int |
top_logprobs |
Entero entre 0 y 20 que especifica el número de tokens más probables que se devolverán en cada posición del token, cada uno con una probabilidad de registro asociada. logprobs debe establecerse en true si se usa este parámetro. |
float |
n |
Cuántas opciones de finalización de chat se van a generar para cada mensaje de entrada. Tenga en cuenta que se le cobrará en función del número de tokens generados en todas las opciones. | int |
Modelos de chat de Mistral-7B y Mixtral
Los modelos de chat Mistral-7B y Mixtral incluyen los siguientes modelos:
El modelo de lenguaje grande Mistral-7B-Instruct (LLM) es una versión instruida y ajustada del Mistral-7B, un modelo de transformador con las siguientes opciones de arquitectura:
- Atención de consulta agrupada
- Atención de ventanas deslizantes
- Tokenizador BPE de reserva de bytes
Están disponibles los siguientes modelos:
Sugerencia
Además, MistralAI admite el uso de una API adaptada para su uso con características específicas del modelo. Para usar la API específica del proveedor de modelos, consulte la documentación de MistralAI o vea la sección de ejemplos de inferencia para obtener ejemplos de código.
Requisitos previos
Para usar los modelos de chat Mistral-7B y Mixtral con Inteligencia artificial de Azure Studio, necesita los siguientes requisitos previos:
Implementación de modelo
Implementación en un proceso administrado autohospedado
Los modelos de chat Mistral-7B y Mixtral se pueden implementar en nuestra solución de inferencia administrada autohospedada, lo que le permite personalizar y controlar todos los detalles sobre cómo se sirve el modelo.
Para la implementación en un proceso administrado autohospedado, se debe tener suficiente cuota en la suscripción. Si no tuviera suficiente cuota disponible, use el acceso de cuota temporal seleccionando la opción Quiero usar la cuota compartida y confirmo que este punto de conexión se eliminará en 168 horas.
Un cliente de REST
Los modelos implementados con la API de inferencia de modelos de Azure AI pueden consumirse usando cualquier cliente REST. Para usar el cliente REST, necesita los siguientes requisitos previos:
- Para construir las solicitudes, debe pasar la dirección URL del punto de conexión. La dirección URL del punto de conexión tiene el formato
https://your-host-name.your-azure-region.inference.ai.azure.com
, dondeyour-host-name`` is your unique model deployment host name and
your-azure-region`` es la región de Azure donde se implementa el modelo (por ejemplo, eastus2). - En función de la preferencia de autenticación y implementación de modelo, necesita una clave para autenticarse en el servicio o en las credenciales de Microsoft Entra ID. La clave es una cadena de 32 caracteres.
Trabajar con finalizaciones de chat
En esta sección, usará API de inferencia de modelos de Azure AI con un modelo de finalizaciones de chat para chat.
Sugerencia
La API de inferencia de modelos de Azure AI permite hablar con la mayoría de los modelos implementados en Inteligencia artificial de Azure Studio con el mismo código y estructura, incluyendo los modelos de chat Mistral-7B and Mixtral.
Creación de un cliente para consumir el modelo
En primer lugar, cree el cliente para consumir el modelo. El código siguiente usa una dirección URL de punto de conexión y una clave que se almacenan en variables de entorno.
Al implementar el modelo en un punto de conexión en línea autohospedado con compatibilidad con Microsoft Entra ID, use el siguiente fragmento de código para crear un cliente.
Obtención de las funcionalidades del modelo
La ruta /info
devuelve información sobre el modelo que se implementa en el punto de conexión. Devuelva la información del modelo llamando al método siguiente:
GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
La respuesta es la siguiente:
{
"model_name": "mistralai-Mistral-7B-Instruct-v01",
"model_type": "chat-completions",
"model_provider_name": "MistralAI"
}
Creación de una solicitud de finalización de chat
En el ejemplo siguiente, se muestra cómo crear solicitudes básicas de finalizaciones de chat al 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 y mistralai-Mixtral-8x22B-Instruct-v0-1 no admiten mensajes del sistema (role="system"
). Cuando se usa la API de inferencia del modelo de Azure AI, los mensajes del sistema se traducen a los mensajes de usuario, que es la funcionalidad más cercana disponible. Esta traducción se ofrece para mayor comodidad, pero es importante comprobar que el modelo sigue las instrucciones del mensaje del sistema con el nivel de confianza correcto.
La respuesta es la siguiente, donde se pueden ver las estadísticas de uso del 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
}
}
Inspeccione la sección usage
de la respuesta para ver el número de tokens usados para el aviso, el número total de tokens generados y el número de tokens usados para la finalización.
Streaming de contenido
De forma predeterminada, la API de finalizaciones devuelve todo el contenido generado en una única respuesta. Si está generando finalizaciones largas, esperar la respuesta puede tardar muchos segundos.
Puede transmitir el contenido para obtenerlo a medida que se genera. El contenido de streaming permite empezar a procesar la finalización a medida que el contenido está disponible. Este modo devuelve un objeto que transmite la respuesta como eventos enviados por el servidor de solo datos. Extraiga fragmentos del campo delta, en lugar del campo de mensaje.
{
"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
}
Puede visualizar cómo el streaming genera contenido:
{
"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
}
]
}
El último mensaje de la secuencia ha establecido finish_reason
, lo que indica el motivo para que se detenga el proceso de generación.
{
"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
}
}
Exploración de más parámetros admitidos por el cliente de inferencia
Explore otros parámetros que puede especificar en el cliente de inferencia. Para obtener una lista completa de todos los parámetros admitidos y su documentación correspondiente, vea Referencia de la API de inferencia de modelos de Azure AI.
{
"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
}
}
Advertencia
Los modelos mistrales no admiten el formato de salida JSON (response_format = { "type": "json_object" }
). Siempre puede pedir al modelo que genere salidas JSON. Sin embargo, no se garantiza que estas salidas sean JSON válidas.
Si desea pasar un parámetro que no está en la lista de parámetros admitidos, puede pasarlo al modelo subyacente mediante parámetros adicionales. Vea Pasar parámetros adicionales al modelo.
Pasar parámetros adicionales al modelo
La API de inferencia de modelos de Azure AI permite pasar parámetros adicionales al modelo. En el ejemplo de código siguiente se muestra cómo pasar el parámetro adicional logprobs
al modelo.
Antes de pasar parámetros adicionales a la API de inferencia del modelo de Azure AI, asegúrese de que el modelo admite esos parámetros adicionales. Cuando se realiza la solicitud al modelo subyacente, el encabezado extra-parameters
se pasa al modelo con el valor pass-through
. Este valor indica al punto de conexión que pase los parámetros adicionales al modelo. El uso de parámetros adicionales con el modelo no garantiza que el modelo pueda controlarlos realmente. Lea la documentación del modelo para comprender qué parámetros adicionales se admiten.
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
}
Los siguientes parámetros adicionales se pueden pasar al modelo de chat Mistral-7B y Mixtral:
Nombre | Description | Tipo |
---|---|---|
logit_bias |
Acepta un objeto JSON que asigna tokens (especificados por su Id. de token en el tokenizador) a un valor de sesgo asociado de -100 a 100. Matemáticamente, el sesgo se agrega a los logits generados por el modelo antes del muestreo. El efecto exacto variará según el modelo, pero los valores entre -1 y 1 deberían disminuir o aumentar la probabilidad de selección; valores como -100 o 100 deberían dar lugar a una prohibición o selección exclusiva del token correspondiente. | float |
logprobs |
Si se devuelven probabilidades de registro de los tokens de salida o no. Si es true, devuelve las probabilidades de registro de cada token de salida devuelto en el content de message . |
int |
top_logprobs |
Entero entre 0 y 20 que especifica el número de tokens más probables que se devolverán en cada posición del token, cada uno con una probabilidad de registro asociada. logprobs debe establecerse en true si se usa este parámetro. |
float |
n |
Cuántas opciones de finalización de chat se van a generar para cada mensaje de entrada. Tenga en cuenta que se le cobrará en función del número de tokens generados en todas las opciones. | int |
Más ejemplos de inferencia
Para obtener más ejemplos de cómo usar los modelos de Mistral, vea los ejemplos y tutoriales siguientes:
Descripción | Idioma | Muestra |
---|---|---|
Solicitud CURL | Bash | Vínculo |
Paquete de inferencia de Azure AI para JavaScript | JavaScript | Vínculo |
Paquete de inferencia de Azure AI para Python | Python | Vínculo |
Solicitudes web de Python | Python | Vínculo |
SDK de OpenAI (experimental) | Python | Vínculo |
LangChain | Python | Vínculo |
Mistral AI | Python | Vínculo |
LiteLLM | Python | Vínculo |
Consideraciones de costo y cuota para los modelos Mistral implementados en el proceso administrado
Los modelos Mistral implementados en el proceso administrado se facturan en función de las horas básicas de la instancia de proceso asociada. El coste de la instancia de proceso viene determinado por el tamaño de la instancia, el número de instancias en ejecución y la duración de la ejecución.
Se recomienda empezar con un número bajo de instancias y escalar verticalmente según sea necesario. Supervise el coste de la instancia de proceso en Azure Portal.
Contenido relacionado
- API de inferencia de modelos de Azure AI
- Implementación de modelos como API sin servidor
- Consumo de puntos de conexión de API sin servidor desde otro proyecto o centro de Azure AI Studio
- Disponibilidad de regiones para modelos en puntos de conexión de API sin servidor
- Planeamiento y administración de costos (marketplace)