Compartir vía


Procedimiento para implementar el modelo de la familia Jamba de AI21 con Azure AI Foundry

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, aprenderá a usar Azure AI Foundry para implementar los modelos de la familia Jamba de AI21 como una API sin servidor con facturación de pago por uso.

Los modelos de la familia Jamba son 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. Los modelos de la familia Jamba se han creado para un uso comercial confiable con respecto a la calidad y el rendimiento.

Vea nuestros anuncios de los modelos de la familia Jamba de AI21 disponibles ahora en el catálogo de modelos de Azure AI desde el Blog de AI21 y Blog de la comunidad tecnológica de Microsoft.

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.

Implementación de los modelos de la familia Jamba 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 1.5 Large implementado como una API sin servidor con facturación de pago por uso lo ofrece AI21 desde 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 1.5 Large implementado como una API sin servidor, explore nuestras integraciones con LangChain, LiteLLM, OpenAI y la API de Azure.

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 proyecto de Azure AI Foundry. La oferta de implementación de modelo de API sin servidor correspondiente a los modelos de la familia Jamba solo está disponible con los proyectos creados en estas regiones:

    • Este de EE. UU.
    • Este de EE. UU. 2
    • Centro-Norte de EE. UU
    • Centro-sur de EE. UU.
    • Oeste de EE. UU.
    • Oeste de EE. UU. 3
    • Centro de Suecia

    Para obtener una lista de las regiones disponibles para cada uno de los modelos que admiten implementaciones de puntos de conexión de API sin servidor, consulte Disponibilidad de región para modelos en puntos de conexión de API sin servidor.

  • Los controles de acceso basado en roles de Azure (RBAC de Azure) se usan para conceder acceso a las operaciones en el portal de Azure AI Foundry. 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 Foundry 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 Foundry: para implementar puntos de conexión (el rol de 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 el control de acceso basado en roles en el portal de Azure AI Foundry.

Crear una nueva implementación

En estos pasos se muestra la implementación de los modelos AI21 Jamba 1.5 Large o AI21 Jamba 1.5 Mini. Para crear una implementación:

  1. Inicie sesión en Azure AI Foundry.
  2. Si aún no está en el proyecto, selecciónelo.
  3. Seleccione Catálogo de modelos en el panel de navegación izquierdo.
  1. Busque y seleccione un modelo AI21 como AI21 Jamba 1.5 Large, AI21 Jamba 1.5 Mini o AI21 Jamba Instruct para abrir su página de detalles.

  2. Seleccione Implementar para abrir una ventana de implementación de API sin servidor para el modelo.

  3. Como alternativa, puede iniciar una implementación en la página Modelos y puntos de conexión del portal de Azure AI Foundry.

    1. En el panel de navegación izquierdo del proyecto, seleccione Mis recursos>Modelos y puntos de conexión.
    2. Seleccione + Implementar modelo>Implementar modelo base.
    3. Busque y seleccione un modelo AI21 como AI21 Jamba 1.5 Large, AI21 Jamba 1.5 Mini o AI21 Jamba Instruct para abrir la página de detalles del modelo.
    4. Seleccione Confirmar para abrir una ventana de implementación de API sin servidor para el modelo.
  4. El proyecto actual se especifica para la implementación. Para implementar correctamente los modelos de la familia AI21-Jamba, el proyecto debe estar en una de las regiones enumeradas en la sección Requisitos previos.

  5. 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.

  6. Seleccione la pestaña Precios y términos para obtener información sobre los precios del modelo seleccionado.

  7. 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.

  8. 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.

  9. 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.

  10. Seleccione Implementar. Espere hasta que la implementación esté lista y se le redirigirá a la página Implementaciones.

  11. Vuelva a la página Implementaciones, seleccione la implementación y anote el URI de Destino y la Clave secreta del punto de conexión. Para obtener más información sobre el uso de las API, vea la sección de Referencia.

  12. Para encontrar siempre los detalles, la dirección URL y las claves de acceso del punto de conexión, vaya al Centro de administración del proyecto desde el panel de navegación izquierdo. A continuación, seleccione Modelos y puntos de conexión.

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

Consumo de los modelos de la familia Jamba como una API sin servidor

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

  1. En el panel de navegación izquierdo del proyecto, seleccione Mis recursos>Modelos y puntos de conexión.

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

  3. Copie el URI de Destino y el valor de 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 los modelos de la familia Jamba implementados como una API sin servidor

Los modelos de la familia Jamba aceptan estas dos 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 se jamba-1.5-large o jamba-1.5-mini o 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 Foundry, 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.
tools array[tool] N "" Una lista de tools a las que puede llamar el modelo. Actualmente, solo se admiten funciones como una herramienta. Úselo para proporcionar una lista de funciones para las que el modelo puede generar entradas JSON. Se admite un máximo de 128 funciones.
response_format object N
null
"" La configuración en { "type": "json_object" } habilita el modo JSON, lo que garantiza que el mensaje que genera el modelo es JSON válido.
documents array[document] N "" Una lista de instancias de documents relevantes en las que el modelo puede basar sus respuestas, si el usuario lo dice explícitamente en el mensaje. Básicamente actúa como una extensión del mensaje, con la capacidad de agregar metadatos. cada documento es un diccionario.

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.

El objeto tool tiene los siguientes campos:

  • type (obligatorio; cadena): tipo de la herramienta. Actualmente solo se admite "función".
  • function (obligatorio; objeto): detalles de la función.
    • name (obligatorio; cadena): nombre de la función que se llamará.
    • description (opcional; cadena): descripción de lo que hace la función.
    • parameters (opcional; objeto): parámetros que acepta la función, que se describen como un objeto de esquema JSON.

El objeto document tiene los siguientes campos:

  • id (opcional; cadena): identificador único. a lo que se vinculará en las citas. Hasta 128 caracteres.
  • content (obligatorio; cadena): contenido del documento
  • metadata (opcional; matriz de metadatos de )
    • key (obligatorio; cadena): tipo de metadatos, como "author", "date", "‘url", etc. Debe ser lo que entiende el modelo.
    • value (obligatorio; cadena): valor de los metadatos

Ejemplo de solicitud

Ejemplo de un solo turno de Jamba 1.5 Large y Jamba 1.5 Mini

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"user",
         "content":"I need help with your product. Can you please assist?"
      }
   ],
   "temperature":1,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

Ejemplo de un solo turno de Jamba 1.5 Large y Jamba 1.5 Mini con documentos

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"system",
         "content":'''<documents>
          # Documents

          You can use the following documents for reference:

          ## Document ID: 0
          Text: Harry Potter is a series of seven fantasy novels written by British author J. K. Rowling.

          ## Document ID: 1
          Text: The Great Gatsby is a novel by American writer F. Scott Fitzgerald.
          </documents>'''},

       {
           "role":"user",
           "content":"Who wrote Harry Potter?"
       }
   ],
   "temperature":0.4,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

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.
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 message contiene la respuesta generada por el modelo. El objeto tiene los siguientes campos:

Clave Tipo Descripción
role string Rol del autor de este mensaje.
content string or null Contenido del mensaje.
tool_calls array or null Las llamadas a herramientas generadas por el modelo.

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

Clave Tipo Descripción
id string Identificador de la llamada a la herramienta.
type string El tipo de la herramienta. Actualmente, solo se admite function.
function object Función a la que llamó el modelo.

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

Clave Tipo Descripción
name string El nombre de la función que se va a llamar.
arguments string Argumentos para llamar a la función, según lo generado por el modelo en formato JSON.

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 la familia de modelos de Jamba implementados como una API sin servidor

La familia de modelos Jamba se implementa como una API sin servidor y la ofrece AI21 desde Azure Marketplace y se integra con Azure AI Foundry 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 (versión preliminar) 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.