# Conflicts: # docs/subsystems/agent-team.i18n.yaml # docs/subsystems/approval.i18n.yaml # docs/subsystems/client-modules.i18n.yaml # docs/subsystems/client-modules.md # docs/subsystems/client-modules.zh.md # docs/subsystems/code-runtime.i18n.yaml # docs/subsystems/commands.i18n.yaml # docs/subsystems/commands.md # docs/subsystems/commands.zh.md # docs/subsystems/compaction.i18n.yaml # docs/subsystems/compaction.md # docs/subsystems/compaction.zh.md # docs/subsystems/core.i18n.yaml # docs/subsystems/core.md # docs/subsystems/core.zh.md # docs/subsystems/credentials.i18n.yaml # docs/subsystems/credentials.md # docs/subsystems/credentials.zh.md # docs/subsystems/feedback.i18n.yaml # docs/subsystems/filesystem.i18n.yaml # docs/subsystems/goal.i18n.yaml # docs/subsystems/http-server.md # docs/subsystems/http-server.zh.md # docs/subsystems/invariants.i18n.yaml # docs/subsystems/invariants.md # docs/subsystems/invariants.zh.md # docs/subsystems/jobs.i18n.yaml # docs/subsystems/llm-streaming.i18n.yaml # docs/subsystems/llm-streaming.md # docs/subsystems/llm-streaming.zh.md # docs/subsystems/permission-presets.md # docs/subsystems/permission-presets.zh.md # docs/subsystems/persistence.i18n.yaml # docs/subsystems/persistence.md # docs/subsystems/persistence.zh.md # docs/subsystems/plan.i18n.yaml # docs/subsystems/plan.md # docs/subsystems/plan.zh.md # docs/subsystems/sandbox.i18n.yaml # docs/subsystems/sandbox.md # docs/subsystems/sandbox.zh.md # docs/subsystems/schedule.i18n.yaml # docs/subsystems/session-projection.i18n.yaml # docs/subsystems/session-projection.md # docs/subsystems/session-projection.zh.md # docs/subsystems/session-query.i18n.yaml # docs/subsystems/session-reference.i18n.yaml # docs/subsystems/session-reference.md # docs/subsystems/session-reference.zh.md # docs/subsystems/session-telemetry.md # docs/subsystems/session-telemetry.zh.md # docs/subsystems/session-title.i18n.yaml # docs/subsystems/session.i18n.yaml # docs/subsystems/session.md # docs/subsystems/session.zh.md # docs/subsystems/settings.i18n.yaml # docs/subsystems/settings.md # docs/subsystems/settings.zh.md # docs/subsystems/shell.i18n.yaml # docs/subsystems/shell.md # docs/subsystems/shell.zh.md # docs/subsystems/skills.i18n.yaml # docs/subsystems/skills.md # docs/subsystems/skills.zh.md # docs/subsystems/spill.i18n.yaml # docs/subsystems/storage.i18n.yaml # docs/subsystems/subagent.i18n.yaml # docs/subsystems/subagent.md # docs/subsystems/subagent.zh.md # docs/subsystems/subprocess.i18n.yaml # docs/subsystems/system-prompt.i18n.yaml # docs/subsystems/system-prompt.md # docs/subsystems/system-prompt.zh.md # docs/subsystems/tasks.md # docs/subsystems/tasks.zh.md # docs/subsystems/terminal.md # docs/subsystems/terminal.zh.md # docs/subsystems/token-meter.i18n.yaml # docs/subsystems/tools.i18n.yaml # docs/subsystems/tools.md # docs/subsystems/tools.zh.md # docs/subsystems/typert.i18n.yaml # docs/subsystems/typert.md # docs/subsystems/typert.zh.md # docs/subsystems/user-interaction.i18n.yaml # docs/subsystems/user-questions.i18n.yaml # docs/subsystems/user-questions.md # docs/subsystems/user-questions.zh.md # docs/subsystems/web.i18n.yaml # docs/subsystems/workflow.i18n.yaml # docs/subsystems/workflow.md # docs/subsystems/workflow.zh.md # docs/subsystems/workspace.i18n.yaml # docs/subsystems/workspace.md # docs/subsystems/workspace.zh.md # packages/typert/generator/tests/cordis-catalog.spec.ts
90 lines
4.4 KiB
Markdown
90 lines
4.4 KiB
Markdown
# Token 计量
|
||
|
||
[English](token-meter.md) | 中文
|
||
|
||
`@deepseek-ai/dsh-token-meter` 公开一个独立的回放快照,用于表示请求压力与按位置计算的表层定价。`logRevision` 表示生成该计量中每个字段时所消费的持久事件数量。
|
||
|
||
来源:[`packages/llm/token-meter/src/types.ts`](../../packages/llm/token-meter/src/types.ts)
|
||
|
||
## `TokenMeasurement`
|
||
|
||
```ts type-equiv
|
||
/** Detached immutable request-pressure and surface snapshot at one consumed log revision. */
|
||
interface TokenMeasurement {
|
||
/** Number of durable events consumed; equal to the next unread event seq. */
|
||
readonly logRevision: number
|
||
/** Provider or heuristic anchor used for this measurement. */
|
||
readonly baseline: TokenMeasurementBaseline
|
||
/** Signed repricing of current surface content relative to the baseline anchor. */
|
||
readonly surfaceDeltaTokens: number
|
||
/** Non-negative current request-and-response pressure. */
|
||
readonly totalTokens: number
|
||
/** Total heuristic tokens across the current surface. */
|
||
readonly surfaceTokens: number
|
||
/** Current surface nodes in positional head-to-tail order. */
|
||
readonly nodes: readonly TokenSurfaceNode[]
|
||
}
|
||
```
|
||
|
||
`baseline.kind === 'usage'` 表示最近一次成功的提供方调用具有相同的规范请求 envelope,且该调用的总量不低于其完整启发式锚点。`estimated` 表示不存在可复用的保守 usage 锚点,因此服务使用固定启发式规则对完整信封和表层定价。后续成功请求会替换早先的锚点;有符号的 `surfaceDeltaTokens` 会保留相对于匹配锚点的增长与缩减。`totalTokens` 仍表示请求与响应压力,`surfaceTokens` 则是仅针对表层的启发式总量,等于所有节点价格之和。
|
||
|
||
## `TokenSurfaceNode`
|
||
|
||
```ts type-equiv
|
||
/** One token-priced node in the current ordered session surface. */
|
||
interface TokenSurfaceNode {
|
||
/** Durable sequence number of the surface event. */
|
||
readonly seq: number
|
||
/** Heuristic tokens for the exact message projected by this node. */
|
||
readonly tokens: number
|
||
}
|
||
```
|
||
|
||
表层顺序具有权威性;替换节点的持久 seq 可能高于位置排在其后的节点。该快照不可变,不会随底层回放折叠推进而增长。
|
||
|
||
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
||
|
||
<a id="cordis-surface"></a>
|
||
|
||
## Cordis API
|
||
|
||
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.zh.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
||
|
||
<a id="ctxtokenmeter--tokenmeter"></a>
|
||
|
||
### `ctx.tokenMeter` — `TokenMeter`
|
||
|
||
Replay owner for one service-wide estimator and isolated per-session folds.
|
||
|
||
```ts cordis-catalog
|
||
/**
|
||
* Measure current request pressure and surface through the durable tail.
|
||
*
|
||
* Provider usage is reused only when the latest successful call's canonical
|
||
* request envelope matches `requestHeader` and its total is no lower than
|
||
* that call's full heuristic anchor; otherwise the complete envelope and
|
||
* surface are heuristically repriced.
|
||
*
|
||
* `requestHeader` affects request pressure only; surface fields always
|
||
* describe the current session surface. Every call clones those positional
|
||
* nodes, so measurement is O(surface).
|
||
*
|
||
* @param session - session to replay through its current durable tail.
|
||
* @param requestHeader - optional effective request envelope replacing the latest logged header.
|
||
* @returns a detached deeply immutable pressure and surface measurement.
|
||
*/
|
||
measure(session: Session, requestHeader?: EpochHeader): TokenMeasurement
|
||
|
||
/**
|
||
* Heuristically price one model-visible message (instance face of the pure
|
||
* `estimateMessage` export from `estimate.ts`).
|
||
* @param message - message to price without mutation.
|
||
* @returns content and role-framing tokens under the fixed service heuristic.
|
||
*/
|
||
estimateMessage(message: Message): number
|
||
```
|
||
|
||
Types: [EpochHeader](session.zh.md) · [Message](llm-streaming.zh.md) · [Session](session.zh.md)
|
||
|
||
Source: [`packages/llm/token-meter/src/index.ts`](../../packages/llm/token-meter/src/index.ts)
|
||
<!-- END GENERATED cordis-surface -->
|