Поделиться через


Разработка приложений с помощью семантического ядра и Azure AI Foundry

В этой статье вы узнаете, как использовать семантические ядра с моделями, развернутыми из каталога моделей ИИ Azure на портале Azure AI Foundry.

Необходимые компоненты

  • Подписка Azure

  • Проект ИИ Azure, как описано на портале Azure AI Foundry.

  • Модель, поддерживающая развернутый API вывода модели ИИ Azure. В этом примере мы используем Mistral-Large развертывание, но используйте любую модель вашего предпочтения. Для использования возможностей внедрения в LlamaIndex требуется модель внедрения, например cohere-embed-v3-multilingual.

  • Python 3.10 или более поздней версии, включая pip.

  • Установленное семантическое ядро. Это можно сделать с помощью:

    pip install semantic-kernel
    
  • В этом примере мы работаем с API вывода модели ИИ Azure, поэтому мы устанавливаем соответствующие зависимости Azure. Это можно сделать с помощью:

    pip install semantic-kernel[azure]
    

Настройка среды

Чтобы использовать LLM, развернутые на портале Azure AI Foundry, вам потребуется конечная точка и учетные данные для подключения к нему. Выполните следующие действия, чтобы получить необходимые сведения из модели, которую вы хотите использовать:

  1. Перейдите на портал Azure AI Foundry.

  2. Откройте проект, в котором развернута модель, если она еще не открыта.

  3. Перейдите к моделям и конечным точкам и выберите развернутую модель, как указано в предварительных требованиях.

  4. Скопируйте URL-адрес конечной точки и ключ.

    Снимок экрана: параметр копирования URI конечной точки и ключей из конечной точки.

    Совет

    Если модель была развернута с поддержкой идентификатора Microsoft Entra ID, вам не нужен ключ.

В этом сценарии мы помещали URL-адрес конечной точки и ключ в следующие переменные среды:

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

После настройки создайте клиент для подключения к конечной точке:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

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

Совет

Клиент автоматически считывает переменные AZURE_AI_INFERENCE_ENDPOINT среды и AZURE_AI_INFERENCE_API_KEY подключается к модели. Однако вы также можете передать конечную точку и ключ непосредственно клиенту через endpoint конструктор и api_key параметры.

Кроме того, если конечная точка поддерживает идентификатор Microsoft Entra, можно использовать следующий код для создания клиента:

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

Примечание.

При использовании идентификатора Microsoft Entra убедитесь, что конечная точка была развернута с помощью этого метода проверки подлинности и у вас есть необходимые разрешения для вызова.

Модели Azure OpenAI

Если вы используете модель Azure OpenAI, можно использовать следующий код для создания клиента:

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

Параметры вывода

Вы можете настроить способ вывода с помощью AzureAIInferenceChatPromptExecutionSettings класса:

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
)

Вызов службы

Сначала вызовем службу завершения чата с простым журналом чата:

Совет

Семантический ядро — это асинхронная библиотека, поэтому для выполнения кода необходимо использовать асинхронную библиотеку.

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)

Кроме того, можно передавать ответ от службы:

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

Создание длительной беседы

Вы можете создать длительный диалог с помощью цикла:

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

Если вы выполняете потоковую передачу ответа, можно использовать следующий код:

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

Использование моделей внедрения

Настройте среду аналогично предыдущим шагам, но используйте AzureAIInferenceEmbeddings класс:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

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

В следующем коде показано, как получить внедрение из службы:

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

for embedding in embeddings:
    print(embedding)