Compartilhar via


Criar um aplicativo de chat personalizado no Python usando o SDK de prompt flow

Importante

Alguns dos recursos descritos nesse artigo podem estar disponíveis apenas na versão prévia. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Neste início rápido, explicamos como configurar seu ambiente de desenvolvimento local com o SDK de prompt flow. Gravamos um prompt, o executamos como parte do código do aplicativo, rastreamos as chamadas LLM que estão sendo feitas e executamos uma avaliação básica nas saídas do LLM.

Pré-requisitos

Antes de seguir este início rápido, crie os recursos necessários para seu aplicativo:

Conclua o início rápido do playground do AI Studio para criar esses recursos, caso ainda não tenha feito isso. Você também pode criar esses recursos seguindo o artigo guia do SDK para criar um hub e um projeto.

Além disso, você deve ter as permissões necessárias para adicionar atribuições de função para contas de armazenamento em sua assinatura do Azure. A concessão de permissões (adição de atribuição de função) só é permitida pelo Proprietário dos recursos específicos do Azure. Talvez seja necessário pedir ajuda ao administrador de TI para conceder acesso para chamar o Serviço OpenAI do Azure usando sua identidade.

Conceder acesso para chamar o Serviço OpenAI do Azure usando sua identidade

Para usar as práticas recomendadas de segurança, em vez de chaves de API, usamos o Microsoft Entra ID para autenticar com o Azure OpenAI usando sua identidade de usuário.

Você ou seu administrador precisa conceder à sua identidade de usuário a função de Usuário do OpenAI dos Serviços Cognitivos no recurso dos Serviços de IA do Azure que você está usando. Essa função concede a você a capacidade de chamar o serviço Azure OpenAI usando sua identidade de usuário.

Para conceder a si mesmo acesso ao recurso dos Serviços de IA do Azure que você está usando:

  1. No AI Studio, acesse seu projeto e selecione Configurações no painel esquerdo.

  2. Na seção Recursos conectados, selecione o nome da conexão com o tipo AIServices.

    Captura de tela da página de configurações do projeto, realçando como selecionar o recurso de serviços de IA conectado para abri-lo.

    Observação

    Se você não vir a conexão AIServices, use a conexão Azure OpenAI.

  3. Na página de detalhes do recurso, selecione o link no título Recurso para abrir o recurso de serviços de IA no portal do Azure.

    Captura de tela dos detalhes da conexão dos Serviços de IA mostrando como abrir o recurso no portal do Azure.

  4. Na página à esquerda no portal do Azure, selecione Controle de acesso (IAM)>+ Adicionar>Adicionar atribuição de função.

  5. Pesquise a função de Usuário do OpenAI dos Serviços Cognitivos e selecione-a. Em seguida, selecione Avançar.

    Captura de tela da página para selecionar a função de Usuário OpenAI dos Serviços Cognitivos.

  6. Selecione Usuário, grupo ou entidade de serviço. Em seguida, selecione Selecionar membros.

  7. No painel Selecionar membros que é aberto, pesquise o nome do usuário para o qual você deseja adicionar a atribuição de função. Selecione o usuário e selecione Selecionar.

    Captura de tela da página com o usuário recebendo a nova função.

  8. Continue por meio do assistente e selecione Examinar + atribuir para adicionar a atribuição de função.

Instalar a CLI do Azure e o logon

Agora, instalamos a CLI do Azure e o logon do seu ambiente de desenvolvimento local, para que você possa usar suas credenciais de usuário para chamar o serviço Azure OpenAI.

Na maioria dos casos, você pode instalar a CLI do Azure do terminal usando o seguinte comando:

winget install -e --id Microsoft.AzureCLI

Você pode seguir as instruções Como instalar a CLI do Azure se esses comandos não funcionarem para seu sistema operacional específico ou configuração.

Depois de instalar a CLI do Azure, faça logon usando o comando az login e entre usando o navegador:

az login

Agora, criamos nosso aplicativo e chamamos o Serviço OpenAI do Azure a partir do código.

Criar um ambiente do Python

Primeiro, precisamos criar um novo ambiente Python que possamos usar para instalar os pacotes do SDK de prompt flow. NÃO instale pacotes na instalação global do Python. Você sempre deve usar um ambiente virtual ou conda ao instalar pacotes do Python, caso contrário, poderá interromper a instalação global do Python.

Se necessário, instale o Python

É recomendável usar o Python 3.10 ou posterior, mas ter pelo menos Python 3.8 é necessário. Se você não tiver uma versão adequada do Python instalada, poderá seguir as instruções no Tutorial do Python do VS Code para obter a maneira mais fácil de instalar o Python em seu sistema operacional.

Criar um ambiente virtual

Se você já tiver o Python 3.10 ou superior instalado, crie um ambiente virtual usando os seguintes comandos:

py -3 -m venv .venv
.venv\scripts\activate

Ativar o ambiente do Python significa que, ao executar python ou pip na linha de comando, você usará o interpretador do Python contido na pasta .venv do aplicativo.

Observação

Você pode usar o comando deactivate para sair do ambiente virtual do Python e depois reativar quando necessário.

Instalar o SDK de prompt flow

Nesta seção, usamos o prompt flow para criar nosso aplicativo. O Fluxo de prompt é um conjunto de ferramentas de desenvolvimento projetado para simplificar o ciclo de desenvolvimento de ponta a ponta de aplicativos de IA baseados em LLM, desde a idealização, prototipagem, testes, avaliação até a implantação e o monitoramento da produção.

Use o pip para instalar o SDK de prompt flow no ambiente virtual que você criou.

pip install promptflow
pip install azure-identity

O SDK de prompt flow usa uma dependência em vários pacotes, que você pode optar por instalar separadamente se não quiser todos eles:

  • promptflow-core: contém o runtime de prompt flow principal usado para executar o código LLM
  • promptflow-tracing: biblioteca leve usada para emitir rastreamentos OpenTelemetry em padrões
  • promptflow-devkit: contém o leito de teste de prompt flow e as ferramentas do visualizador de rastreamento para ambientes de desenvolvimento locais
  • openai: bibliotecas de cliente para usar o serviço Azure OpenAI
  • python-dotenv: usado para definir variáveis de ambiente lendo-as de arquivos .env

Configurar suas variáveis de ambiente

O ponto de extremidade e o nome da implantação dos serviços de IA são necessários para chamar o serviço Azure OpenAI do seu código. Neste início rápido, você salva esses valores em um arquivo .env, que é um arquivo que contém variáveis de ambiente que seu aplicativo pode ler. Você pode encontrar esses valores no playground de chat do AI Studio.

  1. Crie um arquivo .env e cole o seguinte código:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. Navegue até o playground de chat dentro do projeto do AI Studio. Primeiro valide se o chat está funcionando com seu modelo enviando uma mensagem para a LLM.

  3. Localize o nome da implantação do Azure OpenAI no playground de chat. Selecione a implantação na lista suspensa e passe o mouse sobre o nome da implantação para exibi-la. Neste exemplo, o nome da implantação é gpt-35-turbo-16k.

    Captura de tela do playground de chat do AI Studio aberto, realçando o nome da implantação e o botão de código de exibição.

  4. No arquivo .env, substitua deployment_name pelo nome da implantação da etapa anterior. Neste exemplo, estamos usando o nome da implantação gpt-35-turbo-16k.

  5. Selecione o botão <> Exibir Código e copie o valor do ponto de extremidade.

    Captura de tela do pop-up de código de exibição realçando o botão para copiar o valor do ponto de extremidade.

  6. No arquivo .env, substitua endpoint_value pelo valor do ponto de extremidade copiado da caixa de diálogo na etapa anterior.

Aviso

A autenticação baseada em chave tem suporte, mas não é recomendada pela Microsoft. Se você quiser usar chaves, poderá adicionar sua chave ao .env, mas verifique se .env está no arquivo .gitignore para que você não tenha feito check-in acidentalmente no repositório git.

Criar um prompt de chat básico e um aplicativo

Primeiro, crie um arquivo de modelo de prompt, para isso, usaremos Prompty, que é o formato de modelo de prompt compatível com o prompt flow.

Crie um arquivo chat.prompty e copie o seguinte código para ele:

---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
    api: chat
    configuration:
        type: azure_openai
    parameters:
        max_tokens: 256
        temperature: 0.2
inputs:
    chat_input:
        type: string
    chat_history:
        type: list
        is_chat_history: true
        default: []
outputs:   
  response:
    type: string
sample:
    chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.

{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}

user:
{{chat_input}}

Agora vamos criar um arquivo Python que usa esse modelo de prompt. Crie um arquivo chat.py e cole o seguinte código nele:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
    chat_history=[
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
    ],
    chat_input="Do other Azure AI services support this too?")

print(result)

Agora, no console, execute o código Python:

python chat.py

Agora você deve ver a saída executando o prompty:

Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.

Rastrear a execução do código de chat

Agora, damos uma olhada em como o rastreamento de prompt flow pode fornecer insights sobre as várias chamadas LLM que estão acontecendo em nossos scripts Python.

No início do arquivo chat.py, adicione o seguinte código para habilitar o rastreamento de prompt flow:

from promptflow.tracing import start_trace
start_trace()

Execute novamente chat.py:

python chat.py

Desta vez, você verá um link na saída para exibir um rastreamento de prompt flow da execução:

Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521

Se você selecionar esse link, verá o rastreamento mostrando as etapas da execução do programa, o que foi passado para a LLM e a saída da resposta.

Captura de tela do rastreamento mostrando as etapas da execução do programa.

O rastreamento de prompt flow também permite que você rastreie chamadas de função específicas e rastreamentos de log para o AI Studio, para obter mais informações, verifique Como usar o rastreamento no SDK de prompt flow.

Avaliar seu prompt

Agora vamos mostrar como podemos usar avaliadores de prompt flow para gerar métricas que podem pontuar a qualidade da conversa em uma escala de 0 a 5. Executamos o prompt novamente, mas, desta vez, armazenamos os resultados em uma matriz que contém a conversa completa e, em seguida, passamos essa matriz para um ChatEvaluator para pontuar.

Primeiro, instale o promptflow-evals package:

pip install promptflow-evals

Agora copie o seguinte código para um arquivo evaluate.py:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

chat_history=[
    {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
    {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)

conversation = chat_history
conversation += [
    {"role": "user", "content": chat_input},
    {"role": "assistant", "content": response}
]

chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)

print(score)

Execute o script evaluate.py:

python evaluate.py

Você deverá ver uma saída semelhante a esta:

{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}

Parece que marcamos 5 por coerência e fluência das respostas LLM nesta conversa!

Para obter mais informações sobre como usar avaliadores de prompt flow, incluindo como fazer seus próprios avaliadores personalizados e resultados de avaliação de log para o AI Studio, confira Avaliar seu aplicativo usando o SDK de prompt flow.