Dela via


Utveckla program med semantisk kernel och Azure AI Foundry

I den här artikeln får du lära dig hur du använder semantisk kernel med modeller som distribuerats från Azure AI-modellkatalogen i Azure AI Foundry-portalen.

Förutsättningar

  • En Azure-prenumeration.

  • Ett Azure AI-projekt enligt beskrivningen i Skapa ett projekt i Azure AI Foundry-portalen.

  • En modell som stöder azure AI-modellinferens-API :et som distribuerats. I det här exemplet använder vi en Mistral-Large distribution, men använder valfri modell. För att använda inbäddningsfunktioner i LlamaIndex behöver du en inbäddningsmodell som cohere-embed-v3-multilingual.

  • Python 3.10 eller senare installerat, inklusive pip.

  • Semantisk kernel installerad. Du kan göra det med:

    pip install semantic-kernel
    
  • I det här exemplet arbetar vi med Azure AI-modellinferens-API:et, och därför installerar vi relevanta Azure-beroenden. Du kan göra det med:

    pip install semantic-kernel[azure]
    

Konfigurera miljön

Om du vill använda LLM:er som distribuerats i Azure AI Foundry-portalen behöver du slutpunkten och autentiseringsuppgifterna för att ansluta till den. Följ dessa steg för att hämta den information du behöver från den modell som du vill använda:

  1. Gå till Azure AI Foundry-portalen.

  2. Öppna projektet där modellen distribueras, om den inte redan är öppen.

  3. Gå till Modeller + slutpunkter och välj den modell som du distribuerade enligt kraven.

  4. Kopiera slutpunkts-URL:en och nyckeln.

    Skärmbild av alternativet att kopiera slutpunkts-URI och nycklar från en slutpunkt.

    Dricks

    Om din modell har distribuerats med Microsoft Entra ID-stöd behöver du ingen nyckel.

I det här scenariot placerade vi både slutpunkts-URL:en och nyckeln i följande miljövariabler:

export AZURE_AI_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_AI_INFERENCE_API_KEY="<your-key-goes-here>"

När du har konfigurerat skapar du en klient för att ansluta till slutpunkten:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

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

Dricks

Klienten läser automatiskt miljövariablerna AZURE_AI_INFERENCE_ENDPOINT och AZURE_AI_INFERENCE_API_KEY ansluter till modellen. Men du kan också skicka slutpunkten och nyckeln direkt till klienten via parametrarna endpoint och api_key på konstruktorn.

Om slutpunkten har stöd för Microsoft Entra-ID kan du också använda följande kod för att skapa klienten:

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

Kommentar

När du använder Microsoft Entra-ID kontrollerar du att slutpunkten har distribuerats med den autentiseringsmetoden och att du har de behörigheter som krävs för att anropa den.

Azure OpenAI-modeller

Om du använder en Azure OpenAI-modell kan du använda följande kod för att skapa klienten:

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

Slutsatsdragningsparametrar

Du kan konfigurera hur slutsatsdragning utförs med hjälp AzureAIInferenceChatPromptExecutionSettings av klassen:

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
)

Anropa tjänsten

Vi ska först anropa tjänsten för chattens slutförande med en enkel chatthistorik:

Dricks

Semantisk kernel är ett asynkront bibliotek, så du måste använda asyncio-biblioteket för att köra koden.

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)

Du kan också strömma svaret från tjänsten:

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

Skapa en långvarig konversation

Du kan skapa en långvarig konversation med hjälp av en loop:

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

Om du strömmar svaret kan du använda följande kod:

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

Använda inbäddningsmodeller

Konfigurera din miljö på samma sätt som i föregående steg, men använd AzureAIInferenceEmbeddings klassen:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

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

Följande kod visar hur du hämtar inbäddningar från tjänsten:

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

for embedding in embeddings:
    print(embedding)