跳至主要內容
Telemetry
瀏覽說明文件
指南更新於 2026年8月8日由 Telemetry 編輯團隊和產品團隊審查閱讀約需 7 分鐘

一分鐘內即可檢視您的 OpenAI 成本儀表板

檢視完整的工作流程,然後建立一個包含範例使用事件和可立即執行的成本查詢的工作區。

本頁內容
  1. 一分鐘內即可檢視 OpenAI 成本儀表板
  2. 先決條件
  3. 1. 安裝並初始化SDK
  4. 2. 將定價置於儀器之外
  5. 3. 檢測回應 API 請求
  6. 4. 將重試計入成本
  7. 5. 將支出與成果聯絡起來
  8. 6.按功能、型號查詢每日費用
  9. 7. 將估算與發票進行核對
  10. 需要警惕什麼
  11. 後續步驟

按模型和功能追蹤 OpenAI API 成本

要追蹤 OpenAI API 成本,記錄權杖使用情況、型號、延遲、重試和估計請求成本以及引發呼叫的產品功能和客戶。這會將無法解釋的提供商發票轉換為您可以按模型、功能、團隊和結果查詢的支出。

範例 OpenAI 成本儀表板,其中包含支出、每個請求的成本、按模型劃分的每日成本以及昂貴的提示異常值

請求級遙測將成本趨勢與導致成本趨勢的模型和工作負載聯絡起來。

最有用的事件將提供商的使用情況與產品上下文結合起來。代幣數量解釋了消費情況; featureteam_idstatusaccepted 等欄位說明請求是否產生值。

一分鐘內即可檢視 OpenAI 成本儀表板

從免費樣品 OpenAI 使用活動開始。該快速入門會建立一個明確標記的事件,開啟一個準備執行的成本查詢,並將結果保留在您的入門儀表板上。您可以在更改應用程式程式碼之前檢查工作流程。

生成的樣本使用最小有用成本形狀:

{
  "provider": "openai",
  "model": "gpt-5",
  "input_tokens": 1250,
  "output_tokens": 340,
  "cost_usd": 0.0184,
  "latency_ms": 842,
  "status": "ok",
  "sample": true
}

立即針對生成的 telemetry_quickstart 資料表執行此命令:

SELECT
  model,
  COUNT(*) AS requests,
  SUM(input_tokens) AS input_tokens,
  SUM(output_tokens) AS output_tokens,
  ROUND(SUM(cost_usd), 4) AS total_cost_usd,
  ROUND(AVG(latency_ms), 0) AS average_latency_ms
FROM telemetry_quickstart
WHERE provider = 'openai'
GROUP BY model
ORDER BY total_cost_usd DESC;

先決條件

  • Telemetry API 鑰匙
  • OpenAI API 鑰匙
  • Node.js 和官方的 OpenAI JavaScript SDK

1. 安裝並初始化SDK

npm install openai telemetry-sh
import OpenAI from "openai";
import telemetry from "telemetry-sh";

const openai = new OpenAI();
telemetry.init(process.env.TELEMETRY_API_KEY);

將兩個 API 金鑰保留在伺服器端環境變數中。不要將它們放入原始碼管理或瀏覽器程式碼中。

2. 將定價置於儀器之外

OpenAI 定價和型號可用性可能會發生變化。從 OpenAI 官方定價頁面 讀取當前費率並儲存您在設定中使用的費率。

此範例使用每百萬代幣的美元:

OPENAI_MODEL="YOUR_MODEL"
OPENAI_INPUT_USD_PER_MILLION="YOUR_CURRENT_INPUT_RATE"
OPENAI_CACHED_INPUT_USD_PER_MILLION="YOUR_CURRENT_CACHED_INPUT_RATE"
OPENAI_CACHE_WRITE_USD_PER_MILLION="YOUR_CURRENT_CACHE_WRITE_RATE"
OPENAI_OUTPUT_USD_PER_MILLION="YOUR_CURRENT_OUTPUT_RATE"
OPENAI_PRICING_VERSION="provider-price-sheet-reviewed-YYYY-MM-DD"
const pricing = {
  inputUsdPerMillion: Number(process.env.OPENAI_INPUT_USD_PER_MILLION),
  cachedInputUsdPerMillion: Number(
    process.env.OPENAI_CACHED_INPUT_USD_PER_MILLION
  ),
  cacheWriteUsdPerMillion: Number(
    process.env.OPENAI_CACHE_WRITE_USD_PER_MILLION
  ),
  outputUsdPerMillion: Number(process.env.OPENAI_OUTPUT_USD_PER_MILLION),
};

function estimateCostUsd({
  inputTokens,
  cachedInputTokens,
  cacheWriteTokens,
  outputTokens,
}) {
  const uncachedInputTokens = Math.max(
    0,
    inputTokens - cachedInputTokens - cacheWriteTokens
  );

  return (
    (uncachedInputTokens * pricing.inputUsdPerMillion +
      cachedInputTokens * pricing.cachedInputUsdPerMillion +
      cacheWriteTokens * pricing.cacheWriteUsdPerMillion +
      outputTokens * pricing.outputUsdPerMillion) /
    1_000_000
  );
}

使用您的提供商發票作為計費的真實來源。快取輸入、推理權杖、批次處理、工具、影象、音訊或其他模型功能可能需要額外的欄位和定價規則。

當快取讀取或 快取寫入速率未知。將估計標記為不完整,直到當前 供應商價格資料表已經過審查。提供商的關鍵定價設定, 模型、服務層級和有效時間,而不是就地覆蓋它。

3. 檢測回應 API 請求

當前的 OpenAI JavaScript SDK 透過 client.responses.create 公開回應 API。完整的回應包括 usage 物件以及 input_tokensoutput_tokenstotal_tokens

async function createDraftReply({ input, teamId, userId, attempt = 1 }) {
  const model = process.env.OPENAI_MODEL;
  const startedAt = Date.now();

  try {
    const response = await openai.responses.create({
      model,
      input,
    });

    const inputTokens = response.usage?.input_tokens ?? 0;
    const outputTokens = response.usage?.output_tokens ?? 0;
    const cachedInputTokens =
      response.usage?.input_tokens_details?.cached_tokens ?? 0;
    const cacheWriteTokens =
      response.usage?.input_tokens_details?.cache_write_tokens ?? 0;
    const reasoningTokens =
      response.usage?.output_tokens_details?.reasoning_tokens ?? 0;
    const estimatedCostUsd = estimateCostUsd({
      inputTokens,
      cachedInputTokens,
      cacheWriteTokens,
      outputTokens,
    });

    await telemetry.log("llm_request_completed", {
      response_id: response.id,
      provider: "openai",
      model: response.model ?? model,
      feature: "draft_reply",
      team_id: teamId,
      user_id: userId,
      status: "success",
      attempt,
      input_tokens: inputTokens,
      cached_input_tokens: cachedInputTokens,
      cache_write_tokens: cacheWriteTokens,
      output_tokens: outputTokens,
      reasoning_tokens: reasoningTokens,
      total_tokens: response.usage?.total_tokens ?? inputTokens + outputTokens,
      estimated_cost_usd: estimatedCostUsd,
      latency_ms: Date.now() - startedAt,
      service_tier: response.service_tier ?? "not_reported",
      pricing_version: process.env.OPENAI_PRICING_VERSION,
    });

    return response.output_text;
  } catch (error) {
    await telemetry.log("llm_request_failed", {
      provider: "openai",
      model,
      feature: "draft_reply",
      team_id: teamId,
      user_id: userId,
      status: "error",
      attempt,
      error_type: error?.constructor?.name ?? "unknown_error",
      latency_ms: Date.now() - startedAt,
    });

    throw error;
  }
}

預設情況下,不記錄原始提示、完成情況、工具參數、憑據或私人客戶內容。優先選擇安全類別,例如 featureworkflowinput_categoryoutput_categoryerror_type

OpenAI當前提示快取指導文件cached_tokensusage.input_tokens_details 用於回覆 API 結果和文件 cache_write_tokens 適用於報告快取寫入的模型系列。它還顯示 輸出權杖詳細資訊下的 reasoning_tokens。參見官方提示快取 要求

推理權杖是回應的輸出權杖會計中的詳細資訊;做 在估算代幣總數時,不要再次將它們新增到 output_tokens 中。 保留單獨的欄位,因為它可以解釋成本、延遲或 行為。

4. 將重試計入成本

即使使用者看到,應用程式級重試也是一個新的計費請求 一項產品行動。在嘗試和增量中攜帶穩定的 operation_id attempt。單獨記錄終端應用程式結果。

await telemetry.log("ai_operation_completed", {
  operation_id: operationId,
  response_id: response.id,
  team_id: teamId,
  feature: "draft_reply",
  attempts: attempt,
  outcome: "accepted",
  accepted: true,
});

這支援每個邏輯操作的成本、每個接受的輸出的成本以及重試 放大。不要僅僅因為請求成本事件共享而對它們進行重複資料刪除 operation_id;每個提供商的請求都會產生成本。

5. 將支出與成果聯絡起來

每個請求的成本並不能告訴您輸出是否有用。當使用者接受、複製、儲存、重新生成或丟棄結果時記錄單獨的結果事件。

await telemetry.log("ai_output_reviewed", {
  response_id: responseId,
  team_id: teamId,
  user_id: userId,
  feature: "draft_reply",
  outcome: "accepted",
  accepted: true,
});

穩定的 response_id 可讓您將使用情況和結果結合起來,而無需儲存模型輸出本身。

6.按功能、型號查詢每日費用

Telemetry 自動新增 timestamp_utc,因此應用程式不需要傳送自己的時間戳欄位。

SELECT
  date_trunc('day', timestamp_utc) AS day,
  feature,
  model,
  COUNT(*) AS requests,
  SUM(input_tokens) AS input_tokens,
  SUM(cached_input_tokens) AS cached_input_tokens,
  SUM(cache_write_tokens) AS cache_write_tokens,
  SUM(output_tokens) AS output_tokens,
  SUM(reasoning_tokens) AS reasoning_tokens,
  ROUND(SUM(estimated_cost_usd), 4) AS estimated_cost_usd,
  ROUND(AVG(latency_ms), 0) AS avg_latency_ms
FROM llm_request_completed
WHERE timestamp_utc >= now() - INTERVAL '30 days'
GROUP BY day, feature, model
ORDER BY day ASC, estimated_cost_usd DESC;

estimated_cost_usd 視覺化為由 featuremodel 分割的堆積折線圖或面積圖。將其與請求量和接受輸出率配對,以便可以根據上下文解釋成本增加。

7. 將估算與發票進行核對

請求遙測答案支出來自何處。提供商發票答案 計費內容是什麼。在共享粒度(例如提供商專案)上協調兩者, 型號、服務等級、貨幣和 UTC 計費日。

SELECT
  date_trunc('day', timestamp_utc) AS day,
  model,
  service_tier,
  pricing_version,
  COUNT(*) AS requests,
  ROUND(SUM(estimated_cost_usd), 4) AS estimated_cost_usd
FROM llm_request_completed
WHERE timestamp_utc >= now() - INTERVAL '30 days'
GROUP BY
  date_trunc('day', timestamp_utc),
  model,
  service_tier,
  pricing_version
ORDER BY day ASC, model ASC, service_tier ASC;

將發票總額儲存在單獨的財務控制資料集中,然後進行比較 類似的時期。差異可能來自價格變化,不完整 事件、積分、批次或優先處理、非代幣工具、影象、音訊、 貨幣轉換,或應用程式遙測中缺少提供商專案。 不要僅僅為了強迫達成一致而“修復”事件歷史;記錄對賬 解釋。

需要警惕什麼

有用的警示包括:

  • 每日預計支出高於預期預算;
  • 高於測試閾值的每個接受輸出的成本;
  • 一種模型或功能的重試或失敗次數增加;
  • 提示或工具模式更改後快取輸入份額下降;
  • 快取寫入增加,但沒有相應的未來快取讀取優勢;
  • 一個提示版本或工作流程的推理權杖份額髮生變化;
  • p95 延遲增加,而接受輸出率保持平穩或下降;
  • 使用事件到達時未識別 pricing_version

後續步驟

使用完整的 按功能劃分的 LLM 成本 SQL 配方 檢查範例結果和儀表板設計。然後新增 接受的人工智慧產出每美元配方 將產品價值與預計支出進行比較。

如需完整的實施路徑,請繼續瞭解 OpenAI 代理整合LLM 成本追蹤範本AI代理遙測產品指南。這些頁面將請求級成本資料與代理執行、工具呼叫、儀表板和保留的產品結果連線起來。

對於基礎 API 形狀,請參閱 OpenAI 開發者快速入門回覆 API 參考

使用你自己的事件試試看

追蹤您的第一個真實的 OpenAI 請求

向您的編碼代理提供集中提示,執行一個真實模型請求,然後在 Telemetry 中驗證其權杖、成本、延遲和結果。

無需信用卡。自動建立明確標記的範例事件和準備執行的查詢,因此不需要生產資料來評估工作流程。

  1. 1. 建立一個標記明確的範例事件
  2. 2. 開啟準備執行的查詢
  3. 3. 將結果儲存到您的儀表板

相關功能

連線代理執行、工具使用、代幣成本、品質和產品成果。

頁面作者與參考資料

Telemetry 編輯團隊負責維護本文;產品團隊審查功能行為、範例和適用範圍。

我們如何審查文件