Compartilhar via


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 e llama-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, como llama-index-llms-openai ou llama-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 projeto de IA do Azure, conforme explicado em Criar um projeto no 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 como cohere-embed-v3-multilingual.

  • 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 para llama-index-llms-azure-inference ou llama-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:

  1. Vá para o estúdio IA do Azure.

  2. Abra o projeto em que o modelo está implantado, se ainda não estiver aberto.

  3. Vá para Modelos + pontos de extremidade e selecione o modelo que você implantou conforme indicado nos pré-requisitos.

  4. Copie o URL do ponto de extremidade e a chave.

    Captura de tela da opção para copiar URI e chaves de ponto de extremidade de um ponto de extremidade.

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