Intermediate case
Niveau : Intermédiaire — vos données / une tâche réelle, moins guidé. Durée : 45–60 min.
Contexte#
Un rail à côté de vos propres pages est la structure pour laquelle copilot_rail() est conçu : examples/backlog_desk/ (adossé à des fichiers/JSON, sans SQL) et examples/bi_to_semantic/ (Tableau/Power BI → vue sémantique) l'intègrent tous deux dans une application multipage existante plutôt que de remplacer l'application par une fenêtre de chat. Ce cas vous demande de faire de même sur un workflow réel, avec des points de contrôle plutôt que des instructions pas à pas.
Objectif#
Configurez un CocoOptions avec require_approval_for pour un workflow qui modifie réellement quelque chose, et intégrez copilot_rail() comme colonne de droite à côté d'une application multipage existante (ou celle fournie).
Données#
Les vôtres, ou un substitut. Si vous exploitez déjà une application Streamlit multipage, utilisez-la. Sinon, utilisez examples/backlog_desk/ comme substitut à « vos données » : des tickets, epics et releases adossés à des fichiers sous examples/backlog_desk/data/{epics,tickets,releases,policies} — de vrais fichiers que vous pouvez inspecter avec git diff après que CoCo les a modifiés. examples/bi_samples/ (packs de fixtures Tableau/Power BI sous licence MIT) est le substitut alternatif si vous préférez suivre la structure BI → Sémantique.
Points de contrôle#
- Choisissez votre surface. Identifiez une page de votre application (ou
la page Ticket de
examples/backlog_desk/) où une action de modification n'a actuellement aucun garde-fou human-in-the-loop (supervision humaine), ou où vous souhaitez qu'un agent rédige quelque chose qu'une personne relit avant application. - Définissez
CocoOptionspour ce workflow. Séparez les outils qui peuvents'exécuter sans surveillance (exploration en lecture seule :
Read,Glob,Grep) des outils qui doivent marquer une pause (Edit,Write,Bash, etSQLsi votre workflow touche Snowflake). Placez le premier ensemble dansallowed_toolset le second dansrequire_approval_for— ils ne doivent pas se chevaucher pour un même outil. *Point de contrôle : vous pouvez indiquer, pour chaque outil que votre workflow pourrait invoquer, à quelle liste il appartient et pourquoi.* - Limitez une session à la page. Utilisez `get_or_create_session(opts,
key=...)` avec une clé spécifique à ce workflow, et décidez quand elle doit se réinitialiser —
copilot_rail()ne se réinitialise pas d'elle-même lors d'un changement decwdou de schéma ; c'est à l'appelant que revient cette décision de cycle de vie. *Point de contrôle : vous savez exactement quelle action utilisateur doit déclencherreset_session(...).* - Intégrez
copilot_rail(). Ajoutez-le comme colonne de droite de votre mise enpage, en suivant le motif de
examples/backlog_desk/(ouvert depuis un bouton d'en-tête, fermé avec Close (fermer)) ou le motif deexamples/bi_to_semantic/(un popover de connexion à côté du rail). Reportez-vous àdoc/features/copilot-rail/copilot-rail.mddans le dépôt pour la liste complète des paramètres (job=,on_job_sent=,on_job_finished=,example_questions=,toml_file=). *Point de contrôle : le rail s'ouvre et se ferme sans relancer le reste de votre page.* - Mettez une tâche réelle en file d'attente et observez sa mise sous garde. Déclenchez
l'action de modification depuis votre page (une tâche
status="queued", ou un prompt de chat direct) et vérifiez querequire_approval_forla met en pause avec **Approve once (approuver une fois) / Always allow (toujours autoriser) / Deny** (refuser), et non avec une écriture silencieuse. *Point de contrôle : vous pouvez pointer la ligne exacte de votreCocoOptionsresponsable de la pause.* - Gardez l'historique de conversation utilisable. Ouvrez le popover de configuration
d'affichage du rail (
:material/display_settings:) et ajustez Last messages (derniers messages) / First n characters (n premiers caractères) pour qu'une session longue reste lisible dans la largeur du rail.
Résultat attendu#
- Copilot se place dans une colonne de droite à côté du contenu existant de votre page —
la page elle-même n'est jamais remplacée par un chat plein écran.
- L'action de modification choisie à l'étape 1 marque désormais une pause pour une
décision explicite d'approbation/refus avant de s'exécuter.
- Vous pouvez expliquer, sans relire le code, pourquoi chaque outil de votre
workflow est soit exécuté automatiquement, soit soumis à approbation.
Où chercher en cas de blocage#
- La porte d'approbation ne se déclenche pas, ou se déclenche pour le mauvais outil :
- La bannière d'approbation reste sans réponse jusqu'à expiration du délai :
- Quelque chose dans le workflow se comporte de façon inattendue et les cartes d'outil
seules ne suffisent pas à l'expliquer : activez
STREAMLIT_COCO_DEBUG=1et relancez — voirhelp.html#debug-mode-not-showing-payloadssi la charge utile brute n'apparaît toujours pas.