Alura > Cursos de Inteligência Artificial > Cursos de IA para Negócios > Conteúdos de IA para Negócios > Primeiras aulas do curso Prompt Engineering: projetando e automatizando interações com LLMs

Prompt Engineering: projetando e automatizando interações com LLMs

Enriquecendo prompts com contexto - Apresentação do curso

Apresentando o curso e o plano

Olá! Bem-vindes ao nosso curso de Engenharia de prompts (instruções). Sou Carlos Stefano e estarei com vocês ao longo do curso.

Neste primeiro momento, vamos explicar como será nosso plano e como este curso de Engenharia de prompts (instruções) está estruturado.

Definindo objetivos, estratégias e resultados

Qual é nosso objetivo aqui? Entender, considerando todas as possibilidades de interação que temos com nossos grandes modelos de linguagem, como as LLMs (Large Language Models, Modelos de Linguagem de Grande Escala), no contexto da engenharia de prompts (instruções), o que podemos fazer para interagir com esses modelos de maneira mais eficiente.

Vamos compreender todas as questões relacionadas ao consumo de tokens (unidades de texto), como administrá-lo melhor, quais estratégias e truques podemos aplicar, além de explorar instruções mais claras, como estruturamos bons prompts (instruções) e diversos aspectos correlatos.

A partir desse entendimento, seremos capazes, ao final do curso, de elaborar bons prompts (instruções), que expressem com clareza o que deve ser feito, compreender como avaliamos se estão adequados e torná-los mais eficientes, idealmente também do ponto de vista de custo.

Apresentando a estrutura do curso e a aula 1

Neste curso, veremos cinco aulas.

Na Aula 1, veremos fundamentos sobre LLMs (Modelos de Linguagem de Grande Porte), sobre prompts (instruções), sobre como os componentes se comunicam, o que é contexto, o que é tarefa e onde tudo isso se encaixa no prompt (instrução).

Detalhando as aulas 2 a 5 e convidando para começar

Na Aula 2, nosso foco será dissecar a anatomia de um bom prompt (instrução). Falaremos sobre a estrutura geral, alguns frameworks (estruturas de apoio) e possibilidades de controle e restrição da saída para o LLM (Modelo de Linguagem de Grande Porte). Por se tratar de um modelo probabilístico, é importante que tenhamos metodologias para realizar esse controle.

Na segunda parte do curso, na Aula 3, lidaremos com técnicas intermediárias, aprofundando a engenharia de prompts (instruções). Abordaremos, por exemplo, zero-shot (sem exemplos), one-shot (um exemplo) e few-shot (poucos exemplos). Entenderemos o que é cada técnica, quando utilizar e quando não utilizar.

As Aulas 4 e 5 serão dedicadas a entender como avaliamos a saída do prompt (instrução) que fornecemos, verificando se está adequada, como podemos testá-la e integrá-la em ferramentas de automação comuns atualmente.

A proposta é unir os fundamentos e a base teórica com a implementação prática no nosso curso de engenharia de prompts (instruções). Vamos começar?

Enriquecendo prompts com contexto - Engenharia de Contexto

Introduzindo a engenharia de contexto e a relevância dos modelos de linguagem

Para continuarmos nossa discussão sobre engenharia de prompts (instruções), vamos apresentar alguns pontos sobre a engenharia de contexto, entendendo o que exatamente é e como o contexto integra nosso prompt (instrução), em última análise.

Hoje, não há dúvidas de que nossos grandes modelos de linguagem, os LLMs (Modelos de Linguagem de Grande Porte), revolucionaram o mercado e diversas maneiras de automatizar e otimizar tarefas, principalmente as que lidam com processamento de linguagem.

Para fazermos tudo isso, compreender o que é o prompt (instrução), o contexto e como ambos se relacionam é essencial. Além disso, precisamos estruturar bons prompts (instruções) para extrair o máximo proveito de nossos LLMs (Modelos de Linguagem de Grande Porte).

Definindo o prompt e apontando limitações do uso puro

Afinal, o que é o prompt (instrução)? Nada mais do que as instruções que fornecemos ao nosso LLM (Modelo de Linguagem de Grande Porte) em linguagem natural. Essas instruções podem ter diferentes níveis de complexidade. Podemos dizer, por exemplo, “fale sobre inteligência artificial”, o que é um prompt (instrução) válido, porém bastante genérico e amplo; ou podemos fornecer mais contexto, adicionar informações e orientar melhor o formato de resposta desejado. Por exemplo: “enumere cinco estratégias para uso prático de IA no dia a dia de uma pessoa analista de dados”. Isso já fornece outra orientação, uma base para que o modelo produza a resposta.

Quais são as limitações quando trabalhamos com um prompt (instrução) puro? Aqui, entendemos prompt (instrução) puro como aquele sem contexto, não enriquecido com informações adicionais. Em primeiro lugar, há as alucinações, que podem ser críticas em vários cenários: situações em que o LLM (Modelo de Linguagem de Grande Porte) inventa alguma informação simplesmente para manter o fluxo da conversa, sem que, necessariamente, essa informação seja verdadeira. Um prompt (instrução) puro tende a gerar respostas mais genéricas, amplas e superficiais, justamente por faltar a orientação de um contexto adicional. Esse contexto adicional também pode vir de uma fonte de informação externa, evitando recorrermos apenas ao que está na base de treinamento do modelo.

Fundamentando respostas com contexto estático e dinâmico

Ao aprofundarmos o tema de contexto e da engenharia de contexto associada, o contexto aparece como forma de fundamentação do LLM (Modelo de Linguagem de Grande Porte) nas respostas que produzirá. O objetivo de fornecer informação adicional é exatamente esse, e o contexto pode vir de diferentes maneiras. Ele pode ser estático, mantendo-se sempre igual no prompt (instrução), ou pode ser dinâmico, sendo mencionado como uma variável cujo valor muda a cada iteração do LLM (Modelo de Linguagem de Grande Porte) e, portanto, altera o contexto em cada execução.

Isso ocorre com frequência, por exemplo, em Pipelines Direct (pipelines diretos), nos quais o contexto vem de forma dinâmica, como resultado de uma busca semântica em um banco de dados vetorial, realizada a partir da pergunta da pessoa usuária.

Otimizando o contexto e avaliando custo, ancoragem e consistência

A engenharia de contexto é a área que se encarrega de otimizar esse contexto dentro do prompt (instrução). Lembremos que, ao trabalhar com LLMs (Modelos de Linguagem de Grande Porte), estamos sempre condicionados aos prompts (instruções), sejam eles de entrada ou de saída. O contexto — isto é, fornecer informação adicional ao modelo para fundamentar a resposta — naturalmente aumenta o consumo de tokens (unidades de texto). Isso pode impactar o custo, o que não é necessariamente ruim, pois o ganho em desempenho pode justificar amplamente. Portanto, precisamos avaliar.

Alguns pilares fundamentais devem ser considerados quando falamos de contexto. Primeiro, ancoragem. O que é isso? É a base das respostas do LLM (Modelo de Linguagem Grande). Esse é o objetivo de fornecer contexto: proporcionar mais fundamento e obter respostas mais precisas. Com isso, reduzimos também o risco de alucinações, porque, efetivamente, o contexto serve de base para o LLM. As respostas passam a ser mais consistentes entre si. Devemos lembrar sempre que o LLM é um modelo probabilístico e, portanto, muitas vezes direcionar informação adicional ajuda a obter maior consistência nas respostas entre diferentes interações com esse LLM. O ponto do custo deve estar sempre presente aqui; ele será o principal contraponto limitante sobre quanto contexto e de que maneira esse contexto poderá ser fornecido ao LLM nessa aplicação.

Relacionando prompt, contexto e modelo no fluxo de resposta

Portanto, temos três elementos que interagem entre si: o prompt (conjunto de instruções, objetivos e tarefas que o LLM terá de realizar), o contexto (informações adicionais, políticas adicionais, dados adicionais que o modelo receberá) e o LLM, que integra esses dois para produzir a resposta final.

Quando pensamos no fluxo de resposta, como isso fica? Em primeiro lugar, temos o prompt. O prompt será nosso conjunto de instruções, objetivos e tarefas para esse modelo. O contexto será injetado. Às vezes veremos a terminologia de que o contexto passa a integrar o prompt (já presente no “ponto 3” do diagrama ou explicação). Assim, o LLM receberá as instruções originais no prompt e o contexto, que pode vir de diferentes maneiras. Em seguida, o modelo processará todas essas informações e gerará a resposta final.

Listando e exemplificando os principais tipos de contexto

O contexto pode vir de diferentes maneiras. O que isso significa? Deixamos aqui uma tabela mental, resumindo os principais tipos:

Vamos explorar um pouco esses pontos?

Enriquecendo prompts com contexto - Praticando prompts básicos

Acessando a plataforma e abrindo o playground

Continuando, para que possamos explorar as questões que vimos discutindo sobre prompts pessoais, acessamos developers.openai.com, no site da OpenAI. A conta que usaremos como exemplo não precisa ser necessariamente criada por esse caminho, mas é por onde vamos nos guiar nestes exemplos. Quem quiser pode criar a conta e gerenciá-la pela API; o passo a passo é razoavelmente simples de seguir para criar a conta e fazer login, lembrando que será necessário adicionar créditos quando formos usar a API para poder utilizar os modelos da OpenAI.

Após fazer login, abrimos a opção Create chat (criar conversa) e vamos usar isso como se fosse um playground (ambiente de testes) para experimentarmos prompts (instruções). Para quem nunca usou, podemos salvar os prompts em rascunho; podemos escolher um modelo da OpenAI, por exemplo o GPT-4.1-mini. A interface informa que é um modelo que aceita texto, mostra limites de tokens de entrada e permite configurar parâmetros como top_p e temperature, entre outros. Podemos alterar esses parâmetros. Também há seções de variáveis e ferramentas; se quisermos, podemos criar um agente, habilitar intérprete de código, geração de imagens e busca na web. A parte de variáveis veremos adiante.

Testando um prompt genérico sem instruções do sistema

Como exemplo, vamos enviar uma mensagem genérica, sem especificar nada no sistema. O campo system é o system prompt (instrução do sistema): dependendo da ferramenta, ele pode aparecer como “system” ou “prompt”. É um texto que sempre é enviado junto com o nosso modelo de linguagem para dar contexto sobre o que ele deve fazer. Se não colocarmos nada ali, continuaremos usando o GPT-4.1-mini com as instruções padrão.

Para iniciar esse teste no playground, enviamos uma primeira mensagem genérica ao modelo:

Olá! Como você pode me ajudar?

Podemos perguntar, por exemplo: “Como você pode nos ajudar?”. Como não especificamos nada, esperamos uma resposta bastante genérica. Se demorar para carregar, podemos trocar o modelo e reenviar a mesma mensagem. A resposta típica é algo como: “Olá, posso ajudar com uma variedade de tarefas, como responder perguntas, fornecer informações, ajudar com redações, explicar conceitos e criar histórias”, ou seja, algo amplo, pois não fomos específicos.

Especializando o comportamento com o system prompt

A própria interface sugere: “Descreva o comportamento desejado do modelo: tom, ferramentas, estilo das respostas”. Podemos então definir uma instrução simples no campo System para começar a especializar o comportamento:

Você é um assistente de planejamento de viagens.

Em seguida, refinamos o objetivo desse assistente adicionando uma segunda linha, deixando o papel do modelo mais claro:

Você é um assistente de planejamento de viagens.
Seu objetivo é preparar um roteiro de viagem para o usuário.

Isso já altera o comportamento do nosso Language Model (modelo de linguagem).

Em seguida, iniciamos um novo chat (conversa) e perguntamos novamente. Repetimos a mesma mensagem do usuário para observar a mudança de comportamento após a configuração do System:

Olá! Como você pode me ajudar?

A resposta passa a ser: “Posso ajudar a planejar sua viagem, sugerir destinos, criar itinerários etc. Para começar, diga para onde deseja ir e por quanto tempo pretende viajar”. Essas são informações que o modelo precisa receber e que não especificamos no prompt; caberá à pessoa usuária fornecê-las ao modelo.

Fornecendo contexto do usuário para gerar o itinerário

Ao especificarmos instruções, mesmo que simples, já personalizamos o LM (modelo de linguagem) para o caso de uso que desejamos resolver. No nosso exemplo, trata-se de um assistente de viagens. Podemos, por exemplo, declarar: "Iremos a Ilhéus e ficaremos cinco dias. É uma cidade preciosa. Há alguma preferência ou interesse específico, como praias em particular?". Para representar essa entrada de contexto pelo usuário, podemos enviar algo como:

Vou para Ilhéus e ficarei 5 dias

E, se quisermos sinalizar um interesse específico, adicionamos uma mensagem curta:

praias

Ao fazermos isso, o modelo já gera um itinerário: chegada e Praia do Sul, Praia da Avenida, Praia dos Milionários, passeio de barco. O itinerário é montado com base nos dados disponíveis no conjunto de dados de treinamento.

Utilizando variáveis no prompt para cidade e duração

Também podemos utilizar variáveis para compor esse contexto. Podemos inserir a cidade sugerida e o número de dias para o itinerário. Precisamos introduzir esses valores; por exemplo, colocar Ilhéus e 14 dias. Ao enviar o itinerário para verificar se o modelo entende o que queremos dizer, ainda podem aparecer cinco dias e Ilhéus, pois essas informações podem não estar sendo recuperadas no prompt (instrução) abaixo. Podemos então definir variáveis para a cidade e para o número de dias. Começamos nomeando as variáveis:

city
days

Na sequência, atribuirmos valores a elas, por exemplo:

city : Ilhéus
days: 14 dias

Vamos usar a sintaxe com duas chaves {{ }} para a cidade que foi completada e para o número de dias que foi preenchido. Primeiro, construímos o prompt com a cidade:

Seu objetivo é preparar um roteiro de viagem para o usuário para a cidade {{city}}

Depois, incrementamos esse prompt incluindo também a duração:

Seu objetivo é preparar um roteiro de viagem para o usuário para a cidade {{city}} por {{days}} dias.

Aplicando contexto dinâmico e validando o resultado

Em seguida, vamos iniciar um chat (conversa) novo, alterar a cidade para São Paulo e definir que ficaremos 14 dias. Para simular a troca da variável city, atualizamos seu valor:

São Paulo

O itinerário retorna com a indicação: "Itinerário sugerido para sua viagem de 14 dias em São Paulo".

O que acabamos de fazer é um exemplo de contexto dinâmico, como comentamos no vídeo anterior. A partir de variáveis que estão sendo preenchidas na nossa aplicação — aqui, no playground (ambiente de testes) da OpenAI —, no nosso prompt já informamos ao modelo: "Seu objetivo é preparar um itinerário para a cidade X por Y dias." O modelo, então, devolve itens como chegada e aclimatação, chegada ao aeroporto, Praça da Serra, Catedral da Serra, centro cultural, Parque Caimbu, cobrindo os 14 dias em que vamos permanecer na cidade de São Paulo.

Aprimorando a engenharia de prompts e introduzindo alternativa condicional

A engenharia de prompts consiste em experimentar e testar, verificar o que funcionou bem e o que não funcionou tão bem, e ir aprimorando ao longo da aplicação. Mantemos um prompt mais extenso do que apenas "o objetivo é preparar um itinerário de viagem", pois indicamos a cidade e a quantidade de dias, enriquecendo o prompt com esse contexto, que neste caso vem diretamente daqui. No playground usado para o chat da OpenAI, isso já está disponibilizado de forma simples de completar; porém, na prática, ao desenvolvermos nossos próprios sistemas, muitas vezes precisaremos integrar essas informações manualmente, o que dependerá do framework (estrutura de desenvolvimento) que estivermos utilizando.

Chamamos a atenção para o seguinte: isso que fizemos é um tipo de contexto dinâmico, e não precisaríamos deixá-lo fixo. Também poderíamos instruir o modelo a fazer algumas perguntas. Podemos simplesmente apagar e deixar algo como: "Se formos preparar um itinerário de viagem para a pessoa usuária e, caso a pessoa usuária não especifique, pergunte o destino e a duração da viagem; pode iniciar uma nova sessão." Vamos construir essa alternativa passo a passo. Primeiro, deixamos o objetivo do assistente:

Seu objetivo é preparar um roteiro de viagem para o usuário.

Configurando perguntas condicionais e testando o fluxo

Em seguida, adicionamos a instrução condicional para quando o usuário não fornece os dados:

Se o usuário não especificar, pergunte destino e duração da viagem.

Nesse caso, mesmo com as variáveis, como já não fazem parte do prompt e não entram como contexto, o modelo não sabe para onde queremos ir. Portanto, é importante que elas estejam vinculadas; caso contrário, não funcionará. Para verificar o comportamento quando nada é especificado, iniciamos a conversa com uma saudação mínima:

oi

A resposta do modelo seria: "Poderia informar qual é o seu destino e a duração da sua viagem?".

Isso evidencia como conseguimos moldar o comportamento com pequenos detalhes nas instruções que fornecemos no prompt. Vamos continuar explorando várias dessas ferramentas ao longo do curso. Por ora, fica este exemplo de contexto sendo fornecido como variáveis para o nosso modelo.

Sobre o curso Prompt Engineering: projetando e automatizando interações com LLMs

O curso Prompt Engineering: projetando e automatizando interações com LLMs possui 128 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de IA para Negócios em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda IA para Negócios acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas