Accéder au contenu principal

Compétences internes de Claude : Modules personnalisés qui étendent Claude

Découvrez comment Claude Skills permet aux utilisateurs et aux développeurs de personnaliser ces modules portables, composables et exécutables afin d'améliorer la productivité dans les applications Claude et les intégrations API.
Actualisé 10 nov. 2025  · 8 min de lecture

Anthropic a récemment présenté Claude Skills, un module réutilisable et spécifique à une tâche qui permet à Claude de ne charger que l'expertise requise pour une tâche donnée. Au lieu d'utiliser des invites longues et répétitives, Skills regroupe des instructions, des scripts et des ressources afin que Claude puisse produire des résultats cohérents et alignés sur la marque dans l'ensemble de l'application. application Claude, Claude Codeet l'API.

Dans ce tutoriel, nous allons créer un « générateur automatique de factures » qui transforme une feuille de temps Excel en une facture prête à être envoyée au client (DOCX/PDF). Au cours de cette formation, vous apprendrez à :

  • Veuillez créer une page d'accueil minimale ( SKILL.md ) et télécharger une compétence (Skill) avec les ressources associées.
  • Pré-traitez les données telles que les feuilles de temps à l'aide d ' pandas z-les en une charge utile JSON prévisible.
  • Veuillez invoquer la compétence via l'API à l'aide d'une boucle d'utilisation d'outils sécurisée (balises bash/éditeur de texte).
  • Veuillez capturer les artefacts générés par Claude (PDF/DOCX)

À la fin, vous disposerez d'une compétence portable que vous pourrez réutiliser partout dans l'écosystème Claude.

Quelles sont les compétences de Claude ?

Les compétences Claude sont des modules de tâches autonomes qui comprennent un fichier d'instructions ( SKILL.md ), des scripts facultatifs et des ressources complémentaires. Lorsqu'une tâche correspond à l'objectif d'une compétence, Claude charge les éléments minimaux de cette compétence afin d'exécuter la tâche de manière efficace. Une compétence peut être considérée comme un ensemble de connaissances spécialisées que vous pouvez versionner, partager et gérer au sein de votre organisation.

Principales caractéristiques des compétences de Claude

Les fonctionnalités principales de Claude Skill expliquent comment elles restent rapides, réutilisables et fiables dans l'ensemble de l'écosystème Claude. Parmi les principales fonctionnalités, on peut citer :

  • Modulaire : Vous pouvez combiner plusieurs compétences pour exécuter des flux de travail en plusieurs étapes, tels que le nettoyage des données, l'analyse et la génération de rapports.
  • Portable : Les compétences suivent un format commun, de sorte que la même compétence fonctionne de manière cohérente dans tout l'écosystème Claude.
  • Efficace : Claude ne charge que les composants minimaux nécessaires à la tâche à accomplir, ce qui améliore à la fois la vitesse et la précision.
  • Code exécutable : Les compétences peuvent exécuter du code dans un environnement sécurisé, permettant des actions déterministes telles que la création de fichiers, l'analyse syntaxique et l'analyse.

Lorsque vous demandez à Claude de « créer un budget Excel avec des synthèses mensuelles », il évalue votre demande, analyse les compétences disponibles et n'active que les éléments pertinents. L'activation est visible dans la vue « Raisonnement » de l'application Claude. Les compétences étant des composants versionnés, les équipes peuvent déployer des mises à jour sans modifier les invites partout.

Utilisation des compétences Claude dans l'écosystème Claude

Que vous discutiez dans les applications Claude, que vous programmiez dans Claude Codeou automatisez des flux de travail via l'API développeur, la même compétence peut être versionnée une seule fois, gérée de manière centralisée et invoquée automatiquement lorsque la tâche correspond à son objectif. Cela garantit une qualité constante et des délais d'exécution plus courts. Ainsi, une compétence utilisable partout.

Dans ce tutoriel, nous allons appliquer une compétence « Générateur automatique de factures » à l'application Claude et à l'API afin d'analyser un fichier Excel et de générer une facture prête à être envoyée.

Claude App

Les compétences Claude sont disponibles dans votre application Claude et s'activent automatiquement lorsqu'une demande correspond à leur objectif. Vous les activez une fois dans les paramètres, puis vous décrivez simplement le résultat souhaité. Claude charge la compétence appropriée et l'affiche dans la vue de raisonnement.

Skill.md et d'autres ressources

Source : Blog de Claude

Pour commencer :

  • Veuillez vous connecter ou vous inscrire à l'aide de votre compte Google, puis accédez aux paramètres.
  • Sous Capacités, veuillez rechercher l'onglet Compétences et télécharger un fichier de compétences (généralement un fichier SKILL.md) pouvant être utilisé dans n'importe quel chat.

Compétences habilitantes

Source : Blog de Claude

Remarque : Cette fonctionnalité est réservée aux utilisateurs Pro, Max, Team et Enterprise.

Vous pouvez également trouver une liste de compétences telles que l'art algorithmique, la création d'artefacts, les directives de marque, la conception de canevas, la communication interne, la création de MCP, la création de GIF Slack, etc., à ajouter à vos conversations avec Claude.

Veuillez cliquer sur « Télécharger une compétence » et télécharger un fichier zip contenant le fichier SKILL.md. Voici les exigences relatives aux fichiers.

  • Fichier ZIP contenant exactement un fichier SKILL.md à la racine.

  • SKILL.md contient le nom et la description d'une compétence au format YAML

Le fichier SKILL.md utilisé dans ce tutoriel se présente comme suit :

name: "auto-invoice-generator-monthly-articles"
description: "Generate monthly invoices for written content from simple line items. Produces a branded PDF or editable DOCX/RTF invoice and, optionally, a one-page timesheet if article titles/links are provided."

Téléchargement de compétences

Une fois la compétence téléchargée, Claude la reconnaît automatiquement et ouvre une nouvelle fenêtre de discussion où elle est prête à être utilisée.

Nouvelle fonctionnalité de chat avec compétence activée

Comment cela affecte-t-il l'utilisation dans les discussions en ligne ?

  • Il n'est pas nécessaire d'activer une compétence à l'intérieur de chaque conversation. Lorsque cela est pertinent, Claude invoque automatiquement les compétences activées et les affiche dans la vue de raisonnement pour plus de transparence.
  • La désactivation d'une compétence empêche celle-ci d'être prise en compte dans les discussions jusqu'à ce que vous la réactiviez.
  • Si votre organisation définit un ensemble canonique de compétences telles que les modèles de marque, les rapports, etc., le fait de les maintenir activées garantit des résultats cohérents à chaque fois.

Les compétences de Claude en pratique

Les compétences de Claude en pratique

Facture générée

Ensuite, j'ai transmis ma propre feuille de temps et demandé à Claude de créer une facture modifiable.

Les compétences de Claude en pratique

Claude a identifié la compétence de manière autonome, a lu le fichier Excel et a généré une facture Word modifiable, qui peut également être exportée au format PDF ou Word. La présentation de la facture est claire, et le sous-total ainsi que le total sont également corrects. Il a respecté les consignes, et les fichiers DOCX modifiables et PDF formatés correspondaient aux paramètres de marque de la compétence. 

Maintenant, exécutons le même exemple en utilisant l'API.

Plateforme de développement Claude (API)

Les compétences de Claude sont également accessibles via l'API Claude. Dans cette section, nous examinerons comment reproduire l'interface de l'application Claude via l'API Claude.

Étape 1 : Conditions préalables

Veuillez commencer par installer toutes les dépendances d'exécution :

  • Anthropic pour l'API Claude Messages

  • pandas et openpyxl pour lire les feuilles de temps à partir d'Excel

  • reportlab pour générer localement une facture PDF de secours 

!pip -q install anthropic pandas openpyxl reportlab

Toutes les dépendances sont désormais installées.  Ensuite, nous pouvons configurer notre clé API.

Étape 2 : Veuillez configurer votre clé API.

Avant de pouvoir appeler l'API Messages, nous devons procéder à l'authentification. anthropic.Client Cette étape permet de créer une autorisation unique et réutilisable avec la clé API. 

import os, json, sys, re
import anthropic
from datetime import datetime, timedelta
API_KEY = "YOUR_ANTHROPIC_API_KEY"
client = anthropic.Client(api_key=API_KEY)

Veuillez vous connecter à Anthropic Console et localiser l'onglet Clés API sous Paramètres. Veuillez cliquer sur « » (Créer une clé), puis copiez votre clé API Anthropic.

Génération d'une clé API Anthropic

Source : API Anthropic

Remarque : Si vous utilisez un bloc-notes privé à des fins personnelles, veuillez ajouter votre clé API. Dans le cas contraire, veuillez utiliser une variable d'environnement sécurisée afin que votre clé ne soit pas exposée dans le bloc-notes ou les journaux.

Le code ci-dessus initialise le client SDK Anthropic et configure l'environnement. L'objet client est ensuite réutilisé pour tous les appels API Messages suivants.

Étape 3 : Pré-traitement des données

Dans cette étape, nous allons transformer notre feuille d'timesheet.xlsxs en un objet JSON propre et prévisible que la compétence peut utiliser. Cela permet de simplifier la logique en aval et d'éviter une analyse syntaxique fragile.

def load_invoice_from_timesheet(excel_path):
    import pandas as pd
    df = pd.read_excel(excel_path)
    df.columns = df.columns.str.strip()  
    invoice_period = "2025-10"
    if 'Date' in df.columns:
        first_date = str(df['Date'].iloc[0])
        date_match = re.search(r'(\d{2})\s+(\w+)\s+(\d{4})', first_date)
        if date_match:
            month_name = date_match.group(2)
            year = date_match.group(3)
            month_num = datetime.strptime(month_name[:3], '%b').month
            invoice_period = f"{year}-{month_num:02d}"   
    article_col = next((col for col in df.columns if 'article' in col.lower() and 'name' in col.lower()), None)
    amount_col = next((col for col in df.columns if 'amount' in col.lower()), None)
    topic_col = next((col for col in df.columns if 'topic' in col.lower()), None)
    line_items = []
    timesheet_articles = []
    
    for idx, row in df.iterrows():
        if pd.isna(row.get(article_col)) or row.get(article_col) == '':
            continue    
        article_name = str(row[article_col]).strip()
        amount = row.get(amount_col, 0) 
        if isinstance(amount, str):
            amount = float(amount.replace('$', '').replace(',', '').strip())
        line_items.append({
            "title": article_name,
            "rate_type": "flat",
            "qty": 1,
            "rate": float(amount)
        })  
        timesheet_articles.append({
            "title": article_name,
            "topic": str(row.get(topic_col, 'N/A')) if topic_col else 'N/A'
        })
    return {
        "client_name": "Client",
        "billing_contact": "billing@example.com",
        "invoice_period": invoice_period,
        "currency": "USD",
        "payment_terms": "Net-30",
        "line_items": line_items,
        "discount_pct": 0.0,
        "tax_pct": 0.0,
        "timesheet": timesheet_articles
    }

La fonction load_invoice_from_timesheet convertit un fichier Excel téléchargé en une charge utile JSON normalisée de facture.

  • Il lit le fichier Excel à l'aide de pandas et normalise les en-têtes de colonnes.

  • Le code déduit ensuite l'adresse invoice_period à partir de la première ligne Date (si elle existe) à l'aide d'une expression régulière et d'une analyse du mois.

  • Il détecte enfin les noms des colonnes pour le titre de l'article, le montant et le sujet sans tenir compte de la casse.

  • Cela génère deux structures :

    • line_items: Ceci est utilisé pour le calcul de la facturation (tarif forfaitaire par article dans ce cas).

    • timesheet: Liste plate des entrées d'{title, topic} s pour une annexe facultative.

  • L'expression régulière (\d{2})\s+(\w+)\s+(\d{4}) attend des formats tels que 01 Oct 2025. Veuillez l'ajuster si votre feuille utilise un autre format.

  • Les colonnes/valeurs manquantes sont gérées en ignorant les lignes vides, ou vous pouvez étendre le code pour qu'il échoue rapidement si nécessaire.

Notre contribution est désormais prête. Ensuite, nous ferons appel à la compétence Claude via l'API pour transformer la feuille de temps traitée en une facture modifiable.

Étape 4 : Fonctions d'assistance

Dans cette section, nous définissons deux fonctions d'aide qui simulent l'exécution de l'outil demandé par Claude lors d'une exécution de compétence. 

def execute_bash_tool(command):
    try:
        dangerous = ['rm -rf /', 'sudo', 'chmod', 'mkfs', '> /dev/']
        if any(d in command for d in dangerous):
            return f"Error: Command blocked for safety: {command}"
        result = subprocess.run(
            command, 
            shell=True, 
            capture_output=True, 
            text=True, 
            timeout=30,
            cwd=tempfile.gettempdir()
        )    
        output = result.stdout if result.stdout else result.stderr
        return output if output else "Command executed successfully"
    except subprocess.TimeoutExpired:
        return "Error: Command timed out"
    except Exception as e:
        return f"Error executing command: {str(e)}"
def execute_text_editor_tool(params):
    try:
        command = params.get('command')
        path = params.get('path')   
        if command == 'create':
            file_text = params.get('file_text', '')
            os.makedirs(os.path.dirname(path) if os.path.dirname(path) else '.', exist_ok=True)
            with open(path, 'w') as f:
                f.write(file_text)
            return f"File created: {path}"
        elif command == 'view':
            if os.path.exists(path):
                with open(path, 'r') as f:
                    content = f.read()
                return content[:1000] 
            return f"Error: File not found: {path}"   
        elif command == 'str_replace':
            if os.path.exists(path):
                with open(path, 'r') as f:
                    content = f.read()
                old_str = params.get('old_str', '')
                new_str = params.get('new_str', '')
                content = content.replace(old_str, new_str)
                with open(path, 'w') as f:
                    f.write(content)
                return f"File updated: {path}"
            return f"Error: File not found: {path}"    
        return f"Unknown command: {command}"
    except Exception as e:
        return f"Error: {str(e)}"

La fonction execute_bash_tool simule un outil bash sécurisé pour les actions basées sur les compétences. Il bloque d'abord les modèles dangereux tels que rm -rf /, sudo, chmod, mkfs, etc., comme une porte de sécurité, et exécute la commande avec subprocess.run() dans le répertoire temporaire du système d'exploitation avec un délai d'expiration imposé de 30 secondes.

La fonction ` execute_text_editor_tool ` fournit une interface minimale d'édition de texte utilisée par Skills. Il prend en charge trois commandes, à savoir « create » (pour créer un nouveau fichier avec l'file_text), « view » (pour renvoyer jusqu'à 1 000 caractères d'un fichier) et « str_replace » (pour l'new_str in place). Il crée également automatiquement des dossiers parents pour create, vérifie l'existence des fichiers pour view et str_replace, et enregistre les mises à jour sur le disque.

Ces assistants vous permettent de réaliser localement une boucle d'utilisation d'outils avec des garde-fous. Désormais, Skill peut demander des modifications de fichiers ou des actions shell pendant la génération des factures sans compromettre la sécurité de votre système.

Étape 5 : Veuillez invoquer la compétence via l'API. 

Cette étape permet la génération de factures de bout en bout via l'API Claude Messages. Il envoie une requête structurée, active l'utilisation des outils, effectue des itérations sur tous les appels d'outils demandés par Claude et, enfin, collecte tous les fichiers PDF générés à partir des répertoires de travail et temporaires.

def generate_invoice_with_claude(invoice): 
    user_text = f"""Generate a professional PDF invoice with the following data:
Client: {invoice['client_name']}
Period: {invoice['invoice_period']}
Currency: {invoice['currency']}
Payment Terms: {invoice['payment_terms']}
Line Items:
{json.dumps(invoice['line_items'], indent=2)}
Timesheet Articles:
{json.dumps(invoice['timesheet'], indent=2)}
Please create a professional PDF invoice with:
1. Invoice header with invoice number (INV-{invoice['invoice_period'].replace('-', '')}-001)
2. Client billing information
3. Line items table with amounts
4. Subtotal and total calculations
5. Timesheet section showing all articles and topics
Save the PDF as: invoice_{invoice['client_name'].lower()}_{invoice['invoice_period']}.pdf
""" 
    tools = [
        {"type": "bash_20250124", "name": "bash"},
        {"type": "text_editor_20250728", "name": "str_replace_based_edit_tool"}
    ]
    messages = [{"role": "user", "content": user_text}]
    iteration = 0
    max_iterations = 15   
    while iteration < max_iterations:
        iteration += 1
        response = client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=8192,
            tools=tools,
            messages=messages
        )   
        messages.append({"role": "assistant", "content": response.content}) 
        if response.stop_reason == "end_turn":
            break     
        if response.stop_reason == "tool_use":
            tool_results = []    
            for block in response.content:
                if block.type == "tool_use":
                    tool_name = block.name
                    tool_input = block.input
                    if tool_name == "bash":
                        result = execute_bash_tool(tool_input.get('command', ''))
                    elif tool_name == "str_replace_based_edit_tool":
                        result = execute_text_editor_tool(tool_input)
                    else:
                        result = f"Unknown tool: {tool_name}" 
                    tool_results.append({
                        "type": "tool_result",
                        "tool_use_id": block.id,
                        "content": result
                    })
            messages.append({"role": "user", "content": tool_results})
        else:
            break
    pdf_files = []
    for file in os.listdir('.'):
        if file.endswith('.pdf') and 'invoice' in file.lower():
            pdf_files.append(file)
    for file in os.listdir(tempfile.gettempdir()):
        if file.endswith('.pdf') and 'invoice' in file.lower():
            temp_path = os.path.join(tempfile.gettempdir(), file)
            import shutil
            dest_path = os.path.join('.', file)
            shutil.copy2(temp_path, dest_path)
            pdf_files.append(file)   
    return pdf_files
def main():
    if len(sys.argv) < 2:
        print("Usage: python app.py <timesheet.xlsx>")
        sys.exit(1)    
    excel_file = sys.argv[1]  
    if not os.path.exists(excel_file):
        print(f"Error: File not found: {excel_file}")
        sys.exit(1)    
    try:
        invoice = load_invoice_from_timesheet(excel_file)
        pdf_files = generate_invoice_with_claude(invoice)    
        if pdf_files:
            for pdf in pdf_files:
                print(f"Invoice generated: {os.path.abspath(pdf)}")
        else:
            print("Error: No PDF file was generated.")     
    except Exception as e:
        print(f"Error: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
if __name__ == "__main__":
    main()

La fonction generate_invoice_with_claude envoie la facture normalisée à l'API Claude et gère l'exécution de la compétence de bout en bout. Voici ce que fait le code :

  • user_text Il crée une structure claire qui intègre le client, la période, la devise, les conditions, les lignes et les entrées de feuille de temps, ainsi que des exigences de sortie explicites telles que l'en-tête, les tableaux, les totaux et le nom de fichier.

  • Il permet ensuite l'exécution de l'outil en déclarant un bash_number et un text_editor_number avec une boucle de messages compatible avec l'outil qui envoie la demande, inspecte stop_reason et, lorsque tool_use est demandé, le transmet aux assistants locaux et renvoie tool_result des blocs pour poursuivre l'échange.

  • Enfin, il s'arrête sur end_turn ou lorsque la limite de boucle est atteinte, puis analyse le répertoire de travail et le répertoire temporaire du système d'exploitation à la recherche de fichiers correspondant à invoice*.pdf. Il recopie tous les fichiers temporaires dans le dossier du projet et renvoie la liste des fichiers PDF détectés.

  • La fonction main fournit une commande CLI simple : python app.py , qui valide le chemin d'accès saisi, puis exécute le pipeline : load_invoice_from_timesheet(...) pour créer la charge utile, et generate_invoice_with_claude(...) pour invoquer la compétence et collecter les fichiers PDF.

Une fois cela mis en place, l'appel API devrait générer un fichier PDF prêt à être utilisé par le client. Si aucun fichier n'apparaît, veuillez vérifier les journaux d'tool_result s et la configuration des compétences, puis réessayez avec une petite feuille de test.

Les compétences de Claude en pratique

Conclusion

Vous disposez désormais d'un générateur de factures automatique fonctionnel, optimisé par Claude Skills, et l'API est capable de transformer des feuilles de calcul brutes en factures prêtes à être envoyées aux clients. Cette démonstration met en avant les points forts de Skills, à savoir une configuration portable, une activation automatique, une exécution déterministe du code et des résultats cohérents dans l'application et l'API sans avoir à recréer les invites dans chaque thread. Claude Skills fournit des résultats cohérents dans différents contextes, qui sont des connaissances réutilisables dans le domaine et soutenues par du code. Bien que les compétences puissent exécuter du code, il est important de renforcer la sécurité en n'activant que les compétences fiables, en utilisant des contrôles au niveau de l'organisation et en examinant les mises à jour avant leur déploiement.

Pour approfondir vos connaissances, veuillez consulter la documentation sur les compétences d'Anthropic et la console pour la gestion des versions et les mises à niveau, puis commencez à créer plusieurs compétences afin de mettre en place des flux de travail de bout en bout.

Présentation des modèles Claude

Découvrez comment utiliser Claude avec l'API Anthropic pour résoudre des problèmes concrets et créer des applications basées sur l'IA.
Découvrez le cours

Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Je suis un expert Google Developers en ML (Gen AI), un expert Kaggle 3x, et un ambassadeur Women Techmakers avec plus de 3 ans d'expérience dans la technologie. J'ai cofondé une startup dans le domaine de la santé en 2020 et je poursuis un master en informatique à Georgia Tech, avec une spécialisation dans l'apprentissage automatique.

Sujets

Apprenez avec DataCamp

Cours

Concepts des grands modèles de langage (LLM)

2 h
74.7K
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow