Partager via


Développer des applications avec LlamaIndex et Azure AI Studio

Dans cet article, vous allez découvrir comment utiliser LlamaIndex avec des modèles déployés à partir du catalogue de modèles Azure AI dans Azure AI Studio.

Vous pouvez utiliser les modèles déployés sur Azure AI Studio avec LlamaIndex de deux façons :

  • À l’aide de l’API d’inférence de modèle Azure AI : tous les modèles déployés sur Azure AI Studio prennent en charge l’API d’inférence de modèle Azure AI, qui fournit un ensemble commun de fonctionnalités qui peuvent être utilisées pour la plupart des modèles du catalogue. Étant donné qu’il s’agit de la même chose pour tous les modèles, cette API apporte l’avantage suivant : la modification de l’un à l’autre est aussi simple que la modification du déploiement du modèle en cours d’utilisation. Aucune autre modification n’est requise dans le code. Quand vous utilisez LlamaIndex, installez les extensions llama-index-llms-azure-inference et llama-index-embeddings-azure-inference.

  • À l’aide de l’API spécifique du fournisseur du modèle : certains modèles, comme OpenAI, Cohere ou Mistral, fournissent leur propre ensemble d’API et d’extensions pour LlamaIndex. Ces extensions peuvent inclure des fonctionnalités spécifiques prises en charge par le modèle et sont donc adaptées si vous souhaitez les exploiter. Lorsque vous utilisez llama-index, installez l’extension spécifique au modèle que vous souhaitez utiliser, comme llama-index-llms-openai ou llama-index-llms-cohere.

Dans cet exemple, nous travaillons avec l’API d’inférence de modèle Azure AI.

Prérequis

Pour suivre ce didacticiel, vous avez besoin des éléments suivants :

  1. Un abonnement Azure.

  2. Ressource Azure AI Hub, comme expliqué dans l’article Comment créer et gérer un hub Azure AI Studio.

  3. Modèle prenant en charge l’API d’inférence de modèle Azure AI déployée. Dans cet exemple, nous utilisons un déploiement Mistral-Large, mais nous utilisons le modèle de votre choix. Pour utiliser des fonctionnalités d’incorporation dans LlamaIndex, vous avez besoin d’un modèle d’incorporation comme cohere-embed-v3-multilingual.

  4. Python 3.8 ou version ultérieure installée, y compris pip.

  5. LlamaIndex installé. Vous pouvez le faire avec :

    pip install llama-index
    
  6. Dans cet exemple, nous travaillons avec l’API d’inférence de modèle Azure AI. Nous installons donc les packages suivants :

    pip install -U llama-index-llms-azure-inference
    pip install -U llama-index-embeddings-azure-inference
    

    Important

    L’utilisation du service d’inférence du modèle IA Azure nécessite une version 0.2.4 pour llama-index-llms-azure-inference ou llama-index-embeddings-azure-inference .

Configurer l’environnement

Pour utiliser des grands modèles de langage (LLM) déployés dans Azure AI Studio, vous avez besoin du point de terminaison et des informations d’identification pour vous y connecter. Pour obtenir les informations dont vous avez besoin à partir du modèle que vous souhaitez utiliser, procédez comme suit :

  1. Accédez à Azure AI Studio.

  2. Accédez aux déploiements et sélectionnez le modèle que vous avez déployé, comme indiqué dans les conditions préalables.

  3. Copiez l’URL et la clé du point de terminaison.

    Capture d’écran de l’option permettant de copier l’URI et les clés du point de terminaison à partir d’un point de terminaison.

    Conseil

    Si votre modèle a été déployé avec la prise en charge de Microsoft Entra ID, vous n’avez pas besoin de clé.

Dans ce scénario, nous avons placé à la fois l’URL et la clé du point de terminaison dans les variables d’environnement suivantes :

export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"

Une fois configurées, créez un client à connecter au point de terminaison.

import os
from llama_index.llms.azure_inference import AzureAICompletionsModel

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)

Conseil

Si votre déploiement de modèle est hébergé dans le service Azure OpenAI ou la ressource Azure AI Services, configurez le client comme indiqué dans les modèles Azure OpenAI et le service d’inférence de modèle Azure AI.

Si votre point de terminaison sert plusieurs modèles, comme avec le service d’inférence de modèle Azure AI ou les modèles du GitHub, vous devez indiquer le paramètre 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",
)

Sinon, si votre point de terminaison prend en charge Microsoft Entra ID, vous pouvez utiliser le code suivant pour créer le client :

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(),
)

Remarque

Quand vous utilisez Microsoft Entra ID, vérifiez que le point de terminaison a été déployé avec cette méthode d’authentification, et que vous disposez des autorisations nécessaires pour l’appeler.

Si vous envisagez d’utiliser l’appel asynchrone, il est recommandé d’utiliser la version asynchrone pour les informations d’identification :

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(),
)

Modèles Azure OpenAI et service d’inférence de modèle Azure AI

Si vous utilisez le service Azure OpenAI ou le service d’inférence de modèle Azure AI, vérifiez que vous disposez au moins de la version 0.2.4 de l’intégration LlamaIndex. Utilisez le paramètre api_version dans le cas où vous devez sélectionner un paramètre spécifique api_version.

Pour le service d’inférence du modèle Azure AI, vous devez passer le paramètre model_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",
)

Pour le service d’Azure OpenAI :

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",
)

Conseil

Vérifiez quelle est la version de l’API que votre déploiement utilise. L’utilisation d’une erreur api_version ou d’un autre non pris en charge par le modèle entraîne une exception ResourceNotFound.

Paramètres d’inférence

Vous pouvez configurer la façon dont l’inférence est effectuée pour toutes les opérations qui utilisent ce client en définissant des paramètres supplémentaires. Cela permet d’éviter de les indiquer sur chaque appel que vous effectuez au modèle.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"top_p": 1.0},
)

Pour les paramètres non pris en charge dans l’API d’inférence de modèle Azure AI (référence), mais disponibles dans le modèle sous-jacent, vous pouvez utiliser l’argument model_extras. Dans l’exemple suivant, le paramètre safe_prompt, disponible uniquement pour les modèles Mistral, est transmis.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"model_extras": {"safe_prompt": True}},
)

Utiliser des grands modèles de langage

Vous pouvez directement utiliser le client ou Configurer les modèles utilisés par votre code dans LlamaIndex. Pour utiliser le modèle directement, utilisez la méthode chat relative aux modèles d’instructions de conversation :

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)

Vous pouvez également diffuser en continu les sorties :

response = llm.stream_chat(messages)
for r in response:
    print(r.delta, end="")

La méthode complete est toujours disponible pour le modèle de type chat-completions. Dans ces cas, votre texte d’entrée est converti en message avec role="user".

Utiliser les modèles d’incorporations

De la même façon que vous créez un client LLM, vous pouvez vous connecter à un modèle d’incorporations. Dans l’exemple suivant, nous définissons la variable d’environnement pour qu’elle pointe désormais vers un modèle d’incorporations :

export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"

Créez ensuite le client :

from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel

embed_model = AzureAIEmbeddingsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
)

L’exemple suivant montre un test simple permettant de vérifier son fonctionnement :

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)

Configurer les modèles utilisés par votre code

Vous pouvez utiliser le client de modèle LLM ou d’incorporations individuellement dans le code que vous développez avec LlamaIndex ou configurer l’intégralité de la session à l’aide des options Settings. Le fait de configurer la session présente l’avantage suivant : la totalité de votre code utilise les mêmes modèles pour toutes les opérations.

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

Toutefois, il existe des scénarios dans lesquels vous voulez utiliser un modèle général pour la plupart des opérations, mais un modèle spécifique pour une tâche donnée. Dans ces cas, il est utile de définir le modèle LLM ou d’incorporation que vous utilisez pour chaque construction LlamaIndex. Dans l’exemple suivant, nous définissons un modèle spécifique :

from llama_index.core.evaluation import RelevancyEvaluator

relevancy_evaluator = RelevancyEvaluator(llm=llm)

En général, vous utilisez une combinaison des deux stratégies.