Teilen ü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:

  1. Ein Azure-Abonnement.

  2. Eine Azure KI-Hubressource, wie unter Erstellen und Verwalten eines Azure KI Studio-Hubs erläutert.

  3. 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.

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

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

    pip install llama-index
    
  6. 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
    

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. Wechseln Sie zu den Bereitstellungen, und wählen Sie das Modell aus, das Sie gemäß den Voraussetzungen bereitgestellt haben.

  3. 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

Der model_name-Parameter im Konstruktor ist für Endpunkte, die ein einzelnes Modell bedienen (wie serverlose Endpunkte), nicht erforderlich.

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

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.