Darkwood selection / SymfonyLive Berlin 2026

Symfony AI in Action

Construire des fonctionnalités IA réalistes avec Symfony

24-04-2026 @matyo91

Le problème

L'IA produit beaucoup de buzzwords. Le produit, lui, demande du contrôle.

Le vrai défi n'est pas de faire répondre un modèle. C'est de le brancher sur une application qui a des règles, des données, des droits et des effets de bord.

01 | problème @matyo91

Vision

Symfony AI ne vend pas un chatbot. Il donne une stack pour activer des features IA.

Inférence

Changer de modèle sans réécrire l'app.

Contexte

Relier l'IA aux données métier.

Action

Exposer du code Symfony contrôlé.

02 | vision @matyo91

Les briques

Une stack, pas un helper HTTP.

Platform · Agent · Store · AI Bundle · MCP Bundle · MCP SDK

03 | overview @matyo91

Platform

Une abstraction d'inférence pour parler à plusieurs providers.

Votre code PHP
→
Platform
→
OpenAI
Claude
Gemini
Mistral
04 | platform @matyo91

Même intention, modèle différent

Le code applicatif reste stable.

$result = $platform->request(
    model: new GptModel('gpt-4.1-mini'),
    input: 'Résume cette commande client.'
);

OpenAI

Claude

Gemini

Mistral

05 | providers @matyo91

Streaming

Streamer, ce n'est pas juste afficher des mots plus vite.

Deltas typés

Texte, tool call, signal de fin.

Usage tokens

Observer le coût pendant la réponse.

UX live

Répondre sans bloquer l'interface.

06 | streaming @matyo91

Multimodal

L'entrée et la sortie ne sont plus seulement du texte.

Audio · Image · PDF · Binaire

Le modèle devient une pièce d'un pipeline média, pas une zone de texte magique.

07 | multimodal @matyo91

Structured Output

On veut des objets PHP fiables, pas du JSON fragile dans une string.

final readonly class ProductInsight
{
    public function __construct(
        public string $risk,
        public array $nextActions,
    ) {}
}
08 | structure @matyo91

Agent

Un agent, c'est une boucle contrôlée entre modèle et application.

LLM
→
Tool call
→
Service Symfony
→
Réponse
09 | agent @matyo91

Tool Calling

Exposer du code métier avec une frontière explicite.

#[AsTool('refund_order')]
public function refundOrder(string $orderId): RefundResult
{
    return $this->refunds->request($orderId);
}
10 | tools @matyo91

Human in the Loop

Le modèle peut proposer. L'application décide quand agir.

Tool call proposé
→
Validation humaine
→
Exécution ou refus
11 | hitl @matyo91

Memory

La mémoire utile vient souvent de votre application.

  • Profil
    • Préférences, rôle, langue.
  • Historique
    • Actions et conversations récentes.
  • Permissions
    • Ce que l'agent peut voir ou faire.
12 | memory @matyo91

Store

Le RAG commence avant la recherche vectorielle.

Loading
→
Filtering
→
Transforming
→
Vectorizing
13 | store @matyo91

RAG

Connecter l'agent aux données applicatives, avec du contexte vérifiable.

Question
→
SimilaritySearch
→
Documents
→
Réponse sourcée
14 | rag @matyo91

Multi-agent

Plusieurs agents, oui. Mais seulement avec une orchestration lisible.

Subagents

Spécialiser une tâche bornée.

Handoff

Passer le relais avec contexte.

Traces

Comprendre qui a décidé quoi.

15 | multi-agent @matyo91

MCP

MCP ouvre la porte à des architectures agentiques interopérables.

Symfony app
↔
MCP Server
↔
Agents
IDE
Outils externes
16 | mcp @matyo91

Analyse Darkwood

Le vrai sujet n'est pas le chatbot. C'est l'orchestration.

Qui appelle quoi ? Avec quel contexte ? Sous quelles permissions ? Avec quelle trace ? Et comment on reprend la main quand le modèle sort du cadre ?

17 | analyse @matyo91

Stack cible

Symfony AI + MCP + Flow + Navi + Uniflow.

Symfony AI

Modèles, agents, store, bundles.

MCP

Interopérabilité des tools et contextes.

Flow / Navi / Uniflow

Workflows, navigation agentique, orchestration métier.

18 | stack @matyo91
Portrait de matyo91

Construire des features IA, pas seulement des prompts.

Briques Symfony + données produit + orchestration contrôlée. C'est là que Symfony AI devient intéressant pour une vraie application.

@matyo91

19 | conclusion @matyo91