Udostępnij za pośrednictwem


Tworzenie aplikacji za pomocą jądra semantycznego i rozwiązania Azure AI Foundry

Z tego artykułu dowiesz się, jak używać jądra semantycznego z modelami wdrożonym z katalogu modeli usługi Azure AI w portalu Azure AI Foundry.

Wymagania wstępne

  • Subskrypcja platformy Azure.

  • Projekt sztucznej inteligencji platformy Azure, zgodnie z opisem w artykule Create a project in Azure AI Foundry portal (Tworzenie projektu w portalu usługi Azure AI Foundry).

  • Model obsługujący wdrożony interfejs API wnioskowania modelu AI platformy Azure. W tym przykładzie Mistral-Large używamy wdrożenia, ale używamy dowolnego modelu preferencji. Do korzystania z funkcji osadzania w usłudze LlamaIndex potrzebny jest model osadzania, taki jak cohere-embed-v3-multilingual.

  • Zainstalowano środowisko Python w wersji 3.10 lub nowszej, w tym narzędzie.

  • Zainstalowane jądro semantyczne. Można to zrobić za pomocą:

    pip install semantic-kernel
    
  • W tym przykładzie pracujemy z interfejsem API wnioskowania modelu AI platformy Azure, dlatego instalujemy odpowiednie zależności platformy Azure. Można to zrobić za pomocą:

    pip install semantic-kernel[azure]
    

Konfigurowanie środowiska

Aby używać usług LLM wdrożonych w portalu usługi Azure AI Foundry, potrzebny jest punkt końcowy i poświadczenia, aby nawiązać z nim połączenie. Wykonaj następujące kroki, aby uzyskać potrzebne informacje z modelu, którego chcesz użyć:

  1. Przejdź do portalu usługi Azure AI Foundry.

  2. Otwórz projekt, w którym wdrożono model, jeśli nie jest jeszcze otwarty.

  3. Przejdź do pozycji Modele i punkty końcowe i wybierz wdrożony model zgodnie z wymaganiami wstępnymi.

  4. Skopiuj adres URL punktu końcowego i klucz.

    Zrzut ekranu przedstawiający opcję kopiowania identyfikatora URI i kluczy punktu końcowego z punktu końcowego.

    Napiwek

    Jeśli model został wdrożony przy użyciu obsługi identyfikatora Entra firmy Microsoft, nie potrzebujesz klucza.

W tym scenariuszu umieściliśmy zarówno adres URL punktu końcowego, jak i klucz w następujących zmiennych środowiskowych:

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

Po skonfigurowaniu utwórz klienta, aby nawiązać połączenie z punktem końcowym:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

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

Napiwek

Klient automatycznie odczytuje zmienne AZURE_AI_INFERENCE_ENDPOINT środowiskowe i AZURE_AI_INFERENCE_API_KEY nawiązuje połączenie z modelem. Można jednak również przekazać punkt końcowy i klucz bezpośrednio do klienta za pośrednictwem endpoint parametrów i api_key w konstruktorze.

Alternatywnie, jeśli punkt końcowy obsługuje identyfikator Entra firmy Microsoft, możesz użyć następującego kodu, aby utworzyć klienta:

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

Uwaga

W przypadku korzystania z identyfikatora Entra firmy Microsoft upewnij się, że punkt końcowy został wdrożony przy użyciu tej metody uwierzytelniania i że masz wymagane uprawnienia do jego wywołania.

Modele usługi Azure OpenAI

Jeśli używasz modelu usługi Azure OpenAI, możesz użyć następującego kodu, aby utworzyć klienta:

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

Parametry wnioskowania

Sposób wnioskowania można skonfigurować przy użyciu AzureAIInferenceChatPromptExecutionSettings klasy :

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
)

Wywoływanie usługi

Najpierw wywołajmy usługę uzupełniania czatu z prostą historią czatu:

Napiwek

Semantyczne jądro jest biblioteką asynchroniczną, więc musisz użyć biblioteki asyncio do uruchomienia kodu.

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)

Alternatywnie możesz przesłać strumieniowo odpowiedź z usługi:

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

Tworzenie długotrwałej konwersacji

Możesz utworzyć długotrwałą konwersację przy użyciu pętli:

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

Jeśli przesyłasz strumieniowo odpowiedź, możesz użyć następującego kodu:

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

Korzystanie z modeli osadzania

Skonfiguruj środowisko podobnie do poprzednich kroków, ale użyj AzureAIInferenceEmbeddings klasy :

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

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

Poniższy kod pokazuje, jak pobrać osadzanie z usługi:

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

for embedding in embeddings:
    print(embedding)