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

# Déduplication et nettoyage hebdomadaires de Knowledge

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="Déduplication hebdomadaire de Knowledge et nettoyage" description="Planifiez une session Devin le lundi pour trier les nouvelles suggestions, fusionner les entrées en double et résoudre les consignes conflictuelles — afin que votre base de connaissances reste fiable sans intervention manuelle." prompt="Passez en revue toutes les suggestions Knowledge de la semaine écoulée. Fusionnez les doublons, résolvez les conflits entre les entrées, rejetez les suggestions obsolètes et intégrez les nouvelles vraiment pertinentes avec des descriptions de déclencheurs claires. Puis analysez les éléments Knowledge existants pour repérer les entrées faisant référence à des modèles obsolètes." category="Optimisation de Devin" features="Planification, Avancé" type="schedule" agent="advanced" />

<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="Rédigez votre prompt de nettoyage du lundi">
      Au fil de la semaine, à mesure que votre équipe travaille avec Devin, les [suggestions de Knowledge](/fr/product-guides/knowledge) s’accumulent à chaque session : des schémas que Devin a appris, des commandes qui ont fonctionné, des conventions qu’il a découvertes. Le vendredi, vous pouvez vous retrouver avec une douzaine de nouvelles suggestions en attente, en plus d’entrées existantes qui font référence à des fichiers renommés ou à des API obsolètes. Une session Devin récurrente le lundi matin peut traiter tout cela avant que votre équipe ne commence la semaine.

      Votre prompt doit couvrir deux tâches : trier les suggestions de la semaine écoulée et éliminer les doublons dans les entrées existantes. Voici un prompt qui gère les deux :

      <PromptBlock type="schedule" agent="advanced">
        ```txt Monday knowledge deduplication and cleanup theme={null}
        Review and maintain our knowledge base:

        1. Triage pending suggestions from the past week:
           - If new and useful, propose a knowledge entry with a specific trigger description
           - If it overlaps with an existing entry, propose merging into the existing one
           - If outdated or too vague, propose dismissing it
        2. Deduplicate and resolve conflicts in existing entries:
           - Find entries covering the same topic (e.g., two entries about Docker build steps) and propose consolidating into one
           - Identify entries giving contradictory advice (e.g., different pool sizes) and propose a resolution based on recency
           - Flag entries referencing old file paths, deprecated APIs, or removed packages
        ```
      </PromptBlock>

      Pour être notifié à la fin de chaque exécution, configurez un **canal Slack** pour cette planification : Devin y publiera un récapitulatif des modifications proposées afin que votre équipe puisse les examiner sans ouvrir la session.
    </Step>

    <Step title="Créer la programmation du lundi à 8 h">
      Vous avez besoin d'une [session planifiée](/fr/product-guides/scheduled-sessions) pour que Devin ait accès aux outils de gestion de Knowledge.

      1. Accédez à **Schedules** dans la barre latérale gauche de [app.devin.ai](https://app.devin.ai/?utm_source=docs\&utm_medium=use-case-gallery), ou utilisez l'option **Schedule Devin** dans le menu contextuel de la zone de saisie sur la page d'accueil
      2. Cliquez sur **Create schedule** et définissez la fréquence sur **Weekly — every Monday at 8:00 AM** dans le fuseau horaire de votre équipe, afin de disposer d'une semaine complète de suggestions à traiter avant le début de la nouvelle semaine
      3. Collez votre prompt de nettoyage du lundi
      4. Joignez éventuellement un [playbook](/fr/product-guides/creating-playbooks) si vous souhaitez standardiser la façon dont Devin met en forme les nouvelles entrées ou organise les dossiers Knowledge

      Devin envoie des notifications par e-mail au début et à la fin de chaque exécution planifiée. Si votre équipe utilise l'[intégration Slack](/fr/integrations/slack), Devin publiera également le récapitulatif directement dans votre canal. Pour en savoir plus sur les options de planification, consultez le [guide Scheduled Sessions](/fr/product-guides/scheduled-sessions).
    </Step>

    <Step title="Passer en revue et approuver la première exécution du lundi">
      Une fois la première exécution du lundi terminée, ouvrez la session pour examiner ce que Devin propose. **Devin n’applique pas automatiquement les modifications apportées à Knowledge** : il propose des créations, des fusions et des suppressions, et vous approuvez ou rejetez manuellement chacune d’elles. Un récapitulatif type ressemble à ceci :

      ```
      Knowledge Déduplication & Nettoyage — Lundi 10 fév.

      Nouvelles entrées proposées (3) :
        - "Run prisma migrate deploy before integration tests" — de la session #4821
        - "Redis cache TTL for user profiles is 5 minutes" — de la session #4835
        - "Use vitest, not jest, for frontend unit tests" — de la session #4802

      Fusions proposées (2) :
        - Consolider "Docker build steps" + "Container build process" → entrée unique
        - Fusionner deux entrées qui se chevauchent sur les conventions de gestion des erreurs API

      Suppression proposée (1) :
        - "Bundle with webpack" — projet migré vers Vite en décembre

      Suggestions ignorées (4) :
        - Déjà couvert par le Knowledge existant

      Résolution de conflits (1) :
        - Deux entrées étaient en désaccord sur la taille du pool de connexions (5 vs 10)
        - Recommande pool_size=10 d'après la session d'optimisation des performances la plus récente
      ```

      Passez en revue chaque proposition et approuvez-la ou rejetez-la directement depuis la session. Servez-vous des premières exécutions pour vous calibrer — si Devin propose trop souvent des suppressions, ajoutez une note à votre prompt : *"En cas de doute, conservez l’entrée et signalez-la pour examen plutôt que d’en proposer la suppression."*
    </Step>

    <Step title="Allez plus loin grâce à des audits mensuels">
      Une fois que votre nettoyage hebdomadaire du lundi fonctionne sans accroc, utilisez ces consignes dans une session Advanced Devin ponctuelle tous les mois ou tous les deux mois pour une maintenance plus approfondie :

      <PromptBlock agent="advanced">
        ```txt Monthly knowledge staleness audit theme={null}
        Comparez chaque entrée de la base de connaissances à l'état actuel de
        nos dépôts connectés. Signalez les entrées qui font référence à des
        fichiers renommés, des packages supprimés, des API obsolètes ou des
        conventions dépassées. Pour chaque entrée obsolète, proposez une
        version mise à jour en fonction du comportement actuel du code.
        ```
      </PromptBlock>

      <PromptBlock agent="advanced">
        ```txt Reorganize knowledge into folders theme={null}
        Réorganisez la base de connaissances en dossiers : "Back-end",
        "Front-end", "DevOps", "Tests", "Conception d'API". Déplacez les
        entrées existantes dans les bons dossiers et mettez à jour les
        descriptions de déclencheurs pour qu'elles soient plus spécifiques.
        ```
      </PromptBlock>

      **Astuce :** la planification hebdomadaire du lundi gère la déduplication continue et le tri des suggestions. Ces audits plus approfondis — analyse des lacunes de couverture et réorganisation des dossiers — sont des tâches ponctuelles qu'il est préférable d'exécuter manuellement tous les mois ou tous les deux mois.
    </Step>
  </Steps>
</div>
