Chuyển đến nội dung chính
Hoàn hảo cho các ứng dụng SaaS, chatbot AI, công cụ tạo nội dung và bất kỳ ứng dụng nào sử dụng LLM cần thanh toán dựa trên mức sử dụng.

Khởi động nhanh

Bắt đầu với việc theo dõi token LLM tự động chỉ trong 2 phút:
1

Cài đặt SDK

Cài đặt Dodo Payments Ingestion Blueprints:
npm install @dodopayments/ingestion-blueprints
2

Lấy khóa API của bạn

Bạn sẽ cần hai khóa API:
Lưu trữ các khóa API của bạn một cách an toàn trong các biến môi trường. Không bao giờ cam kết chúng vào kiểm soát phiên bản.
3

Tạo một đồng hồ trong Dodo Payments

Trước khi theo dõi mức sử dụng, hãy tạo một đồng hồ trong bảng điều khiển Dodo Payments của bạn:
  1. Đăng nhập vào Bảng điều khiển Dodo Payments
  2. Đi tới Sản phẩm → Đồng hồ
  3. Nhấp vào “Tạo đồng hồ”
  4. Cấu hình đồng hồ của bạn:
    • Tên đồng hồ: Chọn một tên mô tả (ví dụ: “Sử dụng token LLM”)
    • Tên sự kiện: Đặt một định danh sự kiện duy nhất (ví dụ, llm.chat_completion)
    • Loại tổng hợp: Chọn sum để cộng dồn số lượng token
    • Theo thuộc tính: Chọn những gì để theo dõi:
      • inputTokens - Theo dõi token đầu vào/lời nhắc
      • outputTokens - Theo dõi token đầu ra/hoàn thành (bao gồm token lý do khi có thể)
      • totalTokens - Theo dõi tổng hợp token đầu vào + đầu ra
Tên Sự kiện bạn đặt ở đây phải khớp chính xác với những gì bạn truyền cho SDK (phân biệt chữ hoa chữ thường).
Để biết hướng dẫn chi tiết, xem Hướng dẫn thanh toán dựa trên mức sử dụng.
4

Theo dõi việc sử dụng token

Bọc client LLM của bạn và bắt đầu theo dõi tự động:
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { generateText } from 'ai';
import { google } from '@ai-sdk/google';

const llmTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'aisdk.usage',
});

const client = llmTracker.wrap({
  client: { generateText },
  customerId: 'customer_123'
});

const response = await client.generateText({
  model: google('gemini-2.0-flash'),
  prompt: 'Hello!',
  maxOutputTokens: 500
});

console.log('Usage:', response.usage);
Thế là xong! Mỗi cuộc gọi API bây giờ tự động theo dõi việc sử dụng token và gửi sự kiện đến Dodo Payments để thanh toán.

Cấu hình

Cấu hình Trình theo dõi

Tạo một trình theo dõi một lần tại khởi động ứng dụng với các tham số yêu cầu sau:
apiKey
string
required
Khóa API Dodo Payments của bạn. Lấy từ trang Khóa API.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
required
Chế độ môi trường cho trình theo dõi.
  • test_mode - Sử dụng cho phát triển và thử nghiệm
  • live_mode - Sử dụng cho sản xuất
environment: 'test_mode' // or 'live_mode'
Luôn sử dụng test_mode trong quá trình phát triển để tránh ảnh hưởng đến các chỉ số sản xuất.
eventName
string
required
Tên sự kiện kích hoạt đồng hồ của bạn. Phải khớp chính xác với những gì bạn đã cấu hình trong đồng hồ Dodo Payments của bạn (phân biệt chữ hoa chữ thường).
eventName: 'llm.chat_completion'
Tên sự kiện này liên kết việc sử dụng bạn theo dõi với đồng hồ đúng cho các phép tính thanh toán.

Cấu hình Bọc

Khi bọc client LLM của bạn, cung cấp các tham số sau:
client
object
required
Thể hiện client LLM của bạn (OpenAI, Anthropic, Groq, v.v.).
client: openai
customerId
string
required
Định danh khách hàng duy nhất cho việc thanh toán. Điều này nên khớp với ID khách hàng của bạn trong Dodo Payments.
customerId: 'customer_123'
Sử dụng ID người dùng hoặc ID khách hàng của ứng dụng bạn để đảm bảo thanh toán chính xác cho từng khách hàng.
metadata
object
Dữ liệu bổ sung tùy chọn để đính kèm vào sự kiện theo dõi. Hữu ích cho việc lọc và phân tích.
metadata: {
  feature: 'chat',
  userTier: 'premium',
  sessionId: 'session_123',
  modelVersion: 'gpt-4'
}

Ví dụ Cấu hình Hoàn chỉnh

import { createLLMTracker } from "@dodopayments/ingestion-blueprints";
import { generateText } from "ai";
import { google } from "@ai-sdk/google";
import "dotenv/config";

async function aiSdkExample() {
  console.log("🤖 AI SDK Simple Usage Example\n");

  try {
    // 1. Create tracker
    const llmTracker = createLLMTracker({
      apiKey: process.env.DODO_PAYMENTS_API_KEY!,
      environment: "test_mode",
      eventName: "your_meter_event_name",
    });

    // 2. Wrap the ai-sdk methods
    const client = llmTracker.wrap({
      client: { generateText },
      customerId: "customer_123",
      metadata: {
        provider: "ai-sdk",
      },
    });

    // 3. Use the wrapped function
    const response = await client.generateText({
      model: google("gemini-2.5-flash"),
      prompt: "Hello, I am a cool guy! Tell me a fun fact.",
      maxOutputTokens: 500,
    });

    console.log(response);
    console.log(response.usage);
    console.log("✅ Automatically tracked for customer\n");
  } catch (error) {
    console.error(error);
  }
}

aiSdkExample().catch(console.error);
Theo dõi tự động: SDK tự động theo dõi việc sử dụng token trong nền mà không làm thay đổi phản hồi. Mã của bạn vẫn sạch sẽ và giống như khi sử dụng các SDK của nhà cung cấp gốc.

Các Nhà cung cấp Hỗ trợ

LLM Blueprint hoạt động liền mạch với tất cả các nhà cung cấp và tổng hợp LLM lớn:
Theo dõi việc sử dụng với Vercel AI SDK cho hỗ trợ LLM toàn cầu.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { generateText } from 'ai';
import { google } from '@ai-sdk/google';

const llmTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'aisdk.usage',
});

const client = llmTracker.wrap({
  client: { generateText },
  customerId: 'customer_123',
  metadata: {
    model: 'gemini-2.0-flash',
    feature: 'chat'
  }
});

const response = await client.generateText({
  model: google('gemini-2.0-flash'),
  prompt: 'Explain neural networks',
  maxOutputTokens: 500
});

console.log('Usage:', response.usage);
Chỉ số theo dõi:
  • inputTokensinputTokens
  • outputTokens + reasoningTokensoutputTokens
  • totalTokenstotalTokens
  • Tên mô hình
Khi sử dụng các mô hình có khả năng lý do thông qua AI SDK (như Gemini 2.5 Flash của Google với chế độ suy nghĩ), các token lý do sẽ tự động được bao gồm trong số lượng outputTokens để thanh toán chính xác.
Theo dõi việc sử dụng token trên hơn 200 mô hình thông qua API thống nhất của OpenRouter.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

// OpenRouter uses OpenAI-compatible API
const openrouter = new OpenAI({
  baseURL: 'https://openrouter.ai/api/v1',
  apiKey: process.env.OPENROUTER_API_KEY
});

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'openrouter.usage'
});

const client = tracker.wrap({ 
  client: openrouter, 
  customerId: 'user_123',
  metadata: { provider: 'openrouter' }
});

const response = await client.chat.completions.create({
  model: 'qwen/qwen3-max',
  messages: [{ role: 'user', content: 'What is machine learning?' }],
  max_tokens: 500
});

console.log('Response:', response.choices[0].message.content);
console.log('Usage:', response.usage);
Chỉ số theo dõi:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Tên mô hình
OpenRouter cung cấp quyền truy cập vào các mô hình từ OpenAI, Anthropic, Google, Meta và nhiều nhà cung cấp khác thông qua một API duy nhất.
Theo dõi việc sử dụng token từ các mô hình GPT của OpenAI một cách tự động.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'openai.usage'
});

const client = tracker.wrap({ 
  client: openai, 
  customerId: 'user_123' 
});

// All OpenAI methods work automatically
const response = await client.chat.completions.create({
  model: 'gpt-4',
  messages: [{ role: 'user', content: 'Explain quantum computing' }]
});

console.log('Total tokens:', response.usage.total_tokens);
Chỉ số theo dõi:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Tên mô hình
Theo dõi việc sử dụng token từ các mô hình Claude của Anthropic.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'anthropic.usage'
});

const client = tracker.wrap({ 
  client: anthropic, 
  customerId: 'user_123' 
});

const response = await client.messages.create({
  model: 'claude-sonnet-4-0',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Explain machine learning' }]
});

console.log('Input tokens:', response.usage.input_tokens);
console.log('Output tokens:', response.usage.output_tokens);
Chỉ số theo dõi:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • Tính toán totalTokens
  • Tên mô hình
Theo dõi việc suy diễn LLM siêu nhanh với Groq.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import Groq from 'groq-sdk';

const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'groq.usage'
});

const client = tracker.wrap({ 
  client: groq, 
  customerId: 'user_123' 
});

const response = await client.chat.completions.create({
  model: 'llama-3.1-8b-instant',
  messages: [{ role: 'user', content: 'What is AI?' }]
});

console.log('Tokens:', response.usage);
Chỉ số theo dõi:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Tên mô hình
Theo dõi việc sử dụng token từ các mô hình Gemini của Google thông qua Google GenAI SDK.
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import { GoogleGenAI } from '@google/genai';

const googleGenai = new GoogleGenAI({ 
  apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY 
});

const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
  eventName: 'gemini.usage'
});

const client = tracker.wrap({ 
  client: googleGenai, 
  customerId: 'user_123' 
});

const response = await client.models.generateContent({
  model: 'gemini-2.5-flash',
  contents: 'Explain quantum computing'
});

console.log('Response:', response.text);
console.log('Usage:', response.usageMetadata);
Chỉ số theo dõi:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Phiên bản mô hình
Chế độ Suy nghĩ Gemini: Khi sử dụng các mô hình Gemini với khả năng suy nghĩ/lý do (như Gemini 2.5 Pro), SDK tự động bao gồm thoughtsTokenCount (token lý do) trong outputTokens để phản ánh chính xác toàn bộ chi phí tính toán.

Sử dụng Nâng cao

Nhiều Nhà cung cấp

Theo dõi việc sử dụng trên các nhà cung cấp LLM khác nhau với các trình theo dõi riêng biệt:
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';
import Groq from 'groq-sdk';
import Anthropic from '@anthropic-ai/sdk';
import { GoogleGenAI } from '@google/genai';

// Create separate trackers for different providers
const openaiTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'openai.usage'
});

const groqTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'groq.usage'
});

const anthropicTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'anthropic.usage'
});

const geminiTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'gemini.usage'
});

const openrouterTracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'live_mode',
  eventName: 'openrouter.usage'
});

// Initialize clients
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const googleGenai = new GoogleGenAI({ apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY });
const openrouter = new OpenAI({ 
  baseURL: 'https://openrouter.ai/api/v1',
  apiKey: process.env.OPENROUTER_API_KEY 
});

// Wrap clients
const trackedOpenAI = openaiTracker.wrap({ client: openai, customerId: 'user_123' });
const trackedGroq = groqTracker.wrap({ client: groq, customerId: 'user_123' });
const trackedAnthropic = anthropicTracker.wrap({ client: anthropic, customerId: 'user_123' });
const trackedGemini = geminiTracker.wrap({ client: googleGenai, customerId: 'user_123' });
const trackedOpenRouter = openrouterTracker.wrap({ client: openrouter, customerId: 'user_123' });

// Use whichever provider you need
const response = await trackedOpenAI.chat.completions.create({...});
// or
const geminiResponse = await trackedGemini.models.generateContent({...});
// or
const openrouterResponse = await trackedOpenRouter.chat.completions.create({...});
Sử dụng các tên sự kiện khác nhau cho các nhà cung cấp khác nhau để theo dõi việc sử dụng riêng biệt trong các đồng hồ của bạn.

Tích hợp API Express.js

Ví dụ hoàn chỉnh về việc tích hợp theo dõi LLM vào một API Express.js:
import express from 'express';
import { createLLMTracker } from '@dodopayments/ingestion-blueprints';
import OpenAI from 'openai';

const app = express();
app.use(express.json());

// Initialize OpenAI client
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// Create tracker once at startup
const tracker = createLLMTracker({
  apiKey: process.env.DODO_PAYMENTS_API_KEY,
  environment: process.env.NODE_ENV === 'production' ? 'live_mode' : 'test_mode',
  eventName: 'api.chat_completion'
});

// Chat endpoint with automatic tracking
app.post('/api/chat', async (req, res) => {
  try {
    const { message, userId } = req.body;
    
    // Validate input
    if (!message || !userId) {
      return res.status(400).json({ error: 'Missing message or userId' });
    }
    
    // Wrap client for this specific user
    const trackedClient = tracker.wrap({
      client: openai,
      customerId: userId,
      metadata: { 
        endpoint: '/api/chat',
        timestamp: new Date().toISOString()
      }
    });
    
    // Make LLM request - automatically tracked
    const response = await trackedClient.chat.completions.create({
      model: 'gpt-4',
      messages: [{ role: 'user', content: message }],
      temperature: 0.7
    });
    
    const completion = response.choices[0].message.content;
    
    res.json({ 
      message: completion,
      usage: response.usage
    });
  } catch (error) {
    console.error('Chat error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

Những gì được theo dõi

Mỗi cuộc gọi API LLM tự động gửi một sự kiện sử dụng đến Dodo Payments với cấu trúc sau:
{
  "event_id": "llm_1673123456_abc123",
  "customer_id": "customer_123",
  "event_name": "llm.chat_completion",
  "timestamp": "2024-01-08T10:30:00Z",
  "metadata": {
    "inputTokens": 10,
    "outputTokens": 25,
    "totalTokens": 35,
    "model": "gpt-4",
  }
}

Các Trường Sự kiện

event_id
string
Định danh duy nhất cho sự kiện cụ thể này. Tự động được tạo bởi SDK.Định dạng: llm_[timestamp]_[random]
customer_id
string
ID khách hàng bạn đã cung cấp khi bọc client. Sử dụng cho việc thanh toán.
event_name
string
Tên sự kiện kích hoạt đồng hồ của bạn. Khớp với cấu hình trình theo dõi của bạn.
timestamp
string
Thời gian ISO 8601 khi sự kiện xảy ra.
metadata
object
Việc sử dụng token và dữ liệu theo dõi bổ sung:
  • inputTokens - Số lượng token đầu vào/lời nhắc đã sử dụng
  • outputTokens - Số lượng token đầu ra/hoàn thành đã sử dụng (bao gồm token lý do khi có thể)
  • totalTokens - Tổng số token (đầu vào + đầu ra)
  • model - Mô hình LLM đã sử dụng (ví dụ: “gpt-4”)
  • provider - Nhà cung cấp LLM (nếu được bao gồm trong metadata bọc)
  • Bất kỳ metadata tùy chỉnh nào bạn đã cung cấp khi bọc client
Token Lý do: Đối với các mô hình có khả năng lý do, outputTokens tự động bao gồm cả token hoàn thành và token lý do.
Đồng hồ Dodo Payments của bạn sử dụng các trường metadata (đặc biệt là inputTokens, outputTokens hoặc totalTokens) để tính toán việc sử dụng và thanh toán.