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 hỗ trợ LLM nào cần thanh toán theo 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

Install the SDK

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

Get Your API Keys

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

Create a Meter in Dodo Payments

Trước khi theo dõi mức sử dụng, hãy tạo một đồng hồ đo trong bảng điều khiển Dodo Payments của bạn:
  1. Đăng nhập vào Dodo Payments Dashboard
  2. Điều hướng đến Products → Meters
  3. Nhấp “Create Meter”
  4. Cấu hình đồng hồ đo của bạn:
    • Meter Name: Chọn tên mô tả (ví dụ: “LLM Token Usage”)
    • Event Name: Đặt định danh sự kiện độc nhất (ví dụ: llm.chat_completion)
    • Aggregation Type: Chọn sum để cộng các lần xuất token
    • Over Property: Chọn thứ cần theo dõi:
      • inputTokens - Theo dõi token đầu vào/prompt
      • outputTokens - Theo dõi token đầu ra/hoàn thành (bao gồm token suy luận khi áp dụng)
      • totalTokens - Theo dõi tổng token đầu vào + đầu ra
Tên Event Name bạn đặt ở đây phải khớp chính xác với những gì bạn truyền vào SDK (phân biệt hoa thường).
Để biết hướng dẫn chi tiết, xem Hướng dẫn Thanh toán theo Mức sử dụng.
4

Track Token Usage

Bao 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);
Hoàn tất! Mỗi cuộc gọi API giờ tự động theo dõi mứ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
bắt buộc
Khóa API Dodo Payments của bạn. Lấy từ trang API Keys.
apiKey: process.env.DODO_PAYMENTS_API_KEY
environment
string
bắt buộc
Chế độ môi trường cho bộ theo dõi.
  • test_mode - Dùng cho phát triển và thử nghiệm
  • live_mode - Dùng cho production
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 số liệu production.
eventName
string
bắt buộc
Tên sự kiện kích hoạt đồng hồ đo của bạn. Phải khớp chính xác với cấu hình meter trên Dodo Payments (phân biệt hoa thường).
eventName: 'llm.chat_completion'
Tên sự kiện này liên kết mức sử dụng bạn theo dõi với đồng hồ đo đúng để tính toán 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
bắt buộc
Phiên bản client LLM của bạn (OpenAI, Anthropic, Groq, v.v.).
client: openai
customerId
string
bắt buộc
Định danh khách hàng duy nhất cho việc thanh toán. Nên khớp với ID khách hàng trên Dodo Payments.
customerId: 'customer_123'
Sử dụng ID người dùng hoặc ID khách hàng trong ứng dụng để đảm bảo thanh toán chính xác theo 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 mứ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 SDK nhà cung cấp ban đầu.

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 mức sử dụng với Vercel AI SDK để hỗ trợ LLM tổng quát.
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);
Các chỉ số được 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 suy luận qua AI SDK (như Gemini 2.5 Flash của Google với chế độ suy nghĩ), token suy luận tự động được bao gồm trong đếm outputTokens để đảm bảo tính toán thanh toán chính xác.
Theo dõi mức sử dụng token trên hơn 200 mô hình thông qua API hợp 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);
Các chỉ số được 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 mứ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);
Các chỉ số được theo dõi:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Tên mô hình
Theo dõi mứ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);
Các chỉ số được theo dõi:
  • input_tokensinputTokens
  • output_tokensoutputTokens
  • totalTokens được tính toán
  • Tên mô hình
Theo dõi suy luậ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);
Các chỉ số được theo dõi:
  • prompt_tokensinputTokens
  • completion_tokensoutputTokens
  • total_tokenstotalTokens
  • Tên mô hình
Theo dõi mứ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);
Các chỉ số được theo dõi:
  • promptTokenCountinputTokens
  • candidatesTokenCount + thoughtsTokenCountoutputTokens
  • totalTokenCounttotalTokens
  • Phiên bản mô hình
Gemini Thinking Mode: Khi sử dụng các mô hình Gemini có khả năng suy luận/ thinking (như Gemini 2.5 Pro), SDK tự động bao gồm thoughtsTokenCount (token suy luận) 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 tên sự kiện khác nhau cho các nhà cung cấp khác nhau để theo dõi mức sử dụng riêng trong các đồng hồ đo 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. Được SDK tạo tự động.Định dạng: llm_[timestamp]_[random]
customer_id
string
ID khách hàng bạn cung cấp khi bao bọc client. Được dùng để thanh toán.
event_name
string
Tên sự kiện kích hoạt đồng hồ đo của bạn. Khớp với cấu hình bộ theo dõi.
timestamp
string
Dấu thời ISO 8601 khi sự kiện xảy ra.
metadata
object
Mức sử dụng token và dữ liệu theo dõi bổ sung:
  • inputTokens - Số token đầu vào/prompt đã dùng
  • outputTokens - Số token đầu ra/hoàn thành đã dùng (bao gồm token suy luận khi áp dụng)
  • totalTokens - Tổng token (đầu vào + đầu ra)
  • model - Mô hình LLM được sử dụng (ví dụ: “gpt-4”)
  • provider - Nhà cung cấp LLM (nếu được bao gồm trong metadata wrapper)
  • Bất kỳ metadata tùy chỉnh nào bạn cung cấp khi bao bọc client
  • 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ó trong metadata bọc)
  • Bất kỳ metadata tùy chỉnh nào bạn đã cung cấp khi bọc client
Token suy luận: Với các mô hình có khả năng suy luận, outputTokens tự động bao gồm cả token hoàn thành và token suy luận.
Đồng hồ đo 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 mức sử dụng và thanh toán.