Partilhar via


Desenvolver aplicações com Semantic Kernel e Microsoft Foundry

Observação

Este documento refere-se ao portal Microsoft Foundry (clássico).

🔍 Consulte a documentação (nova) da Microsoft Foundry para saber mais sobre o novo portal.

Neste artigo, aprende a usar o Semantic Kernel com modelos implementados a partir do catálogo de modelos Foundry no portal Microsoft Foundry.

Importante

Se está atualmente a usar um SDK beta Azure AI Inference com Microsoft Foundry Models ou o serviço Azure OpenAI, recomendamos vivamente que faça a transição para a API OpenAI/v1 geralmente disponível, que utiliza um SDK estável da OpenAI.

Para obter mais informações sobre como migrar para a API OpenAI/v1 usando um SDK na linguagem de programação de sua escolha, consulte Migrar do SDK de inferência do Azure AI para o SDK do OpenAI.

Pré-requisitos

Configurar o ambiente

Para usar modelos de linguagem implementados no portal Foundry, precisa do endpoint e das credenciais para se ligar ao seu projeto. Siga estas etapas para obter as informações necessárias do modelo:

Sugestão

Como pode personalizar o painel esquerdo no portal Microsoft Foundry, pode ver itens diferentes dos mostrados nestes passos. Se não encontrar o que procura, selecione ... Mais informações na parte inferior do painel esquerdo.

  1. Inicie sessão no Microsoft Foundry.

  2. Abra o projeto onde o modelo está implantado, se ainda não estiver aberto.

  3. Vá para Modelos + pontos de extremidade e selecione o modelo implantado conforme indicado nos pré-requisitos.

  4. Copie o URL do ponto de extremidade e a chave.

    Sugestão

    Se o seu modelo foi implantado com suporte ao Microsoft Entra ID, você não precisa de uma chave.

Este exemplo usa variáveis de ambiente para a URL do ponto de extremidade e a chave.

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

Depois de configurar o ponto de extremidade e a chave, crie um cliente para se conectar ao ponto de extremidade:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion

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

Sugestão

O cliente lê automaticamente as variáveis AZURE_AI_INFERENCE_ENDPOINT de ambiente e AZURE_AI_INFERENCE_API_KEY se conecta ao modelo. Em vez disso, você pode passar diretamente o ponto de extremidade e a chave para o cliente, utilizando os parâmetros endpoint e api_key no construtor.

Como alternativa, se o seu ponto de extremidade suportar o Microsoft Entra ID, você pode usar o seguinte código para criar o cliente:

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

Observação

Se utilizar o Entra ID da Microsoft, verifique se o ponto de extremidade foi implantado com esse método de autenticação e se possui as permissões necessárias para aceder a ele.

Modelos do Azure OpenAI

Se você estiver usando um modelo do Azure OpenAI, poderá usar o seguinte código para criar o cliente:

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

Parâmetros de inferência

Você pode configurar como executar a inferência usando a AzureAIInferenceChatPromptExecutionSettings classe:

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
)

Chamar o serviço

Primeiro, ligue para o serviço de conclusão de bate-papo com um histórico de bate-papo simples:

Sugestão

O Kernel Semântico é uma biblioteca assíncrona, então você precisa usar a biblioteca asyncio para executar o código.

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)

Como alternativa, você pode transmitir a resposta do serviço:

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

Criar uma conversa de longa duração

Você pode criar uma conversa de longa duração usando um 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:> "))

Se você estiver transmitindo a resposta, poderá usar o seguinte código:

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

Usar modelos de incorporação

Configure seu ambiente de forma semelhante às etapas anteriores, mas use a AzureAIInferenceEmbeddings classe:

from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceTextEmbedding

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

O código a seguir mostra como obter incorporações do serviço:

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

for embedding in embeddings:
    print(embedding)