ITSkillsCenter
Intelligence Artificielle

Fine-tuning impossible sur Claude : alternatives efficaces

8 min de lecture
Miniature - Fine-tuning impossible sur Claude : alternatives efficaces

Ce que vous saurez faire à la fin

  1. Comprendre pourquoi Anthropic ne propose pas de fine-tuning officiel sur Claude
  2. Identifier la bonne alternative selon votre cas d’usage : prompt engineering, RAG, few-shot, Constitutional AI
  3. Mettre en œuvre un système RAG complet pour spécialiser Claude sur vos documents PME (FCFA, OHADA)
  4. Construire un pipeline few-shot qui imite un style de rédaction interne sans entraîner de modèle
  5. Comparer le coût total (TCO) des alternatives sur 12 mois pour une PME sénégalaise type

Durée : 3h30. Pré-requis : Python 3.10+, clé API Anthropic, 5 000 FCFA de crédit, 50 documents PDF d’exemple, ChromaDB ou Pinecone.

Étape 1 — Pourquoi Anthropic n’autorise pas le fine-tuning ?

OpenAI et Google permettent depuis longtemps le fine-tuning de leurs modèles. Anthropic a fait un choix différent : aucun fine-tuning public sur Claude (Sonnet, Opus, Haiku). Trois raisons officielles : (1) l’alignement Constitutional AI serait dégradé par un fine-tuning client mal calibré, (2) la sécurité des modèles serait plus difficile à garantir, (3) Anthropic préfère investir dans le contexte long (200 000 tokens) et le prompt caching qui couvrent 95 % des besoins. Pour une PME sénégalaise, c’est une bonne nouvelle : pas de cluster GPU à louer, pas de dataset à annoter, et des résultats équivalents grâce aux alternatives ci-dessous.

Étape 2 — Cartographie des 4 alternatives

Alternative          | Effort   | Coût mensuel   | Qualité   | Délai mise en place
---------------------|----------|----------------|-----------|----------------------
Prompt engineering   | Faible   | 2 000 FCFA     | Bonne     | 1 à 2 jours
Few-shot learning    | Moyen    | 5 000 FCFA     | Très bonne| 3 à 5 jours
RAG (Retrieval)      | Élevé    | 25 000 FCFA    | Excellente| 1 à 3 semaines
Constitutional AI    | Faible   | 3 000 FCFA     | Très bonne| 2 jours

Aucune ne nécessite GPU ni dataset annoté.
Le RAG demande une infrastructure vectorielle (ChromaDB, Pinecone).

Étape 3 — Alternative 1 : Prompt engineering avancé

Avant tout, optimisez le prompt système. Pour une PME comptable à Dakar :

from anthropic import Anthropic

client = Anthropic()

PROMPT_SYSTEME = """Tu es l'assistant comptable d'un cabinet sénégalais.

RÈGLES STRICTES :
- Plan comptable SYSCOHADA révisé en vigueur depuis 2018
- TVA Sénégal : 18% standard, 10% restauration, 0% export
- IS Sénégal : 30% (15% sur les 25 premiers millions FCFA)
- IRPP barème progressif sénégalais
- Toujours montants en FCFA, format français : 1 234 567 FCFA
- Citer le numéro de compte (411 Clients, 401 Fournisseurs)
- Référence à l'Acte uniforme OHADA si pertinent

FORMAT RÉPONSE :
1. Analyse comptable (3 lignes max)
2. Écritures comptables proposées (tableau)
3. Impact fiscal éventuel
4. Risque OHADA si applicable
"""

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=2048,
    system=PROMPT_SYSTEME,
    messages=[{"role": "user", "content": "Vente 8 millions HT à un client BTP, payé à 60 jours."}]
)
print(response.content[0].text)

Étape 4 — Alternative 2 : Few-shot learning

Donnez à Claude 3 à 5 exemples concrets de votre style ou de votre domaine. Le modèle imite avec une fidélité étonnante.

EXEMPLES = [
    {
        "role": "user",
        "content": "Rédige une relance pour facture F202601-0042 de 2 500 000 FCFA, retard 45 jours, client BTP Sénégal SARL."
    },
    {
        "role": "assistant",
        "content": (
            "Objet : Relance amiable - Facture F202601-0042\n\n"
            "Madame, Monsieur,\n\n"
            "Sauf erreur de notre part, la facture F202601-0042 d'un "
            "montant de 2 500 000 FCFA, échue depuis 45 jours, demeure "
            "impayée à ce jour.\n\n"
            "Nous vous remercions de bien vouloir procéder au règlement "
            "sous 8 jours par virement à notre compte UBA mentionné en bas "
            "de facture.\n\n"
            "Restant à votre disposition, nous vous prions d'agréer, "
            "Madame, Monsieur, nos salutations distinguées.\n\n"
            "Le Service Comptabilité"
        )
    }
]

# Nouvelle demande
nouveau = EXEMPLES + [{
    "role": "user",
    "content": "Relance pour F202602-0017, 750 000 FCFA, 30 jours, client Restau Le Baobab."
}]

response = client.messages.create(
    model="claude-haiku-4-5",  # Haiku suffit avec few-shot
    max_tokens=1024,
    messages=nouveau
)
print(response.content[0].text)

Étape 5 — Alternative 3 : RAG, vue d’ensemble

Le RAG (Retrieval-Augmented Generation) est l’alternative la plus puissante. On stocke vos documents dans une base vectorielle, on récupère les passages pertinents à chaque question, et on les injecte dans le prompt Claude. Résultat : Claude répond sur VOS données (procédures internes, contrats, historique factures) sans jamais avoir été entraîné dessus.

Étape 6 — Installer la stack RAG

pip install anthropic chromadb sentence-transformers pypdf
pip install python-dotenv tiktoken

Étape 7 — Indexer vos documents PME

import chromadb
from chromadb.utils import embedding_functions
from pypdf import PdfReader
from pathlib import Path

# Embedding multilingue (français + wolof inclus)
embedder = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="paraphrase-multilingual-MiniLM-L12-v2"
)

client_db = chromadb.PersistentClient(path="./vectordb")
collection = client_db.get_or_create_collection(
    name="documents_pme",
    embedding_function=embedder
)

def indexer_pdf(chemin_pdf):
    reader = PdfReader(chemin_pdf)
    nom = Path(chemin_pdf).stem
    chunks = []
    for i, page in enumerate(reader.pages):
        texte = page.extract_text() or ""
        # Découpage en chunks de 500 mots
        mots = texte.split()
        for j in range(0, len(mots), 400):
            chunk = " ".join(mots[j:j+500])
            if len(chunk) > 100:
                chunks.append({
                    "id": f"{nom}_p{i}_c{j}",
                    "texte": chunk,
                    "metadata": {"source": nom, "page": i+1}
                })

    collection.add(
        ids=[c["id"] for c in chunks],
        documents=[c["texte"] for c in chunks],
        metadatas=[c["metadata"] for c in chunks]
    )
    print(f"Indexé : {nom} - {len(chunks)} chunks")

# Indexation batch
for pdf in Path("documents_pme").glob("*.pdf"):
    indexer_pdf(pdf)

Étape 8 — Pipeline RAG : recherche + génération

from anthropic import Anthropic

claude = Anthropic()

def repondre_rag(question, n_resultats=4):
    # 1. Recherche vectorielle
    resultats = collection.query(
        query_texts=[question],
        n_results=n_resultats
    )

    # 2. Construction du contexte
    contexte = "\n\n---\n\n".join([
        f"[Source : {meta['source']}, page {meta['page']}]\n{doc}"
        for doc, meta in zip(resultats["documents"][0], resultats["metadatas"][0])
    ])

    # 3. Génération avec Claude
    prompt = f"""Réponds à la question en t'appuyant UNIQUEMENT sur le contexte fourni.
Si l'information n'y est pas, dis-le. Cite la source entre crochets [Source: nom, page X].

CONTEXTE :
{contexte}

QUESTION : {question}"""

    response = claude.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

# Utilisation
print(repondre_rag("Quelle est notre procédure de validation des achats supérieurs à 1 million FCFA ?"))

Étape 9 — Alternative 4 : Constitutional AI maison

L’idée : ajouter au prompt système une « constitution » explicite qui définit les principes que doit respecter Claude. C’est la version simplifiée de la méthode utilisée par Anthropic pour aligner ses propres modèles.

CONSTITUTION = """CONSTITUTION DE L'ASSISTANT ITSKILLSCENTER

Article 1 - HONNÊTETÉ
Tu reconnais toujours quand tu ne sais pas.
Tu ne fabriques jamais de chiffres, sources ou citations.

Article 2 - CONTEXTE LOCAL
Toutes valeurs monétaires en FCFA, format français.
Référence aux normes OHADA/SYSCOHADA si applicable.
Considère les contraintes PME (capacité, budget, accès financement).

Article 3 - SÉCURITÉ
Tu refuses : conseils contournement fiscal, fausses factures,
détournement de fonds, faux bilans.

Article 4 - STYLE
Phrases courtes (15-20 mots).
Pas de jargon non expliqué.
Structure : constat, analyse, recommandation chiffrée.

Article 5 - VÉRIFICATION
Avant de répondre, vérifie mentalement :
- Suis-je honnête ?
- Mes chiffres sont-ils plausibles ?
- Le client peut-il vraiment appliquer mon conseil ?

Si l'une des réponses est non, reprends ta réponse."""

response = claude.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=2048,
    system=CONSTITUTION,
    messages=[{"role": "user", "content": "Ma PME doit 8 millions FCFA d'IS, comment éviter de payer ?"}]
)
# Claude refusera l'évasion et proposera des optimisations légales

Étape 10 — Combiner RAG + Few-shot pour précision maximale

def repondre_rag_few_shot(question):
    resultats = collection.query(query_texts=[question], n_results=3)
    contexte = "\n---\n".join(resultats["documents"][0])

    messages = [
        # Few-shot exemples
        {"role": "user", "content": "Question + contexte sur achats"},
        {"role": "assistant", "content": "Réponse modèle structurée"},
        # Vraie question
        {"role": "user", "content": f"CONTEXTE : {contexte}\n\nQUESTION : {question}"}
    ]

    return claude.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        messages=messages
    ).content[0].text

Étape 11 — Comparatif coût total sur 12 mois (PME 50 salariés)

Approche                     | Setup        | Mensuel     | 12 mois
-----------------------------|--------------|-------------|---------------
Fine-tuning OpenAI (compar.) | 850 000 FCFA | 180 000 FCFA| 3 010 000 FCFA
Prompt engineering Claude    |   0 FCFA     |   8 000 FCFA|    96 000 FCFA
Few-shot Claude              |  50 000 FCFA |  15 000 FCFA|   230 000 FCFA
RAG Claude (ChromaDB local)  | 250 000 FCFA |  35 000 FCFA|   670 000 FCFA
RAG Claude + Pinecone cloud  | 150 000 FCFA |  85 000 FCFA| 1 170 000 FCFA
Constitutional AI seul       |  20 000 FCFA |  10 000 FCFA|   140 000 FCFA

Conclusion : pour 90 % des PME sénégalaises, Prompt engineering + Constitutional AI coûte 10 fois moins que le fine-tuning et offre une qualité équivalente sur les tâches métiers récurrentes.

Étape 12 — Évaluer la qualité de votre alternative

JEU_TEST = [
    {
        "question": "Comptabiliser une vente de 5M FCFA HT à 30 jours",
        "attendu_contient": ["411", "701", "TVA", "18%", "5 900 000"]
    },
    {
        "question": "Calculer l'IS pour 80 millions FCFA de bénéfice",
        "attendu_contient": ["IS", "30%", "15%", "25 000 000"]
    }
]

def evaluer(systeme_repondre):
    score = 0
    for cas in JEU_TEST:
        rep = systeme_repondre(cas["question"])
        attendus = sum(1 for mot in cas["attendu_contient"] if mot in rep)
        score += attendus / len(cas["attendu_contient"])
    return score / len(JEU_TEST) * 100

print(f"Score RAG : {evaluer(repondre_rag):.0f}%")
print(f"Score prompt simple : {evaluer(lambda q: claude.messages.create(model='claude-sonnet-4-5', max_tokens=1024, messages=[{'role':'user','content':q}]).content[0].text):.0f}%")

Étape 13 — Quand un fine-tuning serait quand même utile ?

Cas rares mais réels : (1) volume colossal de requêtes identiques (>1 million/mois) où chaque token compte, (2) langue très spécialisée (médical, juridique pointu) où même 50 exemples few-shot ne suffisent pas, (3) latence ultra-critique (<200 ms) impossible avec un appel API distant. Dans ces cas, on bascule sur un modèle open source fine-tunable (Llama 3.3, Mistral) avec Ollama ou vLLM. Voir notre tutoriel dédié à Ollama.

Étape 14 — Migration progressive : du prompt à la stack RAG

Phase 1 (semaine 1)  : Prompt engineering + Constitutional AI
                       Mesure qualité sur 20 cas réels
Phase 2 (semaine 2)  : Ajout de 5 exemples few-shot par cas d'usage
                       Re-mesure qualité
Phase 3 (semaine 3-4): Si score < 80%, indexation RAG des 100 docs clés
Phase 4 (mois 2)     : Mise en production avec monitoring tokens
Phase 5 (mois 3+)    : Optimisation : prompt caching, batching, Haiku

Erreurs classiques à éviter

  • Erreur : chercher absolument à fine-tuner Claude. Vous perdez 3 mois et 2 millions FCFA pour un résultat équivalent à un bon RAG en 2 semaines.
  • Erreur : prompt système de 50 lignes mal structuré. Claude se perd. Préférez des sections numérotées, max 30 lignes.
  • Erreur : few-shot avec exemples contradictoires. Claude apprend du bruit et hallucine. Vérifiez la cohérence de chaque exemple.
  • Erreur : RAG sans citation des sources. Impossible de vérifier la réponse, perte de confiance des utilisateurs comptables.
  • Erreur : indexer tous vos documents en vrac. Le bruit dégrade la qualité. Triez d'abord les 100 docs les plus utiles.
  • Erreur : embedder anglais sur du contenu français. Qualité divisée par 3. Utilisez paraphrase-multilingual-MiniLM-L12-v2.

Checklist alternatives au fine-tuning Claude

✓ Cas d'usage défini avec 20 exemples réels
✓ Jeu de test (gold standard) constitué
✓ Score baseline mesuré (prompt brut)
✓ Constitutional AI : prompt système structuré
✓ Few-shot : 3 à 5 exemples cohérents
✓ Embedder multilingue si RAG (FR/wolof)
✓ ChromaDB local pour PME < 1000 docs
✓ Pinecone si volume > 10 000 docs
✓ Citations sources obligatoires en RAG
✓ Évaluation post-déploiement (mois 1)
✓ Monitoring coût tokens hebdomadaire
✓ Plan de bascule modèle open source si besoin
✓ Documentation procédure pour utilisateurs
✓ Backup base vectorielle quotidien
✓ Alerte budget Anthropic configurée
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité