GenAIOps com fluxo de prompt e Azure DevOps
À medida que a demanda por aplicativos com infusão de LLM aumenta, as organizações precisam de um processo coeso e simplificado para gerenciar o ciclo de vida completo desses aplicativos. As Operações de Inteligência Artificial Generativa (GenAIOps), às vezes chamadas de LLMOps, são uma pedra angular da engenharia rápida eficiente e do desenvolvimento e implantação de aplicativos com infusão de LLM.
Este artigo mostra como o Azure Machine Learning permite a integração com o Azure DevOps para automatizar o ciclo de vida de desenvolvimento de aplicativos infundidos por LLM com fluxo de prompt. O fluxo imediato fornece uma abordagem simplificada e estruturada para o desenvolvimento de aplicativos com infusão de LLM. Seu processo e ciclo de vida bem definidos guiam você através do processo de construção, teste, otimização e implantação de fluxos, culminando na criação de soluções totalmente funcionais com infusão de LLM.
Recursos de fluxo de prompt do GenAIOps
O GenAIOps com fluxo de prompt usa um modelo e orientação do GenAIOps para ajudá-lo a criar aplicativos com infusão de LLM usando o fluxo de prompt. O GenAIOps com fluxo imediato tem recursos para aplicativos simples ou complexos com infusão de LLM e é personalizável de acordo com as necessidades do aplicativo.
O GenAIOps com plataforma de fluxo de prompt fornece os seguintes recursos:
Hospedagem centralizada de código. O repositório suporta a hospedagem de código para vários fluxos de prompt, fornecendo um único repositório para todos os seus fluxos. Este repositório é como uma biblioteca para seus fluxos, facilitando a localização, o acesso e a colaboração em diferentes projetos.
Gestão do ciclo de vida. Cada fluxo tem seu próprio ciclo de vida, proporcionando uma transição suave da experimentação local para a implantação da produção.
Experimentação de variantes e hiperparâmetros. Variantes e hiperparâmetros são como ingredientes de uma receita. A plataforma permite que você experimente diferentes combinações de variantes em vários nós em um fluxo. Você pode experimentar várias variantes e hiperparâmetros para avaliar facilmente as variantes de fluxo.
Vários destinos de implantação. A plataforma gera imagens do Docker infundidas com seu fluxo e sessão de computação para implantação em qualquer plataforma de destino e sistema operacional que suporte o Docker. Você pode implantar fluxos nos Serviços de Aplicativo do Azure, Kubernetes e cálculos gerenciados do Azure e configurá-los para serem dimensionados conforme necessário.
Implantação A/B. O GenAIOps com fluxo imediato implementa perfeitamente implantações A/B, permitindo que você compare facilmente diferentes versões de fluxo. Esta plataforma facilita a implantação A/B para fluxo imediato, da mesma forma que nos testes A/B tradicionais do site. Você pode comparar facilmente diferentes versões de um fluxo em uma configuração do mundo real para determinar qual versão tem o melhor desempenho.
Conjunto de dados muitos-para-muitos para relações de fluxo. GenAIOps com fluxo imediato acomoda vários conjuntos de dados para cada fluxo padrão e de avaliação, permitindo versatilidade no teste e avaliação de fluxo.
Dados condicionais e registo de modelo. A plataforma registra uma nova versão do conjunto de dados para o ativo de dados do Azure Machine Learning e flui no registro do modelo somente quando há uma alteração no conjunto de dados.
Relatórios abrangentes. GenAIOps com fluxo imediato gera relatórios detalhados para cada configuração de variante, permitindo que você tome decisões informadas. A plataforma fornece coleta detalhada de métricas, experimentos e execuções em massa de variantes para todas as execuções e experimentos, permitindo decisões orientadas por dados para arquivos CSV e HTML.
GenAIOps com fluxo de prompt fornece os seguintes outros recursos para personalização:
- Bring-your-own-flows (BYOF) fornece uma plataforma completa para o desenvolvimento de vários casos de uso relacionados a aplicativos com infusão de LLM.
- O desenvolvimento baseado em configuração significa que não há necessidade de escrever código clichê extenso.
- A experimentação e a avaliação imediatas são executadas localmente e na nuvem.
- Os cadernos para avaliação rápida local fornecem uma biblioteca de funções para experimentação local.
- O teste de ponto de extremidade dentro do pipeline após a implantação verifica a disponibilidade e a prontidão do ponto final.
- O human-in-loop opcional valida métricas de prompt antes da implantação.
Estágios GenAIOps
O ciclo de vida do GenAIOps compreende quatro estágios distintos:
Inicialização. Defina claramente o objetivo de negócios, reúna amostras de dados relevantes, estabeleça uma estrutura rápida básica e crie um fluxo que aprimore suas capacidades.
Experimentação. Aplique o fluxo aos dados de amostra, avalie o desempenho do prompt e refine o fluxo conforme necessário. Itere continuamente até ficar satisfeito com os resultados.
Avaliação e refinamento. Avalie o desempenho do fluxo usando um conjunto de dados maior, avalie a eficácia do prompt e faça refinamentos de acordo. Avançar para a fase seguinte se os resultados cumprirem os padrões desejados.
Implementação. Otimize o fluxo para eficiência e eficácia, implante-o em um ambiente de produção, incluindo implantação A/B, monitore seu desempenho, colete feedback do usuário e use essas informações para melhorar ainda mais o fluxo.
Ao aderir a essa metodologia estruturada, o fluxo imediato permite que você desenvolva com confiança, teste rigoroso, ajuste fino e implante fluxos, levando à criação de aplicativos de IA robustos e sofisticados.
O modelo GenAIOps Prompt Flow formaliza essa metodologia estruturada usando uma abordagem code-first e ajuda você a criar aplicativos com infusão de LLM usando ferramentas e processos de fluxo de prompt e recursos de fluxo de prompt GenAIOps. Este modelo está disponível em GenAIOps com modelo de fluxo de prompt.
Fluxo de processo GenAIOps
- No estágio de inicialização, você desenvolve fluxos, prepara e seleciona dados e atualiza arquivos de configuração relacionados ao GenAIOps.
- Após o desenvolvimento local usando o Visual Studio Code com a extensão Prompt Flow, você gera uma solicitação pull (PR) da ramificação de recurso para a ramificação de desenvolvimento, que executa o pipeline de validação de compilação e os fluxos de experimentação.
- O PR é aprovado manualmente e o código é mesclado com a ramificação de desenvolvimento.
- Depois que o PR se funde com a ramificação de desenvolvimento, o pipeline de integração contínua (CI) para o ambiente de desenvolvimento é executado. O pipeline de CI executa os fluxos de experimentação e avaliação em sequência e registra os fluxos no Registro do Azure Machine Learning além de outras etapas no pipeline.
- Após a conclusão da execução do pipeline de CI, um gatilho de implantação contínua (CD) executa o pipeline de CD, que implanta o fluxo padrão do Registro do Azure Machine Learning como um ponto de extremidade online do Azure Machine Learning. Em seguida, o pipeline executa testes de integração e fumaça no fluxo implantado.
- Uma ramificação de lançamento é criada a partir da ramificação de desenvolvimento, ou uma RP é levantada da ramificação de desenvolvimento para a ramificação de versão.
- O PR é aprovado manualmente e o código é mesclado com a ramificação de lançamento. Depois que o PR é mesclado à ramificação de lançamento, o pipeline de CI para o ambiente de produção é executado. O pipeline executa os fluxos de experimentação e avaliação em sequência e registra os fluxos no Registro de Aprendizado de Máquina do Azure, além de outras etapas no pipeline.
- Após a conclusão da execução do pipeline de CI, um gatilho de CD executa o pipeline de CD, que implanta o fluxo padrão do Registro do Azure Machine Learning como um ponto de extremidade online do Azure Machine Learning. Em seguida, o pipeline executa testes de integração e fumaça no fluxo implantado.
Criar um fluxo de prompt GenAIOps
O restante deste artigo mostra como usar GenAIOps com fluxo de prompt seguindo o exemplo de ponta a ponta no GenAIOps com repositório de modelo de fluxo de prompt, que ajuda você a criar aplicativos com infusão de LLM usando fluxo de prompt e Azure DevOps. O objetivo principal é fornecer assistência no desenvolvimento dessas aplicações usando os recursos de fluxo imediato e GenAIOps.
Pré-requisitos
- Uma subscrição do Azure com a versão gratuita ou paga do Azure Machine Learning.
- Uma área de trabalho do Azure Machine Learning.
- Git versão 2.27 ou mais recente em execução em sua máquina local.
- Uma organização do Azure DevOps onde você tem a capacidade de criar um projeto, um repositório de controle de origem do Azure Repos e pipelines do Azure Pipelines. Uma organização de DevOps do Azure ajuda você a colaborar, planejar e controlar seu trabalho, código e problemas, além de configurar CI e CD.
- Uma compreensão de como integrar GenAIOps com fluxo de prompt.
Nota
Se você usar o Azure DevOps e o Terraform para girar a infraestrutura, precisará da extensão Terraform para Azure DevOps instalada.
Configurar uma conexão de fluxo de prompt
O fluxo de prompt usa um recurso de conexão para se conectar aos pontos de extremidade do Azure OpenAI, OpenAI ou Azure AI Search. Você pode criar uma conexão por meio da interface do usuário do portal de fluxo de prompt ou usando a API REST. Para obter mais informações, consulte Conexões no fluxo de prompt.
Para criar a conexão, siga as instruções em Configurar conexões para fluxo de prompt. Os fluxos de exemplo usam uma conexão chamada aoai
, portanto, dê esse nome à sua conexão.
Configurar uma sessão de computação
O fluxo de prompt usa uma sessão de computação para executar o fluxo. Crie e inicie a sessão de computação antes de executar o fluxo de prompt.
Configurar o repositório do Azure Repos
Para criar um repositório bifurcado em sua organização do Azure DevOps, siga as instruções em Configurar o repositório GitHub. Este repositório usa duas ramificações main
e development
, para promoções de código e execução de pipeline.
Para criar um novo repositório local, siga as instruções em Clone the repo. Esse clone ajuda você a criar uma nova ramificação de recurso a partir da ramificação de desenvolvimento e incorporar alterações.
Configurar uma entidade de serviço do Azure
Uma entidade de serviço do Azure é uma identidade de segurança que aplicativos, serviços e ferramentas de automação usam para acessar recursos do Azure. O aplicativo ou serviço é autenticado com o Azure para acessar recursos em seu nome.
Crie uma entidade de serviço seguindo as instruções em Criar uma entidade de serviço do Azure. Você usa essa entidade de serviço para configurar a conexão dos Serviços de DevOps do Azure e permitir que os Serviços de DevOps do Azure se autentiquem e se conectem aos serviços do Azure. O experimento de fluxo de prompt e os trabalhos de avaliação são executados sob a identidade da entidade de serviço.
A instalação fornece à entidade de serviço permissões de Proprietário para que o pipeline de CD possa fornecer automaticamente ao ponto de extremidade do Azure Machine Learning recém-provisionado acesso ao espaço de trabalho do Azure Machine Learning para ler informações de conexão. O pipeline também adiciona o ponto de extremidade à política de cofre de chaves associada ao espaço de trabalho do Azure Machine Learning com get
permissões secretas list
. Você pode alterar as permissões de Proprietário para permissões de nível de Colaborador alterando o código YAML do pipeline para remover a etapa relacionada às permissões.
Criar um novo projeto do Azure DevOps
Para criar um novo projeto na interface do usuário do Azure DevOps, siga as instruções em Criar um novo projeto do Azure DevOps.
Configurar a autenticação entre o Azure DevOps e o Azure
Esta etapa configura uma nova conexão de serviço do Azure DevOps que armazena as informações da entidade de serviço. Os pipelines de projeto podem ler as informações de conexão usando o nome da conexão para se conectar ao Azure automaticamente. Para usar a entidade de serviço criada para configurar a autenticação entre o Azure DevOps e os serviços do Azure, siga as instruções em Configurar a autenticação com o Azure e o Azure DevOps.
Criar um grupo de variáveis do Azure DevOps
Para criar um novo grupo de variáveis e adicionar uma variável relacionada à conexão de serviço do Azure DevOps, siga as instruções em Criar um grupo de variáveis do Azure DevOps. O nome da entidade de serviço fica então disponível para os pipelines automaticamente como uma variável de ambiente.
Configurar o Azure Repos e o Azure Pipelines
O repositório de exemplo usa duas ramificações main
e development
, para promoções de código e execução de pipeline. Para configurar seus próprios repositórios locais e remotos para usar o código do repositório de exemplo, siga as instruções em Configurar repositórios locais e remotos do Azure DevOps.
Você clona as ramificações e development
do main
repositório de exemplo e associa o código para fazer referência ao novo repositório do Azure Repos. Tanto o PR quanto os pipelines de desenvolvimento são configurados para serem executados automaticamente com base na criação de RP e gatilhos de mesclagem.
A política de ramificação para a development
ramificação é configurada para executar o pipeline de RP para qualquer RP gerado na ramificação de desenvolvimento a partir de uma ramificação de recurso. O dev
pipeline é executado quando o PR se funde com a ramificação de desenvolvimento e consiste nas fases CI e CD.
O Human in the loop também é implementado dentro dos gasodutos. Depois que a dev
fase de CI no pipeline é executada, a fase de CD segue depois que a aprovação manual é fornecida na interface do usuário de execução de compilação do Azure Pipelines.
O tempo padrão para aguardar a aprovação é de 60 minutos, após o qual o pipeline é rejeitado e a fase do CD não é executada. A aprovação manual da execução executa as etapas do CD do pipeline.
A aprovação manual no pipeline de exemplo está configurada para enviar notificações para o replace@youremail.com
. Substitua o espaço reservado por um endereço de e-mail apropriado.
Testar o pipeline
Para testar os pipelines, siga as instruções em Test the pipelines. O processo completo envolve as seguintes etapas:
- Você eleva um PR de uma ramificação de recurso para a ramificação de desenvolvimento.
- O pipeline de PR é executado automaticamente devido à configuração da política de ramificação.
- O PR é fundido com o ramo de desenvolvimento.
- O pipeline associado
dev
é executado, resultando na execução completa de CI e CD e no provisionamento ou atualização dos pontos de extremidade do Azure Machine Learning.
As saídas devem ser semelhantes aos exemplos em Exemplo de cenário de execução, avaliação e implantação do prompt.
Usar execução local
Para usar os recursos de execução local, siga estas etapas.
Clone o repositório da seguinte maneira:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
Crie um arquivo .env no nível superior da pasta. Adicione linhas para cada conexão, atualizando os valores para os espaços reservados. Os exemplos no repositório de exemplo usam a conexão AzureOpenAI nomeada
aoai
e a versão2024-02-01
da API.aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"} <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
Prepare o conda local ou o ambiente virtual para instalar as dependências.
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
Traga ou escreva seus fluxos no modelo com base nas instruções em Como integrar novos fluxos.
Escreva scripts Python na pasta local_execution semelhante aos exemplos fornecidos.