Aller au contenu principal

Composer deux agents par topics

Intermédiaire ⏱ 15 min multi-agent · composition · topics

Vous allez construire : deux applications indépendantes chaînées en un système — un détecteur qui signale les commandes suspectes, et un répondeur qui raisonne sur ce que le détecteur signale. Pas de code partagé, pas de framework : un topic.

detector : orders → règles → detector.screen.out ══► responder : (le lit) → llm → responder.reason.out

Prérequis

1 · Construisez le détecteur — application numéro un

pulse new detector --source webhook --stage rule-based:screen
stages:
- name: screen
engine: rule-based
rules:
- { condition: "amount >= 1000", action: flag }
cd detector && pulse secret set PULSE_WEBHOOK_SECRET dev-secret # la source webhook générée l'exige
pulse deploy . && cd ..

Sa sortie vit sur detector.screen.out — un topic durable, comme chaque frontière de stage.

2 · Construisez le répondeur — application numéro deux, abonnée à la première

pulse new responder --stage llm:reason
stages:
- name: reason
engine: llm
inputTopics: [ detector.screen.out ] # ← la composition, en une ligne
systemPrompt: |
Tu reçois une commande signalée. Évalue brièvement
le risque et recommande : approve, review ou reject.
cd responder && pulse deploy . && cd ..

3 · Alimentez le détecteur, observez le répondeur

pulse events publish --topic detector.in --value '{"orderId":"o-9","amount":4200}'
pulse events tail --topic responder.reason.out

L'événement traverse deux applications déployées séparément : le détecteur le signale → le signalement atterrit sur detector.screen.out → le répondeur le récupère et raisonne → la recommandation apparaît sur la sortie du répondeur.

4 · Étendez le pattern

  • Chaîner — chaque nouvelle app pointe inputTopics vers n'importe quel topic existant.
  • Diffuser — déployez un second répondeur lisant le même detector.screen.out ; les deux voient chaque signalement.
  • Corréler — un join stream-stream apparie les sorties de deux agents.

Ce qui vient de se passer

Le « multi-agent » ici n'est pas une fonctionnalité de framework — c'est un schéma d'adressage. Chaque frontière de stage est un topic durable et abonnable, donc les systèmes se composent comme les pipes Unix : déployés indépendamment, observables indépendamment (pulse events tail fonctionne à chaque couture), remplaçables indépendamment.

Dépannage

Le répondeur ne reçoit jamais rien

Les deux apps doivent être déployées sur le même Pulse. Confirmez que le détecteur émet vraiment : pulse events tail --topic detector.screen.out. Si c'est vivant mais que le répondeur reste muet, vérifiez l'orthographe de inputTopics.

Ensuite