Compartir a través de


Implementación del modelo Jamba-Instruct de AI21 con Azure AI Studio

Importante

Algunas de las características descritas en este artículo solo pueden estar disponibles en versión preliminar. 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, aprenderá a usar Azure AI Studio para implementar el modelo Jamba-Instruct de AI21 como una API sin servidor con facturación de pago por uso.

El modelo Jamba Instruct es el modelo de lenguaje grande (LLM) basado en Mamba de nivel de producción de AI21, que aprovecha la arquitectura híbrida Mamba-Transformer de AI21. Es una versión optimizada para instrucciones del modelo de espacio de estado estructurado híbrido (SSM) de AI21. El modelo Jamba Instruct se ha creado para un uso comercial confiable con respecto a la calidad y el rendimiento.

Implementación del modelo de Jamba Instruct como una API sin servidor

Algunos modelos del catálogo de modelos se pueden implementar como una API sin servidor con facturación de pago por uso, lo que proporciona una manera de consumirlos como una API sin hospedarlos en su suscripción mientras mantiene las necesidades de las organizaciones de seguridad y cumplimiento empresariales. Esta opción de implementación no requiere cuota de la suscripción.

El modelo AI21-Jamba-Instruct implementado como una API sin servidor con facturación de pago por uso se ofrece AI21 a través de Microsoft Azure Marketplace. AI21 puede cambiar o actualizar los términos de uso y los precios de este modelo.

Para empezar a trabajar con Jamba Instruct implementado como una API sin servidor, explore nuestras integraciones con LangChain, LiteLLM, OpenAI y la API de Azure.

Sugerencia

Vea nuestros anuncios del modelo Jamba-Instruct de AI21 disponible ahora en el catálogo de modelos de Azure AI a través del Blog de AI21 y Blog de la comunidad tecnológica de Microsoft.

Requisitos previos

  • Una suscripción de Azure con un método de pago válido. Las suscripciones gratuitas o de evaluación de Azure no funcionarán. Si no tiene una suscripción de Azure, cree una cuenta de Azure de pago para comenzar.

  • Un centro de AI Studio. La oferta de implementación de modelos de API sin servidor para Jamba Instruct solo está disponible con centros creados en Este de EE. UU. 2 y Centro de Suecia.

  • Un proyecto de Azure AI Studio.

  • Los controles de acceso basado en rol de Azure (RBAC de Azure) se usan para conceder acceso a las operaciones en la inteligencia artificial de Azure Studio. Para realizar los pasos descritos en este artículo, la cuenta de usuario debe tener asignado el rol de propietario o colaborador para la suscripción de Azure. Como alternativa, a la cuenta se le puede asignar un rol personalizado que tenga los permisos siguientes:

    • En la suscripción de Azure: para suscribir el proyecto de AI Studio a la oferta de Azure Marketplace, una vez para cada proyecto, por oferta:

      • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
      • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
      • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.SaaS/register/action
    • En el grupo de recursos, para crear y usar el recurso de SaaS:

      • Microsoft.SaaS/resources/read
      • Microsoft.SaaS/resources/write
    • En el proyecto de AI Studio: para implementar puntos de conexión (el rol desarrollador de Azure AI ya contiene estos permisos):

      • Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
      • Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*

    Para más información sobre los permisos, consulte control de acceso basado en rol en Inteligencia artificial de Azure Studio.

Crear una nueva implementación

Estos pasos muestran la implementación de AI21-Jamba-Instruct. Para crear una implementación:

  1. Inicie sesión en Azure AI Studio.
  2. Seleccione Catálogo de modelos en la barra lateral izquierda.
  3. Busque y seleccione AI21-Jamba-Instruct para abrir su página Detalles.
  4. Seleccione Implementar para abrir una ventana de implementación de API sin servidor para el modelo.
  5. Como alternativa, puedes iniciar una implementación empezando por el proyecto en AI Studio.
    1. En la barra lateral de la izquierda del proyecto, seleccione Componentes>Implementaciones.
    2. Seleccione + Crear implementación.
    3. Busque y seleccione AI21-Jamba-Instruct. para abrir la página Detalles del modelo.
    4. Seleccione Confirmar para abrir una ventana de implementación de API sin servidor para el modelo.
  6. Selecciona el proyecto en el que deseas implementar el modelo. Para implementar el modelo AI21-Jamba-Instruct, el proyecto debe estar en una de las regiones enumeradas en la sección Requisitos previos.
  7. En el Asistente para la implementación, selecciona el vínculo a Términos de Azure Marketplace para obtener más información sobre los términos de uso.
  8. Seleccione la pestaña Precios y términos para obtener información sobre los precios del modelo seleccionado.
  9. Seleccione el botón Suscribir e implementar. Si esta es la primera vez que implementas el modelo en el proyecto, debes suscribirte al proyecto para la oferta concreta. Este paso requiere que la cuenta tenga los permisos de suscripción de Azure y los permisos del grupo de recursos enumerados en los Requisitos previos. Cada proyecto tiene su propia suscripción a la oferta concreta de Azure Marketplace del modelo, lo que te permite controlar y supervisar los gastos. Actualmente solo puede tener una implementación para cada modelo dentro de un proyecto.
  10. Una vez que suscribas el proyecto para la oferta concreta de Azure Marketplace, las implementaciones posteriores de la misma oferta en el mismo proyecto no requieren la suscripción de nuevo. Si este escenario le afecta, podrá seleccionar la opción Continuar para implementar.
  11. Asigne un nombre a la implementación. Este nombre forma parte de la dirección URL de la API de implementación. Esta dirección URL debe ser única en cada región de Azure.
  12. Seleccione Implementar. Espere hasta que la implementación esté lista y se le redirigirá a la página Implementaciones.
  13. Vuelva a la página Implementaciones, seleccione la implementación y anote la URL de Objetivo del punto de conexión y la Clave secreta. Para obtener más información sobre el uso de las API, vea la sección de Referencia.
  14. Puede encontrar los detalles, la dirección URL y las claves de acceso del punto de conexión si navega a la página Información general del proyecto. Después, en la barra lateral izquierda del proyecto, seleccione Componentes>Implementaciones.

Para obtener información sobre la facturación del modelo AI21-Jamba-Instruct implementado como una API sin servidor con facturación basada en tokens de pago por uso, vea Consideraciones de costo y cuota para Jamba Instruct que se implemente como una API sin servidor.

Consumo de Jamba Instruct como una API sin servidor

Puede consumir modelos de Jamba Instruct como se indica a continuación:

  1. En la página Información general del proyecto, vaya a la barra lateral de la izquierda y seleccione Componentes>Implementaciones.

  2. Busque y seleccione la implementación que ha creado.

  3. Copia la dirección URL de destino y el valor clave.

  4. Realice una solicitud de API.

Para obtener más información sobre el uso de las API, consulte la sección de referencia.

Referencia de Jamba Instruct que se implemente como una API sin servidor

Jamba Instruct acepta ambos modelos de API:

API de inferencia de modelos de Azure AI

El esquema API de inferencia de modelos de Azure AI se puede encontrar en el artículo Referencia para finalizaciones de chat y se Puede obtener una especificación de OpenAPI del propio punto de conexión.

El chat de un solo turno y de varios turnos tiene el mismo formato de solicitud y respuesta, salvo que la respuesta a preguntas (turno único) implica solo un mensaje de usuario en la solicitud, mientras que el chat multiturno requiere que envíe todo el historial de mensajes de chat en cada solicitud.

En un chat de varios turnos, el subproceso del mensaje tiene los siguientes atributos:

  • Incluye todos los mensajes del usuario y el modelo, ordenados de más antiguo a más reciente.
  • Mensajes alternativos entre user y assistantmensajes de rol
  • Opcionalmente, el subproceso del mensaje comienza con un mensaje del sistema para proporcionar contexto.

El pseudocódigo siguiente es un ejemplo de la pila de mensajes de la cuarta llamada en una solicitud de chat que incluye un mensaje inicial del sistema.

[
    {"role": "system", "message": "Some contextual information here"},
    {"role": "user", "message": "User message 1"},
    {"role": "assistant", "message": "System response 1"},
    {"role": "user", "message": "User message 2"},
    {"role": "assistant"; "message": "System response 2"},
    {"role": "user", "message": "User message 3"},
    {"role": "assistant", "message": "System response 3"},
    {"role": "user", "message": "User message 4"}
]

Cliente de Azure de AI21

Use el método POST para enviar la solicitud a la ruta /v1/chat/completions:

Solicitar

POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json

Esquema de solicitud

Payload es una cadena con formato JSON que contiene los parámetros siguientes:

Clave Tipo Obligatorio/predeterminado Valores permitidos Descripción
model string Y Debe ser jamba-instruct
messages list[object] Y Lista de objetos, uno por mensaje, de más antiguo a más reciente. El mensaje más antiguo puede ser el rol system. Todos los mensajes posteriores deben alternar entre los roles de usuario y asistente. Consulte la definición de objeto de mensaje siguiente.
max_tokens integer N
4096
0 – 4096 Número máximo de tokens que se van a permitir para cada mensaje de respuesta generado. Normalmente, la mejor manera de limitar la longitud de salida es proporcionar un límite de longitud en el símbolo del sistema (por ejemplo, "limitar las respuestas a tres oraciones").
temperature float N
1
0.0 – 2.0 Cantidad de variación que se debe proporcionar en cada respuesta. Establecer este valor en 0 garantiza la misma respuesta a la misma pregunta cada vez. Si se establece un valor mayor, se recomienda más variación. Modifica la distribución desde la que se muestrea el token. Recomendamos modificar esto o top_p, pero no ambos.
top_p float N
1
0 <valor<=1,0 Limite el grupo de tokens siguientes en cada paso al percentil N superior de los posibles tokens, donde 1,0 significa que el grupo de todos los tokens posibles y 0,01 significa el grupo de solo los siguientes tokens más probables.
stop string o list[string] N
"" Cadena o lista de cadenas que contienen las palabras en las que la API debe dejar de generar la salida. Las nuevas líneas se permiten como "\n". El texto devuelto no contendrá la secuencia de detención.
n integer N
1
1 – 16 Cuántas respuestas se van a generar para cada solicitud. Con el área de juegos de Azure AI Studio, n=1 a medida que trabajamos en el área de juegos de varias respuestas.
stream boolean N
False
True o False Indica si se va a habilitar el streaming. Si es true, los resultados se devuelven un token a la vez. Si se establece en true, n debe ser 1, que se establece automáticamente.

El objeto messages tiene los siguientes campos:

  • role: [cadena,requerida ] El autor o el propósito del mensaje. Uno de los siguientes valores:
    • user: Entrada proporcionada por el usuario. Las instrucciones dadas aquí que entran en conflicto con las instrucciones dadas en el system aviso tienen prioridad sobre las instrucciones de solicitud de system.
    • assistant: Una respuesta generada por el modelo.
    • system: Instrucciones iniciales para proporcionar instrucciones generales sobre el tono y la voz del mensaje generado. Un mensaje inicial del sistema es opcional, pero se recomienda proporcionar instrucciones sobre el tono del chat. Por ejemplo, "Usted es un bot de chat útil con un fondo en ciencias de la tierra y un encantador acento francés".
  • content: [cadena, obligatorio] El contenido del mensaje.

Ejemplo de solicitud

Ejemplo de un solo turno

{
    "model": "jamba-instruct",
    "messages": [
    {
      "role":"user",
      "content":"Who was the first emperor of rome?"}
  ],
    "temperature": 0.8,
    "max_tokens": 512
}

Ejemplo de chat de (cuarta solicitud que contiene la tercera respuesta del usuario)

{
  "model": "jamba-instruct",
  "messages": [
     {"role": "system",
      "content": "You are a helpful genie just released from a bottle. You start the conversation with 'Thank you for freeing me! I grant you one wish.'"},
     {"role":"user",
      "content":"I want a new car"},
     {"role":"assistant",
      "content":"🚗 Great choice, I can definitely help you with that! Before I grant your wish, can you tell me what kind of car you're looking for?"},
     {"role":"user",
      "content":"A corvette"},
     {"role":"assistant",
      "content":"Great choice! What color and year?"},
     {"role":"user",
      "content":"1963 black split window Corvette"}
  ],
  "n":3
}

Esquema de respuesta

La respuesta depende ligeramente de si el resultado se transmite o no.

En un resultado no transmitido, todas las respuestas se entregan juntas en una única respuesta, que también incluye una propiedad usage.

En un resultado transmitido,

  • Cada respuesta incluye un único token en el campo choices.
  • La estructura del objeto choices es diferente.
  • Solo la última respuesta incluye un objeto usage.
  • Toda la respuesta se ajusta en un objeto data.
  • El objeto de respuesta final es data: [DONE].

La carga de respuesta es un diccionario con los campos siguientes.

Clave Tipo Descripción
id string Identificador único de la solicitud.
model string Nombre del modelo usado.
choices list[object] Texto de respuesta generado por el modelo. Para una respuesta que no sea de streaming, es una lista con n elementos. Para una respuesta de streaming, es un único objeto que contiene un único token. Vea la descripción del objeto siguiente.
created integer Marca de tiempo de Unix (en segundos) de cuando se creó la finalización.
object string Tipo de objeto, que siempre es chat.completion.
usage object Estadísticas de uso de la solicitud de finalización. Para obtener información más detallada, vea a continuación.

El objeto de respuesta choices contiene la respuesta generada por el modelo. El objeto tiene los siguientes campos:

Clave Tipo Descripción
index integer Índice de base cero del mensaje en la lista de mensajes. Es posible que no se corresponda con la posición de la lista. En el caso de los mensajes transmitidos, siempre es cero.
message o delta object Mensaje generado (o token en una respuesta de streaming). El mismo tipo de objeto que se describe en la solicitud con dos cambios:
- En una respuesta que no es de streaming, este objeto se denomina message.
- En una respuesta de streaming, se denomina delta, y contiene message o role pero nunca ambos.
finish_reason string Motivo por el que el modelo dejó de generar tokens:
- stop: El modelo alcanzó un punto de detención natural o una secuencia de detención proporcionada.
- length: Se ha alcanzado el número máximo de tokens.
- content_filter: La respuesta generada infringía una directiva de inteligencia artificial responsable.
- null: Solo streaming. En una respuesta de streaming, todas las respuestas excepto la última serán null.

El objeto de respuesta usage contiene los campos siguientes.

Clave Tipo Valor
prompt_tokens integer Número de tokens en el símbolo del sistema. Tenga en cuenta que el recuento de tokens del símbolo del sistema incluye tokens adicionales agregados por el sistema para dar formato a la lista de mensajes en una sola cadena según sea necesario para el modelo. El número de tokens adicionales suele ser proporcional al número de mensajes del subproceso y debe ser relativamente pequeño.
completion_tokens integer Número de tokens generados en la finalización.
total_tokens integer Total de tokens.

Ejemplo de respuesta sin streaming

{
  "id":"cmpl-524c73beb8714d878e18c3b5abd09f2a",
  "choices":[
    {
      "index":0,
      "message":{
        "role":"assistant",
        "content":"The human nose can detect over 1 trillion different scents, making it one of the most sensitive smell organs in the animal kingdom."
      },
      "finishReason":"stop"
    }
  ],
  "created": 1717487036,
  "usage":{
    "promptTokens":116,
    "completionTokens":30,
    "totalTokens":146
  }
}

Ejemplo de respuesta de streaming

data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"role": "assistant"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": ""}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " The"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " first e"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "mpe"}, "created": 1717487336, "finish_reason": null}]}
... 115 responses omitted for sanity ...
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "me"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "."}, "created": 1717487336,"finish_reason": "stop"}], "usage": {"prompt_tokens": 107, "completion_tokens": 121, "total_tokens": 228}}
data: [DONE]

Coste y cuotas

Consideraciones de costo y cuota para Jamba Instruct que se implemente como una API sin servidor

El modelo Jamba Instruct se implementa como una API sin servidor y se ofrece mediante AI21 a través de Azure Marketplace e integrado con Azure AI Studio para su uso. Puede encontrar los precios de Azure Marketplace al implementar o ajustar los modelos.

Cada vez que un área de trabajo se suscribe a una oferta de modelo determinada de Azure Marketplace, se crea un nuevo recurso para realizar un seguimiento de los costos asociados a su consumo. El mismo recurso se usa para hacer un seguimiento de los costos asociados con la inferencia y la optimización. Sin embargo, hay varios medidores disponibles para hacer un seguimiento de cada escenario de forma independiente.

Para más información sobre cómo realizar un seguimiento de los costos, consulte Supervisión de los costos de los modelos ofrecidos en Azure Marketplace.

La cuota se administra por implementación. Cada implementación tiene un límite de velocidad de 200 000 tokens por minuto y 1000 solicitudes de API por minuto. Sin embargo, actualmente limitamos una implementación por modelo por proyecto. Póngase en contacto con el Soporte técnico de Microsoft Azure si los límites de velocidad actuales no son suficientes para sus escenarios.

Filtrado de contenido

Los modelos implementados como API sin servidor están protegidos por la seguridad del contenido de Azure AI. Con la seguridad de contenido de Azure AI habilitada, tanto la solicitud como la finalización pasan por un conjunto de modelos de clasificación destinados a detectar y evitar la salida de contenido dañino. El sistema de filtrado de contenido detecta y toma medidas en categorías específicas de contenido potencialmente perjudicial tanto en solicitudes de entrada como en finalizaciones de salida. Obtenga más información sobre Seguridad del contenido de Azure AI.