Exemples de fonctions IA
Le répertoire examples/ai-functions/ contient des scripts pour valider, tester et itérer sur les fonctions du SDK IA entre les fournisseurs.
Catégories d'exemples
Les exemples sont organisés par fonction du SDK IA dans examples/ai-functions/src/ :
| Répertoire | Objectif |
|---|---|
generate-text/ |
Génération de texte non-streaming avec generateText() |
stream-text/ |
Génération de texte en streaming avec streamText() |
generate-object/ |
Génération de sortie structurée avec generateObject() |
stream-object/ |
Sortie structurée en streaming avec streamObject() |
agent/ |
Exemples de ToolLoopAgent pour les workflows agentiques |
embed/ |
Génération d'embedding simple avec embed() |
embed-many/ |
Génération d'embeddings par lot avec embedMany() |
generate-image/ |
Génération d'images avec generateImage() |
generate-speech/ |
Synthèse vocale avec generateSpeech() |
transcribe/ |
Transcription audio avec transcribe() |
rerank/ |
Reclassement de documents avec rerank() |
middleware/ |
Implémentations de middleware personnalisé |
registry/ |
Configuration et utilisation du registre de fournisseurs |
telemetry/ |
Intégration OpenTelemetry |
complex/ |
Exemples multi-composants (agents, routeurs) |
lib/ |
Utilitaires partagés (pas des exemples) |
tools/ |
Définitions de tools réutilisables |
Convention de nommage des fichiers
Les exemples suivent le modèle : {provider}-{feature}.ts
| Modèle | Exemple | Description |
|---|---|---|
{provider}.ts |
openai.ts |
Utilisation basique du fournisseur |
{provider}-{feature}.ts |
openai-tool-call.ts |
Feature spécifique |
{provider}-{sub-provider}.ts |
amazon-bedrock-anthropic.ts |
Fournisseur avec sous-fournisseur |
{provider}-{sub-provider}-{feature}.ts |
google-vertex-anthropic-cache-control.ts |
Sous-fournisseur avec feature |
Structure des exemples
Tous les exemples utilisent le wrapper run() de lib/run.ts qui :
- Charge les variables d'environnement à partir de
.env - Fournit la gestion des erreurs avec un logging détaillé des erreurs API
Template de base
import { providerName } from '@ai-sdk/provider-name';
import { generateText } from 'ai';
import { run } from '../lib/run';
run(async () => {
const result = await generateText({
model: providerName('model-id'),
prompt: 'Your prompt here.',
});
console.log(result.text);
console.log('Token usage:', result.usage);
console.log('Finish reason:', result.finishReason);
});
Template de streaming
import { providerName } from '@ai-sdk/provider-name';
import { streamText } from 'ai';
import { printFullStream } from '../lib/print-full-stream';
import { run } from '../lib/run';
run(async () => {
const result = streamText({
model: providerName('model-id'),
prompt: 'Your prompt here.',
});
await printFullStream({ result });
});
Template d'appels de tools
import { providerName } from '@ai-sdk/provider-name';
import { generateText, tool } from 'ai';
import { z } from 'zod';
import { run } from '../lib/run';
run(async () => {
const result = await generateText({
model: providerName('model-id'),
tools: {
myTool: tool({
description: 'Tool description',
inputSchema: z.object({
param: z.string().describe('Parameter description'),
}),
execute: async ({ param }) => {
return { result: `Processed: ${param}` };
},
}),
},
prompt: 'Use the tool to...',
});
console.log(JSON.stringify(result, null, 2));
});
Template de sortie structurée
import { providerName } from '@ai-sdk/provider-name';
import { generateObject } from 'ai';
import { z } from 'zod';
import { run } from '../lib/run';
run(async () => {
const result = await generateObject({
model: providerName('model-id'),
schema: z.object({
name: z.string(),
items: z.array(z.string()),
}),
prompt: 'Generate a...',
});
console.log(JSON.stringify(result.object, null, 2));
console.log('Token usage:', result.usage);
});
Exécuter les exemples
À partir du répertoire examples/ai-functions :
pnpm tsx src/generate-text/openai.ts
pnpm tsx src/stream-text/openai-tool-call.ts
pnpm tsx src/agent/openai-generate.ts
Quand écrire des exemples
Écrivez des exemples quand :
-
Ajouter un nouveau fournisseur : Créez des exemples basiques pour chaque API supportée (
generateText,streamText,generateObject, etc.) -
Implémenter une nouvelle feature : Démontrez la feature avec au moins un exemple de fournisseur
-
Reproduire un bug : Créez un exemple qui montre le problème pour le débogage
-
Ajouter des options spécifiques au fournisseur : Montrez comment utiliser
providerOptionspour les paramètres spécifiques au fournisseur -
Créer des fixtures de test : Utilisez les exemples pour générer des fixtures de réponses API (voir la skill
capture-api-response-test-fixture)
Utilitaires
Le répertoire lib/ contient des utilitaires partagés :
| Fichier | Objectif |
|---|---|
run.ts |
Wrapper de gestion des erreurs avec chargement de .env |
print.ts |
Affichage propre d'objets (supprime les valeurs undefined) |
print-full-stream.ts |
Sortie colorée en streaming pour tool calls, reasoning, texte |
save-raw-chunks.ts |
Enregistrer les chunks en streaming pour les fixtures de test |
present-image.ts |
Afficher les images dans le terminal |
save-audio.ts |
Enregistrer les fichiers audio sur disque |
Utiliser les utilitaires print
import { print } from '../lib/print';
// Afficher les objets joliment sans valeurs undefined
print('Result:', result);
print('Usage:', result.usage, { depth: 2 });
Utiliser printFullStream
import { printFullStream } from '../lib/print-full-stream';
const result = streamText({ ... });
await printFullStream({ result }); // Sortie colorée pour texte, tool calls, reasoning
Tools réutilisables
Le répertoire tools/ contient les définitions de tools réutilisables :
import { weatherTool } from '../tools/weather-tool';
const result = await generateText({
model: openai('gpt-4o'),
tools: { weather: weatherTool },
prompt: 'What is the weather in San Francisco?',
});
Bonnes pratiques
-
Gardez les exemples focalisés : Chaque exemple devrait démontrer une feature ou un cas d'usage
-
Utilisez des prompts descriptifs : Rendez clair ce que l'exemple teste
-
Gérez les erreurs gracieusement : Le wrapper
run()gère cela automatiquement -
Utilisez des IDs de modèles réalistes : Utilisez les IDs de modèles réels qui fonctionnent avec le fournisseur
-
Ajoutez des commentaires pour la logique complexe : Expliquez les patterns de code non évidents
-
Réutilisez les tools quand approprié : Utilisez
weatherToolou créez de nouveaux tools réutilisables danstools/