En bref
- Installez avec
npm install aiet choisissez vos hooks de framework (@ai-sdk/react,@ai-sdk/svelte,@ai-sdk/vue) - Utilisez
useChat()pour des interfaces de chat instantanées avec streaming, historique et appel d'outils - Changez de fournisseur (OpenAI, Anthropic, Mistral, Groq) avec une seule ligne de configuration
- Exécutez sur Vercel Edge Functions pour des démarrages à froid en moins de 100 ms
- L'appel d'outils et la sortie structurée fonctionnent directement avec les types TypeScript
1. Installation dans Next.js / React
1.1 Créer un projet Next.js (si vous n'en avez pas)
npx create-next-app@latest my-ai-app --typescript --eslint --tailwind
cd my-ai-app
1.2 Installer le SDK
npm install ai @ai-sdk/react
# ou
pnpm add ai @ai-sdk/react
1.3 Ajouter votre clé API
Créez .env.local à la racine :
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
MISTRAL_API_KEY=...
GROQ_API_KEY=...
2. Hooks useChat & useCompletion
2.1 Interface de chat minimale
Créez app/chat/page.tsx :
'use client';
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div className="flex flex-col w-full max-w-md py-24 mx-auto stretch">
{messages.map(m => (
<div key={m.id} className="whitespace-pre-wrap">
{m.role === 'user' ? 'Utilisateur : ' : 'IA : '}
{m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
className="fixed bottom-0 w-full max-w-md p-2 mb-8 border border-gray-300 rounded shadow-xl"
value={input}
placeholder="Dites quelque chose..."
onChange={handleInputChange}
/>
</form>
</div>
);
}
2.2 Résultat attendu
Utilisateur : Bonjour
IA : Bonjour ! Comment puis-je vous aider aujourd'hui ?
2.3 useCompletion pour les cas d'usage hors chat
import { useCompletion } from 'ai/react';
function Completion() {
const { completion, input, handleInputChange, handleSubmit } = useCompletion();
return (
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<div>{completion}</div>
</form>
);
}
3. Réponses en streaming
3.1 Activer le streaming
Le streaming est activé par défaut dans useChat et useCompletion. Aucune configuration supplémentaire n'est nécessaire.
3.2 Personnaliser le comportement du streaming
const { messages } = useChat({
streamMode: 'text', // ou 'tokens' pour des morceaux de tokens bruts
onResponse: (response) => {
console.log('En-têtes :', response.headers);
},
onFinish: (message) => {
console.log('Terminé :', message);
},
});
3.3 Streaming avec le runtime Edge
Ajoutez runtime: 'edge' à votre route Next.js :
export const runtime = 'edge';
4. Appel d'outils et sortie structurée
4.1 Définir des outils
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';
const { text, toolCalls } = await generateText({
model: openai('gpt-4-turbo'),
tools: {
getWeather: {
description: 'Obtenir la météo pour un lieu',
parameters: z.object({
location: z.string(),
}),
},
},
prompt: 'Quel temps fait-il à Paris ?',
});
4.2 Exécuter les appels d'outils
if (toolCalls.length > 0) {
const weather = await getWeather(toolCalls[0].args.location);
console.log(weather);
}
4.3 Sortie structurée
import { z } from 'zod';
const { object } = await generateObject({
model: openai('gpt-4-turbo'),
schema: z.object({
recipe: z.object({
name: z.string(),
ingredients: z.array(z.string()),
}),
}),
prompt: 'Donnez-moi une recette de cookies aux pépites de chocolat',
});
console.log(object.recipe.name); // "Chocolate Chip Cookies"
5. Configuration multi-fournisseurs
5.1 Configurer les fournisseurs
import { openai } from '@ai-sdk/openai';
import { anthropic } from '@ai-sdk/anthropic';
import { mistral } from '@ai-sdk/mistral';
import { groq } from '@ai-sdk/groq';
const model = openai('gpt-4-turbo');
// ou
const model = anthropic('claude-3-opus-20240229');
// ou
const model = mistral('mistral-large-latest');
// ou
const model = groq('mixtral-8x7b-32768');
5.2 Utilisation dans useChat
const { messages } = useChat({
model: openai('gpt-4-turbo'),
// ou tout autre fournisseur
});
5.3 Fournisseurs de secours
import { fallback } from 'ai';
const model = fallback([
openai('gpt-4-turbo'),
anthropic('claude-3-opus-20240229'),
]);
6. Compatibilité avec le runtime Edge
6.1 Activer le runtime Edge
Ajoutez à votre route Next.js :
export const runtime = 'edge';
6.2 Fournisseurs compatibles avec Edge
| Fournisseur | Compatibilité Edge | Remarques |
|---|---|---|
| OpenAI | ✅ Oui | Fonctionne directement |
| Anthropic | ❌ Non | Charge utile trop grande |
| Mistral | ✅ Oui | Fonctionne directement |
| Groq | ✅ Oui | Fonctionne directement |
6.3 Points d'attention du runtime Edge
- Démarrages à froid : ~50-100 ms sur Vercel Edge Functions Documentation du runtime Edge
- Limites de mémoire : 128 Mo pour les Edge Functions
- Pas d'API Node.js : Utilisez
fetchau lieu deaxios
7. Créer un chatbot de A à Z
7.1 Code complet du chatbot
app/chat/page.tsx :
'use client';
import { useChat } from 'ai/react';
import { openai } from '@ai-sdk/openai';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat({
model: openai('gpt-4-turbo'),
streamMode: 'text',
onResponse: (response) => {
console.log('En-têtes :', response.headers);
},
});
return (
<div className="flex flex-col w-full max-w-md py-24 mx-auto stretch">
{messages.map(m => (
<div key={m.id} className={`whitespace-pre-wrap ${m.role === 'user' ? 'text-blue-500' : 'text-green-500'}`}>
<strong>{m.role === 'user' ? 'Vous : ' : 'IA : '}</strong>
{m.content}
</div>
))}
<form onSubmit={handleSubmit} className="fixed bottom-0 w-full max-w-md mb-8">
<input
className="w-full p-2 border border-gray-300 rounded shadow-xl"
value={input}
placeholder="Posez-moi une question..."
onChange={handleInputChange}
/>
</form>
</div>
);
}
7.2 Ajouter l'appel d'outils
const { messages, input, handleInputChange, handleSubmit } = useChat({
model: openai('gpt-4-turbo'),
tools: {
getWeather: {
description: 'Obtenir la météo pour un lieu',
parameters: z.object({
location: z.string(),
}),
},
},
async onToolCall({ toolCall }) {
if (toolCall.toolName === 'getWeather') {
const weather = await getWeather(toolCall.args.location);
return weather;
}
},
});
7.3 Déployer sur Vercel
vercel
Erreurs courantes et solutions
| Erreur | Cause | Solution |
|---|---|---|
401 Unauthorized | Clé API manquante | Ajoutez .env.local avec OPENAI_API_KEY |
429 Too Many Requests | Limite de taux atteinte | Utilisez des fournisseurs de secours fallback ou upgradez votre plan |
Edge Function payload too large | Réponse Anthropic trop volumineuse | Passez au runtime Node.js |
TypeError: model is not a function | Import incorrect | Utilisez import { openai } from '@ai-sdk/openai' |
Alternatives
1. LangChain
- Avantages : Meilleur pour les workflows complexes (RAG, agents)
- Inconvénients : Plus lourd, pas de hooks de framework
- Documentation LangChain
2. OpenAI SDK
- Avantages : Support officiel d'OpenAI
- Inconvénients : Pas de multi-fournisseurs ni de hooks de framework
- Documentation OpenAI SDK
Prochaines étapes
-
Ajouter l'authentification : Utilisez NextAuth.js pour sécuriser votre chatbot
npm install next-auth -
Déployer en production : Activez Vercel Analytics pour le suivi d'utilisation
vercel --prod -
Étendre avec RAG : Utilisez le Vercel AI SDK avec
@vercel/postgrespour la recherche vectoriellenpm install @vercel/postgres
Pour les équipes qui déploient des outils d'IA à grande échelle, Hyperion Consulting propose des services de conseil en infrastructure et déploiement d'IA de bout en bout.
