Créer un assistant de cuisine avec l’IA
Dans ce guide, vous créerez un Agent « Assistant de cuisine » qui aide les utilisateurs à préparer des repas avec les ingrédients disponibles.
Vous apprendrez à créer l’Agent et à l’enregistrer auprès de Mastra. Vous interagirez ensuite avec lui depuis votre terminal et découvrirez différents formats de réponse. Vous accéderez enfin à l’Agent par les endpoints API locaux de Mastra.
PrérequisLien direct vers Prérequis
- Node.js
v22.13.0ou version ultérieure est installé - Une clé API d’un fournisseur de modèles pris en charge
- Un projet Mastra existant (suivez le guide d’installation pour configurer un nouveau projet)
Créer l’AgentLien direct vers Créer l’Agent
Pour créer un Agent dans Mastra, utilisez la classe Agent pour le définir, puis enregistrez-le auprès de Mastra.
Créez un fichier
src/mastra/agents/chefAgent.tset définissez votre Agent :src/mastra/agents/chefAgent.tsimport { Agent } from '@mastra/core/agent'export const chefAgent = new Agent({id: 'chef-agent',name: 'chef-agent',instructions:'You are Michel, a practical and experienced home chef' +'You help people cook with whatever ingredients they have available.',model: 'openai/gpt-5.6-sol',})Dans votre fichier
src/mastra/index.ts, enregistrez l’Agent :src/mastra/index.tsimport { Mastra } from '@mastra/core'import { chefAgent } from './agents/chefAgent'export const mastra = new Mastra({agents: { chefAgent },})
Interagir avec l’AgentLien direct vers Interagir avec l’Agent
Selon vos besoins, vous pouvez interagir avec l’Agent et recevoir ses réponses sous différents formats. Dans les étapes suivantes, vous apprendrez à générer, diffuser en flux et obtenir une sortie structurée.
Créez un fichier
src/index.tset ajoutez-y une fonctionmain(). À l’intérieur, rédigez une requête à adresser à l’Agent et consignez sa réponse.src/index.tsimport { chefAgent } from './mastra/agents/chefAgent'async function main() {const query ='In my kitchen I have: pasta, canned tomatoes, garlic, olive oil, and some dried herbs (basil and oregano). What can I make?'console.log(`Query: ${query}`)const response = await chefAgent.generate([{ role: 'user', content: query }])console.log('\n👨🍳 Chef Michel:', response.text)}main()Exécutez ensuite le script :
npx bun src/index.tsVous devriez obtenir une sortie semblable à celle-ci :
Query: In my kitchen I have: pasta, canned tomatoes, garlic, olive oil, and some dried herbs (basil and oregano). What can I make?👨🍳 Chef Michel: You can make a delicious pasta al pomodoro! Here's how...Dans l’exemple précédent, vous avez peut-être attendu un peu la réponse sans indication de progression. Pour afficher la sortie de l’Agent au fur et à mesure de sa création, diffusez plutôt sa réponse vers le terminal.
src/index.tsimport { chefAgent } from './mastra/agents/chefAgent'async function main() {const query ="Now I'm over at my friend's house, and they have: chicken thighs, coconut milk, sweet potatoes, and some curry powder."console.log(`Query: ${query}`)const stream = await chefAgent.stream([{ role: 'user', content: query }])console.log('\n Chef Michel: ')for await (const chunk of stream.textStream) {process.stdout.write(chunk)}console.log('\n\n✅ Recipe complete!')}main()Exécutez ensuite à nouveau le script :
npx bun src/index.tsVous devriez obtenir une sortie semblable à celle ci-dessous. Cette fois, vous pouvez la lire ligne par ligne plutôt que sous forme d’un seul gros bloc.
Query: Now I'm over at my friend's house, and they have: chicken thighs, coconut milk, sweet potatoes, and some curry powder.👨🍳 Chef Michel:Great! You can make a comforting chicken curry...✅ Recipe complete!Au lieu d’afficher la réponse de l’Agent à une personne, vous souhaiterez peut-être la transmettre à une autre partie de votre code. Dans ce cas, votre Agent doit retourner une sortie structurée.
Modifiez votre
src/index.tscomme suit :src/index.tsimport { chefAgent } from './mastra/agents/chefAgent'import { z } from 'zod'async function main() {const query = 'I want to make lasagna, can you generate a lasagna recipe for me?'console.log(`Query: ${query}`)// Define the Zod schemaconst schema = z.object({ingredients: z.array(z.object({name: z.string(),amount: z.string(),}),),steps: z.array(z.string()),})const response = await chefAgent.generate([{ role: 'user', content: query }], {structuredOutput: {schema,},})console.log('\n👨🍳 Chef Michel:', response.object)}main()Après avoir exécuté à nouveau le script, vous devriez obtenir une sortie semblable à celle-ci :
Query: I want to make lasagna, can you generate a lasagna recipe for me?👨🍳 Chef Michel: {ingredients: [{ name: "Lasagna noodles", amount: "12 sheets" },{ name: "Ground beef", amount: "1 pound" },],steps: ["Preheat oven to 375°F (190°C).","Cook the lasagna noodles according to package instructions.",]}
Exécuter le serveur de l’AgentLien direct vers Exécuter le serveur de l’Agent
Découvrez comment interagir avec votre Agent via l’API de Mastra.
Vous pouvez exécuter votre Agent comme service avec la commande
mastra dev:mastra devCette commande démarre un serveur qui expose des endpoints permettant d’interagir avec vos Agents enregistrés. Dans Studio, vous pouvez tester votre Agent via une interface utilisateur.
Par défaut,
mastra devs’exécute surhttp://localhost:4111. Votre Agent Assistant de cuisine sera disponible à l’adresse suivante :POST http://localhost:4111/api/agents/chefAgent/generateVous pouvez interagir avec l’Agent à l’aide de
curlen ligne de commande :curl -X POST http://localhost:4111/api/agents/chefAgent/generate \-H "Content-Type: application/json" \-d '{"messages": [{"role": "user","content": "I have eggs, flour, and milk. What can I make?"}]}'Exemple de réponse :
{"text": "You can make delicious pancakes! Here's a simple recipe..."}