使用量メーター
TsgcAIUsageMeter は、アプリケーションが言語モデルに送信するすべてのリクエストのトークン数を数え、金額に換算します。TsgcAIChat.UsageMeter に割り当て、価格表と予算を設定すると、予算に達したユーザーは次のリクエストが送信される前に拒否されます。
TsgcAIUsageMeter は、アプリケーションが言語モデルに送信するすべてのリクエストのトークン数を数え、金額に換算します。TsgcAIChat.UsageMeter に割り当て、価格表と予算を設定すると、予算に達したユーザーは次のリクエストが送信される前に拒否されます。
プロバイダーとモデルごとの価格、ユーザーとセッションごとの累計、リクエストをブロックできる総額、日次、月次の予算、そして 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 は、プロバイダーとモデルごとの、入力、出力、キャッシュされたトークン 100 万個あたりの価格を保持します。gpt-5* のようなモデルパターンも使え、最も具体的に一致するものが優先されます。Prices.LoadFromFile と LoadFromJSON で価格表を読み込みます。キャッシュされたトークンは CachedPerMillion で課金されます。
TotalCost と TotalTokens は、全体、1 人のユーザー、1 つのセッション、または 1 つのセッション内の 1 人のユーザーの合計を返します。Records と RecordCount は、合計を変えずに直近の MaxRecords 件のリクエストを一覧表示し、Clear はすべてをリセットします。
Budgets の各項目には、Scope(aubsGlobal、aubsUser、aubsSession)、任意の Key、Period(aubpTotal、aubpDay、aubpMonth)、そして MaxCost または MaxTokens の上限があります。BlockWhenExceeded を有効にすると、次のリクエストは送信前に拒否されます。
SaveToCSV と ToCSV は、タイムスタンプ、プロバイダー、モデル、ユーザー、セッション、トークン数、コストを、リクエストごとに 1 行で書き出します。ExportToDataSet は、フィールド名が一致する任意の TDataSet にレコードを追加します。
OpenTelemetry.Enabled を有効にすると、すべてのリクエストが GenAI セマンティック規約に沿った OTLP/HTTP スパンになります。内容はプロバイダー、モデル、入力、出力、キャッシュされたトークン、ユーザー、セッションです。送信はバックグラウンドスレッドが行うため、チャットがコレクターを待つことはありません。
OnRecord は、料金が計算されたすべてのリクエストで発生します。OnBudgetExceeded は、上限に達したときに予算、キー、期間ごとに 1 回発生します。フォールバックのプロバイダーが応答したリクエストは、実際に応答したプロバイダーとモデルで料金が計算されます。
このコンポーネントが利用するサービスとプロトコルの一次情報です。