> ## 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.

# Ridurre un prompt di funzionalità da 42 a 12 ACU

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="Ridurre il prompt di una funzionalità da 42 a 12 ACU" description="Esamina una sessione reale che ha consumato 3 volte gli ACU previsti per un'attività di paginazione, individua tre cause principali e riscrivi il prompt per risparmiare il 70%." prompt="Questa sessione ha usato 42 ACU per aggiungere la paginazione a GET /api/users, ma me ne aspettavo circa 12. Analizza in dettaglio dove Devin ha trascorso più tempo, quali vicoli ciechi o approcci sbagliati ha provato e quale contesto mancava nel mio prompt. Dammi un prompt rivisto e strutturato per evitare questi problemi." category="Ottimizzazione di Devin" features="Advanced" agent="advanced" intent="analyze" />

<div className="uc-detail-wrapper">
  <Tip>Non vuoi configurarlo manualmente? Incolla un collegamento a questa pagina in una sessione Devin e chiedigli di impostare tutto per te.</Tip>

  <Steps>
    <Step title="La sessione che ha fatto scattare l’indagine">
      Uno sviluppatore ha chiesto a Devin di aggiungere la paginazione a un endpoint API. Il prompt era breve e sembrava sensato:

      <PromptBlock>
        ```txt Original prompt (vague) theme={null}
        Add pagination to GET /api/users. Run the tests when done.
        ```
      </PromptBlock>

      La sessione si è conclusa con successo — i test sono passati, la PR sembrava a posto. Ma ha consumato **42 ACU** per quella che sarebbe dovuta essere un’attività da **\~12 ACU**. Un costo tre volte e mezzo superiore al previsto, per una funzionalità per cui esisteva già un pattern funzionante altrove nel codebase.

      Ecco come capire cosa è andato storto e assicurarsi che non accada di nuovo.
    </Step>

    <Step title="Inizia con Session Insights">
      Ogni sessione completata può avere un'analisi gratuita [Session Insights](/it/product-guides/session-insights). Fai clic sull'**icona della lampadina** nella barra in alto di qualsiasi sessione terminata e poi su **Generate Analysis** per avviarla — non è richiesta una sessione Advanced.

      Per questa sessione di paginazione, Session Insights ha evidenziato:

      * **Issue Timeline** — Segni rossi ai minuti 14 e 28, in cui Devin ha cambiato completamente approccio.
      * **Issues Detected** — "Ipotesi errata sulla codebase: ha implementato la paginazione da zero quando `src/utils/paginate.ts` esisteva già" e "Tipo di implementazione errato: ha usato la paginazione basata su cursore, ma i test richiedono quella basata su offset."
      * **Improved Prompt** — Una versione riscritta con il contesto mancante integrato, pronta da copiare.
      * **ACU Usage** — 42 ACU, evidenziati come sproporzionati rispetto all'ambito dell'attività.

      Per molte sessioni, questo è sufficiente. Copia il prompt migliorato, avvia una nuova sessione e confronta. Ma se vuoi il dettaglio completo dei costi per fase, approfondisci ulteriormente.
    </Step>

    <Step title="Ottieni una suddivisione fase per fase">
      Fai clic su **Investigate with Devin** nel pannello Session Insights per avviare una sessione Devin precaricata con l'intera cronologia della sessione originale. Oppure avvia manualmente una nuova sessione e descrivi che cosa vuoi analizzare:

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Analyze the pagination session theme={null}
        This session used 42 ACUs to add pagination to GET /api/users.
        I expected ~12. Break down:
        1. Where did Devin spend an abnormally long time?
        2. What dead ends or wrong approaches did it try?
        3. What could it have done more efficiently?
        4. What context was missing from my prompt?
        5. Give me a revised, structured prompt that would avoid these issues.
        ```
      </PromptBlock>

      Devin esamina ogni azione della sessione originale e individua i punti in cui il tempo è stato impiegato in modo inefficiente:

      ```
      Analisi della sessione | Attività: Aggiungere la paginazione a GET /api/users
      Effettivo: 42 ACU | Previsto: ~12 ACU

      Inefficienze identificate:

      1. Esplorazione non necessaria — la fase di analisi ha richiesto un tempo anomalo
         Devin ha esaminato 23 file alla ricerca di un helper per la paginazione.
         Ha implementato la paginazione da zero, poi ha scoperto
         src/utils/paginate.ts e ha dovuto effettuare il refactoring di tutto.
         Soluzione: Indicare le utility esistenti nel prompt.

      2. Approccio errato — l'intera implementazione ha dovuto essere riscritta
         Devin ha implementato la paginazione basata su cursore. I test sono falliti
         perché l'API utilizza quella basata su offset. Ha riscritto l'intera
         implementazione da zero.
         Soluzione: Specificare "offset-based" nel prompt.

      3. Problema di ambiente — installazioni fallite ripetutamente
         npm install è fallito due volte a causa di una configurazione .npmrc mancante
         per il registro privato. Devin ha riprovato con soluzioni alternative.
         Soluzione: Aggiungere la configurazione del registro alla configurazione del repository.
      ```

      Tre cause principali, tutte evitabili con un prompt migliore o una configurazione migliore del repository.
    </Step>

    <Step title="Riscrivi il prompt e confrontalo">
      Puoi chiedere a Devin di avviare direttamente una nuova sessione con il prompt migliorato, senza bisogno di fare copia-incolla. L’analisi produce un prompt strutturato che include esattamente il contesto che mancava:

      <PromptBlock>
        ```txt Optimized prompt (structured) theme={null}
        Aggiungi una paginazione basata su offset a GET /api/users.

        ## Context
        - Usa la nostra utility di paginazione esistente in src/utils/paginate.ts
        - Segui lo stesso pattern di GET /api/projects (già paginato)
        - Query params: page (default 1), limit (default 20, max 100)
        - Response shape: { data: User[], meta: { page, limit, total, totalPages } }

        ## Implementation
        1. Aggiungi i query params page e limit con validazione Zod
        2. Usa paginate() da src/utils/paginate.ts per incapsulare la query Prisma
        3. Restituisci una risposta paginata che corrisponda alla struttura sopra

        ## Testing
        - Esegui i test esistenti con npm test
        - Verifica che la paginazione funzioni con 0 risultati, 1 pagina e più pagine
        - Verifica che parametri page/limit non validi restituiscano 400

        Non aprire una PR finché tutti i test non saranno superati.
        ```
      </PromptBlock>

      Confronta i due prompt affiancati:

      |                       | Originale       | Ottimizzato                 |
      | --------------------- | --------------- | --------------------------- |
      | **Pagination type**   | Non specificato | "offset-based"              |
      | **Existing utility**  | Non menzionata  | `src/utils/paginate.ts`     |
      | **Reference pattern** | Nessuno         | "same as GET /api/projects" |
      | **Response shape**    | Non specificata | Schema esplicito            |
      | **Testing criteria**  | "Run the tests" | Casi limite specifici       |
      | **ACU result**        | 42 ACUs         | \~12 ACUs                   |

      Il prompt ottimizzato elimina tutte e tre le cause alla radice. Devin salta l'esplorazione di 23 file, sceglie il tipo di paginazione corretto al primo tentativo e segue un pattern collaudato.
    </Step>

    <Step title="Trasforma i risultati in correzioni permanenti">
      Una singola riscrittura del prompt fa risparmiare ACU in una sessione. Trasformare questi risultati in una configurazione permanente fa risparmiare ACU in tutte le sessioni future.

      **Aggiungi contesto ricorrente a [Knowledge](/it/product-guides/knowledge).** L'analisi della paginazione ha evidenziato due informazioni di cui Devin ha bisogno in modo ricorrente: il tipo di paginazione e la posizione dell'utility. Aggiungile come voci di Knowledge in modo che ogni sessione inizi automaticamente con quel contesto:

      * *"Tutti gli endpoint API usano la paginazione basata su offset. L'utility condivisa si trova in `src/utils/paginate.ts`. Vedi GET /api/projects per l'implementazione di riferimento."*
      * *"Esegui i test con `npm test`. Esegui i controlli di tipo con `npm run typecheck`."*

      **Correggi i problemi del workspace in [configurazione dell'ambiente](/it/onboard-devin/environment).** I 3 ACU sprecati per gli errori di `npm install` erano causati da una configurazione `.npmrc` mancante per il registry privato. Aggiungere la configurazione del registry al tuo ambiente evita che le sessioni future incontrino quell'errore.

      **Analizza in batch per trovare schemi ricorrenti a livello di team.** Se più sviluppatori registrano sessioni con uso elevato di ACU, analizzane diverse insieme per identificare cause radice comuni:

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Batch-analyze recent sessions theme={null}
        Ecco 5 sessioni di questa settimana: [incolla i link delle sessioni]

        Trova schemi comuni di spreco di ACU tra tutte. Quali
        voci di Knowledge dovrei aggiungere per prevenire questi problemi
        in tutte le sessioni future?
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
