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:
- Inicie sesión en Azure AI Foundry.
- Si aún no está en el proyecto, selecciónelo.
- Seleccione Catálogo de modelos en el panel de navegación izquierdo.
Busque y seleccione un modelo AI21 como
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
oAI21 Jamba Instruct
para abrir su página de detalles.Seleccione Implementar para abrir una ventana de implementación de API sin servidor para el modelo.
Como alternativa, puede iniciar una implementación en la página Modelos y puntos de conexión del portal de Azure AI Foundry.
- En el panel de navegación izquierdo del proyecto, seleccione Mis recursos>Modelos y puntos de conexión.
- Seleccione + Implementar modelo>Implementar modelo base.
- Busque y seleccione un modelo AI21 como
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
oAI21 Jamba Instruct
para abrir la página de detalles del modelo. - Seleccione Confirmar para abrir una ventana de implementación de API sin servidor para el modelo.
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.
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.
Seleccione la pestaña Precios y términos para obtener información sobre los precios del modelo seleccionado.
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.
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.
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.
Seleccione Implementar. Espere hasta que la implementación esté lista y se le redirigirá a la página Implementaciones.
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.
-
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:
En el panel de navegación izquierdo del proyecto, seleccione Mis recursos>Modelos y puntos de conexión.
Busque y seleccione la implementación de que ha creado.
Copie el URI de Destino y el valor de Clave.
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:
- La API de inferencia de modelos de Azure AI en la ruta
/chat/completions
para el chat multiturno o la respuesta a preguntas de un solo turno. Esta API se admite porque los modelos de la familia Jamba están ajustado para la finalización de chat. - Cliente de Azure de AI21. Para obtener más información sobre el punto de conexión REST al que se llama, visite Documentación de REST de AI21.
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
yassistant
mensajes 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 elsystem
aviso tienen prioridad sobre las instrucciones de solicitud desystem
.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 documentometadata
(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.