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

オープン
#4,879 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
shell
領域
cli

調査の方向性

ファイルやテストは指定されていません。まず、既存のブロッキング ask_user ツールと、そのリクエスト処理のエントリーポイントを見つけ、次に、提案されている ask_user_async リクエストがキューまたは Requests/Sessions ビューにどのように表示される可能性があるかを確認してください。作業を続けながら非同期の質問をキューに入れ、後で回答し、必要に応じてブロッキング入力に変換できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
Shell
スター
11.2k
フォーク
1.9k
平均マージ
14時間 16分
マージ済み PR(30日)
6

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

github/copilot-cli のほかの issue

github/copilot-cli の issue をすべて見る

似ている issue

Shell/Bash の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。