O encadeamento de prompts é um conceito fundamental na criação de fluxos de trabalho avançados usando grandes modelos de linguagem (LLMs). Ele envolve vincular vários prompts em uma sequência lógica, em que a saída de um prompt serve como entrada para o próximo. Essa abordagem modular é poderosa para resolver tarefas complexas, como processamento de texto multietapas, sumarização, resposta a perguntas e muito mais.
O LangChain é um framework versátil projetado para simplificar a criação desses fluxos de trabalho. Ele fornece ferramentas para gerenciar LLMs, como os modelos IBM® Granite ou os modelos GPT (transformador pré-treinado generativo) da OpenAI, definir prompts personalizados e conectá-los a cadeias reutilizáveis. Ao abstrair a complexidade do gerenciamento de prompts, o LangChain permite que os desenvolvedores se concentrem na solução de problemas em vez de orquestrar interações com LLMs.
Neste tutorial, vamos:
O LangChain oferece um framework poderoso para criar fluxos de trabalho modulares em aplicações de chatbots. Ao combinar prompts estruturados, encadeamento dinâmico e integração avançada de LLMs, ele permite que os desenvolvedores criem pipelines escaláveis e adaptáveis que aproveitam as técnicas de RAG e entregam saídas estruturadas como JSON. Veja como o LangChain lida com o encadeamento de prompts de forma eficaz:
Abstração de prompt: o LangChain aproveita o from_template para criar fluxos de trabalho de entrada/saída estruturados para cada etapa, facilitando o manuseio de operações complexas do chatbot.
Integração de LLMs: o framework se integra sem dificuldades a vários LLMs, como IBM Granite, OpenAI e Hugging Face, permitindo o ajuste fino para tarefas personalizadas.
Gerenciamento de cadeia: o SequentialChain e o SimpleSequentialChain do LangChain permitem fluxos de trabalho modulares para pipelines de chatbot, enquanto o stroutputparser garante saídas estruturadas, como JSON.
Fluxos de trabalho dinâmicos: usando ferramentas como ConditionalChain e modelos de mensagens do sistema, o LangChain é compatível com fluxos de trabalho adaptáveis, alinhando-se aos princípios da RAG (geração aumentada de recuperação) para geração dinâmica de conteúdo.
Ao final deste tutorial, você terá um conhecimento sólido de como usar o LangChain para construir fluxos de trabalho modulares e extensíveis para uma ampla gama de aplicações.
O encadeamento de prompts permite que você crie fluxos de trabalho nos quais as saídas de uma etapa são passadas para a próxima. Diferentes tipos de encadeamento são compatíveis com diversos fluxos de trabalho, que vão desde tarefas sequenciais simples até processos mais complexos e dinâmicos. Aqui está uma breve visão dos tipos de encadeamentos de prompts:
Encadeamento sequencial: o tipo mais direto de encadeamento, em que a saída de um prompt é passada diretamente como entrada para o próximo. Essa opção é ideal para tarefas com progressão linear.[1]
Encadeamento de ramificações: no encadeamento de ramificações, uma única saída é dividida em vários fluxos de trabalho paralelos. Cada ramificação processa a saída de forma independente. [2]
Encadeamento iterativo: o encadeamento iterativo envolve a execução repetida de um prompt ou cadeia até que uma condição específica seja atendida. Essa opção é útil para refinar saídas.[3]
Encadeamento hierárquico: esse tipo divide uma tarefa grande em subtarefas menores, que são executadas hierarquicamente. As saídas de nível inferior alimentam tarefas de nível superior. [4]
Encadeamento condicional: o encadeamento condicional escolhe dinamicamente a próxima etapa com base na saída de um prompt anterior. Ele permite a tomada de decisão dentro de fluxos de trabalho.
Encadeamento multimodal: o encadeamento multimodal integra prompts que lidam com diferentes tipos de dados (por exemplo, texto, imagens ou áudio). É adequado para aplicações que combinam múltiplas modalidades. [2]
Encadeamento dinâmico: o encadeamento dinâmico adapta o fluxo de trabalho com base em saídas em tempo real ou condições variáveis. Acrescenta flexibilidade ao encadeamento de prompts. [5]
Encadeamento recursivo: no encadeamento recursivo, grandes entradas são divididas em partes menores para processamento individual, e os resultados são, então, combinados. É útil para lidar com documentos ou conjuntos de dados longos. [6]
Encadeamento reverso: o encadeamento reverso começa com uma saída esperada e trabalha de trás para frente para determinar as entradas ou etapas necessárias para alcançá-la. É ótimo para resolução de problemas e depuração. [5]
Cada tipo de encadeamento atende a casos de uso únicos, tornando essencial escolher o encadeamento certo com base na complexidade e nos requisitos da tarefa.
Nesse fluxo de trabalho, processamos o feedback dos clientes com modelos de chat e engenharia de prompts para criar um pipeline de processamento de texto escalável. As etapas seguintes do tutorial demonstram técnicas sequenciais, ramificadas e de encadeamento iterativo alimentadas por IA generativa.
Extração de palavras-chave (encadeamento sequencial)
Gerar um resumo de sentimento (encadeamento de ramificações)
Refinar o resumo do sentimento (encadeamento iterativo)
Saída final
Essa abordagem combina encadeamento sequencial, ramificado e iterativo em Python com modelos de chat e engenharia de prompts. Ela garante o processamento robusto do feedback dos clientes, aproveitando a IA generativa para extração de palavras-chave, análise de sentimento e refinamento.
Você precisa de uma uma conta do IBM Cloud para criar um projeto do watsonx.ai .
Embora você possa escolher entre várias ferramentas, este tutorial explica como configurar uma conta da IBM para usar um Jupyter Notebook.
Essa etapa abre um ambiente do notebook, onde você poderá copiar o código deste tutorial. Ou então, você pode baixar esse notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Para ver mais tutoriais do Granite, consulte a Comunidade IBM Granite. Este tutorial também está disponível no GitHub.
Precisamos de bibliotecas para trabalhar com o framework Langchain e watsonxLLM. Vamos primeiro instalar os pacotes necessários.
Observação: se você estiver usando uma versão antiga do "pip", você pode usar o comando pip install --upgrade pip" para atualizá-la. Esta etapa ajuda você a instalar facilmente os pacotes mais recentes, que podem não ser compatíveis com uma versão mais antiga. Mas, se você já estiver usando a versão mais recente ou se tiver atualizado seus pacotes recentemente, pode ignorar este comando.
Este bloco de código importa bibliotecas e ferramentas essenciais do Python para construir e gerenciar uma aplicação LLM usando o LangChain e o IBM Watson LLM.
O módulo os é usado para acessar variáveis de ambiente, como credenciais de projeto ou chaves de API.
O WatsonxLLM é um módulo do langchain_ibm que integra o IBM Watson LLM para gerar saídas a partir de modelos de IA generativa.
O PromptTemplate ajuda a criar modelos reutilizáveis para prompts, garantindo a estrutura da entrada e a flexibilidade na engenharia de prompts.
O LLMChain cria cadeias de tarefas individuais enquanto
o SequencialChain vincula várias etapas em um único fluxo de trabalho e o "getpass" recupera com segurança informações confidenciais (por exemplo, chaves de API) sem expô-las na tela.
Esse código configura credenciais para acessar a API do IBM Watson Machine Learning (WML) e garante que o PROJECT_ID seja configurado corretamente.
Este código inicializa o IBM Watson LLM para uso na aplicação:
Essa etapa prepara o LLM Watsonx para gerar respostas no fluxo de trabalho.
Esse código define modelos de prompts para três estágios do fluxo de trabalho de processamento de texto:
Essas instâncias do PromptTemplate permitem a engenharia de prompts reutilizáveis e estruturadas para a aplicação do LLM.
Esse código define cadeias de LLMs que conectam os prompts ao IBM Watson LLM inicializado, atribuindo chaves de saída exclusivas para cada estágio:
Essas instâncias do LLMChain permitem a execução de tarefas modulares, facilitando um fluxo de trabalho da aplicação de LLM passo a passo.
Esse código combina as cadeias definidas anteriormente em um fluxo de trabalho sequencial, permitindo um processo passo a passo para entrada de texto. O SequentialChain vincula o keyword_chain, o sentiment_chain e o refine_chain em uma ordem definida, garantindo que a saída de uma cadeia sirva como entrada para a próxima. O fluxo de trabalho é configurado para aceitar texto como entrada, com a saída final, um resumo refinado do sentimento, armazenado sob a chave "refined_summary". Essa configuração permite uma execução simplificada e eficiente da aplicação do LLM, garantindo um pipeline de processamento coerente e modular.
Neste bloco de código, executaremos todo o fluxo de trabalho. Primeiro, temos uma string de feedback de várias linhas definida como feedback_text, contendo comentários positivos e negativos de usuários sobre um aplicativo. O método workflow.run processa o feedback por meio de cadeias sequenciais (extração de palavras-chave, análise de sentimento e refinamento) usando a entrada fornecido. E o resumo de sentimento refinado é impresso diretamente como o resultado final.
SAÍDA
Resumo de sentimento refinado:
O sentimento do usuário é predominantemente negativo devido aos travamentos recorrentes do aplicativo e aos tempos de resposta lentos do suporte ao cliente, apesar da apreciação das funcionalidades do aplicativo e do suporte ocasional ao cliente útil. Para aumentar a satisfação do usuário, a equipe de desenvolvimento deve se concentrar em resolver falhas do aplicativo e acelerar as respostas do suporte ao cliente.
O resumo de sentimento refinado é uma avaliação concisa e clara do feedback. Ele destaca a apreciação do usuário pelas funcionalidades do aplicativo, mas expressa frustração com falhas frequentes e suporte ao cliente lento, refletindo a capacidade do fluxo de trabalho de refinar insights críticos de forma eficaz.
A seleção do tipo de encadeamento apropriado para a aplicação de LLM envolve a avaliação de fatores-chave para garantir eficiência e coerência:
Complexidade da tarefa: utilize fluxos de trabalho executáveis para tarefas com várias etapas. Exemplos de few-shot ou chatprompttemplate podem ajudar a estruturar tarefas complexas que exigem prompts diferentes.
Dependência: se as saídas de uma etapa forem espaços reservados para o próximo prompt, use o encadeamento sequencial. Analisadores de saída garantem uma transição suave de saídas para entradas estruturadas.
Adaptabilidade: para fluxos de trabalho dinâmicos, como aqueles que envolvem agentes do Langchain, o encadeamento iterativo permite ajustes em tempo real de parâmetros e prompts.
Modalidade de dados: escolha fluxos de trabalho compatíveis com tipos de dados variados. Use métodos de embedding para dados de texto e vetoriais ou o LangChain Expression Language para operações flexíveis.
Ao considerar esses fatores, você pode criar uma aplicação de LLM robusta e adaptável com fluxos de trabalho coerentes.
O encadeamento de prompts é uma técnica versátil para a construção de fluxos de trabalho sofisticados de processamento de linguagem natural. Neste tutorial, exploramos vários tipos de encadeamento e demonstramos um exemplo genérico integrando várias abordagens de encadeamento. Experimentando esses métodos, você libera todo o potencial dos modelos de linguagem para aplicações do mundo real.
[1] Roegiest, A. e Chitta, R. (2024). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J. e Zhang, S. (2023). Chain of Thought Prompt Tuning in Vision Language Models.
[3] Sun, S., Yuan, R., Cao, Z., Li, W. e Liu, P. (2024). Prompt Chaining or Stepwise Prompt? Refinement in Text Summarization. , 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C. e Xu, X. (2023). PCR-Chain: Partial Code Reuse Assisted by Hierarchical Chaining of Prompts on Frozen Copilot. 2023 IEEE/ACM 45th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 1-5. https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M. e Cai, C. (2022). PromptChainer: Chaining Large Language Model Prompts through Visual Programming. CHI Conference on Human Factors in Computing Systems Extended Abstracts. https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.