Skip to content
Learni
Voir tous les tutoriels
Intelligence Artificielle

Comment intégrer l'API Claude dans Node.js en 2026

Read in English

Introduction

En 2026, Claude d'Anthropic domine les usages IA professionnels grâce à sa supériorité en raisonnement, sa sécurité intégrée et ses performances sur Claude 3.5 Sonnet. Contrairement à GPT, Claude excelle dans les tâches complexes comme le code génération ou l'analyse de documents longs, avec un contexte jusqu'à 200k tokens. Ce tutoriel intermédiaire vous guide pour intégrer l'API Claude dans une app Node.js via TypeScript. Vous apprendrez à créer un client robuste, gérer les conversations, streamer les réponses et implémenter des tools personnalisés. Idéal pour des chatbots, agents autonomes ou APIs backend. À la fin, vous aurez un serveur fonctionnel déployable sur Vercel, avec gestion d'erreurs et rate limits. Pourquoi Claude ? Moins de hallucinations, alignement éthique fort – parfait pour les entreprises. (128 mots)

Prérequis

  • Node.js 20+ installé
  • Compte Anthropic avec clé API (gratuit pour tests : console.anthropic.com)
  • Connaissances en TypeScript et async/await
  • npm ou yarn
  • Éditeur comme VS Code avec extension TypeScript

Installation du SDK et initialisation

terminal
mkdir claude-node-app
cd claude-node-app
npm init -y
npm install @anthropic-ai/sdk typescript @types/node dotenv
npm install -D tsx
tsc --init
npm pkg set type=module

Ce script crée un projet Node.js moderne avec le SDK officiel Anthropic. tsx permet d'exécuter TS directement sans compilation. dotenv gère les secrets. Évitez les versions anciennes du SDK qui manquent de support pour les tools.

Configuration des variables d'environnement

.env
ANTHROPIC_API_KEY=sk-ant-api03-abcdefghijklmnopqrstuvwxyz1234567890
MODEL=claude-3-5-sonnet-20240620
MAX_TOKENS=1024
TEMPERATURE=0.7

Copiez ce fichier .env à la racine. Remplacez la clé par la vôtre depuis la console Anthropic. MAX_TOKENS limite les coûts ; TEMPERATURE contrôle la créativité (0= déterministe). Ne commitez jamais .env dans Git – ajoutez-le à .gitignore.

Premier appel à l'API

Maintenant, testons un message simple. Imaginez Claude comme un consultant expert : vous lui donnez un brief, il répond précisément. Ce premier exemple valide votre setup et mesure la latence (typiquement <2s).

Client basique pour un message unique

basic-client.ts
import Anthropic from '@anthropic-ai/sdk';
import 'dotenv/config';

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY!,
});

async function simpleMessage() {
  const msg = await client.messages.create({
    model: process.env.MODEL!,
    max_tokens: parseInt(process.env.MAX_TOKENS!),
    temperature: parseFloat(process.env.TEMPERATURE!),
    messages: [{ role: 'user', content: 'Explique en 3 points les avantages de Claude vs GPT-4.' }],
  });
  console.log(msg.content[0].text);
}

simpleMessage().catch(console.error);

Ce code crée un client et envoie un message user. La réponse est extraite de content[0].text. Utilisez ! pour assertions TS sur env vars. Testez avec npx tsx basic-client.ts – attendez une réponse structurée en 3 points.

Gestion des conversations multi-turns

Pour un chatbot réaliste, maintenez l'historique comme un fil de discussion. Chaque tour appende user/assistant messages, préservant le contexte sans dépasser 200k tokens.

Chat conversationnel avec historique

chat-client.ts
import Anthropic from '@anthropic-ai/sdk';
import 'dotenv/config';

type Message = { role: 'user' | 'assistant'; content: string };

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY! });
const messages: Message[] = [];

async function chat(userInput: string) {
  messages.push({ role: 'user', content: userInput });
  const response = await client.messages.create({
    model: process.env.MODEL!,
    max_tokens: 1024,
    messages: messages.map(m => ({ role: m.role, content: m.content })),
  });
  const aiReply = response.content[0].text;
  messages.push({ role: 'assistant', content: aiReply });
  console.log('Claude:', aiReply);
  return aiReply;
}

// Exemple d'usage
chat('Développe un hook React pour fetcher des données.').catch(console.error);

Le tableau messages simule une session persistante. Mappez-le pour l'API. Cela gère naturellement le contexte. Limitez l'historique à 10 tours pour éviter les coûts : messages.slice(-10). Exécutez plusieurs chat() pour tester.

Implémentation du streaming pour UX fluide

stream-client.ts
import Anthropic from '@anthropic-ai/sdk';
import 'dotenv/config';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY! });

async function streamChat(prompt: string) {
  const stream = await client.messages.stream({
    model: process.env.MODEL!,
    max_tokens: 1024,
    messages: [{ role: 'user', content: prompt }],
    stream_mode: 'values',
  });

  let fullResponse = '';
  for await (const item of stream) {
    const delta = item.delta?.content?.[0]?.text || '';
    process.stdout.write(delta);
    fullResponse += delta;
  }
  console.log('\n--- Fin ---');
  return fullResponse;
}

streamChat('Génère un poème sur l\'IA en français.').catch(console.error);

Le streaming avec stream_mode: 'values' affiche token par token, idéal pour les UIs React. Accumulez fullResponse pour logging. process.stdout.write simule un terminal live. Rate limits : 50 RPM sur Sonnet, gérez les retries.

Ajout de tools pour agents intelligents

Les tools transforment Claude en agent : il appelle vos fonctions (ex: météo, DB query) via JSON schema. Comme un orchestrateur, il décide quand les utiliser.

Client avec tools personnalisés

tools-client.ts
import Anthropic from '@anthropic-ai/sdk';
import 'dotenv/config';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY! });

const tools = [
  {
    name: 'get_weather',
    description: 'Récupère la météo d\'une ville',
    inputSchema: {
      type: 'object',
      properties: { city: { type: 'string' } },
      required: ['city'],
    },
  },
];

function getWeather(city: string): string {
  return `À ${city}, il fait 22°C, ensoleillé.`; // Mock
}

async function agentWithTools(prompt: string) {
  let messages = [{ role: 'user', content: prompt }];
  let toolCalls = true;
  while (toolCalls) {
    const msg = await client.messages.create({
      model: process.env.MODEL!,
      max_tokens: 1024,
      messages,
      tools,
    });
    const text = msg.content[0].text || '';
    console.log('Claude:', text);
    const toolCall = msg.content.find((c: any) => c.type === 'tool_use');
    if (toolCall) {
      const args = JSON.parse(toolCall.input);
      const result = getWeather(args.city);
      messages.push({ role: 'user', content: [{ type: 'tool_result', tool_use_id: toolCall.id, content: result }] });
    } else {
      toolCalls = false;
    }
  }
}

agentWithTools('Quelle est la météo à Paris ?').catch(console.error);

Définissez tools avec JSON schema strict. Bouclez jusqu'à pas de tool_call. Répondez avec tool_result. Mock ici ; intégrez fetch réel. Claude parse auto les args – robuste contre erreurs JSON.

Route API Next.js avec Claude

app/api/claude/route.ts
import Anthropic from '@anthropic-ai/sdk';
import { NextRequest, NextResponse } from 'next/server';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY! });

export async function POST(req: NextRequest) {
  try {
    const { messages } = await req.json();
    const response = await client.messages.create({
      model: process.env.MODEL!,
      max_tokens: 1024,
      messages,
    });
    return NextResponse.json({ content: response.content[0].text });
  } catch (error) {
    return NextResponse.json({ error: 'Erreur API Claude' }, { status: 500 });
  }
}

Pour Next.js 15+, cette App Router gère POST /api/claude avec body {messages: [...]}. Try/catch capture rate limits (429). Déployez sur Vercel : env vars auto. Testez avec curl ou fetch frontend.

Bonnes pratiques

  • Rate limiting : Implémentez upstash-redis pour 50 RPM/Sonnet ; retry avec exponential backoff (ex: 1s, 2s, 4s).
  • Sécurité : Validez inputs avec Zod avant envoi ; limitez max_tokens à 4k max.
  • Caching : Cachez réponses identiques avec Redis (clé: sha256(prompt)). Économisez 70% coûts.
  • Monitoring : Loggez tokens utilisés (usage dans response) avec Sentry.
  • Modèles : Sonnet pour général ; Opus pour expert (cher).

Erreurs courantes à éviter

  • Oubli du contexte : Historique trop long → troncature auto, perte cohérence. Slicez à 8k tokens.
  • Pas de streaming : UX latente (>5s). Toujours streamer en prod.
  • Tools mal schématisés : JSON invalide → Claude échoue. Validez schema avec Ajv.
  • Env non chargé : dotenv/config avant imports. Erreur 401.
  • Pas de fallback : Si Claude down, switch GPT via config dynamique.

Pour aller plus loin

Maîtrisez les agents multi-tools avec Claude Projects. Explorez docs Anthropic. Formations avancées IA : Learni Group Formations. Projet open-source : fork anthropic-sdk-examples.

Comment intégrer API Claude Node.js 2026 | Learni