Delen via


Toepassingen ontwikkelen met LlamaIndex en Azure AI Foundry

In dit artikel leert u hoe u LlamaIndex gebruikt met modellen die zijn geïmplementeerd vanuit de Azure AI-modelcatalogus in azure AI Foundry Portal.

Modellen die zijn geïmplementeerd in Azure AI Foundry, kunnen op twee manieren worden gebruikt met LlamaIndex:

  • Met behulp van de Azure AI-modeldeductie-API: alle modellen die zijn geïmplementeerd in Azure AI Foundry ondersteunen de Deductie-API voor Azure AI-modellen, die een algemene set functies biedt die voor de meeste modellen in de catalogus kunnen worden gebruikt. Het voordeel van deze API is dat, omdat deze voor alle modellen hetzelfde is, het wijzigen van de ene naar de andere eenvoudig is als het wijzigen van de modelimplementatie die wordt gebruikt. Er zijn geen verdere wijzigingen vereist in de code. Als u met LlamaIndex werkt, installeert u de extensies llama-index-llms-azure-inference en llama-index-embeddings-azure-inference.

  • Met behulp van de providerspecifieke API van het model: Sommige modellen, zoals OpenAI, Cohere of Mistral, bieden hun eigen set API's en extensies voor LlamaIndex. Deze extensies kunnen specifieke functionaliteiten bevatten die door het model worden ondersteund en daarom geschikt zijn als u ze wilt benutten. Wanneer u werkt llama-index, installeert u de extensie die specifiek is voor het model dat u wilt gebruiken, zoals llama-index-llms-openai of llama-index-llms-cohere.

In dit voorbeeld werken we met de deductie-API van het Azure AI-model.

Vereisten

U hebt het volgende nodig om deze zelfstudie te volgen:

  • Een Azure-abonnement.

  • Een Azure AI-project zoals uitgelegd bij Een project maken in de Azure AI Foundry-portal.

  • Een model dat de Deductie-API van het Azure AI-model ondersteunt. In dit voorbeeld gebruiken we een Mistral-Large implementatie, maar gebruiken we elk model van uw voorkeur. Voor het gebruik van insluitingsmogelijkheden in LlamaIndex hebt u een insluitmodel nodig, zoals cohere-embed-v3-multilingual.

  • Python 3.8 of hoger geïnstalleerd, inclusief pip.

  • LlamaIndex geïnstalleerd. U kunt dit doen met:

    pip install llama-index
    
  • In dit voorbeeld werken we met de deductie-API van het Azure AI-model. Daarom installeren we de volgende pakketten:

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

    Belangrijk

    Voor het gebruik van de Azure AI-modeldeductieservice is versie 0.2.4 vereist voor llama-index-llms-azure-inference of llama-index-embeddings-azure-inference.

De omgeving configureren

Als u LLM's wilt gebruiken die zijn geïmplementeerd in de Azure AI Foundry-portal, hebt u het eindpunt en de referenties nodig om er verbinding mee te maken. Volg deze stappen om de benodigde informatie op te halen uit het model dat u wilt gebruiken:

  1. Ga naar Azure AI Foundry.

  2. Open het project waarin het model is geïmplementeerd, als het nog niet is geopend.

  3. Ga naar Modellen en eindpunten en selecteer het model dat u hebt geïmplementeerd zoals aangegeven in de vereisten.

  4. Kopieer de eindpunt-URL en de sleutel.

    Schermopname van de optie voor het kopiëren van eindpunt-URI en sleutels van een eindpunt.

    Tip

    Als uw model is geïmplementeerd met ondersteuning voor Microsoft Entra ID, hebt u geen sleutel nodig.

In dit scenario hebben we zowel de eindpunt-URL als de sleutel in de volgende omgevingsvariabelen geplaatst:

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

Zodra deze is geconfigureerd, maakt u een client om verbinding te maken met het eindpunt.

import os
from llama_index.llms.azure_inference import AzureAICompletionsModel

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

Tip

Als uw modelimplementatie wordt gehost in de Azure OpenAI-service of Azure AI Services-resource, configureert u de client zoals aangegeven in Azure OpenAI-modellen en de deductieservice voor Azure AI-modellen.

Als uw eindpunt meer dan één model bedient, zoals met de Deductieservice van het Azure AI-model of GitHub-modellen, moet u de parameter aangevenmodel_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",
)

Als uw eindpunt ondersteuning biedt voor Microsoft Entra ID, kunt u ook de volgende code gebruiken om de client te maken:

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

Notitie

Wanneer u Microsoft Entra-id gebruikt, moet u ervoor zorgen dat het eindpunt is geïmplementeerd met die verificatiemethode en dat u de vereiste machtigingen hebt om het aan te roepen.

Als u van plan bent asynchroon aanroepen te gebruiken, is het een aanbevolen procedure om de asynchrone versie voor de referenties te gebruiken:

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

Azure OpenAI-modellen en Azure AI-modeldeductieservice

Als u de Azure OpenAI-service of azure AI-modeldeductieservice gebruikt, moet u ervoor zorgen dat u ten minste een versie 0.2.4 van de LlamaIndex-integratie hebt. Gebruik api_version de parameter voor het geval u een specifieke api_versionparameter moet selecteren.

Voor de Azure AI-modeldeductieservice moet u de parameter doorgeven 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",
)

Voor de Azure OpenAI-service:

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

Tip

Controleer welke API-versie uw implementatie gebruikt. Als u een fout api_version gebruikt of niet wordt ondersteund door het model, resulteert dit in een ResourceNotFound uitzondering.

Deductieparameters

U kunt configureren hoe deductie wordt uitgevoerd voor alle bewerkingen die deze client gebruiken door extra parameters in te stellen. Zo voorkomt u dat deze worden aangegeven bij elke aanroep die u in het model aanroept.

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

Parameters die niet worden ondersteund in de deductie-API van het Azure AI-model (verwijzing), maar beschikbaar in het onderliggende model, kunt u het model_extras argument gebruiken. In het volgende voorbeeld wordt de parameter safe_prompt, alleen beschikbaar voor Mistral-modellen, doorgegeven.

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

LLM-modellen gebruiken

U kunt de client rechtstreeks gebruiken of de modellen configureren die worden gebruikt door uw code in LlamaIndex. Als u het model rechtstreeks wilt gebruiken, gebruikt u de chat methode voor chatinstructiemodellen:

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)

U kunt ook de uitvoer streamen:

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

De complete methode is nog steeds beschikbaar voor het model van het type chat-completions. In deze gevallen wordt uw invoertekst geconverteerd naar een bericht met role="user".

Insluitingsmodellen gebruiken

Op dezelfde manier als u een LLM-client maakt, kunt u verbinding maken met een insluitmodel. In het volgende voorbeeld stellen we de omgevingsvariabele zo in dat deze nu verwijst naar een insluitingsmodel:

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

Maak vervolgens de client:

from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel

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

In het volgende voorbeeld ziet u een eenvoudige test om te controleren of deze werkt:

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)

De modellen configureren die door uw code worden gebruikt

U kunt de LLM- of embeddings-modelclient afzonderlijk gebruiken in de code die u ontwikkelt met LlamaIndex of u kunt de hele sessie configureren met behulp van de Settings opties. Het configureren van de sessie heeft het voordeel van al uw code met dezelfde modellen voor alle bewerkingen.

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

Er zijn echter scenario's waarin u een algemeen model wilt gebruiken voor de meeste bewerkingen, maar een specifieke voor een bepaalde taak. In deze gevallen is het handig om het LLM- of insluitmodel in te stellen dat u gebruikt voor elke LlamaIndex-constructie. In het volgende voorbeeld stellen we een specifiek model in:

from llama_index.core.evaluation import RelevancyEvaluator

relevancy_evaluator = RelevancyEvaluator(llm=llm)

Over het algemeen gebruikt u een combinatie van beide strategieën.