Voce ja sabe o que e no, aresta, estado, verificador e teto de custo β isso foi o curso inteiro. Este modulo nao ensina conceito novo. Ele empacota tudo em seis prompts copy-run, cada um resolvendo um pedaco concreto do trabalho de graph engineering. Use a tabela abaixo pra achar rapido qual prompt serve pro que voce tem em maos agora.
| Prompt | Use quando | O que devolve |
|---|---|---|
| 1. Desenhe o grafo | Voce tem um processo descrito em texto corrido, sem estrutura | JSON com nos, arestas e perguntas de ambiguidade |
| 2. Grafo vira script | Voce ja tem um grafo.json e quer o codigo que executa | Script que percorre o grafo com teto de custo e de voltas |
| 3. Audite o grafo | Voce quer achar defeitos antes de rodar em producao | Lista dos cinco defeitos estruturais, um a um |
| 4. Colisao entre loops | Voce tem varios objetivos automatizados rodando ao mesmo tempo | Pares em tensao, metrica-efeito-colateral, restricao faltando |
| 5. State schema | Dois nos vizinhos e voce nao sabe o que passa entre eles | Contrato da aresta em JSON Schema, com o que NAO deve passar |
| 6. Verificador primeiro | Um agente que entrega coisa ruim e voce nao sabe medir isso | Verificador + caso ruim de teste, so depois o prompt do agente |
O que olhar: a caixa do topo so tem cinco saidas β voce sempre parte do que voce TEM (texto, grafo.json, lista de objetivos, dois nos, ou uma saida ruim) e nao do que voce quer produzir. Repare tambem que dois ramos (grafo.json) levam a prompts diferentes: um audita, o outro executa. Sao etapas distintas.
Conteudo detalhado
πΊοΈ Desenhe o grafo do meu processo
Objetivo: voce descreve um processo do seu jeito, em texto corrido, do jeito que explicaria pra um colega novo. O agente devolve a primeira versao estruturada β nos, arestas e uma lista do que ficou ambiguo. Use este quando ainda nao existe grafo nenhum, so a bagunca na sua cabeca.
Voce e um engenheiro de grafos. Vou colar a descricao de um processo em texto
corrido. Sua tarefa:
1. Identifique os NOS β cada unidade de trabalho, decisao ou papel envolvido.
2. Identifique as ARESTAS β o que liga um no a outro, e QUANDO essa aresta e
seguida (nunca escreva uma aresta sem a condicao "quando").
3. Devolva SOMENTE um JSON no formato abaixo, sem comentario fora do JSON:
{
"nos": [
{ "id": "<nome-curto>", "papel": "<o que esse no faz>",
"modelo_sugerido": "<ex: gpt-4o-mini, claude-haiku, humano>",
"ferramentas": ["<ferramenta 1>", "<ferramenta 2>"] }
],
"arestas": [
{ "de": "<id do no de origem>", "para": "<id do no de destino>",
"quando": "<condicao exata, nunca 'sempre' se houver alternativa>",
"passa": "<o que atravessa essa aresta β que dado>" }
],
"perguntas": [
"<o que ficou ambiguo na minha descricao e precisa de resposta minha>"
]
}
Processo: <cole aqui a descricao em texto corrido do seu processo>
arestas e olhe o valor de
quando em cada uma. Se TODAS disserem "sempre", o agente desenhou um pipeline
linear, nao o seu processo real β quase todo processo com mais de tres passos tem pelo menos uma decisao.
Peca de volta: "identifique onde ha decisao real β onde o caminho muda dependendo de alguma condicao".
π Novo aqui? Duas palavras antes de seguir
- Entrada orfa: uma situacao possivel que nenhuma aresta cobre β o fluxo chega ali e nao sabe pra onde ir. Aparece de novo no prompt 3.
- Cardinalidade: quantas coisas precisam chegar (ou sair) de um no pra ele seguir em frente β "todas", "qualquer uma" ou "pelo menos N". Aparece no prompt 3.
Conceitos-chave
Texto corrido, sem estrutura
JSON: nos, arestas, perguntas
Todo "quando" = sempre
Vira grafo.json pro prompt 2/3
βοΈ Transforme o grafo em script
Objetivo: este e o segundo passo do metodo de duas etapas β primeiro voce
desenha o grafo (prompt 1), depois voce gera o codigo que o executa de verdade. Use este quando ja tem um
grafo.json aprovado e quer sair do papel pra rodar.
Aqui esta o grafo.json de um processo (colado abaixo). Escreva um script em <Python ou Node, escolha> que: 1. Carregue esse grafo.json. 2. Percorra os nos a partir de "<no-inicial>", respeitando a condicao "quando" de cada aresta antes de segui-la. 3. Para cada no, execute a acao descrita em "papel" (pode ser uma chamada de LLM, uma funcao, ou um print de placeholder se ainda nao tiver a implementacao real). 4. Aplique um TETO DE CUSTO total (em <tokens ou dolares>, defina um valor) β se ultrapassar, pare e reporte onde parou. 5. Para toda aresta de volta (uma aresta cujo destino ja foi visitado antes no mesmo caminho), exija um campo "max_voltas" no grafo.json e FALHE explicitamente se esse campo nao existir naquela aresta. 6. Logue cada no executado com: nome do no, duracao em ms, custo estimado, timestamp. grafo.json: <cole aqui o conteudo do seu grafo.json>
max_voltas
de uma unica aresta de volta e rode o script de novo. Ele TEM que falhar de proposito, com uma mensagem clara
apontando qual aresta esta sem teto. Se ele rodar do mesmo jeito (ou entrar num loop silencioso), o script nao
implementou a trava β peca de volta explicitamente essa checagem.
π‘ Dica pratica
Peca sempre o log estruturado (nome, duracao, custo, timestamp) mesmo em rascunho. E o embriao da sua observabilidade (modulo 4.3) β sem log por no, voce nunca vai saber qual passo comeu o orcamento quando o grafo crescer.
Conceitos-chave
Desenhe, depois execute
Para e reporta ao estourar
Obrigatorio em aresta de retorno
Duracao, custo, timestamp
π Audite meu grafo
Objetivo: procura cinco defeitos estruturais especificos num grafo.json antes dele ir pra producao. Use este antes de rodar qualquer coisa com custo real β e antes de mostrar o grafo pro time como se estivesse pronto.
Audite o grafo.json abaixo. Procure especificamente estes cinco defeitos β nao pule nenhum, mesmo que o grafo pareca limpo: 1. CICLO SEM TETO DE VOLTAS β alguma aresta de volta (destino ja visitado) sem campo "max_voltas"? 2. ARESTA CONDICIONAL SEM "QUANDO" β alguma aresta com valor generico tipo "sempre" ou "quando" ausente, saindo de um no que tem mais de uma aresta de saida? 3. ENTRADA ORFA β existe alguma combinacao de condicoes que NENHUMA aresta cobre? (ex: no de decisao com "aprovado"/"reprovado" mas falta o caso "sem resposta") 4. JUNCAO SEM CHECAGEM DE CARDINALIDADE β algum no recebe de multiplas arestas (fan-in) sem dizer se precisa de TODAS chegarem, QUALQUER UMA, ou um numero minimo? 5. NO SEM TETO DE CUSTO β algum no (principalmente os que chamam LLM ou ferramenta externa) sem limite de custo/tokens/tempo definido? Para cada defeito encontrado, aponte: o id do no/aresta exato, por que e um problema, e uma correcao sugerida em uma frase. Se nao encontrar nenhum defeito de um tipo, diga explicitamente "nao encontrado" para aquele tipo β nao pule a categoria. grafo.json: <cole aqui o conteudo do seu grafo.json>
β Auditoria bem usada
- βRodar antes de cada mudanca grande no grafo, nao so na primeira versao
- βTestar o prompt contra um grafo quebrado de proposito, periodicamente
- βGuardar o "nao encontrado" explicito β vira historico de que foi checado
β Auditoria mal usada
- βRodar uma vez e nunca mais, mesmo com o grafo mudando toda semana
- βAceitar "parece tudo certo" sem passar pelas cinco categorias
- βRodar so no proprio grafo β nunca testar contra um caso quebrado conhecido
Conceitos-chave
Ciclo, condicao, orfa, cardinalidade, custo
Caso que nenhuma aresta cobre
Todas Γ qualquer Γ N minimo
Contra grafo quebrado de proposito
π₯ Ache a colisao entre loops
Objetivo: voce lista os objetivos automatizados (loops ou agentes) que ja rodam na sua operacao, e o agente aponta quais se pressionam mutuamente, qual metrica de um e efeito colateral do outro, e qual restricao entre metricas esta faltando. Use este quando tem mais de um loop rodando ao mesmo tempo β o cenario do modulo 2.3, so que aplicado ao seu caso.
Aqui esta a lista de objetivos automatizados (loops ou agentes) que rodam na minha operacao hoje: 1. <objetivo 1 β ex: "loop de suporte: fecha ticket em menos de 2h"> 2. <objetivo 2 β ex: "loop de vendas: maximiza conversao do funil"> 3. <objetivo 3 β ex: "loop de qualidade: reduz taxa de reembolso"> Para cada PAR desses objetivos, responda: 1. Eles se PRESSIONAM MUTUAMENTE? Ou seja, otimizar um piora o outro? 2. Existe alguma METRICA que e efeito colateral direto de outro loop? (ex: "tempo de fechamento" cai, mas "reincidencia" sobe) 3. Que RESTRICAO entre metricas esta faltando no meu sistema hoje? (ex: "fechar rapido, MAS reincidencia abaixo de X%") Nao me diga que nao ha colisao nenhuma sem antes checar cada par explicitamente, um por um, e escrever o resultado do par.
β οΈ O agente concorda com voce por padrao
Este e o motivo de todo "como verificar" existir neste modulo: um modelo de linguagem tende a validar a sua pergunta, nao a desafiar. Se voce perguntar "existe colisao?" de um jeito que soa como voce ja esperando "nao", e provavel que ele responda "nao" mesmo quando existe. Formule o prompt pra forcar a checagem explicita β como fizemos aqui, pedindo par a par β em vez de aceitar um veredito de bloco so.
Conceitos-chave
Checagem explicita, nao veredito geral
Metrica de um que reage ao outro
O "mas" que falta no seu sistema
Sempre ha tensao em algum par
π Escreva o state schema entre dois nos
Objetivo: dado dois nos vizinhos, este prompt define o contrato exato da aresta entre eles β nome dos campos, formato, o que e obrigatorio, e o que explicitamente NAO deve passar. Use este quando dois nos "nao se entendem" β um manda dado demais, dado de menos, ou no formato errado.
π Novo aqui? Uma palavra antes de seguir
- State schema: a definicao formal do que passa numa aresta β como um contrato entre dois nos, dizendo exatamente quais campos, em que formato, e o que fica de fora. Sem isso, cada no interpreta o dado de um jeito diferente.
Dados estes dois nos vizinhos do meu grafo: NO A (origem): <nome e o que ele faz> NO B (destino): <nome e o que ele faz> Escreva o STATE SCHEMA da aresta entre eles β o contrato exato do que atravessa essa ligacao. Devolva: 1. CAMPOS β nome de cada campo que passa de A para B. 2. FORMATO β tipo de cada campo (string, numero, enum, lista, objeto) e um exemplo de valor. 3. OBRIGATORIO x OPCIONAL β quais campos B nao funciona sem, quais sao so contexto extra. 4. O QUE EXPLICITAMENTE NAO DEVE PASSAR β liste pelo menos 3 coisas que A NAO deve mandar pra B (ex: raciocinio bruto do modelo, saida crua de ferramenta, historico completo da conversa) e por que cada uma incharia ou confundiria o no B. Devolva em JSON Schema simplificado, pronto pra colar como validacao.
Conceitos-chave
O que atravessa, formato e obrigatoriedade
Sempre ha algo β nunca lista vazia
Formato pronto pra validar em codigo
Um par por vez, nao o grafo inteiro
β Escreva o verificador antes do prompt
Objetivo: inverte a ordem normal de trabalho. Em vez de escrever o prompt do agente e so depois pensar em como avaliar a saida, voce escreve primeiro como vai saber que deu certo β com um caso ruim de teste incluido β e so entao pede o prompt do agente. Use este quando um agente ja esta entregando coisa ruim e voce percebe que nunca definiu, de verdade, o que "bom" significa ali.
π Novo aqui? Uma palavra antes de seguir
- Caso ruim de teste: um exemplo de saida que parece boa a primeira vista mas esta errada β o teste de verdade de um verificador nao e aprovar o caso bom, e reprovar o caso que engana.
Antes de escrever o prompt do agente, quero o VERIFICADOR primeiro. O no vai fazer: <descreva a tarefa do no, ex: "resumir um ticket de suporte em ate 3 frases">. 1. Escreva uma funcao ou checklist de verificacao que recebe a SAIDA do no e devolve aprovado/reprovado com o motivo. 2. Inclua pelo menos um CASO RUIM DE TESTE β um exemplo de saida que PARECE boa a primeira vista mas esta errada (ex: resumo de 3 frases que omite a informacao mais importante do ticket), e o verificador tem que reprovar esse caso. 3. SO DEPOIS escreva o prompt do agente que gera essa saida. Devolva nesta ordem: (a) verificador, (b) caso ruim de teste + resultado esperado do verificador nesse caso, (c) prompt do agente.
β οΈ Este e o prompt mais importante da biblioteca
Todos os "como verificar" deste modulo existem porque um agente tende a concordar com voce quando o prompt e frouxo β e um verificador escrito depois do agente, sem caso ruim, herda essa mesma frouxidao. Escrever o verificador primeiro, com um caso que engana, e o unico jeito de saber se ele esta realmente medindo algo ou so validando o que voce ja esperava ver.
Checagem rapida (nao bloqueia nada): voce escreveu um verificador, testou contra o caso ruim, e ele aprovou o caso ruim mesmo assim. O que isso significa?
Conceitos-chave
Verificador antes do prompt
Parece bom, esta errado
Aprova o caso ruim = falha
O loop nao passa do verificador
π Resumo do Modulo
π― Fim do curso β o que fica
Um loop ja e um grafo β um grafo cujo caminho volta a um no anterior. Voce nao gradua de loops pra grafos; voce compoe loops em grafos quando um loop deixa de bastar β e paga isso em prompts, state schema e modos de falha novos. Acerte o loop primeiro. So depois vale a pena compor.
E o recado final do curso: quem sabe o que e no e aresta absorve o proximo termo da moda em cinco minutos β le o anuncio, encontra o no e a aresta debaixo do nome novo, e segue trabalhando. Quem nao sabe larga tudo pra estudar de novo toda semana. IA e alavanca do que voce ja sabe β nao substituto por saber a base.