ClaudeAnthropicApiLlm
Intégrer l'API Claude d'Anthropic dans vos applications : messages, system prompt, streaming et tool use avec le SDK officiel.
Installation du SDK
Anthropic fournit un SDK officiel pour Node.js et Python.
npm install @anthropic-ai/sdk
// anthropic.js
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
export default client;
A retenir : Récupère ta clé API sur console.anthropic.com. Ne la commit jamais dans ton dépôt git.
Premier message
L'endpoint principal est messages.create(). Il accepte un tableau de messages avec les rôles user et assistant.
import client from './anthropic.js';
const message = await client.messages.create({
model: 'claude-opus-4-6',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'Explique les closures en JavaScript en 3 points.' }
]
});
console.infoo(message.content[0].text);
La réponse contient un tableau content — utilise .text pour le texte brut :
// Structure de la réponse
{
id: 'msg_...',
type: 'message',
role: 'assistant',
content: [{ type: 'text', text: 'Les closures sont...' }],
model: 'claude-opus-4-6',
stop_reason: 'end_turn',
usage: { input_tokens: 20, output_tokens: 150 }
}
System Prompt et rôles
Le system prompt définit le comportement global du modèle. Il se passe en paramètre de premier niveau (pas dans messages).
const response = await client.messages.create({
model: 'claude-opus-4-6',
max_tokens: 2048,
system: `Tu es un assistant expert en développement web Angular.
Réponds toujours en français avec des exemples de code.
Sois précis et concis.`,
messages: [
{ role: 'user', content: 'Comment créer un service Angular ?' },
{ role: 'assistant', content: 'Pour créer un service Angular...' },
{ role: 'user', content: 'Et comment l\'injecter ?' }
]
});
A retenir : Pour les conversations multi-tours, ajoute chaque échange (user + assistant) dans le tableau
messages. L'API Claude est stateless — l'historique est entièrement à ta charge.
Streaming
Utilise stream() pour recevoir les tokens au fur et à mesure.
const stream = client.messages.stream({
model: 'claude-opus-4-6',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Écris un poème sur le code.' }],
});
// Écouter les deltas
stream.on('text', (text) => {
process.stdout.write(text);
});
// Attendre la fin et récupérer le message complet
const finalMessage = await stream.finalMessage();
console.info('\nTokens utilisés:', finalMessage.usage);
Ou avec async/await et stream: true :
const stream = await client.messages.create({
model: 'claude-opus-4-6',
max_tokens: 1024,
stream: true,
messages: [{ role: 'user', content: 'Bonjour !' }],
});
for await (const event of stream) {
if (event.type === 'content_block_delta') {
process.stdout.write(event.delta.text);
}
}
Tool Use (Function Calling)
Claude peut appeler des outils que tu définis pour accéder à des données externes ou exécuter du code.
const tools = [
{
name: 'search_articles',
description: 'Recherche des articles dans la base de données',
input_schema: {
type: 'object',
properties: {
query: { type: 'string', description: 'Terme de recherche' },
limit: { type: 'number', description: 'Nombre de résultats' }
},
required: ['query']
}
}
];
const response = await client.messages.create({
model: 'claude-opus-4-6',
max_tokens: 1024,
tools,
messages: [{ role: 'user', content: 'Trouve des articles sur Angular' }],
});
// Vérifier si Claude veut utiliser un outil
if (response.stop_reason === 'tool_use') {
const toolUse = response.content.find(b => b.type === 'tool_use');
const result = await searchArticles(toolUse.input); // ta fonction
console.info('Outil appelé:', toolUse.name, toolUse.input);
}
Modèles disponibles
| Modèle | Usage recommandé | Contexte |
|---|---|---|
claude-opus-4-6 | Tâches complexes, raisonnement avancé | 200k tokens |
claude-sonnet-4-6 | Équilibre performance/vitesse | 200k tokens |
claude-haiku-4-5-20251001 | Réponses rapides, fort volume | 200k tokens |
Note : Tous les modèles Claude supportent le system prompt, le streaming, le tool use et les conversations multi-tours. Choisis selon le rapport qualité/vitesse/coût de ton cas d'usage.