Freigeben über


Entwickeln von Anwendungen mit LlamaIndex und Azure KI Studio

In diesem Artikel erfahren Sie, wie Sie LlamaIndex mit Modellen verwenden, die aus dem Azure KI-Modellkatalog in Azure KI Studio bereitgestellt wurden.

In Azure KI Studio bereitgestellte Modelle können auf zwei Arten mit LlamaIndex verwendet werden:

  • Verwenden der Azure KI-Modellinferenz-API: Alle in Azure KI Studio bereitgestellten Modelle unterstützen die Azure KI-Modellinferenz-API, die gängige Funktionen für die meisten Modelle im Katalog bereitstellt. Der Vorteil dieser API besteht darin, dass ein Wechsel so einfach wie das Ändern der zu verwendenden Modellimplementierung ist, da sie für alle identisch ist. Im Code sind keine weiteren Änderungen erforderlich. Installieren Sie zum Verwenden von LlamaIndex die Erweiterungen llama-index-llms-azure-inference und llama-index-embeddings-azure-inference.

  • Verwenden der anbieterspezifischen Modell-API: Einige Modelle (z. B. OpenAI, Cohere oder Mistral) bieten eigene APIs und Erweiterungen für LlamaIndex an. Diese Erweiterungen können bestimmte Funktionen enthalten, die vom Modell unterstützt werden und daher verwendet werden können. Wenn Sie llama-index verwenden, installieren Sie die für das zu verwendende Modell vorgesehene Erweiterung, z. B. llama-index-llms-openai oder llama-index-llms-cohere.

In diesem Beispiel wird die Azure KI-Modellinferenz-API verwendet.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Ein Azure-Abonnement.

  • Ein Azure KI-Projekt, wie unter Erstellen eines Projekts in Azure KI Studio erläutert

  • Ein Modell, das die bereitgestellte Azure KI-Modellinferenz-API unterstützt. In diesem Beispiel wird eine Mistral-Large-Bereitstellung verwendet, Sie können jedoch ein beliebiges Modell verwenden. Falls Sie die Einbettungsfunktionen von LlamaIndex verwenden möchten, benötigen Sie ein Einbettungsmodell wie cohere-embed-v3-multilingual.

  • Installation von Python 3.8 oder höher (einschließlich pip).

  • LlamaIndex muss installiert sein. Gehen Sie dazu wie folgt vor:

    pip install llama-index
    
  • In diesem Beispiel wird die Azure KI-Modellinferenz-API verwendet, daher müssen die folgenden Pakete installiert werden:

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

    Wichtig

    Für die Verwendung des Azure KI-Modellinferenzdiensts ist Version 0.2.4 von llama-index-llms-azure-inference oder llama-index-embeddings-azure-inference erforderlich.

Konfigurieren der Umgebung

Um LLMs zu verwenden, die in Azure KI Studio bereitgestellt wurden, benötigen Sie den Endpunkt und die Anmeldeinformationen, um eine Verbindung damit herzustellen. Führen Sie die folgenden Schritte aus, um die benötigten Informationen zu dem Modell abzurufen, das Sie verwenden möchten:

  1. Navigieren Sie zu Azure KI Studio.

  2. Öffnen Sie das Projekt, in dem das Modell bereitgestellt wird, falls es noch nicht geöffnet ist.

  3. Wechseln Sie zu Modelle + Endpunkte, und wählen Sie das Modell aus, das Sie gemäß den Voraussetzungen bereitgestellt haben.

  4. Kopieren Sie die Endpunkt-URL und den Schlüssel.

    Screenshot der Option zum Kopieren von Endpunkt-URI und Schlüsseln von einem Endpunkt

    Tipp

    Wenn Ihr Modell mit Microsoft Entra ID-Unterstützung bereitgestellt wurde, benötigen Sie keinen Schlüssel.

In diesem Szenario wurden Endpunkt-URL und Schlüssel in den folgenden Umgebungsvariablen gespeichert:

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

Erstellen Sie nach der Konfiguration einen Client, um eine Verbindung mit dem Endpunkt herzustellen.

import os
from llama_index.llms.azure_inference import AzureAICompletionsModel

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

Tipp

Wenn Ihre Modellimplementierung in einer Azure OpenAI Service- oder Azure KI Services-Ressource gehostet wird, konfigurieren Sie den Client gemäß den Anweisungen unter Azure OpenAI-Modelle und der Azure AI-Modellinferenzdienst.

Wenn Ihr Endpunkt für mehrere Modelle verwendet wird, z. B. mit dem Azure AI-Modellinferenzdienst oder GitHub-Modellen, müssen Sie den model_name-Parameter angeben:

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

Wenn Ihr Endpunkt Microsoft Entra ID unterstützt, können Sie zum Erstellen des Clients alternativ auch den folgenden Code verwenden:

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

Hinweis

Stellen Sie bei Verwendung von Microsoft Entra ID sicher, dass der Endpunkt mit dieser Authentifizierungsmethode bereitgestellt wurde und dass Sie über die erforderlichen Berechtigungen zum Aufrufen des Endpunkts verfügen.

Wenn Sie planen, asynchrone Aufrufe zu verwenden, empfiehlt es sich, für die Anmeldeinformationen die asynchrone Version zu verwenden:

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-Modelle und der Azure KI-Modellinferenzdienst

Wenn Sie Azure OpenAI Service oder den Azure KI-Modellinferenzdienst verwenden, benötigen Sie mindestens die Version 0.2.4 der LlamaIndex-Integration. Verwenden Sie den api_version-Parameter, falls Sie eine bestimmte api_version auswählen müssen.

Für den Azure KI-Modellinferenzdienst müssen Sie den model_name-Parameter übergeben:

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

Für 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",
)

Tipp

Überprüfen Sie, welche API-Version Ihre Bereitstellung verwendet. Die Verwendung einer falschen api_version oder einer, die vom Modell nicht unterstützt wird, führt zu einer ResourceNotFound-Ausnahme.

Rückschlussparameter

Sie können für alle Vorgänge, die diesen Client verwenden, konfigurieren, wie Rückschlüsse ausgeführt werden, indem Sie zusätzliche Parameter festlegen. So müssen Sie sie nicht bei jedem Aufruf an das Modell angeben.

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

Für Parameter, die in der Azure KI-Modellinferenz-API (Referenz) nicht unterstützt werden, aber im zugrunde liegenden Modell verfügbar sind, können Sie das model_extras-Argument verwenden. Im folgenden Beispiel wird der safe_prompt-Parameter übergeben, der nur in Mistral-Modellen verfügbar ist.

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

Verwenden von LLMs-Modellen

Sie können den Client direkt verwenden oder Konfigurieren der Modelle, die von Ihrem Code in LlamaIndex verwendet werden. Um das Modell direkt anzuwenden, verwenden Sie die chat-Methode für Chatanweisungsmodelle:

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)

Sie können die Ausgaben auch streamen:

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

Die complete-Methode ist für Modelle vom Typ chat-completions weiterhin verfügbar. In diesen Fällen wird Ihr Eingabetext mit role="user" in eine Nachricht konvertiert.

Verwenden von Einbettungsmodellen

Auf die gleiche Weise, wie Sie einen LLM-Client erstellen, können Sie eine Verbindung mit einem Einbettungsmodell herstellen. Im folgenden Beispiel wird die Umgebungsvariable so festgelegt, dass sie auf ein Einbettungsmodell verweist:

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

Erstellen Sie dann den Client:

from llama_index.embeddings.azure_inference import AzureAIEmbeddingsModel

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

Das folgende Beispiel zeigt einen einfachen Test, um die Funktion zu überprüfen:

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)

Konfigurieren der im Code verwendeten Modelle

Sie können den Client des LLM oder Einbettungsmodells einzeln in dem von Ihnen entwickelten Code mit LlamaIndex verwenden, oder Sie können die gesamte Sitzung mithilfe der Settings-Optionen konfigurieren. Das Konfigurieren der Sitzung hat den Vorteil, das im gesamten Code dieselben Modelle für alle Vorgänge verwendet werden.

from llama_index.core import Settings

Settings.llm = llm
Settings.embed_model = embed_model

Es gibt jedoch Szenarien, in denen Sie ein allgemeines Modell für die meisten Vorgänge verwenden möchten, aber für einen bestimmten Vorgang ein spezifisches Modell. In diesen Fällen ist es hilfreich, das zu verwendende LLM oder Einbettungsmodell für jedes LlamaIndex-Konstrukt festzulegen. Im folgenden Beispiel wird ein spezifisches Modell festgelegt:

from llama_index.core.evaluation import RelevancyEvaluator

relevancy_evaluator = RelevancyEvaluator(llm=llm)

Im Allgemeinen verwenden Sie eine Kombination aus beiden Strategien.