LLM成本跟踪器
](https://www.npmjs.com/package/llm-cost-tracker) 
一个专业的TypeScript库,用于跟踪和管理多个LLM提供商(OpenAI、Anthropic、Google等)的成本。监控您的人工智能支出,设定预算,并在达到阈值时收到警报。
特性
- 🎯 多提供商支持 -跟踪OpenAI、Anthropic、谷歌和定制提供商的成本
- 💰 预算管理 -使用可定制的阈值警报设置支出限制
- 📊 详细分析 -按供应商、型号和时间段获取全面的成本汇总
- 🔔 实时警报 -达到或超过预算阈值时接收回调
- 🚀 REST API服务器 -用于远程成本跟踪的可选HTTP服务器
- 💾 灵活存储 -内置存储器,可轻松扩展
- 🎨 自定义定价 -覆盖自定义型号或特价的默认定价
- 📦 零依赖 -重量轻,对生产的依赖性最小
- 🔒 类型安全 -完全支持TypeScript,具有全面的类型定义
安装
npm install llm-cost-tracker快速开始
基本用法
import {
CostTracker,
InMemoryStorage,
PriceRegistry,
BudgetManager,
} from "llm-cost-tracker";
// Initialize components
const storage = new InMemoryStorage();
const priceRegistry = new PriceRegistry();
const budgetManager = new BudgetManager(storage, {
limitUSD: 100.0,
thresholdPercent: 80,
});
// Create tracker
const tracker = new CostTracker(storage, priceRegistry, budgetManager);
// Track a cost
const event = await tracker.track({
provider: "openai",
model: "gpt-4",
inputTokens: 1000,
outputTokens: 500,
});
console.log(`Cost: $${event.totalCostUSD}`);
// Get summary
const summary = await tracker.getSummary();
console.log(`Total spent: $${summary.totalCostUSD}`);
console.log(`Total events: ${summary.eventCount}`);带有预算警报
import { BudgetManager } from "llm-cost-tracker";
const budgetManager = new BudgetManager(storage, {
limitUSD: 100.0,
thresholdPercent: 80,
});
// Set up alert callbacks
budgetManager.onThreshold((status) => {
console.log(`⚠️ Warning: ${status.percentUsed}% of budget used!`);
console.log(`Spent: $${status.usedUSD} / $${status.limitUSD}`);
});
budgetManager.onExceeded((status) => {
console.log(`🚨 Budget exceeded! Spent: $${status.usedUSD}`);
// Take action: disable API calls, send notifications, etc.
});使用MCP服务器
import { MCPServer } from "llm-cost-tracker/server";
const server = new MCPServer({
port: 3000,
host: "localhost",
costTracker: tracker,
budgetManager: budgetManager,
});
await server.start();
console.log("MCP Server running on http://localhost:3000");API终点
轨道成本
POST /cost.track
Content-Type: application/json
{
"provider": "openai",
"model": "gpt-4",
"inputTokens": 1000,
"outputTokens": 500
}获取摘要
GET /cost.summary获取预算状态
GET /budget.status设定预算
POST /budget.set
Content-Type: application/json
{
"limitUSD": 100.0,
"thresholdPercent": 80
}重置数据
POST /cost.reset支持的供应商和型号
开放人工智能
gpt-4-0.03美元/千输入,0.06美元/千输出gpt-4-turbo-0.01美元/千输入,0.03美元/千输出gpt-3.5-turbo-0.0005/1K输入,0.0015/1K输出
Anthropic
claude-3-opus-0.015/1K输入,0.075/1K输出claude-3-sonnet-0.003/1K输入,0.015/1K输出claude-3-haiku-0.00025/千美元输入,0.00125/千$输出
谷歌
gemini-pro-0.00025/1K输入,0.0005/1K输出gemini-pro-vision-0.00025/1K输入,0.0005/1K输出
高级用法
自定义定价
import { PriceRegistry } from "llm-cost-tracker";
const priceRegistry = new PriceRegistry();
// Add custom pricing for a model
priceRegistry.register("openai", "gpt-4-custom", {
inputPricePerThousand: 0.025,
outputPricePerThousand: 0.05,
});
// Use it
const event = await tracker.track({
provider: "openai",
model: "gpt-4-custom",
inputTokens: 1000,
outputTokens: 500,
});多租户应用程序的命名空间
// Track costs for different users/projects
await tracker.track({
provider: "openai",
model: "gpt-4",
inputTokens: 1000,
outputTokens: 500,
namespace: "user-123",
});
// Get summary for specific namespace
const userSummary = await tracker.getSummary("user-123");成本模拟(无持久性)
// Calculate cost without saving to storage
const simulatedEvent = tracker.simulateCost({
provider: "openai",
model: "gpt-4",
inputTokens: 1000,
outputTokens: 500,
});
console.log(`Estimated cost: $${simulatedEvent.totalCostUSD}`);自定义存储提供商
import { StorageProvider, CostEvent } from "llm-cost-tracker";
class DatabaseStorage implements StorageProvider {
async save(event: CostEvent): Promise {
// Save to your database
}
async loadAll(namespace?: string): Promise {
// Load from your database
}
async reset(namespace?: string): Promise {
// Clear your database
}
}
const storage = new DatabaseStorage();
const tracker = new CostTracker(storage, priceRegistry);API 参考
CostTracker
track(request: TrackingRequest): Promise
跟踪新的LLM API调用并返回成本事件。
参数:
provider(string)-提供者名称(例如“openai”、“anthropic”)model(string)-型号名称(例如“gpt-4”、“claude-3-opus”)inputTokens(number)-输入令牌的数量outputTokens(number)-输出令牌的数量namespace(字符串,可选)-用于多租户跟踪的命名空间
退货: CostEvent 计算成本
simulateCost(request: TrackingRequest): CostEvent
计算成本而不坚持存储。
getSummary(namespace?: string): Promise
获取按供应商和型号细分的汇总成本汇总。
reset(namespace?: string): Promise
清除所有跟踪数据。
预算经理
constructor(storage: StorageProvider, config: BudgetConfig)
创建一个新的预算经理。
配置选项:
limitUSD(数字)-最高支出限额(美元)thresholdPercent(数字)-警告的百分比阈值(0-100)resetInterval(字符串,可选)-“每日”、“每周”、“每月”或“手动”namespace(字符串,可选)-要跟踪的命名空间
onThreshold(callback: BudgetCallback): void
设置阈值警告的回调。
onExceeded(callback: BudgetCallback): void
设置超出限制的回调。
checkBudget(): Promise
对照预算检查当前支出并触发回调。
getStatus(): Promise
在不触发回调的情况下获取当前预算状态。
updateConfig(config: Partial): void
更新预算配置。
reset(): Promise
重置预算使用数据。
价格注册表
register(provider: string, model: string, pricing: ModelPricing): void
为模型注册自定义定价。
getPricing(provider: string, model: string): ModelPricing
获取特定供应商和型号的定价。
calculateCost(tokens: number, pricePerThousand: number): number
计算给定数量的令牌的成本。
类型
interface CostEvent {
id: string;
timestamp: Date;
provider: string;
model: string;
inputTokens: number;
outputTokens: number;
inputCostUSD: number;
outputCostUSD: number;
totalCostUSD: number;
namespace?: string;
}
interface CostSummary {
totalCostUSD: number;
totalInputTokens: number;
totalOutputTokens: number;
eventCount: number;
byProvider: Record;
byModel: Record;
}
interface BudgetStatus {
limitUSD: number;
usedUSD: number;
percentUsed: number;
remainingUSD: number;
thresholdReached: boolean;
limitExceeded: boolean;
resetInterval: string;
nextResetDate?: Date;
}示例
看看 示例 完整工作示例目录:
- 图书馆使用.ts -基本图书馆使用
- 预算警报 -带有警报的预算管理
- 定制定价.ts -自定义定价配置
- microservice.ts -MCP服务器部署
测试
# Run all tests
npm test
# Run tests with coverage
npm run test:coverage
# Run tests in watch mode
npm run test:watch建筑
npm run build贡献
欢迎投稿!请随时提交拉取请求。
许可证
麻省理工学院© 多米尼克 Houessou
支持
- 📧 电子邮件:houessoudominique@gmail.com
- 🐛 问题:
更新日志
1.0.0 (2024-11-20)
初始版本包含:
- 多提供商成本跟踪(OpenAI、Anthropic、谷歌)
- 具有阈值警报的预算管理
- 内存存储实现
- REST API服务器(MCP服务器)
- 定制定价支持
- 多租户应用程序的命名空间支持
- 全面测试覆盖率(92%+)
- 完全支持TypeScript
