NPS-Release

English Version 中文版

Cognon Budget 规范

Version: 0.6 Date: 2026-05-14


1. 概述

Cognon Budget 机制允许 Agent 在请求中声明本次操作的最大 token 消耗上限。Node 据此裁剪响应字段、限制返回条数或拒绝超预算请求。

为解决不同 LLM 的 token 计算差异,NPS 引入 Cognon(CGN) 作为标准化计量单位。


2. Cognon(CGN)

2.1 定义

Cognon(CGN)是 NPS 协议族内部的标准 token 计量单位。各 LLM 的原生 token 通过汇率转换为 CGN。

CGN 定义为两个命名 profile,其合规性要求互不重叠(issue #40)。在线传递的每一个 CGN 值 MUST 明确关联到其中一个且只有一个 profile;对端 MUST NOT 混用两者。

Profile 用途 使用场景
CGN-Estimate 估算、预算提示、遥测、可采样流程 X-NWP-Budget 强制、CapsFrame 的 token_est、推送流逐事件 cgn_est 上报
CGN-Billing 商业结算、争议与冲销处理 计费的计量与对端之间交换的签名计量记录

CGN-Estimate(估算级)

CGN-Billing(结算级)

发出 CGN-Billing 记录的 Node MUST 同时满足以下全部要求:

发出以 CGN 计价的商业收费时,Node MUST 在线传输与响应头中(详见 §4.2)将其标记为 CGN-Billing。以 CGN-Estimate 形式或不带 profile 标记呈现的收费均不合规结算用途,对端 MAY 直接拒付争议,且无须援引 tokenizer 信任等级。

2.2 默认计算方法(Fallback)—— 仅适用于 CGN-Estimate

当 tokenizer 无法确定时,CGN-Estimate MAY 回退至以下公式:

CGN = ceil(UTF-8_bytes / 4)

此公式基于主流 LLM tokenizer 的平均行为(英文约 4 bytes/token,中文约 3 bytes/token),作为最保守的估算基线。

字节数 fallback 在任何情况下 MUST NOT 用于 CGN-Billing。若 Node 无法为某条将被计费的请求解析出 verified_tokenizer,MUST 拒绝为该请求发出 CGN-Billing 记录,并采取以下两种处理之一:(a) 将该路面降级为 CGN-Estimate(仅作不可计费遥测);(b) 以计费类错误拒绝该请求。

2.3 规范转换 Profile(CGN v1)

规范的模型 token 转换算法为 cgn.v1

CGN = ceil(((input_tokens * input_weight)
          + (output_tokens * output_weight)
          + (thinking_tokens * thinking_weight))
          * model_coefficient / scale)

缺失的 token 类别均按 0 处理。结果类型为 uint32。默认权重为: input_weight = 1output_weight = 4thinking_weight = 2scale = 1000model_coefficient = 1

Provider / model 系数、未知模型行为和合规测试向量的机器可读权威源是 cgn-profiles.yaml。当前覆盖 DeepSeek chat/reasoner、 OpenAI general/reasoning、Anthropic Haiku/Sonnet/Opus、Ollama 本地模型以及 默认 unknown fallback。

未知 provider 或模型 id MUST 使用 default.unknown 作为 CGN-Estimate, SHOULD 发出 cgn_profile_defaulted 遥测警告,且 MUST NOT 用于 CGN-Billing。 运维 MAY 在本地覆盖 model-pattern 映射,但此类覆盖 MUST 使用不同的 profile id 或版本,以便对端能区分它们与规范表。

Profile 适用范围。 cgn.v1cgn-profiles.yamlCGN-Estimate 是 normative 的,并允许表内值与模型原生计数之间存在文档化的 ±5 % 漂移。 对 CGN-Billing,双方对端 MUST 互相 pin 定一个特定 profile 版本(在会话 开始时刻或更早,并记录到签名计量记录中),且 MUST 使用与之匹配的、由 verified_tokenizer 得出的原生计数;±5 % 容差适用。default.unknown 仅适用于 CGN-Estimate;CGN-Billing 没有 fallback 行。


3. Tokenizer 解析链

Agent 发起请求时,Node 按以下优先级确定 tokenizer:

1. Agent 显式声明(X-NWP-Tokenizer 头)
   ↓ 未声明
2. 从 Agent 配置/IdentFrame 自动匹配
   ↓ 匹配失败
3. 使用默认计算方法(UTF-8 bytes / 4)

3.1 显式声明(优先级最高)

Agent 在请求头中声明 tokenizer:

X-NWP-Tokenizer: cl100k_base

Node MUST 识别声明的 tokenizer 并使用对应算法计算 token。若 Node 不支持该 tokenizer,SHOULD 回退到自动匹配。

3.2 自动匹配

Node 根据 IdentFrame 中的元数据推断 Agent 使用的模型族:

若 IdentFrame 包含以上字段,Node 使用对应的 tokenizer。

估算专用警示(normative —— issue #39)。 metadata.model_familymetadata.tokenizer 抵达节点时均属于 NPS-3-NIP §5.1 —— 未签名 metadata 的信任边界 定义的 tokenizer 三层信任模型中的 declared_tokenizer 层;§3.1 的 X-NWP-Tokenizer 请求头与之同等信任级别。本节自动匹配出的取值 MUST 仅作为估算提示使用,MUST NOT 驱动计费、结算、配额提升、声誉评分或任何安全相关决策。结算级与策略级流程 MUST 改用 verified_tokenizer(CA 或平台背书)信号;observed_tokenizer_profile 仅可用于 Node 内部滥用检测的回退。基于 declared_tokenizer 计费或授予配额提升的 Node 不合规。

3.3 默认 Fallback

无法确定 tokenizer 时,使用 ceil(UTF-8_bytes / 4) 计算 CGN。


4. 请求与响应

4.1 请求头

必填 描述
X-NWP-Budget 可选 最大 CGN 预算(uint32)
X-NWP-Tokenizer 可选 Agent 使用的 tokenizer 标识

4.2 响应头

Profile 描述
X-NWP-Tokens CGN-Estimate 本响应实际消耗的 CGN(估算级)
X-NWP-Tokens-Native CGN-Estimate 本响应原生 token 消耗(若已知 tokenizer)
X-NWP-Tokenizer-Used 两者 Node 实际使用的 tokenizer 标识
X-NWP-Tokens-Profile 两者 取值为 estimatebilling。缺省或 estimate MUST 由对端视为 CGN-Estimate。
X-NWP-Billing-Record CGN-Billing 指向本响应签名计量记录的引用(URI 或内容哈希)。当且仅当本响应按 CGN-Billing 计费时 MUST 存在。
X-NWP-Billing-Tokenizer-Tier CGN-Billing MUST 为 verified_tokenizer。缺省 → 不可计费。

同时缺失 X-NWP-Billing-RecordX-NWP-Billing-Tokenizer-Tier 的响应 MUST 由对端解释为 CGN-Estimate,无论双方是否存在任何商业约定;Node MUST NOT 基于仅含 CGN-Estimate 信号的响应进行结算。

4.3 超预算处理

当响应将超过 X-NWP-Budget 时:

  1. Node SHOULD 优先裁剪响应(减少返回字段或条数),使结果在预算内
  2. 若无法裁剪(如单条记录已超预算),Node MUST 返回 NWP-BUDGET-EXCEEDED 错误
  3. Node MUST NOT 静默截断结构化数据(截断可能导致 Agent 收到不完整结构)

5. CapsFrame 中的 token 估算

CapsFrame 的 token_est 字段值为 CGN:

{
  "frame": "0x04",
  "anchor_ref": "sha256:...",
  "count": 2,
  "data": [...],
  "token_est": 180,
  "tokenizer_used": "cl100k_base"
}

6. 实现注意事项

6.1 通用

6.2 CGN-Estimate

6.3 CGN-Billing


7. 流式与订阅预算策略

X-NWP-Budget 上限仅适用于同步请求/响应操作(QueryFrame → CapsFrame / StreamFrame 批次)。以下持续推送操作遵循不同规则:

7.1 流式查询(QueryFrame stream: true

7.2 SubscribeFrame / 推送流(topology.stream、事件订阅)

长连续推送流(如通过 SubscribeFrame 建立的 topology.stream)由一系列大小不固定的事件组成,预算语义有所不同:

方面 行为
X-NWP-Budget 强制 节点不执行;推送事件的生成独立于任何请求级预算上限
X-NWP-Tokens 上报 节点 SHOULD 在每个推送事件(DiffFrame)中附带此响应头,报告该事件有效载荷的 CGN
Agent 侧强制 Agent 负责跨事件累计 CGN,并在会话预算耗尽时主动断开连接

设计原因:对推送流执行 X-NWP-Budget 将要求节点缓冲未来事件,与实时拓扑变更交付的设计目标不兼容。订阅流的预算控制应由 Agent 侧负责。


归属:LabAcacia / INNO LOTUS PTY LTD · Apache 2.0