bots-garden/mini-mepublic Fork
⑂ feature/ask-agent-hooks
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/mini-me.git
git clone ssh://git@rickub.com/bots-garden/mini-me.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
🛟 Updated. bed1738Unverified · on feature/ask-agent-hooks · k33g · 11d ago
let-the-agent-ask-you.md · 93 lines · 4.1 KBmarkdown
Blame HistoryOpen raw

Comment laisser l'agent vous poser des questions

Ce guide montre comment répondre aux questions qu'un agent vous pose avec son outil ask_user — un choix, plusieurs choix, un texte, un oui ou un non — dans chaque interface, et comment couper l'outil, y compris pour les agents qu'un autre agent appelle. Il suppose que vous faites déjà tourner mm avec un modèle qui appelle des outils.

Vérifier que l'outil est là

ask_user est actif par défaut. Rien à ajouter au fichier de configuration, sauf s'il contient askUserTool: false. Un agent avec un structuredOutput ne l'a jamais.

Pour que votre agent s'en serve, dites-le dans son prompt système, par exemple :

system: |
  When a decision belongs to the user, ask them with the ask_user tool
  before acting.

Répondre dans le terminal (mode ligne)

Chaque question s'affiche avec des options numérotées :

❓ ask_user: 1 question(s)
❓ Which framework would you like to use?
  1. React
  2. Vue
  3. Svelte
  number, or another answer · /skip to decline
  ? 2
  1. Tapez le numéro d'une option, ou son texte, ou ses premières lettres (sv), puis Entrée. Pour plusieurs choix, tapez les numéros séparés par des virgules : 1,3.
  2. Pour un oui ou un non, tapez o ou n (y et non marchent aussi).
  3. Pour une réponse libre, tapez-la. Entrée sur une ligne vide prend la valeur par défaut quand il y en a une.
  4. Plusieurs questions arrivent l'une après l'autre.

Pour refuser de répondre, tapez /skip. /abort arrête le tour, question comprise.

Répondre dans la fenêtre (mm -tui)

La question remplace la boîte de saisie, ses options au bas de la conversation :

  1. Un choix : ↑↓ puis Entrée, ou le numéro de l'option.
  2. Plusieurs choix : ↑↓, Espace pour cocher chacun, Entrée pour envoyer.
  3. Oui ou non : o ou n.
  4. Un texte : tapez-le dans la boîte, puis Entrée.

Échap refuse de répondre.

Répondre dans un éditeur (ACP)

Rien à faire côté mm : un éditeur qui prend en charge les formulaires d'elicitation d'ACP affiche les questions sous forme de formulaire. Un éditeur qui ne les prend pas en charge montre chaque question à choix ou oui/non dans un dialogue dont les boutons sont les options, plus Decline. Avec un tel éditeur, les questions à texte libre et à choix multiple ne peuvent pas être posées : l'agent en est averti et fait une hypothèse.

Couper l'outil

Pour un agent, dans son fichier :

askUserTool: false

Pour une exécution, sans modifier le fichier :

AGENT_ASK_USER=false mm -config agent.yaml

Décider pour les agents que votre agent appelle

Un agent appelé par ask_agent ou /ask garde son propre askUserTool. Quand il est actif, ses questions vous parviennent par l'interface de votre agent, précédées de son nom (homer asks: Which environment?). Pour décider à sa place, mettez askUser dans son entrée mmConfigs :

mmConfigs:
  homer:
    path: agent.homer.yaml
    askUser: false   # homer ne demande jamais : il fait une hypothèse
  milo:
    path: agent.milo.yaml
    askUser: true    # milo peut demander, quoi que dise son propre fichier

Avec mm --ask, personne n'est là pour répondre : les questions d'un agent appelé reçoivent « l'utilisateur ne peut pas être interrogé », et il continue sur une hypothèse.

Variantes

  • Dans une exécution unique (mm -p), personne ne peut répondre non plus : l'outil l'indique au modèle aussitôt, sans attendre.
  • Une question attend aussi longtemps qu'il le faut : le chien de garde ne termine pas le tour pendant qu'elle attend.

Voir aussi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Comment laisser l'agent vous poser des questions

Ce guide montre comment répondre aux questions qu'un agent vous pose avec son outil `ask_user` — un choix, plusieurs choix, un texte, un oui ou un non — dans chaque interface, et comment couper l'outil, y compris pour les agents qu'un autre agent appelle. Il suppose que vous faites déjà tourner mm avec un modèle qui appelle des outils.

## Vérifier que l'outil est là

`ask_user` est actif par défaut. Rien à ajouter au fichier de configuration, sauf s'il contient `askUserTool: false`. Un agent avec un `structuredOutput` ne l'a jamais.

Pour que votre agent s'en serve, dites-le dans son prompt système, par exemple :

```yaml
system: |
  When a decision belongs to the user, ask them with the ask_user tool
  before acting.
```

## Répondre dans le terminal (mode ligne)

Chaque question s'affiche avec des options numérotées :

```text
❓ ask_user: 1 question(s)
❓ Which framework would you like to use?
  1. React
  2. Vue
  3. Svelte
  number, or another answer · /skip to decline
  ? 2
```

1. Tapez le numéro d'une option, ou son texte, ou ses premières lettres (`sv`), puis Entrée. Pour plusieurs choix, tapez les numéros séparés par des virgules : `1,3`.
2. Pour un oui ou un non, tapez `o` ou `n` (`y` et `non` marchent aussi).
3. Pour une réponse libre, tapez-la. Entrée sur une ligne vide prend la valeur par défaut quand il y en a une.
4. Plusieurs questions arrivent l'une après l'autre.

Pour refuser de répondre, tapez `/skip`. `/abort` arrête le tour, question comprise.

## Répondre dans la fenêtre (`mm -tui`)

La question remplace la boîte de saisie, ses options au bas de la conversation :

1. Un choix : ↑↓ puis Entrée, ou le numéro de l'option.
2. Plusieurs choix : ↑↓, Espace pour cocher chacun, Entrée pour envoyer.
3. Oui ou non : `o` ou `n`.
4. Un texte : tapez-le dans la boîte, puis Entrée.

Échap refuse de répondre.

## Répondre dans un éditeur (ACP)

Rien à faire côté mm : un éditeur qui prend en charge les formulaires d'elicitation d'ACP affiche les questions sous forme de formulaire. Un éditeur qui ne les prend pas en charge montre chaque question à choix ou oui/non dans un dialogue dont les boutons sont les options, plus `Decline`. Avec un tel éditeur, les questions à texte libre et à choix multiple ne peuvent pas être posées : l'agent en est averti et fait une hypothèse.

## Couper l'outil

Pour un agent, dans son fichier :

```yaml
askUserTool: false
```

Pour une exécution, sans modifier le fichier :

```bash
AGENT_ASK_USER=false mm -config agent.yaml
```

## Décider pour les agents que votre agent appelle

Un agent appelé par `ask_agent` ou `/ask` garde son propre `askUserTool`. Quand il est actif, ses questions vous parviennent par l'interface de votre agent, précédées de son nom (`homer asks: Which environment?`). Pour décider à sa place, mettez `askUser` dans son entrée `mmConfigs` :

```yaml
mmConfigs:
  homer:
    path: agent.homer.yaml
    askUser: false   # homer ne demande jamais : il fait une hypothèse
  milo:
    path: agent.milo.yaml
    askUser: true    # milo peut demander, quoi que dise son propre fichier
```

Avec `mm --ask`, personne n'est là pour répondre : les questions d'un agent appelé reçoivent « l'utilisateur ne peut pas être interrogé », et il continue sur une hypothèse.

## Variantes

- Dans une exécution unique (`mm -p`), personne ne peut répondre non plus : l'outil l'indique au modèle aussitôt, sans attendre.
- Une question attend aussi longtemps qu'il le faut : le chien de garde ne termine pas le tour pendant qu'elle attend.

## Voir aussi

- Les champs, résultats et messages de l'outil : [référence des outils](../reference/tools.md#ask_user)
- `askUserTool`, `mmConfigs.<nom>.askUser` : [référence de la configuration](../reference/configuration.md) ; `AGENT_ASK_USER` : [référence de la ligne de commande](../reference/cli.md)
- Ce qui est envoyé à un éditeur : [référence ACP](../reference/acp.md)
- Pourquoi cela fonctionne ainsi : [interroger l'utilisateur](../explanation/asking-the-user.md)