> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reduzir um Feature Prompt de 42 para 12 ACUs

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Reduza o consumo de um prompt de funcionalidade de 42 para 12 ACUs" description="Acompanhe uma sessão real que consumiu 3x mais ACUs do que o esperado em uma tarefa de paginação, identifique três causas raiz e reescreva o prompt para economizar 70%." prompt="Esta sessão usou 42 ACUs para adicionar paginação a GET /api/users, mas eu esperava cerca de 12. Detalhe onde o Devin gastou mais tempo, quais becos sem saída ou abordagens equivocadas ele tentou e que contexto faltou no meu prompt. Me dê um prompt revisado e estruturado que evite esses problemas." category="Otimização do Devin" features="Avançado" agent="advanced" intent="analyze" />

<div className="uc-detail-wrapper">
  <Tip>Não quer configurar isso manualmente? Cole um link para esta página em uma sessão do Devin e peça que ele configure tudo para você.</Tip>

  <Steps>
    <Step title="A sessão que iniciou a investigação">
      Um desenvolvedor pediu ao Devin para adicionar paginação a um endpoint da API. O prompt era curto e parecia razoável:

      <PromptBlock>
        ```txt Original prompt (vague) theme={null}
        Adicione paginação ao GET /api/users. Execute os testes quando concluir.
        ```
      </PromptBlock>

      A sessão terminou com sucesso — os testes passaram e o PR parecia bom. Mas consumiu **42 ACUs** para o que deveria ter sido uma tarefa de **\~12 ACUs**. Três vezes e meia o custo esperado, em um recurso que já tinha um padrão funcionando em outra parte do código.

      Veja como descobrir o que deu errado e garantir que isso não aconteça novamente.
    </Step>

    <Step title="Comece pelo Session Insights">
      Toda sessão concluída pode ter uma análise gratuita do [Session Insights](/pt-BR/product-guides/session-insights). Clique no **ícone de lâmpada** na barra superior de qualquer sessão finalizada e depois em **Generate Analysis** para acioná-la — não é necessária uma sessão Advanced.

      Para esta sessão de paginação, o Session Insights destacou:

      * **Linha do tempo de problemas** — Marcas vermelhas nos minutos 14 e 28, onde Devin mudou completamente de abordagem.
      * **Problemas detectados** — "Suposição incorreta sobre a codebase: implementou a paginação do zero quando `src/utils/paginate.ts` já existia" e "Tipo de implementação incorreto: usou paginação baseada em cursor, mas os testes esperam paginação baseada em offset."
      * **Prompt aprimorado** — Uma versão reescrita com o contexto ausente preenchido, pronta para copiar.
      * **Uso de ACU** — 42 ACUs, sinalizados como desproporcionais para o escopo da tarefa.

      Para muitas sessões, isso é suficiente. Copie o prompt aprimorado, inicie uma nova sessão e compare. Mas, se você quiser o detalhamento completo de custos por fase, aprofunde-se mais.
    </Step>

    <Step title="Confira um detalhamento fase por fase">
      Clique em **Investigate with Devin** no painel Session Insights para iniciar uma sessão do Devin pré-carregada com todo o histórico da sessão original. Ou inicie manualmente uma nova sessão e descreva o que você quer que seja analisado:

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Analyze the pagination session theme={null}
        Esta sessão usou 42 ACUs para adicionar paginação a GET /api/users.
        Eu esperava ~12. Detalhe:
        1. Onde o Devin demorou um tempo anormalmente longo?
        2. Quais becos sem saída ou abordagens erradas ele tentou?
        3. O que ele poderia ter feito de forma mais eficiente?
        4. Qual contexto estava faltando no meu prompt?
        5. Dê-me um prompt revisado e estruturado que evite esses problemas.
        ```
      </PromptBlock>

      O Devin analisa cada ação da sessão original e identifica onde o tempo foi gasto de forma ineficiente:

      ```
      Análise da sessão | Tarefa: Adicionar paginação ao GET /api/users
      Real: 42 ACUs | Esperado: ~12 ACUs

      Ineficiências identificadas:

      1. Exploração desnecessária — fase de investigação levou tempo anormalmente longo
         Devin explorou 23 arquivos em busca de um auxiliar de paginação.
         Construiu a paginação do zero e, em seguida, descobriu
         src/utils/paginate.ts e teve que refatorar tudo.
         Correção: Mencione utilitários existentes no prompt.

      2. Abordagem incorreta — toda a implementação teve que ser reescrita
         Devin implementou paginação baseada em cursor. Os testes falharam
         porque a API usa paginação baseada em offset. Ele reescreveu toda a
         implementação do zero.
         Correção: Especifique "offset-based" no prompt.

      3. Problema de ambiente — falhas repetidas de instalação
         npm install falhou duas vezes devido a uma configuração .npmrc ausente
         para o registro privado. Devin tentou novamente usando soluções alternativas.
         Correção: Adicione a configuração do registro ao setup do repositório.
      ```

      Três causas raiz, todas evitáveis com um prompt melhor ou uma configuração de repositório melhor.
    </Step>

    <Step title="Reformule o prompt e compare">
      Você pode pedir ao Devin para iniciar uma nova sessão com o prompt aprimorado diretamente — sem precisar copiar e colar. A análise produz um prompt estruturado que inclui exatamente o contexto que estava faltando:

      <PromptBlock>
        ```txt Optimized prompt (structured) theme={null}
        Adicione paginação baseada em offset ao GET /api/users.

        ## Context
        - Use nosso utilitário de paginação existente em src/utils/paginate.ts
        - Siga o mesmo padrão de GET /api/projects (já paginado)
        - Query params: page (padrão 1), limit (padrão 20, máx. 100)
        - Formato da resposta: { data: User[], meta: { page, limit, total, totalPages } }

        ## Implementation
        1. Adicione os query params page e limit com validação em Zod
        2. Use paginate() de src/utils/paginate.ts para envolver a query do Prisma
        3. Retorne a resposta paginada no formato acima

        ## Testing
        - Execute os testes existentes com npm test
        - Verifique se a paginação funciona com 0 resultados, 1 página e múltiplas páginas
        - Verifique se page/limit inválidos retornam 400

        Não abra um PR até que todos os testes sejam aprovados.
        ```
      </PromptBlock>

      Compare os dois prompts lado a lado:

      |                       | Original         | Otimizado                   |
      | --------------------- | ---------------- | --------------------------- |
      | **Pagination type**   | Não especificado | "offset-based"              |
      | **Existing utility**  | Não mencionado   | `src/utils/paginate.ts`     |
      | **Reference pattern** | Nenhum           | "same as GET /api/projects" |
      | **Response shape**    | Não especificado | Esquema explícito           |
      | **Testing criteria**  | "Run the tests"  | Casos de borda específicos  |
      | **ACU result**        | 42 ACUs          | \~12 ACUs                   |

      O prompt otimizado elimina todas as três causas raiz. O Devin ignora a exploração de 23 arquivos, escolhe o tipo de paginação correto na primeira tentativa e segue um padrão já comprovado.
    </Step>

    <Step title="Transforme os resultados em correções permanentes">
      Uma única reescrita de prompt economiza ACUs em uma sessão. Transformar as descobertas em configuração permanente economiza ACUs em todas as sessões futuras.

      **Adicione contexto recorrente no [Knowledge](/pt-BR/product-guides/knowledge).** A análise de paginação revelou dois fatos de que o Devin precisa repetidamente — o tipo de paginação e a localização do utilitário compartilhado. Adicione-os como entradas em Knowledge para que toda sessão já comece automaticamente com esse contexto:

      * *"Todos os endpoints da API usam paginação baseada em offset. O utilitário compartilhado está em `src/utils/paginate.ts`. Confira GET /api/projects para a implementação de referência."*
      * *"Execute os testes com `npm test`. Execute a verificação de tipos com `npm run typecheck`."*

      **Corrija problemas de workspace na [configuração de ambiente](/pt-BR/onboard-devin/environment).** As 3 ACUs desperdiçadas em falhas de `npm install` foram causadas por uma configuração `.npmrc` ausente para o registro privado. Adicionar a configuração do registro ao seu ambiente impede que toda sessão futura encontre esse erro novamente.

      **Faça análise em lote para encontrar padrões em todo o time.** Se vários desenvolvedores estiverem tendo sessões com alto consumo de ACU, analise várias de uma vez para encontrar causas raiz compartilhadas:

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Analisar em lote sessões recentes theme={null}
        Aqui estão 5 sessões desta semana: [cole os links das sessões]

        Encontre padrões comuns de desperdício de ACU entre todas elas.
        Que entradas de Knowledge devo adicionar para evitar esses
        problemas em todas as sessões futuras?
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
