Delen via


Toepassingen ontwikkelen met Semantic Kernel en Azure AI Foundry

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

Vereisten

  • 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.10 of hoger geïnstalleerd, inclusief pip.

  • Semantische kernel geïnstalleerd. U kunt dit doen met:

    pip install semantic-kernel
    
  • In dit voorbeeld werken we met de deductie-API van het Azure AI-model. Daarom installeren we de relevante Azure-afhankelijkheden. U kunt dit doen met:

    pip install semantic-kernel[azure]
    

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 de Azure AI Foundry-portal.

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

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

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

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

Tip

De client leest automatisch de omgevingsvariabelen AZURE_AI_INFERENCE_ENDPOINT en AZURE_AI_INFERENCE_API_KEY maakt verbinding met het model. U kunt het eindpunt en de sleutel echter ook rechtstreeks doorgeven aan de client via de endpoint en api_key parameters op de constructor.

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

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

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.

Azure OpenAI-modellen

Als u een Azure OpenAI-model gebruikt, kunt u de volgende code gebruiken om de client te maken:

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

Deductieparameters

U kunt configureren hoe deductie wordt uitgevoerd met behulp van de AzureAIInferenceChatPromptExecutionSettings klasse:

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
)

De service aanroepen

Laten we eerst de chatvoltooiingsservice bellen met een eenvoudige chatgeschiedenis:

Tip

Semantische kernel is een asynchrone bibliotheek, dus u moet de asynchrone bibliotheek gebruiken om de code uit te voeren.

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)

U kunt het antwoord ook streamen vanuit de service:

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])

Een langlopend gesprek maken

U kunt een langlopend gesprek maken met behulp van een lus:

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

Als u het antwoord streamt, kunt u de volgende code gebruiken:

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

Insluitingsmodellen gebruiken

Configureer uw omgeving op dezelfde manier als de vorige stappen, maar gebruik de AzureAIInferenceEmbeddings klasse:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

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

De volgende code laat zien hoe u insluitingen kunt ophalen uit de service:

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

for embedding in embeddings:
    print(embedding)