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

# Réduire le prompt d’une fonctionnalité de 42 à 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="Réduire le prompt d’une fonctionnalité de 42 à 12 ACU" description="Parcourez une session réelle qui a consommé 3x les ACU prévus sur une tâche de pagination, identifiez trois causes profondes et réécrivez le prompt pour économiser 70 %." prompt="Cette session a utilisé 42 ACU pour ajouter une pagination à GET /api/users alors que j’en attendais environ 12. Analyse où Devin a passé le plus de temps, quelles impasses ou mauvaises approches il a empruntées, et quel contexte manquait dans mon prompt. Donne-moi un prompt révisé et structuré pour éviter ces problèmes." category="Optimisation de Devin" features="Avancé" agent="advanced" intent="analyze" />

<div className="uc-detail-wrapper">
  <Tip>Vous ne souhaitez pas effectuer cette configuration manuellement ? Collez un lien vers cette page dans une session Devin et demandez-lui de tout configurer pour vous.</Tip>

  <Steps>
    <Step title="La session à l’origine de l’investigation">
      Un développeur a demandé à Devin d'ajouter une pagination à un endpoint d'API. Le prompt était court et semblait raisonnable :

      <PromptBlock>
        ```txt Prompt original (vague) theme={null}
        Ajoute une pagination à GET /api/users. Exécute les tests une fois terminé.
        ```
      </PromptBlock>

      La session s'est conclue avec succès — les tests ont réussi, la pull request (PR) semblait correcte. Mais elle a consommé **42 ACU** pour ce qui aurait dû être une tâche de **\~12 ACU**. Trois fois et demie le coût attendu, pour une fonctionnalité qui avait déjà un modèle fonctionnel ailleurs dans la base de code.

      Voici comment comprendre ce qui s'est mal passé et s'assurer que cela ne se reproduise plus.
    </Step>

    <Step title="Premiers pas avec Session Insights">
      Chaque session terminée peut bénéficier d’une analyse gratuite [Session Insights](/fr/product-guides/session-insights). Cliquez sur l’**icône ampoule** dans la barre supérieure de toute session terminée, puis sur **Generate Analysis** pour la déclencher — aucune session Advanced requise.

      Pour cette session de pagination, Session Insights a signalé :

      * **Issue Timeline** — Des marques rouges aux 14ᵉ et 28ᵉ minutes, où Devin a complètement changé d’approche.
      * **Issues Detected** — « Incorrect codebase assumption: built pagination from scratch when `src/utils/paginate.ts` already existed » et « Wrong implementation type: used cursor-based pagination, but tests expect offset-based. »
      * **Improved Prompt** — Une version réécrite avec le contexte manquant renseigné, prête à être copiée.
      * **ACU Usage** — 42 ACU, signalés comme disproportionnés par rapport au périmètre de la tâche.

      Dans de nombreux cas, cela suffit. Copiez le prompt amélioré, démarrez une nouvelle session et comparez. Mais si vous voulez une ventilation complète des coûts phase par phase, allez plus loin.
    </Step>

    <Step title="Obtenez un découpage phase par phase">
      Cliquez sur **Investigate with Devin** dans le panneau Session Insights pour lancer une session Devin préchargée avec l’intégralité de l’historique de la session d’origine. Vous pouvez aussi démarrer manuellement une nouvelle session et décrire ce que vous voulez analyser :

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Analyser la session de pagination theme={null}
        Cette session a utilisé 42 ACUs pour ajouter la pagination à GET /api/users.
        J’en attendais environ 12. Décompose :
        1. Où Devin a-t-il passé un temps anormalement long ?
        2. Quelles impasses ou mauvaises pistes a-t-il explorées ?
        3. Qu’aurait-il pu faire plus efficacement ?
        4. Quel contexte manquait à mon prompt ?
        5. Donne-moi un prompt révisé et structuré qui éviterait ces problèmes.
        ```
      </PromptBlock>

      Devin passe en revue chaque action de la session d’origine et identifie où Devin a passé un temps anormalement long ou adopté des approches inefficaces :

      ```
      Analyse de session | Tâche : Ajouter la pagination à GET /api/users
      Réel : 42 ACUs | Attendu : ~12 ACUs

      Inefficacités identifiées :

      1. Exploration inutile — la phase d'investigation a duré anormalement longtemps
         Devin a exploré 23 fichiers à la recherche d'un utilitaire de pagination.
         Il a construit la pagination de zéro, puis a découvert
         src/utils/paginate.ts et a dû tout refactoriser.
         Correctif : Mentionner les utilitaires existants dans le prompt.

      2. Mauvaise approche — toute l'implémentation a dû être réécrite
         Devin a implémenté une pagination par curseur. Les tests ont échoué
         car l'API utilise une pagination par décalage. Il a réécrit toute
         l'implémentation de zéro.
         Correctif : Spécifier « offset-based » dans le prompt.

      3. Problème d'environnement — échecs d'installation répétés
         npm install a échoué deux fois en raison d'une configuration .npmrc manquante
         pour le registre privé. Devin a réessayé avec des solutions de contournement.
         Correctif : Ajouter la configuration du registre à la configuration du dépôt.
      ```

      Trois causes racines, toutes évitables avec un meilleur prompt ou une meilleure configuration du dépôt.
    </Step>

    <Step title="Réécrire le prompt et comparer">
      Vous pouvez demander à Advanced Devin de démarrer une nouvelle session avec l’invite améliorée directement — inutile de copier-coller. L’analyse produit une invite structurée qui inclut exactement le contexte qui manquait :

      <PromptBlock>
        ```txt Optimized prompt (structured) theme={null}
        Add offset-based pagination to GET /api/users.

        ## Context
        - Use our existing pagination utility at src/utils/paginate.ts
        - Follow the same pattern as GET /api/projects (already paginated)
        - Query params: page (default 1), limit (default 20, max 100)
        - Response shape: { data: User[], meta: { page, limit, total, totalPages } }

        ## Implementation
        1. Add page and limit query params with Zod validation
        2. Use paginate() from src/utils/paginate.ts to wrap the Prisma query
        3. Return the paginated response matching the shape above

        ## Testing
        - Run existing tests with npm test
        - Verify pagination works with 0 results, 1 page, and multiple pages
        - Verify invalid page/limit params return 400

        Do not open a PR until all tests pass.
        ```
      </PromptBlock>

      Comparez les deux invites côte à côte :

      |                       | Original        | Optimized                   |
      | --------------------- | --------------- | --------------------------- |
      | **Pagination type**   | Not specified   | "offset-based"              |
      | **Existing utility**  | Not mentioned   | `src/utils/paginate.ts`     |
      | **Reference pattern** | None            | "same as GET /api/projects" |
      | **Response shape**    | Not specified   | Explicit schema             |
      | **Testing criteria**  | "Run the tests" | Specific edge cases         |
      | **ACU result**        | 42 ACUs         | \~12 ACUs                   |

      L’invite optimisée élimine les trois causes profondes. Devin évite l’exploration de 23 fichiers, choisit le bon type de pagination du premier coup et suit un modèle éprouvé.
    </Step>

    <Step title="Transformez vos constats en correctifs permanents">
      Une simple réécriture de prompt permet d’économiser des ACU pour une session. Transformer ces constats en configuration permanente permet d’économiser des ACU sur toutes les sessions futures.

      **Ajoutez ce contexte récurrent à [Knowledge](/fr/product-guides/knowledge).** L’analyse de la pagination a révélé deux informations dont Devin a régulièrement besoin — le type de pagination et l’emplacement de l’utilitaire. Ajoutez-les comme entrées Knowledge afin que chaque session démarre automatiquement avec ce contexte :

      * *"Tous les endpoints d’API utilisent une pagination basée sur un offset. L’utilitaire partagé se trouve dans `src/utils/paginate.ts`. Voir GET /api/projects pour l’implémentation de référence."*
      * *"Lancez les tests avec `npm test`. Lancez les vérifications de types avec `npm run typecheck`."*

      **Corrigez les problèmes d’espace de travail dans la [configuration d’environnement](/fr/onboard-devin/environment).** Les 3 ACU gaspillés à cause des échecs de `npm install` étaient dus à l’absence d’un fichier de configuration `.npmrc` pour le registre privé. L’ajout de la configuration du registre à votre environnement empêche toutes les sessions futures de rencontrer cette erreur.

      **Analysez par lots pour trouver des schémas récurrents à l’échelle de l’équipe.** Si plusieurs développeurs observent des sessions à forte consommation d’ACU, analysez-en plusieurs à la fois pour trouver les causes profondes communes :

      <PromptBlock agent="advanced" intent="analyze">
        ```txt Analysez par lots les sessions récentes theme={null}
        Voici 5 sessions de cette semaine : [collez les liens des sessions]

        Trouvez les schémas communs de gaspillage d’ACU parmi toutes ces sessions. Quelles
        entrées Knowledge devrais-je ajouter pour éviter ces problèmes lors
        de toutes les sessions futures ?
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
