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
etllama-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, commellama-index-llms-openai
oullama-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 :
Un abonnement Azure.
Ressource Azure AI Hub, comme expliqué dans l’article Comment créer et gérer un hub Azure AI Studio.
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 commecohere-embed-v3-multilingual
.- Vous pouvez suivre les instructions fournies dans l’article Déployer des modèles en tant qu’API serverless.
Python 3.8 ou version ultérieure installée, y compris pip.
LlamaIndex installé. Vous pouvez le faire avec :
pip install llama-index
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
pourllama-index-llms-azure-inference
oullama-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 :
Accédez à Azure AI Studio.
Accédez aux déploiements et sélectionnez le modèle que vous avez déployé, comme indiqué dans les conditions préalables.
Copiez l’URL et la clé du 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.