@@ -35,6 +35,17 @@ export interface Message {
3535 * 消息的附加元数据
3636 */
3737 metadata ?: Record < string , unknown > ;
38+
39+ /**
40+ * Token 使用统计(可选)
41+ */
42+ usage ?: {
43+ completion_tokens : number ;
44+ prompt_tokens : number ;
45+ prompt_cache_hit_tokens ?: number ;
46+ prompt_cache_miss_tokens ?: number ;
47+ total_tokens : number ;
48+ } ;
3849}
3950
4051/**
@@ -225,6 +236,17 @@ export interface AgentOutput {
225236 * 完整的消息历史
226237 */
227238 history : Message [ ] ;
239+
240+ /**
241+ * Token 使用统计(可选)
242+ */
243+ usage ?: {
244+ completion_tokens : number ;
245+ prompt_tokens : number ;
246+ prompt_cache_hit_tokens ?: number ;
247+ prompt_cache_miss_tokens ?: number ;
248+ total_tokens : number ;
249+ } ;
228250}
229251
230252/**
@@ -406,6 +428,7 @@ export class Agent extends Component {
406428 let iteration = 0 ;
407429 let lastAssistantMessage : MessageWithToolCalls | null = null ;
408430 let hasMoreToolsToCall = true ;
431+ let accumulatedUsage : AgentOutput [ 'usage' ] | undefined ;
409432
410433 // 2. 开始迭代循环,直到达到最大迭代次数或模型没有更多工具调用
411434 while ( hasMoreToolsToCall && iteration < this . maxIterations ) {
@@ -422,6 +445,30 @@ export class Agent extends Component {
422445 // 保存模型回复作为最后的助手消息
423446 lastAssistantMessage = modelResponse ;
424447
448+ // 累积 token 使用统计
449+ if ( modelResponse . usage ) {
450+ if ( ! accumulatedUsage ) {
451+ accumulatedUsage = {
452+ completion_tokens : 0 ,
453+ prompt_tokens : 0 ,
454+ total_tokens : 0 ,
455+ } ;
456+ }
457+ accumulatedUsage . completion_tokens += modelResponse . usage . completion_tokens || 0 ;
458+ accumulatedUsage . prompt_tokens += modelResponse . usage . prompt_tokens || 0 ;
459+ accumulatedUsage . total_tokens += modelResponse . usage . total_tokens || 0 ;
460+ if ( modelResponse . usage . prompt_cache_hit_tokens ) {
461+ accumulatedUsage . prompt_cache_hit_tokens =
462+ ( accumulatedUsage . prompt_cache_hit_tokens || 0 ) +
463+ modelResponse . usage . prompt_cache_hit_tokens ;
464+ }
465+ if ( modelResponse . usage . prompt_cache_miss_tokens ) {
466+ accumulatedUsage . prompt_cache_miss_tokens =
467+ ( accumulatedUsage . prompt_cache_miss_tokens || 0 ) +
468+ modelResponse . usage . prompt_cache_miss_tokens ;
469+ }
470+ }
471+
425472 // 4. 检查是否有工具调用
426473 if ( ! modelResponse . tool_calls || modelResponse . tool_calls . length === 0 ) {
427474 // 没有工具调用,完成迭代
@@ -538,6 +585,7 @@ export class Agent extends Component {
538585 message : lastAssistantMessage ?. content || '' ,
539586 history : currentMessages ,
540587 toolCalls,
588+ usage : accumulatedUsage ,
541589 } ;
542590 } catch ( error ) {
543591 console . error (
0 commit comments