Ce que vous saurez faire à la fin
- Comprendre pourquoi Anthropic ne propose pas de fine-tuning officiel sur Claude
- Identifier la bonne alternative selon votre cas d’usage : prompt engineering, RAG, few-shot, Constitutional AI
- Mettre en œuvre un système RAG complet pour spécialiser Claude sur vos documents PME (FCFA, OHADA)
- Construire un pipeline few-shot qui imite un style de rédaction interne sans entraîner de modèle
- 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