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
undllama-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
oderllama-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 wiecohere-embed-v3-multilingual
.- Befolgen Sie dazu die Anweisungen unter Bereitstellen von Modellen als serverlose APIs.
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
vonllama-index-llms-azure-inference
oderllama-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:
Navigieren Sie zu Azure KI Studio.
Öffnen Sie das Projekt, in dem das Modell bereitgestellt wird, falls es noch nicht geöffnet ist.
Wechseln Sie zu Modelle + Endpunkte, und wählen Sie das Modell aus, das Sie gemäß den Voraussetzungen bereitgestellt haben.
Kopieren Sie die Endpunkt-URL und den Schlüssel.
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.