import { query } from "@anthropic-ai/claude-agent-sdk";
class CostTracker {
private processedMessageIds = new Set<string>();
private stepUsages: Array<any> = [];
async trackConversation(prompt: string) {
const result = await query({
prompt,
options: {
onMessage: (message) => {
this.processMessage(message);
}
}
});
return {
result,
stepUsages: this.stepUsages,
totalCost: result.usage?.total_cost_usd || 0
};
}
private processMessage(message: any) {
// 只处理带有使用情况的助手消息
if (message.type !== 'assistant' || !message.usage) {
return;
}
// 如果我们已经处理过这个消息ID,则跳过
if (this.processedMessageIds.has(message.id)) {
return;
}
// 标记为已处理并记录使用情况
this.processedMessageIds.add(message.id);
this.stepUsages.push({
messageId: message.id,
timestamp: new Date().toISOString(),
usage: message.usage,
costUSD: this.calculateCost(message.usage)
});
}
private calculateCost(usage: any): number {
// 在这里实现您的定价计算
// 这是一个简化的示例
const inputCost = usage.input_tokens * 0.00003;
const outputCost = usage.output_tokens * 0.00015;
const cacheReadCost = (usage.cache_read_input_tokens || 0) * 0.0000075;
return inputCost + outputCost + cacheReadCost;
}
}
// 使用方法
const tracker = new CostTracker();
const { result, stepUsages, totalCost } = await tracker.trackConversation(
"分析并重构这段代码"
);
console.log(`处理的步骤: ${stepUsages.length}`);
console.log(`总成本: $${totalCost.toFixed(4)}`);