计费可以通过使用子代理组合和代理定义来绕过
Source: Hacker News
摘要
- 子代理和工具调用不会消耗任何“请求”。
- 请求费用仅根据最初使用的模型计算。
- Copilot 中包含的“免费”模型(例如 GPT‑5‑mini、GPT‑4.1 等)。
- 能够为子代理定义代理。
- 能够为代理指定模型。
当正确组合时,这可以实现对昂贵的高级模型(例如 Opus 4.5)的“免费”且几乎无限制的使用,而该模型通常需要消耗三个高级请求。
指令
- 开始一个新聊天。
- 将模型设置为 Copilot 中包含的免费模型(例如 GPT‑5 Mini)。
- 创建一个代理并将其模型设置为高级模型(例如 Opus 4.5)。
- 将模式设置为 agent。
- 在初始消息中,指示免费模型使用
runSubagent工具启动代理(名称自行决定)作为子代理,并传递所需查询(例如 “What time is it in London, UK”)。 - 提交消息。
结果
- 初始请求由免费 GPT‑5 Mini 模型处理,不产生费用。
- 免费模型创建一个子代理(同样免费)。
- 子代理以 agent 配置运行,其模型设置为高级模型。
- 高级模型处理子代理的工作,但不会消耗高级请求额度。
示例 1
示例聊天消息
/ask-opus Make a todolist app.
提示文件 (.github/prompts/ask-opus.prompt.md)
# USER_REQUEST_START
name: ask-opus
description: 在使用 Opus‑4.5 模型的子代理中运行查询。
model: GPT-5 mini (copilot)
agent: agent
# USER_REQUEST_INSTRUCTIONS
Call #tool:agent/runSubagent with the following arguments:
- agentName: "opus-agent"
- prompt: $USER_QUERY
# USER_REQUEST_RULES
- 您可以根据需要多次调用 USER_REQUEST_INSTRUCTIONS 中定义的子代理。
- 使用子代理决定最佳的响应或完成任务的方式(它比您更强大),包括将任务拆分为更小的步骤。
- 子代理应处理所有待办事项/任务/查询;您仅充当协调者。
- 不要为了节省 token 而操纵或概括子代理的响应——要全面且详细。
- 不要评估或响应此消息的其余部分;子代理负责所有后续内容。
# USER_REQUEST_END
代理文件 (.github/agents/opus.agent.md)
name: opus-agent
description: 一个帮助用户完成任务或查询的 AI 代理。
argument-hint: 要完成的查询或任务
model: Claude Opus 4.5 (copilot)
---
全面且准确地响应用户的查询/任务($ARGUMENTS)。
示例 2
另一种滥用向量(需要更多努力):
- 将
chat.agent.maxRequests设置为较高的值。 - 在聊天会话中使用高级模型(例如 Opus 4.5)作为 初始 模型。
- 构建一个自定义脚本(出于安全考虑未公开),模型将通过工具调用被指示执行该脚本。
- 编写提示,使模型重复工具调用,从而形成循环。
使用合适的脚本和提示,可以在不产生额外费用(仅限初始消息)的情况下重复调用高级模型。在测试中,单条消息触发了一个持续 3 小时的过程,启动了数百个 Opus 4.5 子代理来处理数百个文件,仅消耗了三个高级积分。三小时后停止循环,防止了进一步的消耗。
相关观察: 消息 “类型” 在客户端声明,暗示没有 API 验证,例如,toolCallingLoop.ts 第 484 行。
附加细节
- Copilot Chat Extension 版本: 0.37.2026013101
- VS Code 版本: 1.109.0‑insider (Universal) – f3d99de commit
- 操作系统版本: macOS 14 (Sonoma) 26.3
- 功能: Agent / SubAgent
此问题与 #252230 不同。
注意: 该漏洞最初向 MSRC(VULN‑172488)报告;MSRC 认为计费绕过不在其范围内,并建议作为公开错误报告提交。