GitHub Copilot、Cursor、Codex 与 Claude Code,四个 AI 编程工具摆在面前,到底该为谁付费?我的答案是:GitHub Copilot CLI,而且花得最少。
先给看过我上一篇回答的读者说声抱歉,那篇里我重点推荐的 AWS Kiro 白嫖方案,已经失效了。
事情是这样的:我之前推荐的路径是用 AWS 新用户的免费额度去开通 Kiro Pro+,200 美元能用差不多 5 个月,性价比极高。但最近我的 Kiro 账户突然被封了,仔细排查之后发现,是 AWS 那边修改了政策,免费额度不再允许用于购买 Kiro 的付费订阅了。说白了就是白嫖窗口关了。现在 Kiro 如果不想花钱,就只能用免费档位的 50 credit 加上注册送的那点额度,模型也只有 Claude Sonnet 系列可用。
所以这篇我换个推荐方向。延续上一篇的思路,这次我着重聊聊 GitHub Copilot CLI。原因很简单:它真的便宜,而且我最近发现了它在 request 计费机制上的一个很有意思的设计。
这里我推荐的是 GitHub Copilot 的命令行工具(GitHub Copilot CLI),不是 VS Code 里侧边栏那个 Copilot Chat。两者虽然都属于 Copilot 产品线,但 CLI 版本有一个侧边栏没有的关键工具:ask_user。这个工具是理解后面整个逻辑的核心,先记住这个名字。安装方式很简单,npm install -g @github/copilot 然后用 GitHub 账户登录就行,已有 Copilot 订阅的用户不需要额外付费,CLI 共享你已有的 premium request 额度。
要理解 ask_user 为什么重要,得先搞懂现在 AI 编程工具的计费逻辑。
GitHub Copilot 现在的付费方案里,除了基础的代码补全以外,Chat、Agent Mode、Copilot CLI 这些高级功能都走的是 premium request 计费。Pro 方案 10 美元/月有 300 个 premium request,Pro+ 是 39 美元/月有 1500 个,超出之后按 0.04 美元一个收费。不同模型还有倍率,比如 Claude Sonnet 4.5 是 1 倍,Claude Opus 4.5 是 3 倍,GPT-4.5 直接 50 倍。
那什么算一个 request?根据 GitHub 官方文档的定义,你每次主动向 Copilot 发送一条 prompt,就消耗一个 premium request(乘以模型倍率)。注意这里的关键词:你主动发送。AI 在执行任务过程中的后续操作,比如读文件、跑命令、调用工具,这些 follow-up action 不计费。
这个机制其实 Cursor 之前也用过。2025 年中之前,Cursor Pro 是按 request 数量收费的,每月大概 500 个 fast request。当时 Cursor 的 Agent Mode 里也有类似的设计:你发一条指令算一个 request,Agent 自己后续执行的工具调用不算。后来 Cursor 在 2025 年 6 月改成了按 token 用量计费,这套 request 机制就退出历史舞台了。但 GitHub Copilot 现在还在用这套逻辑。
回到 Copilot CLI 的 ask_user 工具。
这个工具最初的设计目的很单纯:让 AI 在执行任务的过程中,可以主动向用户提问。比如 AI 拿到一个需求之后,觉得有些细节不确定,就会调用 ask_user 来问你方案是否可行,或者给你几个选项让你选择。
但关键来了。ask_user 提供的不只是选择题界面,它还允许用户自由输入文本。也就是说,当 AI 问你问题的时候,你不是只能点"是"或"否",你可以写一整段详细的指令回去。
而根据 GitHub 的计费规则,AI 发起的 ask_user 是一个工具调用(tool call),你对 ask_user 的响应属于工具调用的延续,不是一个新的用户 prompt。换句话说,这一来一回不算新的 request。
你应该已经想到了:只要你的第一条 prompt 写得够开放,让 AI 进入一个需要反复和你确认的工作流,那后续通过 ask_user 产生的所有交互,理论上都只算最初那一个 request 的消耗。一个 request 的价格,可以撑起一整轮复杂的开发对话。
用一张图来对比会更直观。左边是普通的 Copilot Chat 模式,你每说一句话都是一个新的 request;右边是 CLI 下利用 ask_user 的模式,只有第一条 prompt 计费,后续所有交互都是 tool call 的延续:

实际使用中,Copilot CLI 调用 ask_user 时的界面长这样,它会在终端里直接弹出问题,你可以选择选项也可以自由输入文字:

这也是为什么我强调推荐的是 CLI 而不是 VS Code 侧边栏的 Copilot。侧边栏的 Copilot Chat 和 Agent Mode 里,你每次在输入框打字发送都是一个新的 prompt,都会消耗 request。但 CLI 的交互模式不同,AI 通过 ask_user 主动向你征询意见的场景更多,你在这些场景下的输入不被计为新的 request。
正因为 ask_user 中用户的输入不额外计费,我们就可以围绕这个机制做一些操作了。
思路很简单:你发给 Copilot CLI 的第一条 prompt,不要写得太具体、太封闭。比如别直接说"帮我在 UserController 里加一个分页接口",而是给一个更开放的任务描述,让 AI 有理由在执行过程中不断向你确认细节。类似"我需要给这个项目的用户模块做一些改进,先看一下现有代码结构,然后跟我讨论方案"。这样 AI 会进入一个分析、提问、等你确认、再执行的循环,每一轮确认都是通过 ask_user 完成的,而你在 ask_user 里输入的所有内容,无论是追加需求、修改方向、还是给出新的指令,都不消耗额外的 request。
实际操作中,只要你不切换项目上下文、不主动开启一个全新的 prompt,一整天的开发工作下来,可能也就消耗一个 request。 我自己测试的情况是,在同一个项目里持续迭代,一个 session 内通过 ask_user 来回交互几十轮都没问题,premium request 计数始终只涨了 1。下面是我实测的 request 消耗记录:

你算一下这笔账:Pro 方案每月 300 个 request,按一天一个来算,够用 10 个月。再配合学生优惠免费拿到 Copilot Pro,这套 AI 辅助编程的实际成本基本趋近于零。 就算你不是学生,10 美元/月 300 个 request,在当前 Claude Max 要 100 美元/月、Cursor Pro 20 美元/月还经常被吐槽额度不够的大环境下,这个性价比已经非常夸张了。
光知道原理不够,你还得让 AI 确实每次都走 ask_user 这条路。默认情况下 Copilot CLI 不一定每轮都会调用 ask_user,它可能觉得任务很明确就直接执行了,一个 session 几轮下来该消耗的 request 还是消耗了。所以我们需要用提示词来强制它形成"每轮必问"的行为模式。
下面这段是我自己在用的提示词:
# 强制交互协议## 核心规则:每次回复结束前必须调用 `ask_user` 工具这是不可跳过的强制协议。在你的每一轮回复中,你必须执行以下操作之一:1. **完成用户请求后** → 立即调用 `ask_user` 工具,提出与当前上下文相关的后续问题
2. **存在任何不确定性时** → 不要猜测执行,立即调用 `ask_user` 工具进行澄清## 禁止行为- **禁止在不调用 `ask_user` 的情况下结束回复**
- **禁止使用终结性表达**(如"希望对你有帮助"、"如有问题随时提问"等)
- **禁止猜测用户意图** — 不确定就用 `ask_user` 询问## `ask_user` 调用要求- 问题必须与当前任务上下文直接相关
- 问题必须具体、可操作,不要问泛泛的"还需要什么帮助"
- 可以提供选项供用户选择,降低用户输入成本这段提示词的逻辑很简单:告诉 AI 每轮回复结束前都必须调用 ask_user,不允许它自己闷头干完就收工。这样 AI 就会在完成一步操作之后主动问你下一步怎么走,你在 ask_user 里回复新的指令,它继续干活,再问你,你再回复。整个过程循环下去,request 计数始终停留在最初那一个。
关键问题是这段提示词放在哪。我的建议是放到你用户根目录下的 .copilot/copilot-instructions.md 文件里。这个文件是 Copilot CLI 的用户级自定义指令,对你所有项目生效。也就是说你配置一次之后,以后每次启动 Copilot CLI 都会自动加载这段提示词,不需要每次手动输入,也不需要在第一条 prompt 里反复强调。
操作就一步,在用户根目录下创建配置文件:
macOS / Linux:
mkdir -p ~/.copilot
cat > ~/.copilot/copilot-instructions.md << 'EOF'
# 强制交互协议## 核心规则:每次回复结束前必须调用 `ask_user` 工具
...(上面那段完整内容)
EOFWindows(PowerShell):
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.copilot"
Set-Content -Path "$env:USERPROFILE\.copilot\copilot-instructions.md" -Value @"
# 强制交互协议## 核心规则:每次回复结束前必须调用 ``ask_user`` 工具
...(上面那段完整内容)
"@Windows 下的路径是 %USERPROFILE%\.copilot\copilot-instructions.md,一般就是 C:\Users\你的用户名\.copilot\copilot-instructions.md。你也可以直接手动创建这个文件夹和文件,把提示词粘贴进去,效果完全一样。
如果你的项目仓库里有自己的 .copilot/copilot-instructions.md,项目级配置会和用户级配置合并生效,不会冲突。所以放在用户根目录是最省事的做法,一劳永逸。
说了这么多好处,也得提醒几点。
首先,如果你的 premium request 额度比较紧张,建议先切换到费率为 0x 的免费模型来验证这套机制的有效性。Copilot CLI 里用 /model 命令就能切换,GPT-5 mini 和 GPT-4.1 都是 0x 倍率,不消耗 premium request。验证的标准不是"AI 问了你一次就算成功",而是要确认你和模型连续交互多轮之后,它仍然会在每轮结束时进入 ask_user,形成稳定的循环。如果跑了几轮之后 AI 突然自顾自地干完不问你了,说明提示词还需要调整。等确认循环稳定了,再切回 Sonnet 或者其他 premium 模型正式干活。
还有一点要注意:copilot-instructions.md 只对新启动的会话生效,已经存在的聊天不会自动加载。 如果你想在当前正在进行的会话里也用上这套机制,最简单的办法就是直接把上面那段提示词复制粘贴到聊天里发送一次,相当于手动注入。下次新开会话就不用管了,配置文件会自动接管。
其次要注意一个体验上的限制:一旦进入 ask_user 的输入环节,CLI 里所有的快捷提示和斜杠命令都会消失。这时候你只能纯文本输入,没有自动补全、没有 /model、没有 /usage 这些命令可用。如果你中途需要用到这些功能,比如想查一下当前 request 消耗量,就得先退出 ask_user。操作方式是连按两次 Esc,就能回到正常的交互模式。但要注意,退出之后这一轮 ask_user 的会话就断了,你下次输入就会被当作一条新的 prompt,重新消耗一个 request。所以除非必要,尽量在 ask_user 里把事情说完。
另外,这个计费机制是基于目前 GitHub 的文档描述和实际测试。GitHub 随时可能调整计费规则,"只有用户主动发起的 prompt 才计费"这个口子大概率会被持续收紧,所以这个窗口期不一定能持续多久,能用的时候先用着。
最后,即使完全不玩 ask_user 这一套,Copilot Pro 每月 300 个 request 正常用也够撑挺久的。实在不够用的话,闲鱼上多备几个学生优惠账户,一个才三十块管两年,几个账户轮着用,一年下来也花不了一顿火锅钱。
可能有读者会问:为什么不在 opencode 上试这套方案?毕竟 opencode 也支持 Copilot 认证,理论上也能用同样的 premium request 额度。我目前没在 opencode 上验证这个 ask_user 机制,原因是我装了 oh-my-opencode 插件之后,发现它的 request 消耗速度明显偏快。之前有人在 opencode 的 issue 里也反馈过类似的问题,opencode-copilot-auth 在处理 agent 发起的请求时,会把一些本该标记为 agent 的消息错误地标记成 user,导致每次工具调用都被计为一个 premium request。说白了就是别人家一个 session 只扣 1 个 request,到 opencode 这可能扣了几十个。所以在 opencode 的认证层把这个问题修好之前,想省 request 的话还是老老实实用官方的 Copilot CLI。