Usage Meter
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는 전체, 한 사용자, 한 세션, 또는 한 세션 안의 한 사용자에 대한 합계를 반환합니다. Records와 RecordCount는 합계를 바꾸지 않고 최근 MaxRecords개의 요청을 나열하며, Clear는 모두 초기화합니다.
Budgets의 각 항목에는 Scope(aubsGlobal, aubsUser, aubsSession), 선택 사항인 Key, Period(aubpTotal, aubpDay, aubpMonth), 그리고 MaxCost 또는 MaxTokens 한도가 있습니다. BlockWhenExceeded를 켜면 다음 요청은 전송되기 전에 거부됩니다.
SaveToCSV와 ToCSV는 요청마다 타임스탬프, 공급자, 모델, 사용자, 세션, 토큰, 비용을 한 줄로 기록합니다. ExportToDataSet은 필드 이름이 일치하는 모든 TDataSet에 레코드를 추가합니다.
OpenTelemetry.Enabled를 켜면 모든 요청이 GenAI 시맨틱 규약을 따르는 OTLP/HTTP span이 됩니다: 공급자, 모델, 입력, 출력, 캐시 토큰, 사용자, 세션. 백그라운드 스레드가 전송하므로 채팅이 수집기를 기다리는 일은 없습니다.
OnRecord는 비용이 계산된 모든 요청마다 발생합니다. OnBudgetExceeded는 한도에 도달했을 때 예산, 키, 기간마다 한 번 발생합니다. 폴백 공급자가 답한 요청은 실제로 답한 공급자와 모델로 계산됩니다.
이 컴포넌트가 사용하는 서비스와 프로토콜의 공식 자료입니다.