Como implantar modelos da família Jamba do AI21 com o Estúdio de IA do Azure
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Nesse artigo, você aprende a usar o Estúdio de IA do Azure para implantar os modelos da família Jamba da AI21 como uma API sem servidor com cobrança pré-paga.
Os modelos da família Jamba são modelos de grande linguagem (LLM) baseados em Mamba de nível de produção da AI21, que aproveitam a arquitetura híbrida Mamba-Transformer da AI21. É uma versão ajustada por instrução do modelo Jamba do transformador híbrido de modelo de espaço de estado estruturado (SSM) do AI21. Os modelos da família Jamba são desenvolvidos para uso comercial confiável em termos de qualidade e desempenho.
Consulte nossos anúncios dos modelos da família Jamba da AI21 disponíveis agora no Catálogo de Modelos de IA do Azure por meio do Blog da AI21 e do Blog da Microsoft Tech Community.
Importante
Os modelos que estão em versão prévia são marcados como versão prévia em seus cartões de modelo no catálogo de modelos.
Implantar os modelos da família Jamba como uma API sem servidor
Determinados modelos no catálogo de modelos podem ser implantados como uma API sem servidor com pagamento conforme o uso, fornecendo uma maneira de consumi-los como uma API sem hospedá-los em sua assinatura e mantendo as necessidades das organizações de segurança e conformidade da empresa. Essa opção de implantação não requer cota de sua assinatura.
O modelo AI21-Jamba 1.5 Grande implantado como uma API sem servidor com cobrança do tipo pagamento conforme o usooferecido pela AI21 por meio do Microsoft Azure Marketplace. O AI21 pode alterar ou atualizar os termos de uso e preços desse modelo.
Para começar a usar o Jamba 1.5 grande implantado como uma API sem servidor, explore nossas integrações com LangChain, LiteLLM, OpenAI e API do Azure.
Pré-requisitos
Uma assinatura do Azure com uma forma de pagamento válida. As assinaturas gratuitas ou de avaliação do Azure não funcionarão. Caso você não tenha uma assinatura do Azure, crie uma conta paga do Azure para começar.
Um hub do Estúdio de IA. A oferta de implantação do modelo de API sem servidor para os modelos da família Jamba está disponível somente com hubs criados nas regiões a seguir:
- Leste dos EUA
- Leste dos EUA 2
- Centro-Norte dos EUA
- Centro-Sul dos Estados Unidos
- Oeste dos EUA
- Oeste dos EUA 3
- Suécia Central
Para obter uma lista de regiões disponíveis para cada um dos modelos que dão suporte a implantações de ponto de extremidade de API sem servidor, consulte Disponibilidade de região para modelos em pontos de extremidade de API sem servidor.
O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a operações no Estúdio de IA do Azure. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de proprietário ou colaborador para a assinatura do Azure. Como alternativa, sua conta pode receber uma função personalizada que tenha as seguintes permissões:
Na assinatura do Azure—para assinar o projeto AI Studio na oferta do Azure Marketplace, uma vez para cada projeto, 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
No grupo de recursos, para criar e usar o recurso SaaS:
Microsoft.SaaS/resources/read
Microsoft.SaaS/resources/write
No projeto AI Studio—para implantar ponto de extremidade (a função IA do Azure Desenvolvedor já contém essas permissões):
Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*
Para obter mais informações sobre permissões, confira Controle de acesso baseado em função no Estúdio de IA do Azure.
Criar uma nova implantação
Essas etapas demonstram a implantação dos modelos AI21 Jamba 1.5 Large
ou AI21 Jamba 1.5 Mini
. Para criar uma implantação:
Entre no Azure AI Studio.
Selecione Catálogo de modelos na barra lateral esquerda.
Pesquise e selecione um modelo da AI21 como
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
ouAI21 Jamba Instruct
para abrir a página de Detalhes.Selecione Implantar para abrir uma janela de implantação de API sem servidor para o modelo.
Como alternativa, você pode iniciar a implantação começando pelo seu projeto no Estúdio de IA.
Na barra lateral esquerda do projeto, selecione Componentes>Implantações.
Selecione + Criar implantação.
Pesquise e selecione um modelo da AI21 como
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
ouAI21 Jamba Instruct
para abrir a página Detalhes do Modelo.Selecione Confirmar para abrir uma janela de implantação de API sem servidor para o modelo.
Selecione o projeto no qual você deseja implantar seu modelo. Para implantar modelos da família AI21-Jamba seu projeto deve estar em uma das regiões listadas na seção Pré-requisitos.
No assistente de implantação, selecione o link para Termos do Azure Marketplace para saber mais sobre os termos de uso.
Escolha a guia Preços e termos para saber mais sobre os preços do modelo selecionado.
Selecione o botão Assinar e Implantar. Se esta for a primeira vez implantando o modelo no projeto, você precisará inscrevê-lo na oferta específica. Essa etapa requer que sua conta tenha as permissões de assinatura do Azure e as permissões de grupo de recursos listadas nos Pré-requisitos. Cada projeto tem sua própria inscrição na oferta específica do Azure Marketplace do modelo, que permite controlar e monitorar os gastos. Atualmente, você pode ter apenas uma implantação para cada modelo em um projeto.
Depois de inscrever o projeto na oferta específica do Azure Marketplace, as implantações subsequentes da mesma oferta no mesmo projeto não exigirão a inscrição novamente. Se esse cenário se aplicar a você, haverá uma opção Continuar a implantar para seleção.
Dê um nome à implantação. Esse nome se torna parte da URL da API de implantação. Essa URL deve ser exclusiva em cada região do Azure.
Selecione Implantar. Quando a implantação estiver pronta, você será redirecionado para a página Implantações.
Retorne à página Implantações, selecione a implantação e observe a URL de Destino do ponto de extremidade e a Chave Secreta. Para obter mais informações sobre o uso das APIs, veja a seção Referência.
A qualquer momento, você pode encontrar os detalhes, a URL e as chaves de acesso do ponto de extremidade acessando a página Visão geral do projeto. Depois, na barra lateral esquerda do projeto, selecione Componentes>Implantações.
Para saber mais sobre o faturamento de modelos da família AI21-Jamba implantado como uma API sem servidor com faturamento do tipo pagamento conforme o uso baseado em token, consulte Considerações de custo e cota para o Jamba Instruct implantado como uma API sem servidor.
Consumir modelos da família Jamba como uma API sem servidor
Você pode consumir modelos da família Jamba da seguinte maneira:
Na página Visão geral do projeto, acesse a barra lateral esquerda e selecione Componentes>Implantações.
Encontre e selecione a implantação criada.
Copie a URL de Destino e o valor de Chave.
Faça uma solicitação de API.
Para obter mais informações sobre como usar as APIs, consulte a seção Referência.
Referência para modelos da família Jamba implantados como uma API sem servidor
Os modelos da família Jamba aceitam ambas as seguintes APIs:
- A API de inferência de modelo de IA do Azure na rota
/chat/completions
para chat em vários turnos ou resposta a perguntas em um único turno. Essa API tem suporte porque os modelos da família Jamba são ajustados para a conclusão do chat. - Cliente Azure da AI21. Para obter mais informações sobre o ponto de extremidade REST que está sendo chamado, visite a documentação REST do AI21.
API de inferência de modelo de IA do Azure
O esquema API de inferência do modelo IA do Azure pode ser encontrado no artigo referência para conclusões de chat e uma especificação OpenAPI pode ser obtida no próprio ponto de extremidade.
O chat único e multiturno tem o mesmo formato de solicitação e resposta, exceto que a resposta à pergunta (turno único) envolve apenas uma única mensagem do usuário na solicitação, enquanto o bate-papo multiturno exige que você envie todo o histórico de mensagens do chat em cada solicitação.
Em um chat multiturno, o encadeamento de mensagens tem os seguintes atributos:
- Inclui todas as mensagens do usuário e do modelo, ordenadas da mais antiga para a mais recente.
- Mensagens alternam entre mensagens de função
user
eassistant
- Opcionalmente, o encadeamento de mensagens começa com uma mensagem do sistema para fornecer contexto.
O pseudocódigo a seguir é um exemplo da pilha de mensagens para a quarta chamada em uma solicitação de chat que inclui uma mensagem inicial do 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 Azure da AI21
Use o método POST
para enviar a solicitação à rota /v1/chat/completions
:
Solicitação
POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json
Esquema de solicitação
O conteúdo é uma cadeia de caracteres formatada em JSON que contém os seguintes parâmetros:
Chave | Tipo | Obrigatório/Padrão | Valores permitidos | Descrição |
---|---|---|---|---|
model |
string |
Y | Deve ser jamba-1.5-large , jamba-1.5-mini ou jamba-instruct |
|
messages |
list[object] |
Y | Uma lista de objetos, um por mensagem, do mais antigo ao mais novo. A mensagem mais antiga pode ser role system . Todas as mensagens posteriores deverão alternar entre funções de usuário e assistente. Veja a definição do objeto de mensagem abaixo. |
|
max_tokens |
integer |
N 4096 |
0 – 4096 | O número máximo de tokens permitidos para cada mensagem de resposta gerada. Normalmente, a melhor maneira de limitar o comprimento da saída é fornecer um limite de comprimento no prompt do sistema (por exemplo, "limite suas respostas a três sentenças") |
temperature |
float |
N 1 |
0.0 – 2.0 | Quanta variação fornecer em cada resposta. Definir esse valor como 0 garante sempre a mesma resposta para a mesma pergunta. Definir um valor mais alto incentiva mais variação. Modifica a distribuição da qual os tokens são amostrados. Recomendamos alterar isso ou top_p , mas não ambos. |
top_p |
float |
N 1 |
0 <valor<=1.0 | Limite o conjunto dos próximos tokens em cada etapa ao N percentil superior de tokens possíveis, onde 1,0 significa o conjunto de todos os tokens possíveis e 0,01 significa o conjunto apenas dos próximos tokens mais prováveis. |
stop |
string OU list[string] |
N |
"" | Cadeia de caracteres ou lista de strings contendo as palavras onde a API deve parar de gerar saída. Novas linhas são permitidas como "\n". O texto retornado não conterá a sequência de parada. |
n |
integer |
N 1 |
1 – 16 | Quantas respostas gerar para cada prompt. Com o Playground do IA do Azure Studio, n=1 enquanto trabalhamos no Playground de múltiplas respostas. |
stream |
boolean |
N False |
True OU False |
Se deve habilitar o streaming. Se for verdade, os resultados serão retornados um token por vez. Se definido como verdadeiro, n deverá ser 1, que é definido automaticamente. |
tools |
array[tool] |
N | "" | Uma lista do tools que o modelo pode chamar. No momento, há suporte apenas para funções como uma ferramenta. Use isso para fornecer uma lista de funções para as quais o modelo pode gerar entradas JSON. Há suporte para um máximo de 128 funções. |
response_format |
object |
N null |
"" | A configuração para { "type": "json_object" } habilita o modo JSON, que garante que a mensagem gerada pelo modelo seja um JSON válido. |
documents |
array[document] |
N | "" | Uma lista de documents em que o modelo pode basear suas respostas, se o usuário o disser explicitamente no prompt. Essencialmente, atua como uma extensão para o prompt, com a capacidade de adicionar metadados. cada documento é um dicionário. |
O objeto messages
tem os seguintes campos:
role
: [cadeia de caracteres, obrigatório] O autor ou propósito da mensagem. Um dos seguintes valores:user
: Entrada fornecida pelo usuário. Quaisquer instruções fornecidas aqui que entrem em conflito com as instruções fornecidas nosystem
prompt têm precedência sobre assystem
instruções do prompt.assistant
: Uma resposta gerada pelo modelo.system
:Instruções iniciais para fornecer orientações gerais sobre o tom e a voz da mensagem gerada. Uma mensagem inicial do sistema é opcional, mas recomendada para orientar sobre o tom do chat. Por exemplo, “Você é um chatbot prestativo com formação em ciências da terra e um charmoso sotaque francês”.
content
: [cadeia de caracteres, obrigatório] O conteúdo da mensagem.
O objeto tool
tem os seguintes campos:
type
(obrigatório; str) – o tipo da ferramenta. Atualmente, há suporte apenas para "função".function
(obrigatório; objeto) – os detalhes da função.name
(obrigatório; str) – o nome da função a ser chamada.description
(opcional; str) – uma descrição do que a função faz.parameters
(opcional objeto) – os parâmetros que a função aceita, descritos como um objeto deparameters
Esquema JSON.
O objeto document
tem os seguintes campos:
id
(opcional; str) – identificador exclusivo. será vinculado em citações. até 128 caracteres.content
(obrigatório; str) – o conteúdo do documentometadata
(opcional; matriz de Metadados)key
(obrigatório; str) – tipo de metadados, como "author", "date", "url", etc. Devem ser coisas que o modelo entenda.value
(obrigatório; str) – valor dos metadados
Exemplo de solicitação
Exemplo de turno único so Jamba 1.5 grande e do 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
}
Exemplo de turno único do Jamba 1.5 grande e do Jamba 1.5 mini com 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
}
Exemplo de chat (quarta solicitação contendo a resposta do terceiro usuário)
{
"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 resposta
A resposta depende um pouco se o resultado é transmitido ou não.
Em um resultado não transmitido, todas as respostas são entregues juntas em uma única resposta, que também inclui uma propriedade usage
.
Em um resultado transmitido,
- Cada resposta inclui um único token no campo
choices
. - A estrutura do objeto
choices
é diferente. - Somente a última resposta inclui um objeto
usage
. - A resposta inteira é envolvida em um objeto
data
. - O objeto de resposta final é
data: [DONE]
.
O conteúdo da resposta é um dicionário com os campos a seguir.
Chave | Type | Descrição |
---|---|---|
id |
string |
Um identificador exclusivo para a solicitação. |
model |
string |
Nome do modelo utilizado. |
choices |
list[object ] |
O texto de resposta gerado pelo modelo. Para uma resposta sem streaming, é uma lista com n itens. Para uma resposta de streaming, é um único objeto contendo um único token. Veja a descrição do objeto abaixo. |
usage |
object |
Estatísticas de uso para a solicitação de preenchimento. Confira os detalhes abaixo. |
O objeto de resposta choices
contém a resposta gerada pelo modelo. O objeto tem os seguintes campos:
Chave | Type | Descrição |
---|---|---|
index |
integer |
Índice baseado em zero da mensagem na lista de mensagens. Pode não corresponder à posição na lista. Para mensagens transmitidas, isso é sempre zero. |
message OU delta |
object |
A mensagem gerada (ou token em uma resposta de streaming). Mesmo tipo de objeto descrito na solicitação com duas alterações: - Em uma resposta sem streaming, esse objeto é chamado message . - Em uma resposta de streaming, é chamado delta e contém message ou role mas nunca ambos. |
finish_reason |
string |
O motivo pelo qual o modelo parou de gerar tokens: - stop : O modelo atingiu um ponto de parada natural ou uma sequência de parada fornecida. - length : O número máximo de tokens foi atingido. - content_filter : A resposta gerada violou uma política de IA responsável. - null : Apenas streaming. Em uma resposta de streaming, todas as respostas, exceto a última, serão null . |
O objeto de resposta message
contém a resposta gerada pelo modelo. O objeto tem os seguintes campos:
Chave | Type | Descrição |
---|---|---|
role |
string |
A função do autor dessa mensagem. |
content |
string or null |
O conteúdo da mensagem. |
tool_calls |
array or null |
Contém as chamadas de ferramenta geradas pelo modelo. |
O objeto de resposta tool_calls
contém a resposta gerada pelo modelo. O objeto tem os seguintes campos:
Chave | Type | Descrição |
---|---|---|
id |
string |
A ID da chamada da ferramenta. |
type |
string |
O tipo da ferramenta. Atualmente, há suporte apenas para function . |
function |
object |
A função chamada pelo modelo. |
O objeto de resposta function
contém a resposta gerada pelo modelo. O objeto tem os seguintes campos:
Chave | Type | Descrição |
---|---|---|
name |
string |
O nome da função a ser chamada. |
arguments |
string |
Os argumentos com os quais chamar a função, conforme gerado pelo modelo no formato JSON. |
O objeto de resposta usage
contém os campos a seguir.
Chave | Type | Valor |
---|---|---|
prompt_tokens |
integer |
Número de tokens no prompt. Observe que a contagem de tokens de prompt inclui tokens extras adicionados pelo sistema para formatar a lista de prompts em uma única cadeia de caracteres, conforme exigido pelo modelo. O número de tokens extras normalmente é proporcional ao número de mensagens no thread e deve ser relativamente pequeno. |
completion_tokens |
integer |
Número de tokens gerados no preenchimento. |
total_tokens |
integer |
Total de tokens. |
Exemplo de resposta sem 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
}
}
Exemplo de resposta 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]
Custo e cotas
Considerações sobre custo e cota para modelos da família Jamba implantados como uma API sem servidor
Os modelos da família Jamba é implantado como uma API sem servidor e é oferecido pela AI21 por meio do Azure Marketplace e integrado ao Estúdio de IA do Azure para uso. Encontre os preços do Azure Marketplace ao implantar ou ajustar os modelos.
Sempre que um workspace se inscreve em uma determinada oferta de modelo do Azure Marketplace, um novo recurso é criado para acompanhar os custos associados ao consumo dele. O mesmo recurso é usado para acompanhar os custos associados à inferência e ao ajuste. No entanto, vários medidores estão disponíveis para acompanhar cada cenário de modo independente.
Para obter mais informações sobre como acompanhar os custos, consulte Monitorar os custos dos modelos oferecidos por meio do Azure Marketplace.
A cota é gerenciada por implantação. Cada implantação tem um limite de taxa de 200.000 tokens por minuto e 1.000 solicitações de API por minuto. No entanto, atualmente, limitamos uma implantação por modelo e projeto. Entre em contato com o Suporte do Microsoft Azure se os limites de taxa atuais não forem suficientes para seus cenários.
Filtragem de conteúdo
Os modelos implantados como uma API sem servidor são protegidos pela segurança de conteúdo da IA do Azure. Com a Segurança de Conteúdo de IA do Azure habilitada, o prompt e o preenchimento passam por um conjunto de modelos de classificação destinados a detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo (versão prévia) detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial tanto em prompts de entrada quanto em conclusões de saída. Saiba mais sobre de Segurança de Conteúdo de IA do Azure.