Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare LlamaIndex con i modelli distribuiti dal catalogo dei modelli di Azure AI nel Portale Fonderia Azure AI.
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, 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, il passaggio da uno all'altro è semplice come cambiare la 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.
Prerequisiti
Per eseguire questa esercitazione, è necessario:
Un progetto di Azure AI, come illustrato in Creare un progetto nel Portale di Fonderia di Azure AI.
Un modello che supporta l'API di inferenza del modello è stato distribuito. In questo esempio viene usata una distribuzione di
Mistral-Large
, ma è possibile usare qualsiasi modello a propria scelta. 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 distribuzioni di API serverless.
Python 3.8 o versione successiva installata, incluso pip.
LlamaIndex installato. È possibile farlo con:
pip install llama-index
In questo esempio si usa l'API Di inferenza del modello, 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 Foundry Models richiede la versione
0.2.4
perllama-index-llms-azure-inference
ollama-index-embeddings-azure-inference
.
Configurare l'ambiente
Per usare i modelli linguistici di grandi dimensioni nel Portale Fonderia Azure AI, sono necessari l'endpoint e le credenziali per la connessione. Per ottenere le informazioni necessarie dal modello da usare, seguire questa procedura:
Suggerimento
Poiché è possibile personalizzare il riquadro sinistro nel portale di Azure AI Foundry, è possibile che vengano visualizzati elementi diversi rispetto a quelli illustrati in questi passaggi. Se non viene visualizzato ciò che si sta cercando, selezionare ... Altro nella parte inferiore del riquadro sinistro.
Passare a Fonderia Azure AI.
Aprire il progetto in cui viene distribuito il modello, se non è già aperto.
Passare a Modelli ed 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 impostare l'URL dell'endpoint e la chiave come variabili di ambiente. Se l'endpoint copiato include testo aggiuntivo dopo /models
, rimuoverlo in modo che l'URL termini a /models
come mostrato di seguito.
export AZURE_INFERENCE_ENDPOINT="https://<resource>.services.ai.azure.com/models"
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 in Azure OpenAI nei modelli foundry o nella risorsa dei servizi di intelligenza artificiale di Azure, configurare il client come indicato nel servizio Modelli OpenAI di Azure e nei modelli Foundry.
Se l'endpoint gestisce più modelli, ad esempio con il servizio Foundry Models o GitHub Models, è 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-2411",
)
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(),
)
Annotazioni
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 Modelli Foundry
Se si usa il servizio Azure OpenAI o Foundry Models, assicurarsi di avere almeno una versione 0.2.4
dell'integrazione llamaIndex. Usare il parametro api_version
nel caso in cui sia necessario selezionare un oggetto specifico api_version
.
Per il servizio Foundry Models è 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-2411",
)
Per Azure OpenAI nei modelli di Azure AI Foundry:
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 API in uso dalla distribuzione. L'uso di un valore api_version
errato 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 indicarli in ogni chiamata effettuata 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 (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 linguistici di grandi dimensioni
È 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.