Desenvolva aplicativos com LlamaIndex e IA do Azure Studio
Nesse artigo, você aprenderá a usar o LlamaIndex com modelos implantados do catálogo de modelos da IA do Azure no Estúdio de IA do Azure.
Os modelos implantados no Estúdio de IA do Azure podem ser usados com o LlamaIndex de duas maneiras:
Usando a API de inferência de modelo da IA do Azure: todos os modelos implantados no Estúdio de IA do Azure oferecem suporte à API de inferência de modelo da IA do Azure, que oferece um conjunto comum de funcionalidades que podem ser usadas para a maioria dos modelos no catálogo. O benefício dessa API é que, como ela é a mesma para todos os modelos, mudar de um para outro é tão simples quanto alterar a implantação do modelo que está sendo usado. Não são necessárias mais alterações no código. Ao trabalhar com LlamaIndex, instale as extensões
llama-index-llms-azure-inference
ellama-index-embeddings-azure-inference
.Usando a API específica do provedor do modelo: alguns modelos, como OpenAI, Cohere ou Mistral, oferecem seu próprio conjunto de APIs e extensões para o LlamaIndex. Essas extensões podem incluir funcionalidades específicas que o modelo suporta e, portanto, são adequadas se você quiser explorá-las. Ao trabalhar com
llama-index
, instale a extensão específica para o modelo que deseja usar, comollama-index-llms-openai
oullama-index-llms-cohere
.
Nesse exemplo, estamos trabalhando com a API de inferência de modelo de IA do Azure.
Pré-requisitos
Para este tutorial, você precisa do:
Uma assinatura do Azure.
Um recurso do hub do Ia do Azure conforme explicado em Como criar e gerenciar um hub do Estúdio de IA do Azure.
Um modelo que dá suporte à API de inferência de modelo de IA do Azure implantada. Nesse exemplo, usamos uma implantação
Mistral-Large
, mas use qualquer modelo de sua preferência. Para usar recursos de incorporação no LlamaIndex, você precisa de um modelo de incorporação comocohere-embed-v3-multilingual
.- Você pode seguir as instruções em Implementar modelos como APIs sem servidor.
Python 3.8 ou posterior instalado, incluindo o pip.
LlamaIndex instalado. Você pode fazer isso com:
pip install llama-index
Nesse exemplo, estamos trabalhando com a API de inferência de modelo de IA do Azure, portanto, instalamos os seguintes pacotes:
pip install -U llama-index-llms-azure-inference pip install -U llama-index-embeddings-azure-inference
Importante
Usar o serviço de inferência de modelo de IA do Azure requer a versão
0.2.4
parallama-index-llms-azure-inference
oullama-index-embeddings-azure-inference
.
Configure o ambiente
Para usar LLMs implantados no Estúdio de IA do Azure, você precisa do ponto de extremidade e das credenciais para se conectar a ele. Siga essas etapas para obter as informações necessárias do modelo que deseja usar:
Vá para o estúdio IA do Azure.
Vá para implantações e selecione o modelo que você implantou conforme indicado nos pré-requisitos.
Copie o URL do ponto de extremidade e a chave.
Dica
Se o seu modelo foi implantado com suporte ao Microsoft Entra ID, você não precisa de uma chave.
Nesse cenário, colocamos a URL e a chave do ponto de extremidade nas seguintes variáveis de ambiente:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
Uma vez configurado, crie um cliente para se conectar ao ponto de extremidade.
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)
Dica
Se a implantação do modelo estiver hospedada no serviço OpenAI do Azure ou no recurso dos Serviços de IA do Azure, configure o cliente conforme indicado em modelos do serviço OpenAI do Azure e no serviço de inferência de modelo de IA do Azure.
Se o ponto de extremidade estiver atendendo a mais de um modelo, como com o serviço de inferência de modelo de IA do Azure ou modelos do GitHub, você precisará indicar o parâmetro model_name
:
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
)
Como alternativa, se o seu ponto de extremidade oferecer suporte ao Microsoft Entra ID, você poderá usar o seguinte código para criar o cliente:
import os
from azure.identity import DefaultAzureCredential
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
)
Observação
Ao usar o Microsoft Entra ID, certifique-se de que o ponto de extremidade foi implantado com esse método de autenticação e que você tem as permissões necessárias para invocá-lo.
Se você estiver planejando usar chamadas assíncronas, é uma prática recomendada usar a versão assíncrona para as credenciais:
from azure.identity.aio import (
DefaultAzureCredential as DefaultAzureCredentialAsync,
)
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredentialAsync(),
)
Modelos do OpenAI do Azure e serviço de inferência de modelo de IA do Azure
Se você estiver usando o serviço OpenAI do Azure ou o serviço de inferência de modelo de IA do Azure, verifique se você tem, no mínimo, a versão 0.2.4
da integração LlamaIndex. Use o parâmetro api_version
caso precise selecionar um api_version
específico.
Para o serviço de inferência do modelo de IA do Azure, você precisa passar o parâmetromodel_name
:
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint="https://<resource>.services.ai.azure.com/models",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
)
Para o serviço do OpenAI do Azure:
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint="https://<resource>.openai.azure.com/openai/deployments/<deployment-name>",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
api_version="2024-05-01-preview",
)
Dica
Verifique qual é a versão da API que sua implantação está usando. O uso de uma api_version
incorreta ou uma não compatível com o modelo resulta em uma exceção ResourceNotFound
.
Parâmetros de inferência
Você pode configurar como a inferência é executada para todas as operações que estão usando esse cliente definindo parâmetros extras. Isso ajuda a evitar indicá-los em cada chamada que você faz para o modelo.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"top_p": 1.0},
)
Parâmetros não suportados na API de inferência do modelo de IA do Azure (referência), mas disponíveis no modelo subjacente, você pode usar o argumento model_extras
. No exemplo a seguir, o parâmetro safe_prompt
, disponível apenas para modelos Mistral, está sendo passado.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"model_extras": {"safe_prompt": True}},
)
Use modelos LLMs
Você pode usar o cliente diretamente ou configurar os modelos usados pelo seu código no LlamaIndex. Para usar o modelo diretamente, use o método chat
para modelos de instrução de chat:
from llama_index.core.llms import ChatMessage
messages = [
ChatMessage(
role="system", content="You are a pirate with colorful personality."
),
ChatMessage(role="user", content="Hello"),
]
response = llm.chat(messages)
print(response)
Você também pode transmitir as saídas:
response = llm.stream_chat(messages)
for r in response:
print(r.delta, end="")
O método complete
ainda está disponível para o modelo do tipo chat-completions
. Nesses casos, o texto de entrada é convertido em uma mensagem com role="user"
.
Usar modelos de incorporação
Da mesma forma que você cria um cliente LLM, você pode se conectar a um modelo de inserções. No exemplo a seguir, estamos definindo a variável de ambiente para agora apontar para um modelo de inserções:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
Em seguida, crie o cliente:
from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel
embed_model = AzureAIEmbeddingsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
)
O exemplo a seguir mostra um teste simples para verificar se funciona:
from llama_index.core.schema import TextNode
nodes = [
TextNode(
text="Before college the two main things I worked on, "
"outside of school, were writing and programming."
)
]
response = embed_model(nodes=nodes)
print(response[0].embedding)
Configure os modelos usados pelo seu código
Você pode usar o cliente do modelo LLM ou embeddings individualmente no código desenvolvido com o LlamaIndex ou pode configurar a sessão inteira usando as opções Settings
. Configurar a sessão tem a vantagem de todo o seu código usar os mesmos modelos para todas as operações.
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
No entanto, há cenários em que você deseja usar um modelo geral para a maioria das operações, mas um específico para uma determinada tarefa. Nesses casos, é útil definir o LLM ou modelo de incorporação que você está usando para cada construção LlamaIndex. No exemplo a seguir, definimos um modelo específico:
from llama_index.core.evaluation import RelevancyEvaluator
relevancy_evaluator = RelevancyEvaluator(llm=llm)
Em geral, você usa uma combinação de ambas as estratégias.