Aller au contenu principal

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érequis
Lien direct vers Prérequis

Créer l’Agent
Lien 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.

  1. Créez un fichier src/mastra/agents/chefAgent.ts et définissez votre Agent :

    src/mastra/agents/chefAgent.ts
    import { 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',
    })
  2. Dans votre fichier src/mastra/index.ts, enregistrez l’Agent :

    src/mastra/index.ts
    import { Mastra } from '@mastra/core'
    import { chefAgent } from './agents/chefAgent'

    export const mastra = new Mastra({
    agents: { chefAgent },
    })

Interagir avec l’Agent
Lien 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.

  1. Créez un fichier src/index.ts et ajoutez-y une fonction main(). À l’intérieur, rédigez une requête à adresser à l’Agent et consignez sa réponse.

    src/index.ts
    import { 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.ts

    Vous 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...
  2. 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.ts
    import { 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.ts

    Vous 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!
  3. 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.ts comme suit :

    src/index.ts
    import { 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 schema
    const 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’Agent
Lien direct vers Exécuter le serveur de l’Agent

Découvrez comment interagir avec votre Agent via l’API de Mastra.

  1. Vous pouvez exécuter votre Agent comme service avec la commande mastra dev :

    mastra dev

    Cette 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.

  2. Par défaut, mastra dev s’exécute sur http://localhost:4111. Votre Agent Assistant de cuisine sera disponible à l’adresse suivante :

    POST http://localhost:4111/api/agents/chefAgent/generate
  3. Vous pouvez interagir avec l’Agent à l’aide de curl en 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..."
    }