Partilhar via


Desenvolver um fluxo

O fluxo imediato é uma ferramenta de desenvolvimento projetada para simplificar todo o ciclo de desenvolvimento de aplicações de IA alimentadas por Modelos de Linguagem Grande (LLM). À medida que o ímpeto para aplicativos de IA baseados em LLM continua a crescer em todo o mundo, o fluxo imediato fornece uma solução abrangente que simplifica o processo de prototipagem, experimentação, iteração e implantação de seus aplicativos de IA.

Com o fluxo imediato, você será capaz de:

  • Orquestre fluxos executáveis com LLMs, prompts e ferramentas Python por meio de um gráfico visualizado.
  • Teste, depure e itere seus fluxos com facilidade.
  • Crie variantes de prompt e compare seu desempenho.

Neste artigo, você aprenderá como criar e desenvolver seu primeiro fluxo de prompt em seu estúdio do Azure Machine Learning.

Crie e desenvolva seu fluxo de prompt

No estúdio, selecione a guia Fluxo de prompt na barra de navegação esquerda. Selecione Criar para criar seu primeiro fluxo de prompt. Você pode criar um fluxo clonando as amostras disponíveis na galeria ou criando um fluxo do zero. Se você já tiver arquivos de fluxo no compartilhamento local ou de arquivos, também poderá importá-los para criar um fluxo.

Captura de tela da criação de fluxo de prompt do zero ou galeria.

Criação do fluxo

À esquerda, é a visualização plana, a principal área de trabalho onde você pode criar o fluxo, por exemplo, adicionar ferramentas em seu fluxo, editar o prompt, definir os dados de entrada de fluxo, executar seu fluxo, visualizar a saída, etc.

Captura de tela da área de trabalho principal do fluxo de prompt.

No canto superior direito, é a visualização de arquivos de fluxo. Cada fluxo pode ser representado por uma pasta que contém um arquivo 'flow.dag.yaml'', arquivos de código-fonte e pastas do sistema. Você pode adicionar novos arquivos, editar arquivos existentes e excluir arquivos. Você também pode exportar os arquivos para o local ou importar arquivos do local.

Além de editar inline o nó na visualização nivelada, você também pode ativar o modo de arquivo Raw e selecionar o nome do arquivo para editar o arquivo na guia de abertura do arquivo.

No canto inferior direito, é a visualização do gráfico apenas para visualização. Ele mostra a estrutura de fluxo que você está desenvolvendo. Você pode ampliar, reduzir, layout automático, etc.

Nota

Não é possível editar a visualização do gráfico diretamente, mas você pode selecionar o nó para localizar a placa de nó correspondente na visualização nivelada e, em seguida, fazer a edição embutida.

Sessão de computação

Antes de começar a criar, você deve primeiro iniciar a sessão de computação. A sessão de computação serve como o recurso de computação necessário para executar o fluxo de prompt, que inclui uma imagem do Docker que contém todos os pacotes de dependência necessários. É um must-have para a execução do fluxo.

Captura de tela do início da sessão de computação em estúdio.

Entrada e saída de fluxo

Entrada de fluxo são os dados passados para o fluxo como um todo. Defina o esquema de entrada especificando o nome e o tipo. Defina o valor de entrada de cada entrada para testar o fluxo. Você pode fazer referência à entrada de fluxo posteriormente nos nós de fluxo usando ${input.[input name]} sintaxe.

Saída de fluxo são os dados produzidos pelo fluxo como um todo, que resume os resultados da execução do fluxo. Você pode visualizar e exportar a tabela de saída após a conclusão da execução do fluxo ou da execução em lote. Defina o valor de saída de fluxo fazendo referência à saída de nó único de fluxo usando sintaxe ${[node name].output} ou ${[node name].output.[field name]}.

 Captura de tela de entrada e saída de fluxo.

Desenvolver o fluxo usando diferentes ferramentas

Em um fluxo, você pode consumir diferentes tipos de ferramentas, por exemplo, LLM, Python, Serp API, Content Safety, etc.

Ao selecionar uma ferramenta, você adicionará um novo nó ao fluxo. Você deve especificar o nome do nó e definir as configurações necessárias para o nó.

Por exemplo, para o nó LLM, você precisa selecionar uma conexão, uma implantação, definir o prompt, etc. A conexão ajuda a 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, deve criá-la primeiro e garantir que seu recurso do Azure OpenAI tenha as implantações de chat ou conclusão. LLM e ferramenta Prompt suporta você a usar Jinja como linguagem de modelagem para gerar dinamicamente o prompt. Por exemplo, você pode usar {{}} para incluir seu nome de entrada, em vez de texto fixo, para que ele possa ser substituído imediatamente.

Para usar a ferramenta Python, você precisa definir o script Python, definir o valor de entrada, etc. Você deve definir uma função Python com entradas e saídas da seguinte maneira.

 Captura de tela da escrita de um script Python para o nó Python.

Depois de terminar de compor o prompt ou o script Python, você pode selecionar 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. O valor de entrada do nó pode ser definido das seguintes maneiras:

  • Defina o valor diretamente na caixa de entrada
  • Referenciar a entrada de fluxo usando ${input.[input name]} sintaxe
  • Referenciar a saída do nó usando ${[node name].output} ou ${[node name].output.[field name]} sintaxe

Ao fazer referência à saída do nó, você pode vincular nós. Por exemplo, você pode fazer referência à saída do nó LLM na entrada do nó Python, para que o nó Python possa consumir a saída do nó LLM e, na visualização do gráfico, você pode ver que os dois nós estão interligados.

Habilitar o controle condicional para o fluxo

O Prompt Flow oferece não apenas uma maneira simplificada de executar o fluxo, mas também traz um recurso poderoso para os desenvolvedores - o controle condicional, que permite aos usuários definir condições para a execução de qualquer nó em um fluxo.

Em sua essência, o controle condicional fornece a capacidade de associar cada nó em um fluxo a uma configuração de ativação. Essa configuração é essencialmente uma instrução "when" que determina quando um nó deve ser executado. O poder desse recurso é percebido quando você tem fluxos complexos onde a execução de certas tarefas depende do resultado de tarefas anteriores. Ao aproveitar o controle condicional, você pode configurar seus nós específicos para serem executados somente quando as condições especificadas forem atendidas.

Especificamente, você pode definir a configuração de ativação para um nó selecionando o botão Ativar configuração na placa de nó. Você pode adicionar a instrução "quando" e definir a condição. Você pode definir as condições fazendo referência à entrada de fluxo ou saída de nó. Por exemplo, você pode definir a condição ${input.[input name]} como valor específico ou ${[node name].output} como valor específico.

Se a condição não for atendida, o nó será ignorado. O status do nó é mostrado como "Ignorado".

Captura de tela da configuração ativar config para habilitar o controle condicional.

Testar o fluxo

Você pode testar o fluxo de duas maneiras:

  • Execute um único nó.
    • Para executar um único nó, selecione o ícone Executar no nó na visualização nivelada. Quando a execução estiver concluída, você poderá verificar rapidamente o resultado na seção de saída do nó.
  • Execute todo o fluxo.
    • Para executar todo o fluxo, selecione o botão Executar na parte superior direita.

Exibir resultado do teste e rastreamento (visualização)

Para toda a execução do fluxo, depois de executar o fluxo, você pode ver o status da execução no banner de execução. Em seguida, você pode selecionar Exibir rastreamento para visualizar o rastreamento para verificar o resultado e observar a execução do fluxo, onde você pode ver a entrada e saída de todo o fluxo e cada nó, juntamente com informações mais detalhadas para depuração. Está disponível durante a execução e após a conclusão da mesma.

 Captura de tela do botão de saída de exibição em dois locais.

Compreender a vista de rastreio

O tipo de rastreamento de um fluxo de prompt é designado como Fluxo. Dentro da visualização de traço, a sequência clara das ferramentas usadas para orquestração de fluxo pode ser observada.

Cada span de nível 2 sob a raiz do fluxo representa um nó no fluxo, executado na forma de uma chamada de função, portanto, o tipo de span é identificado como Função. Você pode ver a duração da execução de cada nó na árvore de extensão.

Na árvore de extensão, as chamadas LLM são facilmente identificáveis como a extensão LLM . Eles fornecem informações sobre a duração da chamada LLM e o custo do token associado.

Ao clicar em um vão, você pode ver as informações detalhadas no lado direito. Isso inclui entrada e saída, Raw Json e Exception, todos úteis para observação e depuração.  Captura de tela de detalhes de rastreamento.

Nota

No SDK de fluxo de prompt, definimos tipos de serval span, incluindo LLM, Função, Incorporação, Recuperação e Fluxo. E o sistema cria automaticamente extensões com informações de execução em atributos e eventos designados.

Para saber mais sobre os tipos de extensão, consulte Rastrear extensão.

Depois que a execução do fluxo for concluída, para verificar os resultados, você poderá selecionar no botão Exibir resultados do teste para verificar todos os registros de execução históricos em uma lista. Por padrão, os registros de execução criados nos últimos sete dias são exibidos. Você pode selecionar o Filtro para alterar a condição.

Captura de tela do resultado do teste de fluxo.

Você também pode selecionar o Nome do registro de execução para exibir as informações detalhadas no modo de exibição de rastreamento.

Desenvolver um fluxo de bate-papo

O fluxo de bate-papo foi projetado para o desenvolvimento de aplicativos de conversação, aproveitando os recursos do fluxo padrão e fornecendo suporte aprimorado para entradas/saídas de bate-papo e gerenciamento de histórico de bate-papo. Com o fluxo de chat, você pode criar facilmente um chatbot que lida com a entrada e saída do chat.

Na página de criação do fluxo de chat, o fluxo de chat é marcado com um rótulo de "chat" para distingui-lo do fluxo padrão e do fluxo de avaliação. Para testar o fluxo de chat, selecione o botão "Chat" para acionar uma caixa de chat para conversa.

Captura de tela da página de criação do fluxo de chat.

Entrada/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 de bate-papo, o histórico de bate-papo e a saída de bate-papo.

  • Entrada de chat: a entrada de chat refere-se às mensagens ou consultas enviadas pelos usuários ao chatbot. Lidar eficazmente 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 desencadear respostas apropriadas.
  • Histórico de bate-papo: o histórico de bate-papo é 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 bate-papo é essencial para acompanhar o contexto da conversa e garantir que a IA possa gerar respostas contextualmente relevantes.
  • Saída de chat: A saída de chat refere-se às mensagens geradas por IA que são enviadas ao utilizador em resposta às suas entradas. Gerar resultados de bate-papo contextualmente apropriados e envolventes é vital para uma experiência positiva do usuário.

Um fluxo de chat pode ter várias entradas, o histórico de chat e a entrada de chat são necessários no fluxo de chat.

  • Na seção de entradas de fluxo de chat, uma entrada de fluxo pode ser marcada como entrada de chat. Em seguida, você pode preencher o valor de entrada do bate-papo digitando na caixa de bate-papo.

  • O fluxo de prompt pode ajudar o usuário a gerenciar o histórico de bate-papo. A chat_history seção Entradas é reservada para representar o histórico do bate-papo. Todas as interações na caixa de chat, incluindo entradas de bate-papo do usuário, saídas de bate-papo geradas e outras entradas e saídas de fluxo, são armazenadas automaticamente no histórico de bate-papo. O usuário não pode definir manualmente o valor de chat_history na seção Entradas. Está estruturado como uma lista de entradas e saídas:

    [
    {
        "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"
        }
    }
    ]
    

Nota

A capacidade de salvar ou gerenciar automaticamente o histórico de bate-papo é um recurso na página de criação ao realizar testes na caixa de chat. Para execuções em lote, é necessário que os usuários incluam o histórico de bate-papo no conjunto de dados de execução em lote. Se não houver nenhum histórico de bate-papo disponível para teste, basta definir o chat_history para uma lista [] vazia dentro do conjunto de dados de execução em lote.

Prompt do autor com histórico de bate-papo

Incorporar o histórico do bate-papo em suas solicitações é essencial para criar respostas de chatbot sensíveis ao contexto e envolventes. Em seus prompts, você pode fazer referência chat_history para recuperar interações anteriores. Isso permite que você faça referência a entradas e saídas anteriores para criar respostas contextualmente relevantes.

Use a gramática for-loop da linguagem Jinja para exibir uma lista de entradas e saídas do chat_history.

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

Teste com a caixa de chat

A caixa de chat fornece uma maneira interativa de testar seu fluxo de bate-papo simulando uma conversa com seu chatbot. Para testar seu fluxo de bate-papo usando a caixa de bate-papo, siga estas etapas:

  1. Selecione o botão Chat para abrir a caixa de chat.
  2. Digite suas entradas de teste na caixa de chat e selecione Enter para enviá-las ao chatbot.
  3. Analise as respostas do chatbot para garantir que sejam contextualmente apropriadas e precisas.
  4. Visualize o rastreamento no local para observar e depurar rapidamente.

 Captura de tela da experiência da caixa de bate-papo de fluxo de bate-papo.

Próximos passos