SDK 用量、上下文与配额
区分每次调用、会话累计和账户额度,并动态读取计费相关字段。
SDK 提供实时事件和按需 RPC 两种用量入口。调用 token、当前上下文占用、整个会话累计及账户额度各有不同范围,不能将其中一个数字当作全部账单。
选择需要的信号
| 需求 | 接口 | 范围 |
|---|---|---|
| 每次模型调用 token | assistant.usage | 当前会话实时事件,包含 subagent 调用 |
| 当前上下文使用量 | session.usage_info | 当前会话实时事件 |
| 立即读取上下文组成 | session.rpc.metadata.contextInfo(...) | 当前会话快照 |
| 累计用量 | session.rpc.usage.getMetrics() | 整个会话,主代理和子代理 |
| 模型价格信息 | client.rpc.models.list({}) | 服务器级模型列表 |
| 账户配额 | client.rpc.account.getQuota({}) | 认证身份的额度 |
getMetrics、contextInfo 及 recomputeContextTokens 在生成的 RPC 中标为实验性;.NET 会产生 GHCP001 诊断。依赖这些接口时固定 SDK 与 runtime,不把本页字段表当永远不变的完整 Schema。
实时事件不能代替恢复后的累计
assistant.usage 中 inputTokens、outputTokens 属于该次模型调用;cost 是 premium request multiplier,不是美元。事件为 ephemeral,恢复会话时不会重放,单纯在 UI 内累加新收到的事件会漏掉此前用量。
session.usage_info 的 currentTokens / tokenLimit 表示当前上下文窗口占用,不是历史所有调用 token 的累计。完整字段如缓存、推理和时延见事件参考。
读取上下文组成
const { contextInfo } = await session.rpc.metadata.contextInfo({
promptTokenLimit: 0,
outputTokenLimit: 0,
});
if (contextInfo) {
console.log(contextInfo.totalTokens, contextInfo.promptTokenLimit);
console.log(contextInfo.systemTokens, contextInfo.conversationTokens);
console.log(contextInfo.toolDefinitionsTokens);
}promptTokenLimit 为 0 使用 runtime 默认;不知道 outputTokenLimit 时传 0。系统 prompt 与工具元数据尚未缓存、会话未完成初始化时 contextInfo 为 null,应显示数据尚不可用,不把它显示成零占用。
会话累计与模型价格
getMetrics 返回 totalNanoAiu、totalPremiumRequestCost 和 modelMetrics。后者按模型标识记录 usage.inputTokens、usage.outputTokens 与 totalNanoAiu;这些 key 是 runtime 字符串,不是固定编译时枚举。
totalNanoAiu 的单位为 nano-AI units。官方例子除以 1e9,但同时要求按最新 Copilot 计费规则确认换算;本页不将该算式进一步包装成货币价格。展示费用前应核实当前账单口径,不能与 per-call cost 混为一谈。
模型列表可返回 billing.multiplier,以及 tokenPrices 的 inputPrice、outputPrice、cachePrice、batchSize。价格按每批 token 表示,batchSize 给出一批数量;字段可能缺失,应动态读取而不是写死所有模型的固定单价。
账户配额
quotaSnapshots 常见 key 包括 premium_interactions、chat、completions,但 key 同样由 runtime 决定,读取前检查存在性。快照字段包括:
- entitlementRequests:本期额度,-1 表示 unlimited。
- usedRequests:本期已用请求。
- remainingPercentage:剩余百分比。
- resetDate:ISO 8601 重置日期。
多租户应用需为目标用户查询配额,不能把客户端默认身份的额度展示给所有用户。官方支持向 getQuota 提供该用户 token;参数形状应遵循当前语言生成类型与多租户说明。会话软预算则见会话上限,它与账户配额不是同一限制。