Desenvolver prompt flow
O Prompt Flow é uma ferramenta de desenvolvimento que simplifica o ciclo de desenvolvimento de aplicativos de IA que são alimentados por Large Language Models (LLMs). Nesse artigo, você aprenderá a criar e desenvolver um prompt flow e um fluxo de chat no Estúdio do Azure Machine Learning.
À medida que cresce o ímpeto para aplicações de IA baseadas em LLM, o prompt flow fornece uma solução abrangente que simplifica o processo de prototipagem, experimentação, iteração e implantação de aplicações de IA. Ao usar o prompt flow, você pode:
- Orquestrar fluxos executáveis com LLMs, prompts e ferramentas do Python por meio de um grafo visualizado.
- Teste, depure e itere seus fluxos facilmente.
- Crie variantes de prompt e compare seu desempenho.
Criar e desenvolver seu prompt flow
Para criar um prompt flow, selecione Fluxo de prompt na navegação à esquerda do Estúdio do Azure Machine Learning e, em seguida, selecione Criar na página Prompt flow.
Na tela Criar um novo fluxo, você pode criar um fluxo:
- Criando um fluxo Padrão, Chat ou Avaliação a partir de um modelo.
- Clonando uma amostra disponível na Galeria Explorar*.
- Importando um fluxo existente de arquivos locais ou de um compartilhamento de arquivos.
Para criar um fluxo, selecione Criar ou Clonar no cartão de fluxo desejado. No próximo painel de tela, você pode alterar o nome do novo fluxo, se desejar, e então selecionar Criar ou Clonar. O novo fluxo é aberto na interface de criação.
Sessão de computação
Antes de começar a criar, inicie a sessão de computação selecionando Iniciar sessão de computação na parte superior da página de criação de fluxo. Uma sessão de computação é necessária para a execução do fluxo. A sessão de computação gerencia os recursos de computação necessários para a execução do aplicativo, incluindo uma imagem do Docker que contém todos os pacotes de dependência necessários.
Página de criação
A sessão de computação pode levar alguns minutos para iniciar. Enquanto a sessão de computação estiver iniciando, inspecione as partes da página de criação de fluxo.
A visualização Fluxo ou nivelada no lado esquerdo da página é a principal área de trabalho onde você cria o fluxo. Na visualização nivelada, você pode editar nós, ferramentas, prompts e entradas; executar nós ou todo o fluxo; e definir e visualizar saídas.
Arquivos o canto superior direito mostra a estrutura de pastas e arquivos do fluxo. Cada fluxo tem uma pasta que contém um arquivo flow.dag.yaml, arquivos de código-fonte e pastas do sistema. Você pode adicionar, editar, excluir, carregar ou baixar arquivos para teste, implantação ou colaboração.
A visualização do Gráfico no canto inferior direito visualiza a estrutura do fluxo. Você pode aumentar ou diminuir o zoom ou usar o layout automático. Você não pode editar esta visualização diretamente, mas pode selecionar um nó para localizá-lo e editá-lo na visualização nivelada.
Entrada e saída de fluxo
Nas seções Entradas e Saídas, você pode visualizar, adicionar ou remover e editar entradas e saídas.
A entrada de fluxo são os dados transmitidos para o fluxo como um todo. Você define o esquema de entrada especificando o nome e o tipo, e define o valor de cada entrada para testar o fluxo. Você pode referenciar a entrada de fluxo nos nós de fluxo usando
${input.<input name>}
.A saída do fluxo são os dados produzidos pelo fluxo como um todo, que resumem os resultados da execução do fluxo. Você pode definir o valor de saída do fluxo referenciando uma única saída de nó usando a sintaxe
${<node name>.output}
ou${<node name>.output.<field name>}
. Você pode visualizar e exportar a tabela de resultados de saída após a conclusão de uma execução de fluxo ou de lote.
Ferramentas de fluxo
Em um fluxo, você pode consumir diferentes tipos de ferramentas, como LLM, Python, Prompt, Serp API e Content Safety. Selecionar uma ferramenta adiciona um novo nó para essa ferramenta ao final do fluxo. Você deve especificar o nome do nó e definir as configurações necessárias. Você pode usar os controles do nó para alterar a posição do nó no fluxo.
Entradas e saídas do nó
As ferramentas LLM e Prompt usam Jinja como uma linguagem de modelagem para gerar dinamicamente o prompt. Por exemplo, você pode usar {{}}
para delimitar o nome de entrada em vez de usar um texto fixo, para que ele possa ser substituído rapidamente.
Você pode definir os nós Entradas e Saídas das seguintes maneiras:
- Defina o Valor de entrada diretamente.
- Faça referência à entrada de fluxo usando
${input.<input name>}
. - Faça referência à saída do nó usando
${<node name>.output}
ou${<node name>.output.<field name>}
.
Após terminar de compor um prompt ou script Python, selecione Validar e analisar a entrada para que o sistema analise automaticamente a entrada do nó com base no modelo de prompt e na entrada da função Python.
Você pode vincular nós referenciando a saída do nó. Por exemplo, você pode referenciar a saída do nó LLM na entrada do nó Python para que o nó Python consuma a saída do nó LLM. Na visualização Gráfico, você pode ver os dois nós vinculados.
Nós LLM
Para um nó LLM do Azure OpenAI, você precisa selecionar Connection, Api e deployment_name e definir o Prompt. Use a conexão para armazenar e gerenciar com segurança chaves secretas ou outras credenciais confidenciais necessárias para interagir com o Azure OpenAI.
Se você ainda não tiver uma conexão, crie-a antes de adicionar o nó LLM e certifique-se de que o recurso do Azure OpenAI tenha uma implantação de chat ou conclusão. Para obter mais informações, veja Configurar uma conexão e Criar um recurso e implantar um modelo usando o Azure OpenAI.
Nós do Python
Para usar a ferramenta Python, você precisa definir o script Python, o valor de entrada e outras configurações. Um novo nó Python fornece a seguinte função Python padrão que define entradas e saídas.
from promptflow import tool
# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(input1: str) -> str:
return 'hello ' + input1
Controle condicional
O prompt flow oferece controle condicional, que permite definir condições para a execução de qualquer nó em um fluxo.
O controle condicional fornece a capacidade de associar cada nó em um fluxo com uma configuração de ativação. Esta configuração é uma instrução when
que determina quando um nó deve ser executado. O poder desse recurso é percebido em fluxos complexos onde a execução de certas tarefas depende do resultado de tarefas anteriores. Ao usar o controle condicional, você pode configurar seus nós específicos para serem executados somente quando as condições especificadas forem atendidas.
Defina a configuração de ativação para um nó selecionando o botão Ativar configuração no cartão do nó. Adicione uma instrução When e defina a condição. Você pode definir as condições referenciando a entrada do fluxo ou a saída de um nó. Por exemplo, você pode definir a condição ${input.<input name>}
ou ${<node name>.output}
como valores específicos. Se a condição não for atendida, o nó será ignorado e o status do nó aparecerá como Ignorado.
Testar um fluxo
Você pode testar um fluxo executando um único nó ou executando o fluxo inteiro.
- Para executar um único nó, selecione o ícone Executar no cartão do nó. Quando a execução do nó for concluída, você poderá verificar rapidamente os resultados na seção Saídas do nó.
- Para executar o fluxo inteiro, selecione Executar na parte superior da página.
Saídas de fluxo
Depois de selecionar Executar para executar o fluxo, você poderá ver o status da execução no banner na parte superior da página. Selecione Exibir saídas no banner superior ou na barra de menu superior para visualizar informações detalhadas de entrada, saída, execução de fluxo e orquestração.
Após a conclusão da execução do fluxo, você pode selecionar Exibir saídas para verificar todas as saídas históricas na tela Saídas.
Selecione a aba Rastrear na tela Saídas para ver um gráfico que fornece informações sobre a duração e o custo do token associado ao fluxo. Selecione fluxo em nome do nó para ver informações detalhadas da visão geral do fluxo no painel direito.
Expanda fluxo e selecione qualquer etapa para ver informações detalhadas sobre ela. Você pode ver a duração de cada execução de nó na árvore de intervalo. Para obter mais informações, veja Especificação de intervalo de rastreamento.
Desenvolver um fluxo de chat
Um fluxo de chat é um tipo específico de prompt flow projetado para o desenvolvimento de aplicativos de conversação. O fluxo de chat se baseia nos recursos de fluxo padrão para fornecer suporte aprimorado para entradas/saídas de chat e histórico de chat. Ao usar o fluxo de chat, você pode criar facilmente um chatbot que lida com entrada e saída de chat.
Para criar um fluxo de chat, na tela Criar um novo fluxo, selecione Criar no cartão Fluxo de chat ou selecione Chat na Explorar galeria e clone um dos fluxos disponíveis.
Em uma página de criação de fluxo de chat, o fluxo de chat é marcado com um rótulo Chat para distingui-lo dos fluxos padrão e de avaliação. Para testar um fluxo de chat, selecione Chat na parte superior da página para abrir uma caixa de Chat para conversa.
Entrada de chat, saída de chat e histórico de chat
Os elementos mais importantes que diferenciam um fluxo de bate-papo de um fluxo padrão são a entrada do chat, histórico do chat e saída do chat. O histórico de chat e a entrada de chat são necessários nos fluxos de chat.
Entrada de chat refere-se às mensagens ou consultas enviadas pelos usuários ao chatbot. Lidar efetivamente com a entrada de chat é crucial para uma conversa bem-sucedida, pois envolve entender as intenções do usuário, extrair informações relevantes e disparar respostas apropriadas.
O histórico de chat é o registro de todas as interações entre o usuário e o chatbot, incluindo entradas do usuário e saídas geradas por IA. Manter o histórico de chat é essencial para acompanhar o contexto da conversa e garantir que a IA possa gerar respostas contextualmente relevantes.
Saída de chat refere-se às mensagens geradas por IA que são enviadas aos usuários em resposta às suas entradas. Gerar a saída de chat contextualmente apropriada e envolvente é vital para uma experiência positiva do usuário.
Um fluxo de bate-papo pode ter várias entradas. Na seção Entradas do fluxo de bate-papo, marque uma das entradas como Entrada de chat e preencha o valor da entrada de chat inserindo uma pergunta na caixa Chat.
Gerenciar histórico de chat
Para ajudar você a gerenciar o histórico de chat, chat_history
na seção Entradas é reservado para representar o histórico de chat. Você não pode editar manualmente chat_history
.
O histórico de chat é estruturado como uma lista de entradas e saídas. Todas as interações na caixa de chat, incluindo entradas de chat do usuário, saídas de chat geradas e outras entradas e saídas de fluxo, são armazenadas no histórico de chat. O código a seguir mostra a estrutura do histórico de chat.
[
{
"inputs": {
"<flow input 1>": "xxxxxxxxxxxxxxx",
"<flow input 2>": "xxxxxxxxxxxxxxx",
"<flow input N>""xxxxxxxxxxxxxxx"
},
"outputs": {
"<flow output 1>": "xxxxxxxxxxxx",
"<flow output 2>": "xxxxxxxxxxxxx",
"<flow output M>": "xxxxxxxxxxxxx"
}
},
{
"inputs": {
"<flow input 1>": "xxxxxxxxxxxxxxx",
"<flow input 2>": "xxxxxxxxxxxxxxx",
"<flow input N>""xxxxxxxxxxxxxxx"
},
"outputs": {
"<flow output 1>": "xxxxxxxxxxxx",
"<flow output 2>": "xxxxxxxxxxxxx",
"<flow output M>": "xxxxxxxxxxxxx"
}
}
]
Observação
Ao realizar testes na caixa de Chat, você salva automaticamente o histórico do chat. Para execuções em lote, você deve incluir o histórico de chat no conjunto de dados de execução em lote. Se não houver histórico de chat disponível, defina chat_history
como uma lista vazia []
no conjunto de dados de execução em lote.
Para recuperar interações anteriores, faça referência a chat_history
em seus prompts. Você pode então consultar entradas e saídas anteriores para criar respostas contextualmente relevantes. Incorporar o histórico de chat em seus prompts é essencial para criar respostas de chatbot envolventes e sensíveis ao contexto.
Você pode usar a gramática for-loop da linguagem Jinja para exibir uma lista de entradas e saídas dechat_history
.
{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}
Testar com a caixa de chat
A caixa de Chat fornece uma maneira interativa de testar seu fluxo de chat simulando uma conversa com seu chatbot. Para testar seu fluxo de chat usando a caixa Chat:
- Selecione Chat para abrir a barra lateral Chat.
- Insira perguntas de teste na caixa de chat na parte inferior da tela para enviá-las ao chatbot.
- Examine as respostas do chatbot para garantir que elas sejam contextualmente apropriadas e precisas.
- Selecione Exibir saídas na parte superior da página de criação para visualizar e depurar rapidamente entradas, saídas e histórico do chat.
- Na tela Saídas, selecione a aba Rastrear e então selecione fluxo para ver informações detalhadas da visão geral do fluxo no painel direito. Expanda fluxo e selecione qualquer etapa para ver informações detalhadas sobre ela.