Usage Meter

TsgcAIUsageMeter 统计您的应用程序发给语言模型的每个请求的令牌数,并把它们换算成金额。把它赋给 TsgcAIChat.UsageMeter,再给它一份价格表和一个预算,达到预算的用户会在下一个请求发出之前被拒绝。

TsgcAIUsageMeter

按提供商和模型设置价格,按用户和会话累计总量,支持总量、每日或每月预算(可拦截请求),并可导出到 CSV、任意 TDataSet 和 OpenTelemetry 收集器。

组件类

TsgcAIUsageMeter

用途

令牌成本、预算和用量导出

平台

Windows、macOS、Linux、iOS 和 Android

版本。TsgcAIUsageMeter 随 sgcAI、sgcWebSockets Enterprise 和 All-Access 一同提供,版本范围与 TsgcAIChat 相同。2026.11.0 新增。sgcAI 是自包含的:它包含该组件所基于的 sgcWebSockets Core 运行时。适用于 Delphi 7 至 Delphi 13 和 C++ Builder。

为每个请求计价,为每个用户设限

添加价格,添加预算,把用量计关联到聊天组件。该聊天组件以及使用它的智能体发出的每个请求都会被统计。

uses
  sgcAI, sgcAI_Chat, sgcAI_UsageMeter;

procedure TForm1.MeterUsage;
var
  oPrice: TsgcAIUsagePrice;
  oBudget: TsgcAIUsageBudget;
begin
  oPrice := sgcAIUsageMeter1.Prices.Add; // or Prices.LoadFromFile('prices.json')
  oPrice.Provider := 'openai';
  oPrice.Model := 'gpt-5*';
  oPrice.InputPerMillion := 1.25;
  oPrice.OutputPerMillion := 10;
  oPrice.CachedPerMillion := 0.125;

  oBudget := sgcAIUsageMeter1.Budgets.Add; // every user can spend 2 USD a day
  oBudget.Scope := aubsUser;
  oBudget.Period := aubpDay;
  oBudget.MaxCost := 2;
  sgcAIUsageMeter1.OnBudgetExceeded := DoBudgetExceeded;

  // optional: one OpenTelemetry span per request
  sgcAIUsageMeter1.OpenTelemetry.Enabled := True;
  sgcAIUsageMeter1.OpenTelemetry.Endpoint := 'http://localhost:4318';

  sgcAIChat1.UserId := 'user-1';
  sgcAIChat1.UsageMeter := sgcAIUsageMeter1;
  Memo1.Lines.Add(sgcAIChat1.Chat('Hello'));

  Memo1.Lines.Add(Format('user-1 spent %.6f %s and %d tokens',
    [sgcAIUsageMeter1.TotalCost('user-1'), sgcAIUsageMeter1.Currency,
    sgcAIUsageMeter1.TotalTokens('user-1')]));
  sgcAIUsageMeter1.SaveToCSV('usage.csv');
end;

procedure TForm1.DoBudgetExceeded(Sender: TObject;
  const aBudget: TsgcAIUsageBudget; const aKey: string; aCost: Double;
  aTokens: Int64);
begin
  Memo1.Lines.Add(Format('Budget "%s" reached by %s: %.4f USD',
    [aBudget.DisplayName, aKey, aCost]));
end;

关键属性与方法

您最常使用的成员。

价格

Prices 保存每个提供商和模型每百万输入、输出和缓存令牌的价格。允许使用 gpt-5* 这样的模型模式,匹配最具体的一项优先。Prices.LoadFromFile 和 LoadFromJSON 用于加载价格表。缓存令牌按 CachedPerMillion 计费。

总量

TotalCost 和 TotalTokens 返回全部、某个用户、某个会话或某用户在某会话中的总量。Records 和 RecordCount 列出最近的 MaxRecords 个请求,不会改变总量,Clear 会重置全部数据。

预算

Budgets 的每一项都有 Scope(aubsGlobal、aubsUser 或 aubsSession)、可选的 Key、Period(aubpTotal、aubpDay 或 aubpMonth),以及 MaxCost 或 MaxTokens 上限。启用 BlockWhenExceeded 后,下一个请求会在发出之前被拒绝。

导出

SaveToCSV 和 ToCSV 为每个请求写一行,包含时间戳、提供商、模型、用户、会话、令牌数和成本。ExportToDataSet 把记录追加到字段名相符的任意 TDataSet。

OpenTelemetry

启用 OpenTelemetry.Enabled 后,每个请求都会变成一个遵循 GenAI 语义约定的 OTLP/HTTP span:提供商、模型、输入、输出和缓存令牌、用户和会话。由后台线程发送,因此聊天组件无需等待收集器。

事件

每个已计价的请求都会触发 OnRecord。达到上限时,每个预算、键和周期只触发一次 OnBudgetExceeded。由 fallback 提供商回答的请求按实际回答的提供商和模型计价。

规范与参考资料

该组件所用服务和协议的权威资料来源。

继续探索

在线帮助sgcAI 组件的完整 API 参考和使用指南。
所有 sgcAI 组件浏览每个 sgcAI 组件的完整功能矩阵。
下载免费试用版用您自己的 API 密钥试用。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,了解您 AI 功能的每位用户花费多少。