Sviluppare applicazioni con LlamaIndex e Azure AI Foundry
Questo articolo illustra come usare LlamaIndex con i modelli distribuiti dal catalogo dei modelli di Intelligenza artificiale di Azure nel portale di Azure AI Foundry.
I modelli distribuiti in Azure AI Foundry possono essere usati con LlamaIndex in due modi:
Uso dell'API di inferenza del modello di intelligenza artificiale di Azure: tutti i modelli distribuiti in Azure AI Foundry supportano l'API di inferenza del modello di intelligenza artificiale di Azure, che offre un set comune di funzionalità che possono essere usate per la maggior parte dei modelli nel catalogo. Il vantaggio di questa API è che, poiché è la stessa per tutti i modelli, la modifica da una all'altra è semplice come la modifica della distribuzione del modello in uso. Nel codice non sono necessarie altre modifiche. Quando si usa LlamaIndex, installare le estensioni
llama-index-llms-azure-inference
ellama-index-embeddings-azure-inference
.Uso dell'API specifica del provider del modello: alcuni modelli, ad esempio OpenAI, Cohere o Mistral, offrono il proprio set di API ed estensioni per LlamaIndex. Tali estensioni possono includere funzionalità specifiche supportate dal modello e pertanto sono adatte se si desidera sfruttarle. Quando si usa
llama-index
, installare l'estensione specifica per il modello da usare, ad esempiollama-index-llms-openai
ollama-index-llms-cohere
.
In questo esempio viene usata l'API di inferenza del modello di intelligenza artificiale di Azure.
Prerequisiti
Per eseguire questa esercitazione è necessario:
Un progetto di Intelligenza artificiale di Azure come illustrato in Creare un progetto nel portale di Azure AI Foundry.
Modello che supporta l'API di inferenza del modello di intelligenza artificiale di Azure distribuita. In questo esempio viene usata una distribuzione
Mistral-Large
, ma si usa qualsiasi modello di preferenza. Per usare le funzionalità di incorporamento in LlamaIndex, è necessario un modello di incorporamento comecohere-embed-v3-multilingual
.- È possibile seguire le istruzioni in Distribuire modelli come API serverless.
Python 3.8 o versione successiva installata, incluso pip.
LlamaIndex installato. È possibile farlo con:
pip install llama-index
In questo esempio viene usata l'API di inferenza del modello di intelligenza artificiale di Azure, di conseguenza vengono installati i pacchetti seguenti:
pip install -U llama-index-llms-azure-inference pip install -U llama-index-embeddings-azure-inference
Importante
L'uso del servizio di inferenza del modello di intelligenza artificiale di Azure richiede la versione
0.2.4
perllama-index-llms-azure-inference
ollama-index-embeddings-azure-inference
.
Configurare l'ambiente
Per usare le VM distribuite nel portale di Azure AI Foundry, sono necessarie l'endpoint e le credenziali per la connessione. Per ottenere le informazioni necessarie dal modello da usare, seguire questa procedura:
Passare a Azure AI Foundry.
Aprire il progetto in cui viene distribuito il modello, se non è già aperto.
Passare a Modelli e endpoint e selezionare il modello distribuito come indicato nei prerequisiti.
Copiare l'URL dell'endpoint e la chiave.
Suggerimento
Se il modello è stato distribuito con il supporto di Microsoft Entra ID, non è necessaria una chiave.
In questo scenario sono stati inseriti sia l'URL dell'endpoint che la chiave nelle variabili di ambiente seguenti:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
Dopo la configurazione, creare un client per connettersi all'endpoint.
import os
from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)
Suggerimento
Se la distribuzione del modello è ospitata nel servizio Azure OpenAI o nella risorsa di Servizi di intelligenza artificiale di Azure, configurare il client come indicato nei modelli OpenAI di Azure e nel servizio di inferenza del modello di intelligenza artificiale di Azure.
Se l'endpoint gestisce più di un modello, ad esempio con il servizio di inferenza del modello di intelligenza artificiale di Azure o i modelli GitHub, è necessario indicare model_name
il parametro :
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",
)
In alternativa, se l'endpoint supporta Microsoft Entra ID, è possibile usare il codice seguente per creare il 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(),
)
Nota
Quando si usa Microsoft Entra ID, assicurarsi che l'endpoint sia stato distribuito con tale metodo di autenticazione e che si disponga delle autorizzazioni necessarie per richiamarlo.
Se si prevede di usare chiamate asincrone, è consigliabile usare la versione asincrona per le credenziali:
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(),
)
Modelli OpenAI di Azure e servizio di inferenza del modello di intelligenza artificiale di Azure
Se si usa il servizio Azure OpenAI o il servizio di inferenza del modello di intelligenza artificiale di Azure, assicurarsi di avere almeno una versione 0.2.4
dell'integrazione llamaIndex. Usare api_version
il parametro nel caso in cui sia necessario selezionare un oggetto specifico api_version
.
Per il servizio di inferenza del modello di intelligenza artificiale di Azure, è necessario passare model_name
il parametro :
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",
)
Per il servizio OpenAI di 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",
)
Suggerimento
Verificare qual è la versione dell'API usata dalla distribuzione. L'uso di un valore errato api_version
o non supportato dal modello genera un'eccezione ResourceNotFound
.
Parametri di inferenza
È possibile configurare la modalità di inferenza eseguita per tutte le operazioni che usano questo client impostando parametri aggiuntivi. Ciò consente di evitare di indicare le chiamate eseguite al modello.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"top_p": 1.0},
)
I parametri non sono supportati nell'API di inferenza del modello di intelligenza artificiale di Azure (riferimento), ma disponibili nel modello sottostante, è possibile usare l'argomento model_extras
. Nell'esempio seguente viene passato il parametro safe_prompt
, disponibile solo per i modelli Mistral.
llm = AzureAICompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
temperature=0.0,
model_kwargs={"model_extras": {"safe_prompt": True}},
)
Usare modelli LLMs
È possibile usare il client direttamente o Configurare i modelli usati dal codice in LlamaIndex. Per usare direttamente il modello, usare il metodo chat
per i modelli di istruzione di 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)
È anche possibile trasmettere gli output:
response = llm.stream_chat(messages)
for r in response:
print(r.delta, end="")
Il metodo complete
è ancora disponibile per il modello di tipo chat-completions
. In questi casi, il testo di input viene convertito in un messaggio con role="user"
.
Usare i modelli di incorporamento
Nello stesso modo in cui si crea un client LLM, è possibile connettersi a un modello di incorporamento. Nell'esempio seguente viene impostata la variabile di ambiente in modo che punti a un modello di incorporamento:
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
Creare quindi il 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'esempio seguente mostra un test semplice per verificare che funzioni:
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)
Configurare i modelli usati dal codice
È possibile usare il client modello LLM o incorporamenti singolarmente nel codice sviluppato con LlamaIndex oppure configurare l'intera sessione usando le opzioni Settings
. La configurazione della sessione offre il vantaggio di tutto il codice usando gli stessi modelli per tutte le operazioni.
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
Tuttavia, esistono scenari in cui si vuole usare un modello generale per la maggior parte delle operazioni, ma uno specifico per una determinata attività. In questi casi, è utile impostare il modello LLM o di incorporamento usato per ogni costrutto LlamaIndex. Nell'esempio seguente viene impostato un modello specifico:
from llama_index.core.evaluation import RelevancyEvaluator
relevancy_evaluator = RelevancyEvaluator(llm=llm)
In generale, si usa una combinazione di entrambe le strategie.