Freigeben über


Entwickeln von Anwendungen mit dem semantischen Kernel und Azure KI Foundry

In diesem Artikel erfahren Sie, wie Sie den semantischen Kernel mit Modellen verwenden, die aus dem Azure KI-Modellkatalog im Azure KI Foundry-Portal bereitgestellt wurden.

Voraussetzungen

  • Ein Azure-Abonnement.

  • Ein Azure KI-Projekt, wie unter Erstellen eines Projekts im Azure KI Foundry-Portal 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.10 oder höher (einschließlich pip).

  • Installation des semantischen Kernels. Gehen Sie dazu wie folgt vor:

    pip install semantic-kernel
    
  • In diesem Beispiel wird die Azure KI-Modellinferenz-API verwendet. Daher müssen die relevanten Azure-Abhängigkeiten installiert werden. Gehen Sie dazu wie folgt vor:

    pip install semantic-kernel[azure]
    

Konfigurieren der Umgebung

Um LLMs zu verwenden, die im Azure KI Foundry-Portal 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. Gehen Sie zum Azure KI Foundry-Portal.

  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_AI_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_AI_INFERENCE_API_KEY="<your-key-goes-here>"

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

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

chat_completion_service = AzureAIInferenceChatCompletion(ai_model_id="<deployment-name>")

Tipp

Der Client liest automatisch die Umgebungsvariablen AZURE_AI_INFERENCE_ENDPOINT und AZURE_AI_INFERENCE_API_KEY, um eine Verbindung mit dem Modell herzustellen. Sie können den Endpunkt und den Schlüssel jedoch auch direkt über die Parameter endpoint und api_key für den Konstruktor an den Client übergeben.

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

export AZURE_AI_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

chat_completion_service = AzureAIInferenceChatCompletion(ai_model_id="<deployment-name>")

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.

Azure OpenAI-Modelle

Wenn Sie ein Azure OpenAI-Modell verwenden, können Sie den Client mit dem folgenden Code erstellen:

from azure.ai.inference.aio import ChatCompletionsClient
from azure.identity.aio import DefaultAzureCredential

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

chat_completion_service = AzureAIInferenceChatCompletion(
    ai_model_id="<deployment-name>",
    client=ChatCompletionsClient(
        endpoint=f"{str(<your-azure-open-ai-endpoint>).strip('/')}/openai/deployments/{<deployment_name>}",
        credential=DefaultAzureCredential(),
        credential_scopes=["https://cognitiveservices.azure.com/.default"],
    ),
)

Rückschlussparameter

Mit der AzureAIInferenceChatPromptExecutionSettings-Klasse können Sie konfigurieren, wie der Rückschluss ausgeführt wird:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatPromptExecutionSettings

execution_settings = AzureAIInferenceChatPromptExecutionSettings(
    max_tokens=100,
    temperature=0.5,
    top_p=0.9,
    # extra_parameters={...},    # model-specific parameters
)

Aufrufen des Diensts

Rufen wir zunächst den Dienst für die Chatvervollständigung mit einem einfachen Chatverlauf auf:

Tipp

Der semantische Kernel ist eine asynchrone Bibliothek. Daher müssen Sie die asyncio-Bibliothek verwenden, um den Code auszuführen.

import asyncio

async def main():
    ...

if __name__ == "__main__":
    asyncio.run(main())
from semantic_kernel.contents.chat_history import ChatHistory

chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")

response = await chat_completion_service.get_chat_message_content(
    chat_history=chat_history,
    settings=execution_settings,
)
print(response)

Alternativ können Sie die Antwort vom Dienst streamen:

chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")

response = chat_completion_service.get_streaming_chat_message_content(
    chat_history=chat_history,
    settings=execution_settings,
)

chunks = []
async for chunk in response:
    chunks.append(chunk)
    print(chunk, end="")

full_response = sum(chunks[1:], chunks[0])

Erstellen einer Unterhaltung mit langer Dauer

Sie können eine Unterhaltung mit langer Dauer mithilfe einer Schleife erstellen:

while True:
    response = await chat_completion_service.get_chat_message_content(
        chat_history=chat_history,
        settings=execution_settings,
    )
    print(response)
    chat_history.add_message(response)
    chat_history.add_user_message(user_input = input("User:> "))

Wenn Sie die Antwort streamen, können Sie den folgenden Code verwenden:

while True:
    response = chat_completion_service.get_streaming_chat_message_content(
        chat_history=chat_history,
        settings=execution_settings,
    )

    chunks = []
    async for chunk in response:
        chunks.append(chunk)
        print(chunk, end="")

    full_response = sum(chunks[1:], chunks[0])
    chat_history.add_message(full_response)
    chat_history.add_user_message(user_input = input("User:> "))

Verwenden von Einbettungsmodellen

Konfigurieren Sie Ihre Umgebung ähnlich wie in den vorherigen Schritten, verwenden Sie jedoch die AzureAIInferenceEmbeddings-Klasse:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

embedding_generation_service = AzureAIInferenceTextEmbedding(ai_model_id="<deployment-name>")

Der folgende Code zeigt, wie Einbettungen aus dem Dienst abgerufen werden:

embeddings = await embedding_generation_service.generate_embeddings(
    texts=["My favorite color is blue.", "I love to eat pizza."],
)

for embedding in embeddings:
    print(embedding)