0% acharam este documento útil (0 voto)
175 visualizações68 páginas

Engenharia de Prompt - 2

O documento aborda a engenharia de prompts para modelos de linguagem de grande porte (LLMs), destacando a importância de criar prompts eficazes para gerar saídas precisas. Ele explora técnicas de prompting, configurações de saída e melhores práticas, além de discutir desafios comuns. O objetivo é capacitar qualquer pessoa a escrever prompts de qualidade, independentemente de sua experiência em ciência de dados ou aprendizado de máquina.

Enviado por

lucinei.frg
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
175 visualizações68 páginas

Engenharia de Prompt - 2

O documento aborda a engenharia de prompts para modelos de linguagem de grande porte (LLMs), destacando a importância de criar prompts eficazes para gerar saídas precisas. Ele explora técnicas de prompting, configurações de saída e melhores práticas, além de discutir desafios comuns. O objetivo é capacitar qualquer pessoa a escrever prompts de qualidade, independentemente de sua experiência em ciência de dados ou aprendizado de máquina.

Enviado por

lucinei.frg
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Machine Translated by Google

Incitar
Engenharia
Autor: Lee Boonstra
Machine Translated by Google

Engenharia Rápida

Agradecimentos

Colaboradores de conteúdo

Michael Sherman

Yuan Cao

Erick Armbrust

Anant Nawalgaria

Antônio Gulli

Simone Cammel

Curadores e editores

Antônio Gulli

Anant Nawalgaria

Graça Mollison

Redator técnico

Joey Haymaker

Designer

Michael Lanning

Fevereiro de 2025 2
Machine Translated by Google

Índice

Introdução 6

Engenharia rápida 7

Configuração de saída LLM 8

Comprimento de saída 8

Controles de amostragem 9

Temperatura 9

Top-K e top-P 10

Juntando tudo 11

Técnicas de incentivo 13

Aviso geral / tiro zero 13

Um tiro e poucos tiros 15

Sistema, contexto e estímulo de função 18

Prompt do sistema 19

Solicitação de função 21

Solicitação contextual 23
Machine Translated by Google

Solicitação de retrocesso 25

Cadeia de Pensamento (CoT) 29

Autoconsistência 32

Árvore dos Pensamentos (ToT) 36

ReAct (raciocinar e agir) 37

Engenharia de Prompt Automático 40

Solicitação de código 42

Prompts para escrever código 42

Prompts para explicar o código 44

Prompts para traduzir código 46

Prompts para depuração e revisão de código 48

E quanto ao prompt multimodal? 54

Melhores Práticas 54

Fornecer exemplos 54

Design com simplicidade 55

Seja específico sobre a saída 56

Use instruções em vez de restrições 56

Controle o comprimento máximo do token 58

Use variáveis em prompts 58

Experimente formatos de entrada e estilos de escrita 59

Para tarefas de classificação com poucos estímulos, misture as classes 59

Adapte-se às atualizações do modelo 60

Experimente com formatos de saída 60


Machine Translated by Google

Reparo JSON 61

Trabalhando com esquemas 62

Experimente junto com outros engenheiros de ponta 63

Melhores práticas do CoT 64

Documentar as várias tentativas rápidas 64

Resumo 66

Notas de rodapé 68
Machine Translated by Google

Engenharia Rápida

Você não precisa ser um cientista de


dados ou um engenheiro de aprendizado
de máquina – qualquer um pode escrever
um prompt.

Introdução

Ao pensar na entrada e saída de um modelo de linguagem de grande porte, um prompt de texto (às
vezes acompanhado por outras modalidades, como prompts de imagem) é a entrada que o modelo
usa para prever uma saída específica. Você não precisa ser um cientista de dados ou um engenheiro
de aprendizado de máquina – qualquer pessoa pode escrever um prompt. No entanto, elaborar o prompt mais
eficaz pode ser complicado. Muitos aspectos do seu prompt afetam sua eficácia: o modelo que você usa, os
dados de treinamento do modelo, as configurações do modelo, sua escolha de palavras, estilo e tom,
estrutura e contexto, tudo isso importa. Portanto, a engenharia de prompts é um processo iterativo. Prompts
inadequados podem levar a respostas ambíguas e imprecisas e podem prejudicar a capacidade do modelo
de fornecer resultados significativos.

Fevereiro de 2025 6
Machine Translated by Google

Engenharia Rápida

Ao conversar com o chatbot Gemini,1 você basicamente escreve prompts. No entanto, este
whitepaper se concentra na escrita de prompts para o modelo Gemini no Vertex AI ou usando a API,
porque ao solicitar o modelo diretamente, você terá acesso à configuração, como temperatura, etc.

Este whitepaper aborda a engenharia de prompts em detalhes. Analisaremos as diversas técnicas


de prompting para ajudar você a começar e compartilharemos dicas e práticas recomendadas para
se tornar um especialista em prompting. Também discutiremos alguns dos desafios que você pode
enfrentar ao criar prompts.

Engenharia rápida
Lembre-se de como um LLM funciona: é um mecanismo de previsão. O modelo recebe um texto
sequencial como entrada e, em seguida, prevê qual deve ser o token seguinte, com base nos dados
com os quais foi treinado. O LLM é operacionalizado para fazer isso repetidamente, adicionando o token
previsto anteriormente ao final do texto sequencial para prever o token seguinte. A previsão do próximo
token é baseada na relação entre o que está nos tokens anteriores e o que o LLM viu durante o treinamento.

Ao escrever um prompt, você está tentando configurar o LLM para prever a sequência correta de tokens. A
engenharia de prompts é o processo de projetar prompts de alta qualidade que orientam os LLMs a
produzir resultados precisos. Esse processo envolve ajustes para encontrar o melhor prompt, otimizar o
tamanho do prompt e avaliar o estilo e a estrutura de escrita do prompt em relação à tarefa. No contexto
do processamento de linguagem natural e dos LLMs, um prompt é uma entrada fornecida ao modelo
para gerar uma resposta ou previsão.

Fevereiro de 2025 7
Machine Translated by Google

Engenharia Rápida

Esses prompts podem ser usados para realizar vários tipos de tarefas de compreensão e geração,
como resumo de texto, extração de informações, perguntas e respostas, classificação de texto,
tradução de linguagem ou código, geração de código e documentação ou raciocínio de código.

Sinta-se à vontade para consultar os guias de prompts do Google2,3 com exemplos de prompts
simples e eficazes.

Ao usar a engenharia de prompts, você começará escolhendo um modelo. Os prompts podem precisar
ser otimizados para o seu modelo específico, independentemente de você usar modelos da linguagem Gemini
no Vertex AI, GPT, Claude ou um modelo de código aberto como Gemma ou LLaMA.

Além do prompt, você também precisará ajustar as várias configurações de um LLM.

Configuração de saída LLM


Depois de escolher seu modelo, você precisará definir a configuração do modelo. A maioria dos LLMs vem
com diversas opções de configuração que controlam a saída do LLM. Uma engenharia de prompt eficaz
requer a definição ideal dessas configurações para a sua tarefa.

Comprimento de saída

Uma configuração importante é o número de tokens a serem gerados em uma resposta.


Gerar mais tokens exige mais computação do LLM, o que leva a maior consumo de energia, tempos de
resposta potencialmente mais lentos e custos mais altos.

Fevereiro de 2025 8
Machine Translated by Google

Engenharia Rápida

Reduzir o comprimento de saída do LLM não faz com que o LLM se torne mais sucinto em termos de
estilo ou texto na saída que cria, apenas faz com que o LLM pare de prever mais tokens quando o limite
for atingido. Se suas necessidades exigirem um comprimento de saída curto, você também poderá
precisar projetar seu prompt para se adaptar a isso.

A restrição do comprimento de saída é especialmente importante para algumas técnicas de prompt do


LLM, como o ReAct, onde o LLM continuará emitindo tokens inúteis após a resposta desejada.

Esteja ciente de que gerar mais tokens exige mais computação do LLM, o que leva a um maior
consumo de energia e tempos de resposta potencialmente mais lentos, o que gera custos mais
altos.

Controles de amostragem

Os LLMs não preveem formalmente um único token. Em vez disso, preveem probabilidades para o que o
próximo token pode ser, com cada token no vocabulário do LLM recebendo uma probabilidade. Essas
probabilidades de token são então amostradas para determinar qual será o próximo token produzido.
Temperatura, top-K e top-P são as configurações mais comuns que determinam como as probabilidades
de token previstas são processadas para escolher um único token de saída.

Temperatura

A temperatura controla o grau de aleatoriedade na seleção de tokens. Temperaturas mais baixas são
boas para prompts que esperam uma resposta mais determinística, enquanto temperaturas mais altas
podem levar a resultados mais diversos ou inesperados. Uma temperatura de 0 (decodificação gananciosa) é

Fevereiro de 2025 9
Machine Translated by Google

Engenharia Rápida

determinístico: o token com maior probabilidade é sempre selecionado (observe que se dois tokens tiverem a mesma

probabilidade prevista mais alta, dependendo de como o desempate for implementado, você pode não obter sempre

a mesma saída com temperatura 0).

Temperaturas próximas ao máximo tendem a gerar resultados mais aleatórios. E, à medida que a temperatura

aumenta, todos os tokens têm a mesma probabilidade de serem o próximo token previsto.

O controle de temperatura Gemini pode ser entendido de forma semelhante à função softmax usada em aprendizado

de máquina. Uma configuração de temperatura baixa reflete uma temperatura softmax baixa (T), enfatizando uma

única temperatura preferencial com alta certeza. Uma configuração de temperatura Gemini mais alta é como uma

temperatura softmax alta, tornando uma faixa mais ampla de temperaturas em torno da configuração selecionada

mais aceitável. Essa incerteza aumentada acomoda cenários em que uma temperatura rígida e precisa pode não

ser essencial, como, por exemplo, ao experimentar resultados criativos.

Top-K e top-P

Top-K e top-P (também conhecidos como amostragem de núcleo)4 são duas configurações de amostragem usadas

em LLMs para restringir que o próximo token previsto venha de tokens com as maiores probabilidades previstas.

Assim como a temperatura, essas configurações de amostragem controlam a aleatoriedade e a

diversidade do texto gerado.

• A amostragem Top-K seleciona os K tokens mais prováveis do modelo previsto

Distribuição. Quanto maior o Top-K, mais criativo e variado é o resultado do modelo; quanto menor o Top-

K, mais inquieto e factual é o resultado do modelo. Um Top-K de 1 é equivalente à decodificação gulosa.

Fevereiro de 2025 10
Machine Translated by Google

Engenharia Rápida

• A amostragem Top-P seleciona os tokens principais cuja probabilidade cumulativa não excede um
determinado valor (P). Os valores de P variam de 0 (decodificação gananciosa) a 1 (todos os tokens no
vocabulário do LLM).

A melhor maneira de escolher entre top-K e top-P é experimentar ambos os métodos (ou ambos juntos) e ver
qual deles produz os resultados que você está procurando.

Juntando tudo
A escolha entre top-K, top-P, temperatura e o número de tokens a serem gerados depende da aplicação
específica e do resultado desejado, e as configurações influenciam umas às outras. Também é importante
entender como o modelo escolhido combina as diferentes configurações de amostragem.

Se temperatura, top-K e top-P estiverem disponíveis (como no Vertex Studio), os tokens que atendem aos
critérios top-K e top-P são candidatos ao próximo token previsto, e então a temperatura é aplicada à
amostra dos tokens que passaram nos critérios top-K e top-P. Se apenas top-K ou top-P estiverem disponíveis, o
comportamento é o mesmo, mas apenas uma configuração top-K ou P é usada.

Se a temperatura não estiver disponível, quaisquer tokens que atendam aos critérios top-K e/ou top-P serão
selecionados aleatoriamente para produzir um único próximo token previsto.

Em configurações extremas de um valor de configuração de amostragem, essa configuração de amostragem


cancela outras configurações ou se torna irrelevante.

Fevereiro de 2025 11
Machine Translated by Google

Engenharia Rápida


Se você definir a temperatura como 0, o top-K e o top-P tornam-se irrelevantes — o token mais provável se

torna o próximo token previsto. Se você definir uma temperatura extremamente alta (acima de 1 — geralmente na

faixa de 10), a temperatura se torna irrelevante e quaisquer tokens que passarem pelos critérios top-K e/ou top-P

são então amostrados aleatoriamente para escolher o próximo token previsto.


Se você definir o top-K como 1, a temperatura e o top-P se tornam irrelevantes. Apenas um token atende aos critérios

do top-K, e esse token é o próximo token previsto. Se você definir o top-K como extremamente alto, como o tamanho

do vocabulário do LLM, qualquer token com probabilidade diferente de zero de ser o próximo token atenderá aos

critérios do top-K e nenhum será selecionado.


Se você definir top-P como 0 (ou um valor muito pequeno), a maioria das implementações de amostragem LLM

considerará apenas o token com maior probabilidade de atender aos critérios de top-P, tornando a temperatura e o top-K

irrelevantes. Se você definir top-P como 1, qualquer token com probabilidade diferente de zero de ser o próximo

token atenderá aos critérios de top-P, e nenhum será selecionado.

Como ponto de partida geral, uma temperatura de 0,2, P superior de 0,95 e K superior de 30 proporcionarão resultados

relativamente coerentes que podem ser criativos, mas não excessivamente. Se você deseja resultados especialmente

criativos, experimente começar com uma temperatura de 0,9, P superior de 0,99 e K superior de 40. E se você deseja

resultados menos criativos, experimente começar com uma temperatura de 0,1, P superior de 0,9 e K superior de 20.

Por fim, se sua tarefa sempre tiver uma única resposta correta (por exemplo, responder a um problema de matemática),

comece com uma temperatura de 0.

OBSERVAÇÃO: Com mais liberdade (temperatura mais alta, top-K, top-P e tokens de saída), o LLM pode gerar texto

menos relevante.

AVISO: Você já viu uma resposta terminando com uma grande quantidade de palavras de preenchimento? Isso também

é conhecido como "bug do loop de repetição", um problema comum em Modelos de Linguagem Grandes, em que o

modelo fica preso em um ciclo, gerando repetidamente a mesma palavra, frase ou estrutura de sentença (de

preenchimento), frequentemente exacerbado por temperatura inadequada e top-k/

Fevereiro de 2025 12
Machine Translated by Google

Engenharia Rápida

Configurações top-p. Isso pode ocorrer tanto em configurações de temperatura baixa quanto alta, embora por
razões diferentes. Em baixas temperaturas, o modelo se torna excessivamente determinístico, aderindo
rigidamente ao caminho de maior probabilidade, o que pode levar a um loop se esse caminho revisitar texto
gerado anteriormente. Por outro lado, em altas temperaturas, a saída do modelo se torna excessivamente
aleatória, aumentando a probabilidade de que uma palavra ou frase escolhida aleatoriamente leve, por acaso,
de volta a um estado anterior, criando um loop devido ao vasto número de opções disponíveis. Em ambos os
casos, o processo de amostragem do modelo fica "travado", resultando em uma saída monótona e inútil até
que a janela de saída seja preenchida. Resolver isso geralmente requer ajustes cuidadosos nos valores de
temperatura e top-k/top-p para encontrar o equilíbrio ideal entre determinismo e aleatoriedade.

Técnicas de incentivo
Os LLMs são ajustados para seguir instruções e são treinados com grandes quantidades de dados para que
possam entender um prompt e gerar uma resposta. Mas os LLMs não são perfeitos; quanto mais claro for
o texto do prompt, melhor será para o LLM prever o próximo texto provável. Além disso, técnicas específicas
que aproveitam como os LLMs são treinados e como funcionam ajudarão você a obter resultados relevantes com
eles.

Agora que entendemos o que é engenharia de prompt e o que ela requer, vamos analisar alguns exemplos
das técnicas de prompt mais importantes.

Aviso geral / tiro zero

Um prompt zero-shot5 é o tipo mais simples de prompt. Ele fornece apenas uma descrição de uma tarefa e
algum texto para o LLM começar. Essa entrada pode ser qualquer coisa: uma pergunta, o início de uma
história ou instruções. O nome zero-shot significa "sem exemplos".

Fevereiro de 2025 13
Machine Translated by Google

Engenharia Rápida

Vamos usar o Vertex AI Studio (para Linguagem) no Vertex AI,6 que fornece um ambiente para testar prompts.

Na Tabela 1, você verá um exemplo de prompt de zero-shot para classificar resenhas de filmes.

O formato de tabela usado abaixo é uma ótima maneira de documentar prompts. Seus prompts provavelmente

passarão por muitas iterações antes de serem incluídos em uma base de código, por isso é importante acompanhar

o trabalho de engenharia de prompts de forma disciplinada e estruturada. Mais informações sobre este formato

de tabela, a importância de acompanhar o trabalho de engenharia de prompts e o processo de desenvolvimento

de prompts estão disponíveis na seção "Melhores Práticas", mais adiante neste capítulo ("Documente as várias

tentativas de prompt").

A temperatura do modelo deve ser definida para um valor baixo, já que não é necessária criatividade, e usamos os

valores padrão top-K e top-P do gemini-pro, que efetivamente desabilitam ambas as configurações (consulte

"Configuração de Saída do LLM" acima). Preste atenção à saída gerada. As palavras " perturbador" e "obra-

prima" devem tornar a previsão um pouco mais complicada, já que ambas as palavras são usadas na mesma
frase.

Fevereiro de 2025 14
Machine Translated by Google

Engenharia Rápida

Nome 1_1_classificação_de_filmes

Meta Classifique as críticas de filmes como positivas, neutras ou negativas.


Modelo gemini-pro

Temperatura 0,1 Limite de Token 5

Top-K N/D Top-P 1

Incitar Classifique as críticas de filmes como POSITIVAS, NEUTRAS ou NEGATIVAS.


Crítica: "Ela" é um estudo perturbador que revela a direção que a humanidade tomará se a IA
continuar evoluindo sem controle. Gostaria que houvesse mais filmes como esta obra-
prima.
Sentimento:

Saída POSITIVO

Tabela 1. Um exemplo de prompt de tiro zero

Quando o "zero-shot" não funcionar, você pode fornecer demonstrações ou exemplos no prompt, o que
leva a prompts de "one-shot" e "few-shot". Prompts gerais / "zero-shot"

Um tiro e poucos tiros

Ao criar prompts para modelos de IA, é útil fornecer exemplos. Esses exemplos podem ajudar o modelo a
entender o que você está solicitando. Exemplos são especialmente úteis quando você deseja direcionar o
modelo para uma determinada estrutura ou padrão de saída.

Um prompt one-shot fornece um único exemplo, daí o nome one-shot. A ideia é que o modelo tenha um
exemplo que possa imitar para concluir a tarefa da melhor forma possível.

O prompt de poucas tentativas 7 fornece múltiplos exemplos para o modelo. Essa abordagem mostra
ao modelo um padrão que ele precisa seguir. A ideia é semelhante à de uma tentativa, mas múltiplos
exemplos do padrão desejado aumentam a chance de o modelo seguir o padrão.

Fevereiro de 2025 15
Machine Translated by Google

Engenharia Rápida

O número de exemplos necessários para o prompt de poucos instantes depende de alguns fatores,
incluindo a complexidade da tarefa, a qualidade dos exemplos e as capacidades do modelo de IA generativa (IA
gen) que você está usando. Como regra geral, você deve usar pelo menos três a cinco exemplos para o
prompt de poucos instantes. No entanto, você pode precisar usar mais exemplos para tarefas mais complexas
ou menos exemplos devido à limitação do tamanho da entrada do seu modelo.

A Tabela 2 mostra um exemplo de prompt de poucos disparos. Vamos usar as mesmas


configurações do modelo gemini-pro de antes, exceto pelo aumento do limite do token para acomodar a
necessidade de uma resposta mais longa.

Meta Analisar pedidos de pizza para JSON

Modelo gemini-pro

Temperatura 0,1 Limite de Token 250

Top-K N/D Top-P 1

Incitar Analise o pedido de pizza de um cliente em JSON válido:

EXEMPLO:
Quero uma pizza pequena com queijo, molho de tomate e calabresa.
Resposta JSON:
```

{
"tamanho": "pequeno",
"tipo": "normal",
"ingredientes": [["queijo", "molho de tomate", "peperoni"]]
}
```

Continua na próxima página...

Fevereiro de 2025 16
Machine Translated by Google

Engenharia Rápida

Incitar EXEMPLO:
Posso pedir uma pizza grande com molho de tomate, manjericão e mussarela?

{
"tamanho": "grande",
"tipo": "normal",
"ingredientes": [["molho de tomate", "bazel", "mussarela"]]
}

Agora, eu gostaria de uma pizza grande, com a primeira metade de queijo e mussarela. E
a outra metade de molho de tomate, presunto e abacaxi.

Resposta JSON:
```
Saída
{
"tamanho": "grande",
"tipo": "meio-meio",
"ingredientes": [["queijo", "mussarela"], ["molho de tomate", "presunto", "abacaxi"]]

}
```

Tabela 2. Um exemplo de prompt de poucos disparos

Ao escolher exemplos para o seu prompt, use exemplos relevantes para a tarefa que você deseja executar. Os
exemplos devem ser diversos, de alta qualidade e bem escritos. Um pequeno erro pode confundir o modelo e
resultar em resultados indesejados.

Se você estiver tentando gerar uma saída robusta a uma variedade de entradas, é importante incluir casos
extremos em seus exemplos. Casos extremos são entradas incomuns ou inesperadas, mas que o modelo ainda
deve ser capaz de lidar.

Fevereiro de 2025 17
Machine Translated by Google

Engenharia Rápida

Sistema, contexto e estímulo de função

As técnicas de orientação sistêmica, contextual e de função são usadas para orientar como os LLMs geram
texto, mas elas se concentram em aspectos diferentes:

• O prompt do sistema define o contexto geral e o propósito do modelo de linguagem.


define o "panorama geral" do que o modelo deve fazer, como traduzir um idioma, classificar uma revisão
etc.

• A solicitação contextual fornece detalhes específicos ou informações básicas relevantes para


a conversa ou tarefa atual. Ajuda o modelo a entender as nuances do que está sendo perguntado e a adaptar
a resposta de acordo.

• A solicitação de função atribui um caráter ou identidade específica para o modelo de linguagem adotar.
Isso ajuda o modelo a gerar respostas consistentes com a função atribuída e seu conhecimento e comportamento
associados.

Pode haver uma sobreposição considerável entre prompts de sistema, contextuais e de função. Por exemplo,
um prompt que atribui uma função ao sistema também pode ter um contexto.

No entanto, cada tipo de prompt atende a um propósito principal ligeiramente diferente:

• Prompt do sistema: define os recursos fundamentais e o propósito abrangente do modelo.

• Aviso contextual: fornece informações imediatas e específicas da tarefa para orientar a resposta.
É altamente específico para a tarefa ou entrada atual, que é dinâmica.

• Prompt de função: Enquadra o estilo de saída e a voz do modelo. Adiciona uma camada de especificidade
e personalidade.

Fevereiro de 2025 18
Machine Translated by Google

Engenharia Rápida

Distinguir entre prompts de sistema, contextuais e de função fornece uma estrutura para projetar prompts
com intenção clara, permitindo combinações flexíveis e facilitando a análise de como cada tipo de prompt
influencia a saída do modelo de linguagem.

Vamos analisar esses três tipos diferentes de prompts.

Prompt do sistema

A Tabela 3 contém um prompt do sistema, onde especifico informações adicionais sobre como retornar a saída.
Aumentei a temperatura para obter um nível de criatividade mais alto e especifiquei um limite de tokens mais
alto. No entanto, devido às minhas instruções claras sobre como retornar a saída, o modelo não retornou texto
extra.

Meta Classifique as críticas de filmes como positivas, neutras ou negativas.


Modelo gemini-pro

Temperatura 1 Limite de Token 5

Top-K 40 Top-P 0,8

Incitar Classifique as críticas de filmes como positivas, neutras ou negativas. Retorne o rótulo
apenas em letras maiúsculas.
Crítica: "Ela" é um estudo perturbador que revela a direção que a humanidade tomará se a IA
continuar evoluindo sem controle. É tão perturbador que eu não consegui assistir.

Sentimento:

Saída NEGATIVO

Tabela 3. Um exemplo de prompt do sistema

Prompts de sistema podem ser úteis para gerar saídas que atendam a requisitos específicos. O nome "prompt
de sistema" significa, na verdade, "fornecer uma tarefa adicional ao sistema". Por exemplo, você pode usar
um prompt de sistema para gerar um trecho de código compatível com uma linguagem de programação
específica ou para retornar uma determinada estrutura. Dê uma olhada na Tabela 4, onde retorno a saída
em formato JSON.

Fevereiro de 2025 19
Machine Translated by Google

Engenharia Rápida

Meta Classifique as críticas de filmes como positivas, neutras ou negativas e retorne JSON.
Modelo gemini-pro

Temperatura 1 Limite de Token 1024

Top-K 40 Top-P 0,8

Incitar Classifique as avaliações de filmes como positivas, neutras ou negativas. Retorne um JSON válido:

Crítica: "Ela" é um estudo perturbador que revela a direção que a humanidade tomará se a IA
continuar evoluindo sem controle. É tão perturbador que eu não consegui assistir.

Esquema:
```

FILME:
{
"sentimento": String "POSITIVO" | "NEGATIVO" | "NEUTRO",
"nome": String
}
CRÍTICAS DE FILMES:

{
"movie_reviews": [FILME]
}
```

Resposta JSON:
```
Saída
{
"críticas de filmes": [
{
"sentimento": "NEGATIVO",
"nome": "Dela"
}
]
}
```

Tabela 4. Um exemplo de prompt do sistema com formato JSON

Fevereiro de 2025 20
Machine Translated by Google

Engenharia Rápida

Há algumas vantagens em retornar objetos JSON a partir de um prompt que extrai dados. Em uma
aplicação real, não preciso criar esse formato JSON manualmente; já posso retornar os dados em ordem
ordenada (muito útil ao trabalhar com objetos de data e hora), mas o mais importante é que, ao solicitar um
formato JSON, o modelo é forçado a criar uma estrutura e limita as alucinações.

Os prompts do sistema também podem ser muito úteis para segurança e toxicidade. Para controlar a saída, basta
adicionar uma linha adicional ao seu prompt, como: "Você deve ser respeitoso em sua resposta".

Solicitação de função

A solicitação de função é uma técnica de engenharia de prompts que envolve atribuir uma função específica ao
modelo de IA gen. Isso pode ajudar o modelo a gerar resultados mais relevantes e informativos, pois o modelo
pode elaborar suas respostas para a função específica que lhe foi atribuída.

Por exemplo, você pode solicitar a um modelo de IA gen que desempenhe o papel de editor de livros,
professor de jardim de infância ou palestrante motivacional. Depois que o modelo receber uma função, você
pode fornecer a ele instruções específicas para essa função. Por exemplo, você pode solicitar a um
professor que crie um plano de aula para que ele possa revisar. Observe a Tabela 5, onde o modelo assume
o papel de guia de viagem.

Fevereiro de 2025 21
Machine Translated by Google

Engenharia Rápida

Meta Atuar como guia de viagem e fornecer 3 sugestões de viagem


Modelo gemini-pro

Temperatura 1 Limite de Token 1024

Top-K 40 Top-P 0,8

Incitar Quero que você atue como um guia de viagem. Escreverei sobre minha localização e você
sugerirá três lugares para visitar perto de mim. Em alguns casos, também lhe darei o tipo de lugar que
visitarei.

Minha sugestão: "Estou em Amsterdã e quero visitar apenas museus."

Sugestões de viagem:

Saída 1. Rijksmuseum: Museu de renome mundial, conhecido pelas obras-primas holandesas


como “A Ronda Noturna” de Rembrandt. Não perca a incrível coleção de pinturas e
artefatos que exibem arte e história holandesas.

2. Museu Van Gogh: Mergulhe nas obras cativantes de Vincent van Gogh. O museu abriga
a maior coleção de suas pinturas e desenhos, incluindo "A Noite Estrelada" e "Girassóis".

3. Stedelijk Museum Amsterdam: Descubra arte moderna e contemporânea


do mundo todo. O acervo do museu inclui obras de Picasso, Kandinsky e Rietveld,
abrigadas em um impressionante edifício moderno.

Tabela 5. Um exemplo de estímulo à função

O exemplo acima mostra como assumir o papel de um agente de viagens. Ao mudar o papel
para professor de geografia, você notará que receberá uma resposta diferente.

Definir uma perspectiva de função para um modelo de IA fornece um modelo do tom, estilo e
especialização focada que você está procurando para melhorar a qualidade, relevância e eficácia
do seu resultado.

Fevereiro de 2025 22
Machine Translated by Google

Engenharia Rápida

Aqui estão alguns estilos que você pode escolher e que considero eficazes:

Confrontacional, Descritivo, Direto, Formal, Humorístico, Influente, Informal,


Inspirador, Persuasivo

Vamos mudar nosso prompt na Tabela 6 para incluir um estilo humorístico e inspirador.

Incitar Quero que você atue como um guia de viagem. Vou escrever sobre minha
localização e você vai sugerir 3 lugares para visitar perto de mim, de forma bem-
humorada.
Minha sugestão: "Estou em Manhattan".
Sugestões de viagem:

Saída 1. Contemple o Empire State of Mind: Suba às alturas vertiginosas do Empire State Building e
deleite-se com a glória do horizonte de Manhattan. Prepare-se para se sentir como o King
Kong no topo da Big Apple, sem a banana gigante do tamanho de um macaco.

2. Aventure-se no MoMA: Liberte o seu aficionado por arte interior no Museu de Arte Moderna
(MoMA). Contemple obras-primas que vão te deixar perplexo e te fazer questionar
se seus desenhos de bonecos palito têm algum mérito artístico.

3. Compre até cair na Quinta Avenida: faça uma terapia de compras na


A icônica Quinta Avenida. Prepare-se para o choque de preços ao olhar vitrines
(ou comprar de verdade) em butiques de grife que farão seu bolso chorar.
Mas, ei, você está em Manhattan, então é melhor aproveitar a fabulosidade!

Tabela 6. Um exemplo de estímulo de papel com tom e estilo humorísticos

Solicitação contextual

Ao fornecer prompts contextuais, você pode ajudar a garantir que suas interações com a IA sejam
o mais fluidas e eficientes possível. O modelo conseguirá entender sua solicitação mais rapidamente e
gerar respostas mais precisas e relevantes, como você pode ver no exemplo da Tabela 7.

Fevereiro de 2025 23
Machine Translated by Google

Engenharia Rápida

Meta Sugira artigos para um blog sobre jogos retrô


Modelo gemini-pro

Temperatura 1 Limite de Token 1024

Top-K 40 Top-P 0,8

Incitar Contexto: Você está escrevendo para um blog sobre videogames de arcade retrô dos
anos 80.

Sugira 3 tópicos para escrever um artigo com algumas linhas de descrição do que esse artigo
deve conter.

Saída 1. **A evolução do design de gabinetes de fliperama:**


Este artigo explorará a evolução dos designs dos gabinetes de fliperama, desde os primeiros
gabinetes de madeira e metal da década de 1970 até os designs elegantes e iluminados por neon
da década de 1980 e posteriores.

2. **Uma explosão do passado: jogos de arcade icônicos dos anos 80:**


- Este artigo apresentará um vislumbre da história, impacto e legado de alguns dos
jogos de arcade mais icônicos e influentes da década de 1980, destacando suas
inovações, mecânicas populares e charme duradouro.

3. **A ascensão e o renascimento retrô da pixel art:**


- Este artigo se aprofundará na evolução da pixel art como um estilo visual definidor dos
primeiros jogos de arcade, traçando suas raízes, explorando suas técnicas e discutindo
o ressurgimento da pixel art em jogos modernos e arte digital.

Tabela 7. Um exemplo de estímulo contextual

Fevereiro de 2025 24
Machine Translated by Google

Engenharia Rápida

Solicitação de retrocesso

A técnica de "step-back" (recuo) é uma técnica para melhorar o desempenho, induzindo o aluno a
considerar primeiro uma pergunta geral relacionada à tarefa específica em questão e, em seguida, inserindo
a resposta a essa pergunta geral em um prompt subsequente para a tarefa específica. Esse "recuo"
permite que o aluno ative o conhecimento prévio e os processos de raciocínio relevantes antes de tentar
resolver o problema específico.

Ao considerar os princípios mais amplos e subjacentes, os LLMs podem gerar respostas mais precisas e
perspicazes. A sugestão de retrocesso incentiva os LLMs a pensar criticamente e aplicar seus conhecimentos
de maneiras novas e criativas. Ela modifica a sugestão final da tarefa, utilizando mais conhecimento dos
parâmetros do LLM do que seria possível se o LLM fosse solicitado diretamente.

Pode ajudar a mitigar vieses nas respostas do LLM, concentrando-se em princípios gerais em vez de
detalhes específicos, incentivando o recuo.

Vamos analisar estes exemplos para entender como a sugestão de retrocesso pode melhorar os
resultados. Vamos primeiro analisar uma sugestão tradicional (Tabela 8) antes de compará-la com uma
sugestão de retrocesso (Tabela 9):

Fevereiro de 2025 25
Machine Translated by Google

Engenharia Rápida

Meta Escreva um enredo para um nível de um videogame de tiro em primeira pessoa.


Modelo gemini-pro

Temperatura 1 Limite de Token 1024

Top-K 40 Top-P 0,8

Incitar Escreva um enredo de um parágrafo para um novo nível de um videogame de tiro em


primeira pessoa que seja desafiador e envolvente.

Saída O nível começa com o esquadrão do jogador sendo emboscado em uma densa área urbana por
uma facção inimiga implacável. Os jogadores devem lutar por um labirinto de becos e prédios
em ruínas, utilizando furtividade e precisão para eliminar as forças inimigas e evitar serem
detectados. O jogador deve usar o ambiente a seu favor, armando armadilhas, utilizando cobertura
e fazendo movimentos calculados para sobreviver.
Ao longo do caminho, eles descobrem informações que sugerem que o inimigo está planejando um
ataque devastador, e o jogador deve correr contra o tempo para reunir evidências e repassá-las ao
seu quartel-general antes que o inimigo possa executar seus planos.

Tabela 8. Um prompt tradicional antes de compará-lo com um prompt de retrocesso

Ao definir a temperatura para 1, você pode acabar com todos os tipos de escrita criativa para um enredo,
mas também é bastante aleatório e genérico. Então, vamos dar um passo para trás:

Fevereiro de 2025 26
Machine Translated by Google

Engenharia Rápida

Incitar Com base em populares jogos de ação de tiro em primeira pessoa, quais são os cinco
principais cenários fictícios que contribuem para um enredo desafiador e envolvente em um
videogame de tiro em primeira pessoa?

Saída 1. **Base Militar Abandonada**: Um complexo militar pós-apocalíptico extenso, repleto de


soldados mutantes e robôs desonestos, ideal para um desafiador combate com
armas de fogo.

2. **Cyberpunk City**: Um ambiente urbano futurista e iluminado por neon com torres
arranha-céus e becos densos, com inimigos ciberneticamente aprimorados e mecânicas de
hacking.

3. **Nave Alienígena**: Uma vasta nave alienígena encalhada na Terra, com


corredores, seções de gravidade zero e criaturas extraterrestres para encontrar.

4. **Cidade Infestada de Zumbis**: Uma cidade desolada tomada por hordas de zumbis
agressivos, com intenso combate corpo a corpo e resolução de quebra-cabeças para
encontrar uma passagem segura.

5. **Unidade de Pesquisa Subaquática**: Um laboratório em águas profundas inundado de água,


cheio de criaturas aquáticas mutantes, exigindo habilidades de furtividade e exploração
subaquática para sobreviver.

Tabela 9. Um exemplo de solicitação de autoconsistência

Sim, esses tópicos parecem adequados para um videogame em primeira pessoa. Vamos voltar ao prompt
original, mas desta vez incluímos a resposta do passo para trás como contexto e vemos o que ele retorna.

Fevereiro de 2025 27
Machine Translated by Google

Engenharia Rápida

Incitar Contexto: 5 temas envolventes para um videogame de tiro em primeira pessoa:

1. **Base Militar Abandonada**: Um complexo militar pós-apocalíptico extenso, repleto de soldados


mutantes e robôs desonestos, ideal para um desafiador combate com armas de fogo.

2. **Cyberpunk City**: Um ambiente urbano futurista e iluminado por neon, com arranha-céus
imponentes e becos densos, com inimigos ciberneticamente aprimorados e mecânicas de
hacking.

3. **Nave Alienígena**: Uma enorme nave alienígena encalhada em


Terra, com corredores assustadores, seções de gravidade zero e criaturas extraterrestres
para encontrar.

4. **Cidade infestada de zumbis**: Uma cidade desolada tomada por hordas de


zumbis agressivos, com intenso combate corpo a corpo e resolução de quebra-cabeças para encontrar
uma passagem segura.

5. **Unidade de Pesquisa Subaquática**: Um laboratório em águas profundas inundado de água, cheio de


criaturas aquáticas mutantes, exigindo habilidades de furtividade e exploração subaquática para sobreviver.

Escolha um dos temas e escreva um enredo de um parágrafo para um novo nível de um


videogame de tiro em primeira pessoa que seja desafiador e envolvente.

Saída No coração de um abismo escuro, encontra-se uma instalação de pesquisa subaquática em


ruínas, um testemunho da ambição humana e suas consequências desastrosas.
Envolta em escuridão, pulsando com o zumbido de máquinas defeituosas e assombrada pelos ecos
de almas afogadas, a instalação é agora um terreno fértil para um pesadelo vindo das profundezas do
mar. O jogador, um fuzileiro naval de elite equipado com equipamentos de mergulho avançados e
armamento experimental, tem a tarefa de se aventurar neste reino aquático de terror. Munidos de
resiliência e engenhosidade, eles devem navegar por corredores traiçoeiros, resolver quebra-cabeças
enigmáticos e confrontar monstruosidades marinhas macabras que espreitam nas profundezas. Da luta
contra a pressão esmagadora das profundezas do mar à superação de predadores aquáticos astutos,
cada momento neste submundo desconhecido testa os limites da resistência e da coragem humanas.

Tabela 10. Um exemplo de solicitação de autoconsistência

Parece um videogame interessante! Usando técnicas de prompts de retrocesso, você pode


aumentar a precisão dos seus prompts.

Fevereiro de 2025 28
Machine Translated by Google

Engenharia Rápida

Cadeia de Pensamento (CoT)

A técnica de Cadeia de Pensamento (CoT) 9 é uma técnica para aprimorar a capacidade de raciocínio dos alunos de Mestrado

em Direito, gerando etapas intermediárias de raciocínio. Isso ajuda o aluno a gerar respostas mais precisas. Você pode

combiná-la com a técnica de poucas tentativas para obter melhores resultados em tarefas mais complexas que exigem raciocínio

antes de responder, já que é um desafio com uma cadeia de pensamento de zero tentativas.

O CoT tem muitas vantagens. Primeiramente, exige pouco esforço, é muito eficaz e funciona bem com LLMs prontos para uso

(portanto, não há necessidade de ajustes finos). Você também obtém interpretabilidade com o prompt do CoT, pois pode aprender

com as respostas do LLM e ver os passos de raciocínio que foram seguidos. Se houver algum problema, você poderá identificá-lo. A

cadeia de pensamento parece melhorar a robustez ao alternar entre diferentes versões do LLM. Isso significa que o desempenho

do seu prompt deve variar menos entre diferentes LLMs do que se ele não usasse cadeias de raciocínio. É claro que também

existem desvantagens, mas elas são um tanto intuitivas.

A resposta do LLM inclui o raciocínio em cadeia, o que significa mais tokens de saída, o que significa que as previsões

custam mais dinheiro e demoram mais.

Para explicar o exemplo a seguir na Tabela 11, vamos primeiro tentar criar um prompt que não esteja usando o prompt CoT para

mostrar as falhas de um modelo de linguagem grande.

Incitar Quando eu tinha 3 anos, meu parceiro tinha o triplo da minha idade. Agora, tenho
20 anos. Quantos anos tem meu parceiro?

Saída 63 anos de idade

Tabela 11. Um exemplo de um prompt que tenta resolver um problema matemático

Fevereiro de 2025 29
Machine Translated by Google

Engenharia Rápida

Caramba. Essa é obviamente a resposta errada. Aliás, os LLMs frequentemente têm dificuldades com
tarefas matemáticas e podem dar respostas incorretas – mesmo para uma tarefa tão simples como
multiplicar dois números. Isso ocorre porque eles são treinados com grandes volumes de texto e a matemática
pode exigir uma abordagem diferente. Então, vamos ver se as etapas intermediárias de raciocínio
melhorarão o resultado.

Incitar Quando eu tinha 3 anos, meu parceiro tinha o triplo da minha idade. Agora, tenho 20 anos. Quantos
anos tem meu parceiro? Vamos pensar passo a passo.

Saída 1. Vamos supor que minha idade atual seja “x” anos.

2. Quando eu tinha 3 anos, minha idade era 3 anos.

3. A idade do meu parceiro naquela época era 3 vezes a minha idade, o que significa que a idade do
meu parceiro era 3 * 3 = 9 anos.

4. Agora, tenho 20 anos, o que significa que minha idade aumentou em 20 - 3 = 17


anos desde que eu tinha 3 anos de idade.

5. Como a idade do meu parceiro era 9 anos quando eu tinha 3 anos, e minha idade tem
aumentou em 17 anos, a idade do meu parceiro também deve ter aumentado em 17 anos.

6. Portanto, a idade atual do meu parceiro é 9 + 17 = 26 anos.

Então, meu parceiro tem 26 anos.

Tabela 12. Um exemplo de solicitação de cadeia de pensamento

Certo, agora a resposta final está correta. Isso porque instruímos claramente o LLM a explicar cada etapa em vez de apenas

retornar uma resposta. É interessante ver que o modelo soma os 17 anos a mais. Na minha cabeça, eu pegaria a diferença de anos

entre mim e meu parceiro e os somaria. (20+(9-3)). Vamos ajudar o modelo a pensar um pouco mais como eu.

Fevereiro de 2025 30
Machine Translated by Google

Engenharia Rápida

A Tabela 12 é um exemplo de Cadeia de Pensamento "de disparo zero". A indução de cadeia de pensamento pode

ser muito poderosa quando combinada com uma sequência única ou de poucos disparos, como você pode ver na Tabela 13:

Incitar P: Quando meu irmão tinha 2 anos, eu tinha o dobro da idade dele. Agora tenho 40
anos. Quantos anos meu irmão tem? Vamos pensar passo a passo.

R: Quando meu irmão tinha 2 anos, eu tinha 2 * 2 = 4 anos.


Isso dá uma diferença de 2 anos e eu sou mais velho. Agora tenho 40 anos, então meu irmão tem 40 - 2 = 38
anos. A resposta é 38.

P: Quando eu tinha 3 anos, meu parceiro tinha o triplo da minha idade. Agora, tenho
20 anos. Quantos anos tem meu parceiro? Vamos pensar passo a passo.

UM:

Saída Quando eu tinha 3 anos, meu parceiro tinha 3 x 3 = 9 anos. Isso dá uma
diferença de 6 anos e meu parceiro é mais velho. Agora eu tenho 20 anos,
então meu parceiro tem 20 + 6 = 26 anos. A resposta é 26.

Tabela 13. Um exemplo de estímulo à cadeia de pensamento com um único disparo

A cadeia de pensamento pode ser útil para vários casos de uso. Pense na geração de código, para dividir a solicitação

em algumas etapas e mapeá-las para linhas de código específicas. Ou para criar dados sintéticos quando você

tem algum tipo de semente, como "O produto se chama XYZ, escreva uma descrição guiando o modelo através das

suposições que você faria com base no título do produto". Geralmente, qualquer tarefa que possa ser resolvida por

meio de "discussão" é uma boa candidata para uma cadeia de pensamento. Se você puder explicar as etapas para

resolver o problema, tente a cadeia de pensamento.

Consulte o notebook10 hospedado no repositório Github do GoogleCloudPlatform, que entrará em mais detalhes sobre

o prompt de CoT:

Fevereiro de 2025 31
Machine Translated by Google

Engenharia Rápida

Na seção de melhores práticas deste capítulo, aprenderemos algumas práticas recomendadas específicas para a

estimulação da Cadeia de Pensamento.

Autoconsistência
Embora modelos de linguagem de grande porte tenham demonstrado sucesso impressionante em diversas tarefas

de PNL, sua capacidade de raciocínio é frequentemente vista como uma limitação que não pode ser superada apenas

aumentando o tamanho do modelo. Como aprendemos na seção anterior sobre estímulos à Cadeia de Pensamento, o

modelo pode ser estimulado a gerar etapas de raciocínio como um ser humano resolvendo um problema. No entanto, a

CoT utiliza uma estratégia simples de "decodificação gananciosa", o que limita sua eficácia. A autoconsistência11

combina amostragem e votação majoritária para gerar caminhos de raciocínio diversificados e selecionar a

resposta mais consistente. Ela melhora a precisão e a coerência das respostas geradas por LLMs.

A autoconsistência fornece uma probabilidade pseudoprobabilidade de uma resposta estar correta, mas

obviamente tem custos altos.

Segue os seguintes passos:

1. Geração de caminhos de raciocínio diversos: O LLM recebe o mesmo prompt várias vezes. Uma configuração de

alta temperatura incentiva o modelo a gerar diferentes caminhos de raciocínio e perspectivas sobre o problema.

2. Extraia a resposta de cada resposta gerada.

3. Escolha a resposta mais comum.

Vejamos um exemplo de sistema de classificação de e-mails, que classifica um e-mail como IMPORTANTE ou NÃO

IMPORTANTE. Uma sequência de ideias sem sentido será enviada ao LLM várias vezes, para verificar se as respostas diferem após

cada envio. Observe o tom amigável, a escolha das palavras e o sarcasmo usados no e-mail. Tudo isso pode enganar o LLM.

Fevereiro de 2025 32
Machine Translated by Google

Engenharia Rápida

Incitar E-MAIL:
```

Oi,

Vi você usar o Wordpress no seu site. Um ótimo sistema de gerenciamento de conteúdo de código
aberto. Eu também já o usei no passado. Ele vem com vários plugins excelentes para o usuário. E é
bem fácil de configurar.

Notei um bug no formulário de contato, que acontece quando você seleciona o campo de nome.
Veja a captura de tela anexada, onde eu digito texto no campo de nome. Observe a caixa de alerta
do JavaScript que eu inv0k3d.

Mas, de resto, é um ótimo site. Gosto de ler. Fique à vontade para deixar o bug no site, porque me dá
mais coisas interessantes para ler.

Saúde,

Harry, o Hacker.
```

Classifique o e-mail acima como IMPORTANTE ou NÃO IMPORTANTE. Vamos pensar passo a
passo e explicar o porquê.

Continua na próxima página...

Fevereiro de 2025 33
Machine Translated by Google

Engenharia Rápida

Saída **Etapa 1: Identifique a finalidade do e-mail.**


Tentativa 1 O objetivo do e-mail é informar o destinatário sobre um bug no formulário de contato do site.
O remetente também menciona que gosta de ler o site e que está deixando o bug em aberto
por enquanto.

**Etapa 2: Avalie o impacto potencial do bug.**


O bug no formulário de contato pode permitir que um invasor execute código
JavaScript arbitrário no site. Isso pode levar o invasor a assumir o controle do site, roubar
informações confidenciais ou desfigurá-lo.

**Etapa 3: considere a credibilidade do remetente.**


O remetente do e-mail afirma ser um hacker chamado Harry. No entanto, não há como verificar
a identidade do remetente. É possível que o remetente seja um hacker legítimo tentando
ajudar o destinatário, mas também é possível que o remetente seja um indivíduo mal-
intencionado tentando induzir o destinatário a clicar em um link malicioso ou baixar um arquivo
malicioso.

**Conclusão: IMPORTANTE**

Com base no impacto potencial do bug e na credibilidade do remetente, o e-mail deve


ser classificado como **IMPORTANTE**. O destinatário deve tomar medidas imediatas
para corrigir o bug e proteger seu site contra ataques.

Saída **Explicação:**
Tentativa 2
1. **Falta de urgência:** O e-mail não transmite nenhum senso de urgência ou
sensibilidade ao tempo. Começa com uma saudação informal e apresenta a informação
num tom objetivo.

2. **Relatório de bug não crítico:** O bug relatado no formulário de contato é


descrito como interessante, mas não crítico. O remetente do e-mail até sugere que o
proprietário do site pode deixar o bug como está.

3. **Falta de impacto pessoal:** O e-mail não indica qualquer impacto direto ou


impacto pessoal no proprietário do site. Ele simplesmente menciona que o remetente
gosta de ler o site.

Continua na próxima página...

Fevereiro de 2025 34
Machine Translated by Google

Engenharia Rápida

Saída 4. **Solicitação de ausência de ação:** O e-mail não solicita explicitamente nenhuma ação
Tentativa 2 do proprietário do site. Não solicita a correção do bug nem fornece sugestões
específicas de melhoria.

5. **Intenção do remetente:** a intenção do remetente parece estar mais focada em


compartilhar uma observação e expressar interesse no site, em vez de levantar uma
preocupação séria ou solicitar assistência.

**Conclusão: NÃO É IMPORTANTE**

Saída **Etapa 1: Identifique a finalidade do e-mail.**


Tentativa 3 O objetivo do e-mail é informar o destinatário sobre um bug no formulário de contato do site. O
remetente também menciona que gosta de ler o site e que está deixando o bug em aberto por
enquanto.

**Etapa 2: Avalie o impacto potencial do bug.**


O bug no formulário de contato pode permitir que um invasor execute código JavaScript
arbitrário no site. Isso pode levar o invasor a assumir o controle do site, roubar informações
confidenciais ou desfigurá-lo.

**Etapa 3: considere a credibilidade do remetente.**


O remetente do e-mail afirma ser um hacker chamado Harry. No entanto, não há como verificar
a identidade do remetente. É possível que o remetente seja um hacker legítimo tentando
ajudar o destinatário, mas também é possível que o remetente seja um agente malicioso tentando
explorar a falha em benefício próprio.

**Conclusão:**
Com base nos fatores acima, o e-mail deve ser classificado como **IMPORTANTE**.
O bug no formulário de contato representa um sério risco à segurança, e a credibilidade do
remetente é desconhecida. O destinatário deve tomar medidas imediatas para corrigir o
bug e investigar as alegações do remetente.
Tabela 14. Um exemplo de solicitação de autoconsistência

Você pode usar o prompt acima e tentar ver se ele retorna uma classificação consistente.
Dependendo do modelo que você estiver usando e da configuração de temperatura, ele pode retornar “IMPORTANTE” ou “NÃO

IMPORTANTE”.

Fevereiro de 2025 35
Machine Translated by Google

Engenharia Rápida

Ao gerar muitas Cadeias de Pensamentos e escolher a resposta mais comum (“IMPORTANTE”), podemos
obter uma resposta mais consistentemente correta do LLM.

Este exemplo mostra como a sugestão de autoconsistência pode ser usada para melhorar a precisão da
resposta de um LLM, considerando múltiplas perspectivas e selecionando a resposta mais
consistente.

Árvore dos Pensamentos (ToT)

Agora que estamos familiarizados com a cadeia de pensamento e a sugestão de autoconsistência, vamos
revisar a Árvore de Pensamentos (TdP).12 Ela generaliza o conceito de sugestão de TdP, pois permite que os
LLMs explorem múltiplos caminhos de raciocínio simultaneamente, em vez de seguir apenas uma única
cadeia linear de pensamento. Isso é ilustrado na Figura 1.

Figura 1. Visualização da cadeia de pensamentos à esquerda versus a árvore de pensamentos à direita.

Fevereiro de 2025 36
Machine Translated by Google

Engenharia Rápida

Essa abordagem torna o ToT particularmente adequado para tarefas complexas que exigem exploração. Ele funciona

mantendo uma árvore de pensamentos, onde cada pensamento representa uma sequência de linguagem coerente

que serve como um passo intermediário para a resolução de um problema. O modelo pode então explorar diferentes

caminhos de raciocínio, ramificando-se a partir de diferentes nós da árvore.

Há um ótimo caderno, que entra em mais detalhes mostrando a Árvore do Pensamento (ToT), que é baseado

no artigo 'Large Language Model Guided Tree-of-Thought'.9

ReAct (raciocinar e agir)

A solicitação de raciocínio e ação (ReAct) [10]13 é um paradigma que permite aos LLM resolver tarefas

complexas usando raciocínio em linguagem natural combinado com ferramentas externas (pesquisa,

interpretador de código etc.), permitindo que o LLM execute certas ações, como interagir com APIs externas para

recuperar informações, o que é um primeiro passo em direção à modelagem de agentes.

O ReAct imita o funcionamento humano no mundo real, pois raciocinamos verbalmente e podemos

tomar ações para obter informações. O ReAct tem um bom desempenho em comparação com outras
abordagens de engenharia rápida em diversos domínios.

A estimulação ReAct funciona combinando raciocínio e ação em um ciclo de pensamento e ação. O LLM primeiro

raciocina sobre o problema e gera um plano de ação. Em seguida, executa as ações previstas no plano e
observa os resultados. O LLM usa as observações para atualizar seu raciocínio e gerar um novo plano de ação.

Esse processo continua até que o LLM encontre uma solução para o problema.

Para ver isso em ação, você precisa escrever algum código. No trecho de código 1, estou usando o framework

langchain para Python, juntamente com o VertexAI (google-cloud-aiplatform) e os pacotes pip google-search-
results.

Fevereiro de 2025 37
Machine Translated by Google

Engenharia Rápida

Para executar este exemplo, você deve criar uma chave SerpAPI (gratuita) em [Link]
manage-api-key e defina uma variável de ambiente SERPAPI_API_KEY.

Em seguida, vamos escrever um código Python, com a tarefa para o LLM descobrir: Quantas crianças
têm um pai famoso que toca na banda Metallica.

Pitão

de [Link] importar load_tools


de [Link] importar initialize_agent
de [Link] importar AgentType
de [Link] importar VertexAI

prompt = "Quantos filhos os membros da banda Metallica têm?"

llm = VertexAI(temperatura=0,1)
ferramentas = carregar_ferramentas(["serpapi"], llm=llm)

agente = initialize_agent(ferramentas, llm,


agente=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
[Link](prompt)

Fragmento 1. Criando um agente ReAct com LangChain e VertexAI

O trecho de código 2 mostra o resultado. Observe que o ReAct faz uma cadeia de cinco buscas. Na verdade, o

LLM está analisando os resultados da pesquisa do Google para descobrir os nomes das bandas. Em seguida,

ele lista os resultados como observações e encadeia o pensamento para a próxima busca.

Fevereiro de 2025 38
Machine Translated by Google

Engenharia Rápida

> Entrando na nova cadeia AgentExecutor...


O Metallica tem 4 membros.
Ação: Pesquisar
Entrada de ação: Quantos filhos James Hetfield tem?
Observação: três crianças
Pensamento: 1/4 dos membros da banda Metallica têm 3 filhos
Ação: Pesquisar
Entrada de ação: Quantos filhos Lars Ulrich tem?
Observação: 3
Pensamento: 2/4 dos membros da banda Metallica têm 6 filhos
Ação: Pesquisar
Entrada de ação: Quantos filhos Kirk Hammett tem?
Observação: Hammett é casado com sua segunda esposa, Lani, desde 1998.

Eles têm dois filhos, Angel (nascido em 29 de setembro de 2006) e Vincenzo (nascido em 28 de junho de 2008).

Pensamento: 3/4 dos membros da banda Metallica têm 8 filhos


Ação: Pesquisar
Entrada de ação: Quantos filhos Robert Trujillo tem?
Observação: 2
Pensamento: 4/4 membros da banda Metallica têm 10 filhos
Resposta final: 10

Fragmento 2. Executando o ReAct Agent no terminal

O trecho de código 2 descobre que a banda Metallica tem quatro membros. Em seguida, ele busca cada
membro da banda para solicitar o total de filhos e somar os números. Por fim, retorna o número total de filhos
como resposta final.

Na prática, o uso de prompts do ReAct exige a compreensão de que você precisa reenviar continuamente os
prompts/respostas anteriores (e eliminar o conteúdo extra gerado), bem como configurar o modelo com
exemplos/instruções apropriados. Consulte o notebook14 hospedado no repositório do Github do
GoogleCloudPlatform, que apresenta um pouco mais de detalhes, mostrando as entradas e saídas reais do
LLM com um exemplo mais elaborado.

Fevereiro de 2025 39
Machine Translated by Google

Engenharia Rápida

Engenharia de Prompt Automático

A esta altura, você já deve ter percebido que escrever um prompt pode ser complexo. Não seria ótimo
automatizar isso (escrever um prompt para escrever prompts)? Bem, existe um método: Engenharia Automática
de Prompts (APE). Esse método15 não só alivia a necessidade de intervenção humana, como também
melhora o desempenho do modelo em diversas tarefas.

Você incitará um modelo a gerar mais prompts. Avalie-os e, possivelmente, altere os bons. E repita.

Por exemplo, você pode usar a engenharia de prompts automáticos para ajudar a treinar um chatbot para uma
loja virtual de camisetas promocionais. Queremos descobrir todas as maneiras pelas quais os clientes podem
formular seus pedidos de compra de uma camiseta promocional de uma banda.

1. Escreva o prompt que gerará as variantes de saída. Neste exemplo, estou usando
gemini-pro para gerar 10 instruções. Veja a Tabela 15:

Fevereiro de 2025 40
Machine Translated by Google

Engenharia Rápida

Incitar Temos uma loja virtual de camisetas com produtos da banda e, para treinar um chatbot, precisamos de
várias maneiras de fazer pedidos: "Uma camiseta do Metallica tamanho P". Gere 10 variantes, com a mesma
semântica, mas mantendo o mesmo significado.

Saída 1. Gostaria de comprar uma camiseta do Metallica tamanho pequeno.

2. Posso encomendar uma camiseta pequena do Metallica?

3. Gostaria de comprar uma camiseta do Metallica tamanho pequeno.

4. Uma camisa do Metallica, tamanho pequeno, por favor.

5. Quero uma camiseta do Metallica tamanho pequeno.

6. Gostaria de fazer um pedido de uma camiseta do Metallica tamanho P.

7. Camiseta pequena do Metallica, uma por favor.

8. Estou procurando uma camiseta do Metallica tamanho P.

9. Você pode me arranjar uma camiseta do Metallica no tamanho pequeno?

[Link] camiseta pequena do Metallica, por favor.

Tabela 15. Use um LLM para gerar prompts

2. Avalie todos os candidatos à instrução, pontuando-os com base em uma métrica escolhida. Por
exemplo, você pode usar BLEU (Bilingual Evaluation Understudy) ou ROUGE (Recall-Oriented
Understudy for Gisting Evaluation).

3. Selecione o candidato à instrução com a maior pontuação de avaliação. Este candidato será o
prompt final que você poderá usar em seu aplicativo de software ou chatbot. Você também pode
ajustar o prompt selecionado e avaliar novamente.

Fevereiro de 2025 41
Machine Translated by Google

Engenharia Rápida

Solicitação de código

O Gemini se concentra principalmente em prompts baseados em texto, o que também inclui a escrita de prompts

para retornar código. Vamos ao Vertex AI Studio testar esses prompts para ver alguns exemplos de codificação.

Prompts para escrever código

A Gemini também pode ser desenvolvedora e ajudar você a escrever código em qualquer linguagem de programação

de sua escolha. Como desenvolvedor, isso pode ajudar você a acelerar o processo de escrita de código.

Imagine uma pasta em sua máquina com centenas de arquivos que precisam ser renomeados.

Renomear cada arquivo levaria muito tempo. Você conhece um pouco de Bash e poderia escrever um script

para automatizar isso, mas isso também pode levar algum tempo. Então, vamos escrever um prompt. Você

pode escrever o prompt no chatbot público Gemini ou, se estiver mais preocupado com a confidencialidade,

pode escrever esses prompts na sua conta do Google Cloud e abrir o Vertex AI Studio. A vantagem do Vertex AI

Studio é que você pode configurar a temperatura, etc.

Fevereiro de 2025 42
Machine Translated by Google

Engenharia Rápida

Nome 1_bash_renomear_arquivos_na_pasta

Meta Escreva um prompt para escrever código em Bash para renomear arquivos em uma pasta.

Modelo gemini-pro

Temperatura 0,1 Limite de Token 1024

Top-K N/D Top-P 1

Incitar Escreva um trecho de código em Bash que peça um nome de pasta.


Em seguida, ele pega o conteúdo da pasta e renomeia todos os arquivos dentro dela,
acrescentando o nome rascunho ao início do nome do arquivo.

Saída ```bash
#!/bin/bash

# Pergunte o nome da pasta


"
echo "Digite o nome da pasta: leia
nome_da_pasta

# Verifique se a pasta existe


se ! -d "$nome_da_pasta" ]; então
[echo "A pasta não existe."
saída 1
fi

# Obter a lista de arquivos na pasta


arquivos=( "$nome_da_pasta"/* )

# Renomeie cada arquivo adicionando "rascunho" ao nome do arquivo


para arquivo em "${files[@]}"; faça
novo_nome_do_arquivo="rascunho_$(nome base "$arquivo")"
mv "$arquivo" "$novo_nome_de_arquivo"
feito

eco "Arquivos renomeados com sucesso."


```

Tabela 16. Usando Gemini para programar código

Parece um bom código para mim — está até documentado! No entanto, como os LLMs não conseguem raciocinar e repetir dados de

treinamento, é essencial ler e testar seu código primeiro.

O momento que todos nós estamos esperando, será que realmente funciona?

Fevereiro de 2025 43
Machine Translated by Google

Engenharia Rápida

Vamos tentar primeiro com uma pasta de teste com apenas alguns arquivos, que precisarão ser renomeados de

[Link] para draft_filename.txt.

1. Copie a saída da Tabela 16 (sem o wrapper de texto ```bash ```) e cole-a em um novo

arquivo chamado: “rename_files.sh”.

2. Abra uma janela de terminal e digite: . rename_files.sh. Será solicitado que você insira um nome de pasta, por exemplo
teste. e pressione enter.

3. O script parece estar funcionando corretamente. Você verá a mensagem: Arquivos renomeados com sucesso.

Ao olhar para a pasta de teste, observe que todos os arquivos foram renomeados perfeitamente para

draft_filename.txt.

Deu certo!

Prompts para explicar o código

Como desenvolvedor, ao trabalhar em equipe, você precisa ler o código de outra pessoa. O Gemini também pode

ajudar com isso. Vamos pegar a saída de código da Tabela 16, remover os comentários e pedir ao modelo de

linguagem grande que explique o que está acontecendo. Veja a Tabela 17:

Fevereiro de 2025 44
Machine Translated by Google

Engenharia Rápida

Nome 1_bash_explica_o_código
Meta Escreva um prompt para explicar o código Bash

Modelo gemini-pro

Temperatura 0,1 Limite de Token 1024

Top-K N/D Top-P 1

Incitar Explique-me o código Bash abaixo:


```

#!/bin/bash
"
echo "Digite o nome da pasta: leia
nome_da_pasta

se ! -d "$nome_da_pasta" ]; então
[echo "A pasta não existe."
saída 1
fi

arquivos=( "$nome_da_pasta"/* )

para arquivo em "${files[@]}"; faça


novo_nome_do_arquivo="rascunho_$(nome base "$arquivo")"
mv "$arquivo" "$novo_nome_de_arquivo"
feito

eco "Arquivos renomeados com sucesso."


```

Saída Este script Bash executa as seguintes tarefas:

1. **Entrada do usuário**:
- Solicita que o usuário insira um nome de pasta usando os comandos `echo` e `read`.
O nome da pasta inserido é armazenado na variável `folder_name`.

2. **Verificação de existência de pasta**:

- Verifica se a pasta com o nome especificado existe usando a condição `[ ! -d


“$nome_da_pasta” ]`. Se a pasta não existir, exibe uma mensagem de erro (“Pasta não
existe.”) e encerra o script com o código de saída 1.

Continua na próxima página...

Fevereiro de 2025 45
Machine Translated by Google

Engenharia Rápida

Saída 3. **Listagem de arquivos**:

- Ele lista todos os arquivos dentro da pasta especificada usando `files=( “$folder_
comando `name'/* )`. Isso cria um array chamado `files` contendo os caminhos para todos os
arquivos na pasta.

4. **Renomeação de arquivos**:

- Ele itera por cada arquivo no array `files` usando um loop `for`.
- Para cada arquivo, ele gera um novo nome de arquivo usando o `new_file_
comando name=”draft_$(basename “$file”)”. Este novo nome de arquivo é criado prefixando
o nome do arquivo original com a string “draft_”.
- Em seguida, ele renomeia o arquivo usando o comando `mv “$file” “$new_file_name”`, que
move o arquivo para o novo nome de arquivo.

5. **Mensagem de sucesso**:
- Após renomear todos os arquivos, ele exibe uma mensagem de sucesso (“Arquivos
renomeados com sucesso.”) para indicar que a operação de renomeação foi bem-sucedida

Tabela 17. Um prompt para explicar o código

Prompts para traduzir código

O código bash da Tabela 16 parece funcionar bem. No entanto, este script poderia ser realmente reutilizável quando

me solicitasse nomes de arquivos; o ideal seria que funcionasse como um aplicativo separado com uma interface

de usuário. Como ponto de partida, Python seria uma linguagem melhor para um aplicativo (web) do que Bash.

LLMs podem ajudar a traduzir código de uma linguagem para outra. Veja o exemplo em
Tabela 18:

Fevereiro de 2025 46
Machine Translated by Google

Engenharia Rápida

Nome 1_python_renomear_arquivos

Meta Escreva um prompt para traduzir o código Bash para Python


Modelo gemini-pro

Temperatura 0,1 Limite de Token 1024

Top-K N/D Top-P 1

Incitar Traduza o código Bash abaixo para um trecho de Python.

```bash
#!/bin/bash
"
echo "Digite o nome da pasta: leia
nome_da_pasta

se ! -d "$nome_da_pasta" ]; então
[echo "A pasta não existe."
saída 1
fi

arquivos=( "$nome_da_pasta"/* )

para arquivo em "${files[@]}"; faça


novo_nome_do_arquivo="rascunho_$(nome base "$arquivo")"
mv "$arquivo" "$novo_nome_de_arquivo"
feito

eco "Arquivos renomeados com sucesso."


```

Saída ```python
importar sistema operacional

importação shutil

# Obtenha o nome da pasta do usuário


folder_name = input("Digite o nome da pasta: ")

# Verifique se a pasta existe


se não [Link](nome_da_pasta):
print("A pasta não existe.")
saída(1)

Continua na próxima página...

Fevereiro de 2025 47
Machine Translated by Google

Engenharia Rápida

Saída # Obter uma lista de todos os arquivos na pasta


arquivos = [Link](nome_da_pasta)

# Iterar sobre os arquivos


para arquivo em arquivos:
# Crie um novo nome de arquivo com o prefixo "draft_"
novo_nome_de_arquivo = f"rascunho_{arquivo}"

# Mova o arquivo para o novo nome


[Link]([Link](nome_da_pasta, arquivo),
[Link](nome_da_pasta, novo_nome_do_arquivo))

# Imprimir uma mensagem de sucesso


print("Arquivos renomeados com sucesso.")
```

Tabela 18. Um prompt para traduzir código de Bash para Python

Leia e revise o código. Copie a saída do prompt e cole-a em um novo arquivo: file_renamer.py.
Teste o código abrindo uma janela do Terminal e execute o seguinte comando python file_renamer.py.

OBSERVAÇÃO: Ao solicitar código (Python) no Language Studio do Vertex AI, você terá que clicar no
botão "Markdown". Caso contrário, você receberá texto simples sem o recuo de linha adequado, o que é
importante para executar código Python.

Prompts para depuração e revisão de código

Vamos escrever manualmente algumas edições no código da Tabela 18. Ele deve solicitar ao usuário
o prefixo do nome do arquivo e escrever esse prefixo em letras maiúsculas. Veja o código de
exemplo no Snippet *3, mas que chatice. Agora ele retorna erros do Python!

Fevereiro de 2025 48
Machine Translated by Google

Engenharia Rápida

Pitão

importar sistema

operacional importar shutil

folder_name = input("Digite o nome da pasta: ") prefix = input("Digite a


string para preceder o nome do arquivo: ") text = toUpperCase(prefix)

se não [Link](nome_da_pasta): print("A pasta


não existe.") exit(1)

arquivos = [Link](nome_da_pasta)

para arquivo em arquivos:


novo_nome_de_arquivo = f"{texto}_{arquivo}"

[Link]([Link](nome_da_pasta, arquivo),
[Link](nome_da_pasta, novo_nome_do_arquivo))

print("Arquivos renomeados com sucesso.")

Fragmento 3. Um script Python quebrado

Droga! Parece um inseto.

O código Python abaixo gera um erro:

Rastreamento (última chamada mais recente):


Arquivo “/Users/leeboonstra/Documents/test_folder/rename_files.py”, linha 7, em <módulo>

texto = toUpperCase(prefixo)
NameError: o nome 'toUpperCase' não está definido

Trecho 4. Eu quebrei o código Python

Vamos ver se podemos pedir ao modelo de linguagem grande para depurar e revisar o código. Dê uma olhada na
Tabela 19:

Fevereiro de 2025 49
Machine Translated by Google

Engenharia Rápida

Nome 1_código_de_depuração_python

Meta Escreva um prompt para depurar e revisar o código Python.


Modelo gemini-pro

Temperatura 0,1 Limite de Token 1024

Top-K N/D Top-P 1

Incitar O código Python abaixo gera um erro:

Rastreamento (última chamada mais recente):


Arquivo "/
Usuários/leeboonstra/Documentos/pasta_de_teste/renomear_arquivos.py", linha 7, em <módulo>

texto = toUpperCase(prefixo)
NameError: o nome 'toUpperCase' não está definido

Depure o que está errado e explique como posso melhorar o código.

```python
importar sistema operacional

importação shutil

# Obtenha o nome da pasta do usuário

folder_name = input("Digite o nome da pasta: ")


prefix = input("Digite a string para preceder o nome do arquivo: ")
texto = toUpperCase(prefixo)

# Verifique se a pasta existe


se não [Link](nome_da_pasta):
print("A pasta não existe.")
saída(1)

# Obter uma lista de todos os arquivos na pasta


arquivos = [Link](nome_da_pasta)

# Iterar sobre os arquivos


para arquivo em arquivos:

Continua na próxima página...

Fevereiro de 2025 50
Machine Translated by Google

Engenharia Rápida

Incitar # Crie um novo nome de arquivo com o prefixo "draft_" new_filename = f"{text}
_{file}"

# Mova o arquivo para o novo nome


[Link]([Link](folder_name, file), [Link](folder_name,
new_file_name))

# Imprima uma mensagem de


sucesso print("Arquivos renomeados com sucesso.")
```

Saída O código chama a função `toUpperCase` para converter `prefix` para maiúsculas, mas essa
função não está definida. Para corrigir esse problema, você pode usar o método `upper()` da classe
string, que converte uma string específica para maiúsculas. O código modificado é mostrado abaixo:

```python
import os
import shutil

# Obtenha o nome da pasta do usuário folder_name =


input("Digite o nome da pasta: ") prefix = input("Digite a string para
preceder o nome do arquivo: ") text = [Link]()

# Verifique se a pasta existe


se não [Link](nome_da_pasta):
print("A pasta não existe.") exit(1)

# Obter uma lista de todos os arquivos na pasta files =


[Link](folder_name)

# Iterar sobre os arquivos para arquivo


em arquivos:
# Crie um novo nome de arquivo com o prefixo "draft_" new_filename = f"{text}
_{file}"

# Mova o arquivo para o novo nome


[Link]([Link](folder_name, file),

Continua na próxima página...

Fevereiro de 2025 51
Machine Translated by Google

Engenharia Rápida

Saída [Link](nome_da_pasta, novo_nome_do_arquivo))

# Imprimir uma mensagem de sucesso


print("Arquivos renomeados com sucesso.")
```

Além disso, há algumas outras melhorias que podem ser feitas no código:

1. A extensão dos novos nomes de arquivo não é mantida. É melhor extrair a extensão do nome
do arquivo original e adicioná-la ao novo nome.

2. O código pressupõe que não há espaços no nome da pasta. No entanto, é uma boa prática
lidar com espaços de forma elegante, substituindo-os por sublinhados ou hífens.

3. Usar a sintaxe de string `f` para interpolação de strings é mais legível e


conciso do que o operador tradicional `+`.

4. O código não lida com erros que podem ocorrer durante o processo de renomeação.
Seria melhor encapsular a chamada `[Link]` em um bloco `try...except` para capturar
quaisquer erros potenciais.

Aqui está o código melhorado com estas sugestões:

```python
importar sistema operacional

importação shutil
# Obtenha o nome da pasta do usuário
folder_name = input("Digite o nome da pasta: ")
prefix = input("Digite a string para preceder o nome do arquivo: ")
# Verifique se a pasta existe
se não [Link](nome_da_pasta):
print("A pasta não existe.")
saída(1)
# Obter uma lista de todos os arquivos na pasta
arquivos = [Link](nome_da_pasta)

# Iterar sobre os arquivos


para arquivo em arquivos:

Continua na próxima página...

Fevereiro de 2025 52
Machine Translated by Google

Engenharia Rápida

Saída # Obter a extensão do arquivo


ext = [Link](arquivo)[1]

# Crie um novo nome de arquivo com o prefixo e a extensão do arquivo


novo_nome_de_arquivo = f"{prefixo}_{[Link](arquivo)[0]}{ext}"

# Crie os caminhos completos para os arquivos originais e novos


old_path = [Link](nome_da_pasta, arquivo)
novo_caminho = [Link](nome_da_pasta, novo_nome_do_arquivo)

# Tente mover o arquivo


tentar:
[Link](caminho_antigo, novo_caminho)

exceto Exceção como e:


print(f"Ocorreu um erro ao mover o arquivo {file}: {e}")

# Imprimir uma mensagem de sucesso


print("Arquivos renomeados com sucesso.")
```

Essas melhorias tornam o código mais robusto e flexível, além de facilitar sua leitura e
compreensão... (A resposta foi truncada porque atingiu o limite de tokens. Tente
aumentar o limite de tokens se precisar de uma resposta mais longa.)

Tabela 19. Um prompt para depuração e revisão de código Python

Isso é ótimo. Não só me disse como resolver o problema, como também descobriu que
meu código tinha mais bugs e como resolvê-los. A última parte do prompt deu sugestões
para melhorar o código em geral.

Fevereiro de 2025 53
Machine Translated by Google

Engenharia Rápida

E quanto ao prompt multimodal?

O prompt de código ainda utiliza o mesmo modelo de linguagem grande. O prompt multimodal é uma questão à parte;

refere-se a uma técnica em que se utilizam múltiplos formatos de entrada para guiar um modelo de linguagem grande,

em vez de depender apenas de texto. Isso pode incluir combinações de texto, imagens, áudio, código ou até mesmo

outros formatos, dependendo das capacidades do modelo e da tarefa em questão.

Melhores Práticas
Encontrar o prompt certo exige ajustes. O Language Studio no Vertex AI é o lugar perfeito para experimentar seus

prompts, com a possibilidade de testar em diferentes modelos.

Use as seguintes práticas recomendadas para se tornar um profissional em engenharia rápida.

Fornecer exemplos

A melhor prática mais importante é fornecer exemplos (de uma só vez/poucas vezes) dentro de um prompt. Isso

é altamente eficaz porque atua como uma poderosa ferramenta de ensino. Esses exemplos demonstram resultados

desejados ou respostas semelhantes, permitindo que o modelo aprenda com eles e adapte sua própria geração

de acordo. É como dar ao modelo um ponto de referência ou alvo a ser atingido, melhorando a precisão, o estilo

e o tom de sua resposta para melhor atender às suas expectativas.

Fevereiro de 2025 54
Machine Translated by Google

Engenharia Rápida

Design com simplicidade

Os prompts devem ser concisos, claros e fáceis de entender tanto para você quanto para o modelo.
Como regra geral, se já for confuso para você, provavelmente também será para o modelo. Tente
não usar linguagem complexa e não forneça informações desnecessárias.

Exemplos:

ANTES:

Estou visitando Nova York agora e gostaria de ouvir mais sobre grandes
locais. Estou com duas crianças de 3 anos. Para onde devemos ir durante
nossas férias?

DEPOIS DE REESCREVER:

Atuar como guia de viagem para turistas. Descrever lugares incríveis para visitar em Nova York
e Manhattan com uma criança de 3 anos.

Tente usar verbos que descrevam a ação. Aqui estão alguns exemplos:

Agir, Analisar, Categorizar, Classificar, Contrastar, Comparar, Criar, Descrever, Definir,


Avaliar, Extrair, Encontrar, Gerar, Identificar, Listar, Medir, Organizar, Analisar,
Selecionar, Prever, Fornecer, Classificar, Recomendar, Retornar, Recuperar, Reescrever,
Selecionar, Mostrar, Classificar, Resumir, Traduzir, Escrever.

Fevereiro de 2025 55
Machine Translated by Google

Engenharia Rápida

Seja específico sobre a saída

Seja específico quanto ao resultado desejado. Uma instrução concisa pode não orientar o LLM o suficiente
ou pode ser muito genérica. Fornecer detalhes específicos no prompt (por meio de prompts do sistema
ou do contexto) pode ajudar o modelo a se concentrar no que é relevante, melhorando a precisão geral.

Exemplos:

FAZER:

Crie um post de blog de 3 parágrafos sobre os 5 melhores consoles de videogame.


A postagem do blog deve ser informativa e envolvente, e deve ser escrita em um estilo coloquial.

NÃO:

Crie uma postagem de blog sobre consoles de videogame.

Use instruções em vez de restrições

Instruções e restrições são usadas para orientar a saída de um LLM.

• Uma instrução fornece instruções explícitas sobre o formato, estilo ou conteúdo desejado do
resposta. Ela orienta o modelo sobre o que ele deve fazer ou produzir.

• Uma restrição é um conjunto de limitações ou limites na resposta. Ela limita o que o modelo
não deve fazer ou evitar.

Fevereiro de 2025 56
Machine Translated by Google

Engenharia Rápida

Pesquisas crescentes sugerem que focar em instruções positivas ao estimular a motivação pode ser mais eficaz

do que depender fortemente de restrições. Essa abordagem está alinhada com a preferência humana por
instruções positivas em vez de listas do que não fazer.

As instruções comunicam diretamente o resultado desejado, enquanto as restrições podem deixar o modelo em

dúvida sobre o que é permitido. Elas proporcionam flexibilidade e incentivam a criatividade dentro dos limites
definidos, enquanto as restrições podem limitar o potencial do modelo. Além disso, uma lista de restrições pode entrar
em conflito entre si.

Restrições ainda são valiosas, mas em certas situações: para evitar que o modelo gere conteúdo prejudicial ou
tendencioso ou quando um formato ou estilo de saída rigoroso é necessário.

Se possível, use instruções positivas: em vez de dizer ao modelo o que não fazer, diga a ele o que fazer. Isso pode
evitar confusão e melhorar a precisão do resultado.

FAZER:

Crie um post de blog de 1 parágrafo sobre os 5 melhores consoles de videogame.

Discuta apenas o console, a empresa que o fabricou, o ano e o total


vendas.

NÃO:

Crie um post de blog de 1 parágrafo sobre os 5 melhores consoles de videogame.

Não liste nomes de videogames.

Como prática recomendada, comece priorizando instruções, declarando claramente o que você quer que o modelo
faça e use restrições somente quando necessário por questões de segurança, clareza ou requisitos específicos.

Experimente e repita para testar diferentes combinações de instruções e restrições para descobrir o que funciona

melhor para suas tarefas específicas e documente-as.

Fevereiro de 2025 57
Machine Translated by Google

Engenharia Rápida

Controle o comprimento máximo do token

Para controlar o comprimento de uma resposta LLM gerada, você pode definir um limite máximo de tokens na
configuração ou solicitar explicitamente um comprimento específico no seu prompt. Por exemplo:

"Explique a física quântica em uma mensagem do tamanho de um tuíte."

Use variáveis em prompts

Para reutilizar prompts e torná-los mais dinâmicos, use variáveis no prompt, que podem ser alteradas
para diferentes entradas. Por exemplo, como mostrado na Tabela 20, um prompt fornece informações sobre
uma cidade. Em vez de codificar o nome da cidade no prompt, use uma variável. Variáveis podem
economizar tempo e esforço, permitindo que você evite repetições. Se precisar usar a mesma informação
em vários prompts, você pode armazená-la em uma variável e, em seguida, referenciá-la em cada prompt.
Isso faz muito sentido ao integrar prompts em seus próprios aplicativos.

Incitar VARIÁVEIS

{cidade} = "Amsterdã"
INCITAR
Você é um guia de viagem. Conte-me um fato sobre a cidade: {city}

Saída Amsterdã é uma cidade linda, repleta de canais, pontes e ruas estreitas. É um ótimo
lugar para visitar por sua rica história, cultura e vida noturna.

Tabela 20. Usando variáveis em prompts

Fevereiro de 2025 58
Machine Translated by Google

Engenharia Rápida

Experimente formatos de entrada e estilos de escrita

Diferentes modelos, configurações de modelo, formatos de prompt, escolhas de palavras e envios podem gerar

resultados diferentes. Portanto, é importante experimentar atributos de prompt, como o estilo, a escolha de palavras

e o tipo de prompt (zero shot, few shot, prompt do sistema).

Por exemplo, um prompt com o objetivo de gerar um texto sobre o revolucionário console de videogame Sega

Dreamcast pode ser formulado como uma pergunta, uma declaração ou uma instrução, resultando em diferentes

saídas:

• Pergunta: O que foi o Sega Dreamcast e por que ele foi um console tão revolucionário?

• Declaração: O Sega Dreamcast foi um console de videogame de sexta geração lançado pela

Sega em 1999. Ela...

• Instrução: Escreva um único parágrafo que descreva o console Sega Dreamcast e

explica por que foi tão revolucionário.

Para tarefas de classificação com poucos estímulos, misture as classes

De modo geral, a ordem dos seus exemplos de poucas tentativas não deve importar muito. No entanto, ao realizar

tarefas de classificação, certifique-se de misturar as possíveis classes de resposta nos exemplos de poucas

tentativas. Isso ocorre porque, caso contrário, você pode estar se ajustando excessivamente à ordem específica dos

exemplos. Ao misturar as possíveis classes de resposta, você pode garantir que o modelo esteja aprendendo a

identificar as principais características de cada classe, em vez de simplesmente memorizar a ordem dos exemplos.

Isso levará a um desempenho mais robusto e generalizável em dados não vistos.

Fevereiro de 2025 59
Machine Translated by Google

Engenharia Rápida

Uma boa regra prática é começar com 6 exemplos de tacadas e testar a precisão a partir daí.

Adapte-se às atualizações do modelo

É importante que você se mantenha atualizado sobre as mudanças na arquitetura do modelo, os dados

adicionados e os recursos. Experimente versões mais recentes do modelo e ajuste seus prompts para aproveitar

melhor os novos recursos do modelo. Ferramentas como o Vertex AI Studio são ótimas para armazenar, testar e

documentar as várias versões do seu prompt.

Experimente com formatos de saída

Além do formato de entrada do prompt, considere experimentar o formato de saída. Para tarefas não criativas,

como extrair, selecionar, analisar, ordenar, classificar ou categorizar dados, tente retornar a saída em um formato

estruturado, como JSON ou XML.

Há algumas vantagens em retornar objetos JSON a partir de um prompt que extrai dados. Em uma aplicação

real, não preciso criar esse formato JSON manualmente; já posso retornar os dados em ordem ordenada (muito

útil ao trabalhar com objetos de data e hora), mas o mais importante é que, ao solicitar um formato JSON, o modelo é

forçado a criar uma estrutura e limita as alucinações.

Em resumo, os benefícios de usar JSON para sua saída:

• Retorna sempre no mesmo estilo

• Concentre-se nos dados que deseja receber

Fevereiro de 2025 60
Machine Translated by Google

Engenharia Rápida

• Menos chance de alucinações

• Torne-o consciente do relacionamento

• Você obtém tipos de dados

• Você pode classificá-lo

A Tabela 4 na seção de prompts de poucos disparos mostra um exemplo de como retornar uma saída

estruturada.

Reparo JSON

Embora retornar dados no formato JSON ofereça inúmeras vantagens, também apresenta desvantagens. A natureza

estruturada do JSON, embora benéfica para análise e uso em aplicações, requer significativamente mais tokens do

que texto simples, resultando em maior tempo de processamento e custos mais elevados. Além disso, a verbosidade

do JSON pode facilmente consumir toda a janela de saída, tornando-se especialmente problemática quando a geração é

interrompida abruptamente devido a limites de tokens. Esse truncamento frequentemente resulta em JSON inválido, com chaves

ou colchetes de fechamento cruciais ausentes, tornando a saída inutilizável. Felizmente, ferramentas como o json-repair

A biblioteca (disponível no PyPI) pode ser inestimável nessas situações. Esta biblioteca tenta corrigir automaticamente

objetos JSON incompletos ou malformados, tornando-se uma aliada crucial ao trabalhar com JSON gerado por LLM,

especialmente ao lidar com potenciais problemas de truncamento.

Fevereiro de 2025 61
Machine Translated by Google

Engenharia Rápida

Trabalhando com esquemas

Usar JSON estruturado como saída é uma ótima solução, como vimos diversas vezes neste artigo. Mas e quanto

à entrada? Embora JSON seja excelente para estruturar a saída gerada pelo LLM, ele também pode ser

incrivelmente útil para estruturar a entrada fornecida. É aqui que os Esquemas JSON entram em ação. Um Esquema

JSON define a estrutura e os tipos de dados esperados da sua entrada JSON. Ao fornecer um esquema, você

fornece ao LLM um modelo claro dos dados que ele deve esperar, ajudando-o a concentrar sua atenção nas

informações relevantes e reduzindo o risco de interpretação incorreta da entrada. Além disso, os esquemas podem

ajudar a estabelecer relacionamentos entre diferentes partes de dados e até mesmo tornar o LLM "consciente do

tempo", incluindo campos de data ou carimbo de data/hora com formatos específicos.

Aqui está um exemplo simples:

Digamos que você queira usar um LLM para gerar descrições de produtos em um catálogo de e-commerce. Em

vez de apenas fornecer uma descrição textual livre do produto, você pode usar um esquema JSON para definir os

atributos do produto:

{
"tipo": "objeto",
"propriedades": {
"nome": { "tipo": "string", "descrição": "Nome do produto" },
"categoria": { "tipo": "string", "descrição": "Categoria do produto" },
"preço": { "tipo": "número", "formato": "float", "descrição": "Preço do produto" },

"características": {
"tipo": "matriz",
"itens": { "tipo": "string" },
"description": "Principais características do produto"
},
"data_de_lançamento": { "tipo": "string", "formato": "data", "descrição":
"Data de lançamento do produto"
},

Fragmento 5. Definição do esquema de saída estruturado

Fevereiro de 2025 62
Machine Translated by Google

Engenharia Rápida

Em seguida, você pode fornecer os dados reais do produto como um objeto JSON que esteja em conformidade
com este esquema:

{
"nome": "Fones de ouvido sem fio",
"categoria": "Eletrônicos",
"preço": 99,99,
"recursos": ["Cancelamento de ruído", "Bluetooth 5.0", "Bateria com duração de 20 horas"],
"data_de_lançamento": "27/10/2023"
}

Fragmento 6. Saída estruturada do LLM

Ao pré-processar seus dados, em vez de fornecer documentos completos contendo apenas o esquema e os dados, você

fornece ao LLM uma compreensão clara dos atributos do produto, incluindo sua data de lançamento, aumentando muito a

probabilidade de gerar uma descrição precisa e relevante. Essa abordagem de entrada estruturada, que direciona a atenção

do LLM para os campos relevantes, é especialmente valiosa ao trabalhar com grandes volumes de dados ou ao integrar LLMs em

aplicações complexas.

Experimente junto com outros engenheiros de ponta

Se você estiver em uma situação em que precisa tentar criar um bom prompt, talvez seja interessante encontrar várias

pessoas para tentar. Quando todos seguem as melhores práticas (conforme listadas neste capítulo), você verá uma variação

no desempenho entre todas as diferentes tentativas de prompt.

Fevereiro de 2025 63
Machine Translated by Google

Engenharia Rápida

Melhores práticas do CoT

Para o prompt CoT, é necessário colocar a resposta depois do raciocínio porque a geração do
raciocínio altera os tokens que o modelo obtém quando prevê a resposta final.

Com CoT e autoconsistência, você precisa ser capaz de extrair a resposta final do seu prompt, separada do
raciocínio.

Para o prompt CoT, defina a temperatura como 0.

A estimulação da cadeia de pensamento baseia-se na decodificação gulosa, prevendo a próxima palavra


em uma sequência com base na maior probabilidade atribuída pelo modelo de linguagem. De modo geral,
ao usar o raciocínio para chegar à resposta final, é provável que haja apenas uma resposta correta. Portanto,
a temperatura deve sempre ser definida como 0.

Documentar as várias tentativas rápidas

A última dica já foi mencionada neste capítulo, mas não podemos enfatizar o suficiente o quanto ela é importante:
documente suas tentativas rápidas em detalhes para que você possa aprender com o tempo o que deu certo e
o que não deu.

Os resultados dos prompts podem diferir entre modelos, entre configurações de amostragem e até mesmo entre
diferentes versões do mesmo modelo. Além disso, mesmo entre prompts idênticos para o mesmo modelo,
podem ocorrer pequenas diferenças na formatação das frases de saída e na escolha das palavras. (Por exemplo,
como mencionado anteriormente, se dois tokens tiverem a mesma probabilidade prevista, os empates podem
ser desfeitos aleatoriamente. Isso pode impactar os tokens previstos subsequentes.)

Fevereiro de 2025 64
Machine Translated by Google

Engenharia Rápida

Recomendamos a criação de uma Planilha Google com a Tabela 21 como modelo. As vantagens dessa
abordagem são que você tem um registro completo quando inevitavelmente precisa revisitar seu trabalho de
prompting – seja para retomá-lo no futuro (você ficaria surpreso com o quanto pode esquecer depois de
uma breve pausa), para testar o desempenho do prompt em diferentes versões de um modelo e para ajudar a
depurar erros futuros.

Além dos campos nesta tabela, também é útil monitorar a versão do prompt (iteração), um campo para
registrar se o resultado foi OK/NÃO OK/ÀS VEZES OK e um campo para registrar o feedback. Se você
tiver a sorte de usar o Vertex AI Studio, salve seus prompts (usando o mesmo nome e versão listados na
documentação) e monitore o hiperlink para o prompt salvo na tabela. Dessa forma, você estará sempre a um
clique de executar seus prompts novamente.

Ao trabalhar em um sistema de geração aumentada de recuperação , você também deve capturar os


aspectos específicos do sistema RAG que impactam o conteúdo inserido no prompt, incluindo a consulta, as
configurações do bloco, a saída do bloco e outras informações.

Quando sentir que o prompt está quase perfeito, leve-o para a base de código do seu projeto. E na base de
código, salve os prompts em um arquivo separado do código, para facilitar a manutenção. Por fim, o ideal é que
seus prompts façam parte de um sistema operacionalizado e, como engenheiro de prompts, você deve se
basear em testes automatizados e procedimentos de avaliação para entender o quão bem seu prompt se
generaliza para uma tarefa.

A engenharia de prompts é um processo iterativo. Crie e teste diferentes prompts, analise e documente
os resultados. Refine seu prompt com base no desempenho do modelo. Continue experimentando até
atingir o resultado desejado. Ao alterar um modelo ou configuração de modelo, volte e continue
experimentando com os prompts usados anteriormente.

Fevereiro de 2025 65
Machine Translated by Google

Engenharia Rápida

Nome [nome e versão do seu prompt]


Meta [Explicação em uma frase do objetivo desta tentativa]
Modelo [nome e versão do modelo utilizado]

Temperatura [valor entre 0 - 1] Limite de Token [número]

Top-K [número] Top-P [número]

Incitar [Escreva o prompt completo]

Saída [Escreva a saída ou várias saídas]

Tabela 21. Um modelo para documentação de prompts

Resumo
Este whitepaper aborda a engenharia de prompts. Aprendemos diversas técnicas de prompting, como:

• Zero solicitação

• Poucas sugestões de tiro

• Aviso do sistema

• Solicitação de função

• Solicitação contextual

• Solicitação de retrocesso

• Cadeia de pensamento

• Autoconsistência

• Árvore dos pensamentos

Fevereiro de 2025 66
Machine Translated by Google

Engenharia Rápida

• Reagir

Até analisamos maneiras de automatizar seus prompts.

O whitepaper discute os desafios da IA de geração, como os problemas que podem ocorrer quando seus prompts são

insuficientes. Encerramos com as melhores práticas sobre como se tornar um engenheiro de prompts melhor.

Fevereiro de 2025 67
Machine Translated by Google

Engenharia Rápida

Notas de rodapé

1. Google, 2023, Gemini by Google. Disponível em: [Link]

2. Google, 2024, Gemini para o Google Workspace Prompt Guide. Disponível em:
[Link]

3. Google Cloud, 2023, Introdução ao Prompting. Disponível em: https://


[Link]/vertex-ai/generative-ai/docs/learn/prompts/introduction-prompt-design.

4. Google Cloud, 2023, Corpo da Solicitação do Modelo de Texto: Métodos de amostragem Top-P e Top-K. Disponível
em: [Link]

5. Wei, J., et al., 2023, Zero Shot - Modelos de linguagem com ajuste fino são aprendizes de zero shot. Disponível em:
[Link]

6. Google Cloud, 2023, Google Cloud Model Garden. Disponível em: [Link]

7. Brown, T., et al., 2023, Few Shot - Modelos de Linguagem são Aprendizes de Poucas Disparadas. Disponível
em: [Link]

8. Zheng, L., et al., 2023, Dê um passo para trás: evocando o raciocínio por meio da abstração em grandes modelos de linguagem.
Disponível em: [Link]

9. Wei, J., et al., 2023, Chain of Thought Prompting. Disponível em: [Link]

10. Google Cloud Platform, 2023, Chain of Thought e React. Disponível em: [Link]
generative-ai/blob/main/language/prompts/examples/chain_of_thought_react.ipynb .

11. Wang, X., et al., 2023, Autoconsistência melhora o raciocínio da cadeia de pensamento em modelos de linguagem.
Disponível em: [Link]

12. Yao, S., et al., 2023, Árvore de pensamentos: resolução deliberada de problemas com grandes modelos de linguagem.
Disponível em: [Link]

13. Yao, S., et al., 2023, ReAct: Sinergizando Raciocínio e Ação em Modelos de Linguagem. Disponível em: https://
[Link]/pdf/[Link].

14. Google Cloud Platform, 2023, Advance Prompting: Chain of Thought and React. Disponível em:
[Link]
advanced_prompting_training/cot_react.ipynb .

15. Zhou, C., et al., 2023, Engenharia Automática de Prompts - Grandes Modelos de Linguagem são Engenheiros de Prompts de
Nível Humano. Disponível em: [Link]

Fevereiro de 2025 68

Você também pode gostar