Condividi tramite


Sviluppare applicazioni con LlamaIndex e Fonderia Azure AI

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 e llama-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 esempio llama-index-llms-openai o llama-index-llms-cohere.

In questo esempio viene usata l'API di inferenza del modello.

Prerequisiti

Per eseguire questa esercitazione, è necessario:

  • Una sottoscrizione di Azure.

  • 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 come cohere-embed-v3-multilingual.

  • 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 per llama-index-llms-azure-inference o llama-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.

  1. Passare a Fonderia Azure AI.

  2. Aprire il progetto in cui viene distribuito il modello, se non è già aperto.

  3. Passare a Modelli ed endpoint e selezionare il modello distribuito come indicato nei prerequisiti.

  4. Copiare l'URL dell'endpoint e la chiave.

    Screenshot dell'opzione per copiare l'URI dell'endpoint e le chiavi da un endpoint.

    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.