Add a non-blocking, async `ask_user` tool in addition to the blocking `ask_user`

Aperta
#4,879 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
shell
Ambito
cli

Direzione di ricerca

Non vengono indicati file o test. Inizia individuando lo strumento bloccante ask_user esistente e il relativo punto di ingresso per la gestione delle richieste, quindi esamina come potrebbero apparire nella coda o nella vista Requests/Sessions le richieste ask_user_async proposte. Il lavoro è completato quando le domande asincrone possono essere accodate mentre il lavoro continua, ricevere una risposta in un secondo momento ed essere convertite in input bloccante quando necessario.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

triage
Describe the feature or problem you'd like to solve

Instead of making every ask_user blocking, give instructions to the agent to do all it can without input and ask questions as they come up using a non-blocking request and have a tab (like Current/Requests/Sessions etc.) or queue (liked /queue where I can go into it and select a question to answer and when it is collapsed I see there is a queue near the text input) where I can take my time to do input and agent is not blocked while it waits for me.

Proposed solution

Sometimes I want the AI to solve all the problems it can without waiting on input. Sometimes I give it a big green pasture and ask it to solve it and then leave for a few minutes come back and see its asking some clarifying question about a tiny edge case, but it's blocking progress. It can't build the basic service skeleton because it needs to know how to handle one specific edge case. I would rather it by default builds what it can without my input and can ask questions as it goes and they get queued up and I can answer them at my leisure. When it is done doing all it can, it should convert the async questions into blocking questions if it needs to, but as I get to them, I can answer them and it can keep working on any that have been answered. That said, sometimes it does need to present a blocking question if the answer will fundamentally change all subsequent parts.

I like this over Autopilot which just tells the Agent to pick whatever the crap it wants which somehow often includes doing something really stupid. But if I don't use Autopilot it feels like it needs me to hand hold it through every decision and it can't do anything on it's own until I give it a big pep talk and approve it's every concern.

Example prompts or workflows
Example: Building a new service
  • Agent: does some work and realizes that there is a major ambiguity in one of the http methods
  • Agent: [ask_user_async] "How do you want to resolve this issue? A or B or C?"
  • Agent: keeps working on the other 95% of the service that is straightforward
  • User: [sometime later] "Do option B"
  • Agent: finishes whatever task it was on and sees the user has responded. Picks up option B work
Example: When to use blocking/sync ask_user
  • Agent: [ask_user (not async)] "Do you want to use framework A or framework B". This is a major architectural decision that blocks other decisions so it should not be done async
Example: Building a game
  • Agent: builds a few subsystems, has questions about how the next one interfaces with existing ones. Still has three other subsystems to implement
  • Agent: [ask_user_async] "How do you want to handle inventory..."
  • Agent: starts working on other subsystems and in one notices another issue about inventory
  • Agent: [ask_user_async]: "And what about this case with the inventory"
  • Agent: does all the work it can do without user input. Takes the queued messages and either rewrites as one ask_user or just converts most pressing one to be blocking ask_user. Latter is easier so let's assume that.
  • User: responds to new blocking question
  • Agent: starts working
  • User: responds to second "queued" request
  • Agent: finishes first and auto picks up second and eventually finishes everything.
Additional context

I think its important that we help make it as easy as possible for AI to do what it safely can without needing to go full-blown autopilot or needing to always be present to nudge the agent along. I think some people want to use either of those options but most are probably in the middle. Giving more tools to the middle group will improve their experience. I can add custom instructions to tell the agent what it should consider blocking vs not and your instructions should just indicate that blockers get ask_user and non-blocking get ask_user_async.

Lingua principale
Shell
Stelle
11.2k
Fork
1.9k
Merge medio
14h 16m
PR unite (30g)
6

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di github/copilot-cli

Tutte le issue di github/copilot-cli

Issue simili

Altre issue su Shell/Bash

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.