Geração de respostas

Explore mais sobre o que o RAG Cookbook tem a oferecer para obter um insight mais aprofundado das soluções RAG atuais

Um fluxograma com várias formas e símbolos, incluindo um balão de fala azul, um ponto de interrogação.
Visão geral

A geração de respostas é o componente de uma solução RAG que cria uma resposta a uma consulta de usuário usando as informações recuperadas das fontes de dados empresariais de destino ou corpus de texto. 

Considerações

Parâmetros do modelo

Os números ao final dos nomes dos LLMs de código aberto denotam os parâmetros do modelo.  Por exemplo, o Granite 3.0 8B Instruct é um modelo com 8 bilhões de parâmetros.  Pense nos parâmetros como condutores que orquestram a forma como o modelo manipula e compreende os dados de entrada e produz a saída. Eles podem se manifestar na forma de pesos ou vieses, afetando a relevância de determinadas características de entrada sobre a saída gerada.

Um maior número de parâmetros geralmente equivale a um modelo com maior complexidade e adaptabilidade (embora isso não seja estritamente verdade em diferentes arquiteturas, geralmente é verdade dentro de uma arquitetura de transformação). Um grande modelo de linguagem com uma contagem de parâmetros maior pode discernir padrões mais complexos dos dados, abrindo caminho para saídas mais ricas e precisas. Mas, como acontece em muitas coisas na vida, há um preço a pagar. Um aumento nos parâmetros significa maiores demandas computacionais, maiores necessidades de memória e um risco iminente de overfitting.

Tipos de modelo: instrução versus código, instrução versus chat

O modo chat foi projetado para contextos de conversação, enquanto o modo instrução foi projetado para tarefas de processamento de linguagem natural em domínios específicos.

O ajuste fino no modo chat ajuda o LLM a gerar respostas mais naturais e coerentes, relevantes e envolventes para o usuário. O ajuste fino no modo instrução ajuda o LLM a fazer um trabalho melhor ao seguir diferentes tipos de instruções e gerar saídas precisas e apropriadas à tarefa.

Configurações do modelo

Os LLMs fornecem algumas configurações para "configurar" como as respostas são geradas.

  • A configuração de "temperatura" determina o grau de variabilidade das respostas do modelo. Em termos simples, quanto menor a temperatura, mais determinísticas/consistentes serão as respostas do modelo. Recomenda-se um valor de temperatura muito baixo, idealmente 0, para as soluções RAG.
  • "max_tokens / max_new_tokens" limita o número de tokens (uma palavra é aproximadamente equivalente a 1,5 tokens) que o modelo usará em sua resposta. Os desenvolvedores de soluções precisarão testar para encontrar um valor que equilibre respostas completas com muitas informações para seu caso de uso, mas 100 geralmente é um bom limite para soluções RAG Q & A.
  • A estratégia de amostragem determina como o modelo seleciona o próximo token em uma resposta. As soluções RAG devem usar uma estratégia de amostragem ambiciosa, que garantirá respostas consistentes aos prompts.

Engenharia de prompts

Primeiramente, vamos explorar as regras de prompt para melhorar o desempenho da geração.

Regra #1: comece pelo básico

Não comece escrevendo um prompt muito longo para só depois testá-lo.

Por exemplo, não comece com um prompt longo, como:

- Você trabalha no departamento financeiro de uma grande empresa de eletrônicos do S&P 1000. Você precisa resumir as transcrições das reuniões trimestrais de acionistas para identificar os principais tópicos, tendências e sentimentos.

Responda em formato de lista numérica com marcadores.

Certifique-se de que cada item seja uma frase completa e coerente.
Não tenha alucinações. Responda apenas com as informações contidas na transcrição.

Segue a transcrição para resumir:

Mas comece por aqui:

- Resuma os principais tópicos contidos na seguinte transcrição da reunião:

Regra #2: apenas incrementos

Não faça grandes alterações nos parâmetros do modelo.

Na maioria dos casos:

  • Pequenas alterações na penalidade de temperatura e repetição têm um impacto notável.
  • Grandes mudanças muitas vezes ocultam sucessos que poderiam ser alcançados com pequenas mudanças.

Aplique os melhores princípios de engenharia:

  • Altere apenas um parâmetro por vez. Valide cada alteração separadamente.
  • Desfaça as alterações que não tiveram o efeito desejado. Retorne ao valor anterior.
  • Qualquer alteração em relação ao padrão deve ter uma boa explicação.

Regra #3: validação cruzada

Tente quebrar o seu próprio prompt. Não teste seu prompt uma única vez e considere-o um sucesso. Execute dezenas de testes no seu prompt.

  • Tente quebrar o seu prompt antes que o cliente o faça.

Construa um conjunto de dados de teste e continue adicionando seus exemplos.  Após cada lançamento de POC, teste novamente para garantir que o seu prompt esteja funcionando corretamente.

Regra #4: extrações complexas não podem ser realizadas por meio de prompts únicos

Não se preocupe, pois vários prompts são processados em paralelo usando o watsonx.ai

Fluxograma de análise de relatórios financeiros com seis prompts e três seções.

Regra #5: cadeias de prompts

Divida as tarefas em subtarefas menores.

Um fluxograma que ilustra o processo de planejamento de férias na região vinícola da Califórnia.

Regra #6: triagem de tarefas (ou arquitetura de prompt)

Separe cada etapa do processo em vários prompts e seus respectivos modelos especializados.

Um fluxograma ilustrando o processo de um assistente multi-LLM, desde a solicitação do usuário até os dados corporativos.

Regra #7: granite.13b.chat.v

Os modelos de chat requerem um design de prompt diferente dos modelos de instrução.

Uma captura de tela de um formato de instrução específico do modelo com um prompt do sistema e um prompt genérico.
Uma captura de tela de um prompt genérico para aprendizado contextual.
Prompt de formato específico para o modelo RAG.

Regra #8: divirta-se e brinque com as modelos

Sinceramente, aprendemos tanto brincando quanto trabalhando.  Teste os LLMs mais recentes e desafie-os com tarefas que não fazem parte do seu trabalho cotidiano.

Escolha algo que o LLM provavelmente poderia realizar.

  • Escreva um poema de quatro frases sobre pássaros.
  • Desafio do chat: OK, agora sobre os cachorros
  • Conte-me uma história divertida sobre um pássaro chamado Midori em menos de cinco frases.
  • Desafio do chat: mude o nome do pássaro para Charlie, adicione a cor azul e faça com que o texto tenha 7 frases.
  • Responda à seguinte pergunta em apenas 10 palavras: "Por que o céu é azul?"
  • Desafio do chat: Ótimo, me diga um motivo que pareça verdadeiro, mas que não seja.

Adicione interações multiníveis para tentar encadear seus prompts.

Prompts do sistema e prompts do usuário

Editar o prompt do sistema é tão importante quanto editar o prompt do usuário. O prompt do sistema pode fazer grandes diferenças na qualidade da resposta, no tom etc. Os prompts do sistema definem o contexto para a interação, orientando o comportamento do modelo e garantindo a consistência, enquanto os prompts do usuário conduzem o conteúdo específico da conversa. É fundamental ter a capacidade de editar os prompts do sistema para melhorar o desempenho.

Prompts do sistema

Os prompts do sistema fornecem as instruções subjacentes que orientam o comportamento da IA durante toda a interação.  Eles estabelecem o papel, o tom e os limites éticos do modelo. O uso de delimitadores pode ajudar o modelo e evitar injeções de prompt, já que especificam onde no prompt você está inserindo a entrada do usuário, ajudando o modelo a identificar onde a entrada do usuário começa e termina.  Os delimitadores também ajudam a evitar injeções de prompt e podem ser qualquer coisa como: "**, **"""**, **< >**, ** ".

Segue um exemplo de um prompt do sistema para o modelo Granite:

<|system|>\nVocê é o Granite Chat, um modelo de linguagem de IA desenvolvido pela IBM. Você é um assistente cauteloso. Você segue as instruções cuidadosamente. Você é prestativo e inofensivo, segue diretrizes éticas e promove comportamentos positivos. Você sempre responde às saudações (por exemplo: oi, olá, bom dia, boa tarde, boa noite, tudo bem, muito prazer etc.) com "Olá! Eu sou o Granite Chat, criado pela IBM. Como posso ajudá-lo hoje?". Por favor, não diga mais nada e não inicie uma conversa. {instruction}\n{session_history}<|user|>\n{query}\n<|assistant|>\n

Prompts do usuário

Prompts do usuário são as instruções ou consultas específicas fornecidas pelo usuário para obter a resposta desejada do modelo. Eles devem ser claros e concisos para garantir que o modelo compreenda a tarefa.

Ferramentas IBM

Prompt Lab

O Prompt Lab é uma plataforma da IBM que permite trabalhar com modelos de base e criar prompts usando engenharia de prompt. No Prompt Lab, os usuários podem interagir com os modelos base através do editor de prompts, utilizando os modos Chat, Freeform ou Structured. Essas múltiplas opções permitem criar as melhores configurações do modelo para oferecerem suporte a uma gama de tarefas relacionadas ao processamento de linguagem natural (PLN), incluindo responder perguntas, gerar conteúdo, fazer resumos, classificar e extrair texto.

Para obter informações sobre como começar e saber mais sobre o Prompt Lab, consulte o site oficial do Prompt Lab

InstructLab

Uma estratégia emergente para melhorar a precisão de uma solução RAG é usar um modelo de geração que seja ajustado no corpus de dados. Isso pode levar a melhorias na precisão de ponta a ponta por várias razões.  Os benefícios mais significativos provenientes da capacidade do estágio de geração podem melhorar e até mesmo corrigir os resultados de recuperação.  Também pode fornecer respostas mais específicas e relevantes para a sua empresa, uma vez que pode ser adaptada ao conteúdo do seu negócio.

Para obter informações sobre como começar e outros detalhes relacionados ao InstructLab, consulte o repositório oficial do InstructLab

Granito

O Granite 3.0 inclui uma variedade de modelos, como o Granite 3.0 8B Instruct, o 2B Instruct, o 8B Base e o 2B Base, que foram treinados com mais de 12 trilhões de tokens em 12 linguagens naturais e 116 linguagens de programação. Esses modelos igualam ou superam o desempenho de modelos de tamanho semelhante de provedores líderes em benchmarks acadêmicos e empresariais, apresentando um desempenho robusto em tarefas como compreensão de linguagem, geração de código e resumo de documentos.

Diferenciais do Granite 3.0

Transparência e segurança

O compromisso da IBM com a transparência e a segurança é evidente na divulgação detalhada dos conjuntos de dados de treinamento, filtragem e processos de seleção no relatório técnico do Granite 3.0. Os modelos são lançados sob a licença permissiva do Apache 2.0, garantindo flexibilidade e autonomia para clientes corporativos e para a comunidade de IA em geral. Além disso, os modelos Granite Guardian 3.0 oferecem recursos abrangentes de detecção de riscos e danos, superando outros modelos de segurança do mercado.

Eficiência e relação custo-benefício

Os modelos Granite 3.0 são projetados para serem econômicos, permitindo que as empresas alcancem um desempenho de modelo de ponta por uma fração do custo. O uso do InstructLab, uma abordagem colaborativa de código aberto, permite o ajuste fino de modelos menores para tarefas específicas, reduzindo os custos de 3 a 23 vezes em comparação com modelos maiores. Os modelos de arquitetura Mixture of Experts (MoE), como o Granite 3.0 3B-A800M e o 1B-A400M, oferecem alta eficiência de inferência com impactos mínimos de desempenho, tornando-os ideais para aplicações de baixa latência e implementações baseadas em CPU.

Recursos multimodais e atualizações futuras

Até o final de 2024, os modelos Granite 3.0 devem suportar uma janela de contexto expandida de 128K e recursos de compreensão multimodal de documentos, como tarefas de entrada de imagem e saída de texto. Essa expansão aumentará ainda mais sua utilidade em vários casos de uso empresariais.

Integração do ecossistema

Os modelos Granite 3.0 estão disponíveis em várias plataformas, incluindo o watsonx.ai da IBM, Hugging Face, Vertex AI do Google Cloud, microsserviços NVIDIA NIM, Ollama e Replicate, fornecendo aos desenvolvedores uma ampla gama de opções de implementação e garantindo a integração perfeita com fluxos de trabalho existentes. Em resumo, os modelos Granite 3.0 da IBM oferecem uma solução poderosa, transparente e econômica para IA empresarial, combinando desempenho de última geração com funcionalidades robustas de segurança e amplo suporte ao ecossistema.

Para obter informações sobre como começar e saber mais sobre o Granite, consulte o site oficial do Granite

Dicas e recomendações

Melhores prompts

O conteúdo e a estrutura dos prompts enviados aos LLMs podem afetar muito a qualidade e a fidelidade das respostas geradas.

Os seis tipos de prompts

Os prompts podem ser divididos em seis tipos principais:

Somente palavra-chave

Consultas que utilizam apenas palavras-chave são autoexplicativas; são prompts compostos por palavras-chave relacionadas ao tópico em questão. Por exemplo, o prompt:

Qual é o tempo ideal para assar um bolo de chocolate em altitudes elevadas?

Pode ser resumido às palavras-chave:

tempo de forno para bolo de chocolate em altitudes elevadas

Os prompts apenas de palavras-chave normalmente geram respostas mais amplas e focadas em tópicos, com forte relevância do texto de aumento recuperado. Isso pode ser um efeito desejável para uma solução que exige respostas amplas e informativas, como um chatbot de assistente de operador, mas pode gerar informações em excesso para soluções que requerem respostas sucintas e conversacionais.

Comparativo

Os prompts comparativos pedem ao LLM para fazer comparações entre um ou mais tópicos ou conceitos no prompt. Por exemplo:

Qual é a diferença entre uma regra e uma atribuição de função?

Os prompts comparativos podem ser úteis quando o modelo de geração e o corpus de suporte têm informações sobre todos os conceitos, bem como dimensões óbvias ou material de suporte sobre como os conceitos podem ser comparados de forma útil. Sem eles, é provável que um prompt comparativo gere uma resposta sem sentido ou ineficaz.

Agregado

Prompts agregados pedem ao modelo para agregar dois ou mais conceitos ou consultas em um único prompt. Por exemplo:

Como faço para criar uma permissão e um grupo de permissões?

Os prompts agregados geralmente são mais difíceis para os LLMs devido à ambiguidade inerente à pergunta.

  • É sobre vários conceitos que devem ser executados em paralelo para reduzir o tempo de processamento?
  • É sobre conceitos complementares que se reforçam mutuamente?
  • O objetivo é explicar como executar ações em uma série sequencial de etapas?

Para resolver essa ambiguidade, geralmente é recomendável dividir os prompts agregados em vários prompts de tópicos únicos ou fornecer contexto adicional que descreva explicitamente a resposta desejada.

Ambíguo

Um prompt ambíguo é aquele que pode ser interpretado de várias maneiras. Por exemplo:

O que é um papel?

Este prompt pode gerar respostas sobre papéis no contexto de atuação (incluindo atores famosos e seus papéis), papéis em soluções de segurança de TI ou papéis dentro de uma organização. A incerteza gerada por eles faz com que prompts ambíguos sejam uma opção ruim na maioria das soluções; por isso, devem ser revisados para adicionar detalhes e contexto, direcionando o LLM para o tópico desejado.

Desviante

No contexto de uma solução de RAG, um prompt desviante é aquele que não tem uma resposta no conjunto de documentos de apoio. Isso pode levar a respostas alucinatórias/improvisadas com base no conhecimento incorporado no LLM, ou respostas irrelevantes com base em resultados de pesquisa de baixa relevância no corpus.

Embora seja impossível evitar respostas desviantes em todos os casos de uso (por exemplo, um chatbot conversacional), os desenvolvedores de soluções podem minimizá-las restringindo a entrada do usuário por meio de listas de opções, por exemplo. “Posso te ajudar com…” seguido por uma série de botões de tópicos predefinidos, ou “incentivando” os usuários a darem respostas seguras por meio de linguagem descritiva ou diretiva em instruções ao usuário e respostas modelo.

Indireto

Prompts indiretos são prompts cujas palavras-chave não estão diretamente no corpus, mas têm sinônimos que estão. Os prompts indiretos são desafiadores para os desenvolvedores de soluções, pois sua confiabilidade depende do número de sinônimos existentes para as palavras-chave do prompt e de como os sinônimos levam a uma consulta inequívoca.

Aconselha-se a implementação de um mecanismo de filtragem de consultas por blacklist para adicionar detalhes não ambíguos às palavras-chave ou substituir palavras-chave "problemáticas" por sinônimos ou frases inequívocas.

Boas práticas de prompts

Embora a criação de prompts "bons" seja tanto uma arte quanto uma ciência, há uma série de práticas aceitas que levam a melhores prompts e, portanto, a melhores resultados.

Um bom prompt é:

  • Relevante para o domínio-alvo e contêm detalhes e contexto suficientes para tornar o conteúdo e o tom da saída desejada clara e específica.

  • Adaptado ao público-alvo. Uma resposta destinada a um analista financeiro corporativo terá um tom, estrutura e conteúdo muito diferentes em comparação com uma resposta para um cliente de banco de varejo. Um bom prompt conterá instruções (“Você é um analista financeiro de nível médio. Gere um relatório...") ou indicação clara da audiência ("...escrito para um cliente de bancos de varejo que não tem conhecimento de terminologia financeira") para a resposta.

  • Projetado para um caso de uso específico. Um bom prompt deve ser criado com um caso de uso específico em mente e incluir detalhes sobre onde e como a resposta gerada será usada (“… a resposta será publicada em uma revista do setor de viagens para operadores de turismo”); o que, por sua vez, influenciará o tom, a linguagem e o estilo da resposta gerada.

Explorar mais

Obtenha os mais recentes padrões de tecnologia, arquiteturas de soluções e publicações de arquitetura da IBM.

  1. Acesse o IBM Architecture Center
Colaboradores

Vicky Kuo, Chris Kirby, Luke Major, Atin Chandel, Brant Li, Evan Wheldon

Atualizado: 15 de novembro de 2024