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

未关闭
#4,879 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
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 分钟
30 天内合并 PR
6

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

github/copilot-cli 的其他 Issue

查看 github/copilot-cli 的全部 Issue

相似的 Issue

更多 Shell/Bash Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。