deepagent-stream-token-usage
deepagentsでサブエージェントを含み、streamModeにmessages/updatesが設定されている場合、ストリーミングチャンクから本会話のトークン使用量を集計できます。オプションでmainエージェント/サブエージェント別に使用量を分割することもできます。
description の原文を見る
在 deepagents 带 subagents、streamMode 含 messages/updates 时,从流式 chunk 汇总本次会话(及可选按 main/subagent 拆分)的 Token 用量。
SKILL.md 本文
deepagent-stream-token-usage
適用シーン
agent.stream(input, { streamMode: ["updates", "messages"] })が二要素タプル chunk[mode, payload]を返す。- 本セッション合計の input/output/total が必要、または メイン オーケストレーション / 各 subagent ごとに使用量を分割したい場合。
使用量がどこに現れるか(test/agent-stream.txt と組み合わせ)
-
mode === "messages"
payload = [messageChunk, bundleMetadata]。
単一のモデル生成がほぼ終了する際、messageChunkに以下が現れます:usage_metadata(優先):input_tokens、output_tokens、total_tokens、およびオプションのinput_token_details(例:cache_read)。response_metadata.usage(OpenAI 形式):prompt_tokens、completion_tokens、total_tokensなど。
同じストリーム内に同じid(例:chatcmpl-…)を持つ chunk が連続して複数出現する可能性があります。完全な数値を持つusage_metadataは通常生成の末尾に現れます(サンプルではおよそ 13–14 行目がメイン オーケストレーション、23–24 行目がtools:サブグラフ)。
-
mode === "updates"かつmodel_request(またはmodel)が存在する場合
内部のmessagesにある AI メッセージもusage_metadata/response_metadata.usageを持つ可能性があります(サンプル 15 行目)。
注意:同一のchatcmpl-*上で、response_metadata.usageのprompt_tokensとusage_metadata.input_tokensが 一致しない場合があります(グラフ内累計 vs 単一呼び出し)。集計時はusage_metadataを優先します。usage_metadataがない場合のみ、prompt_tokens/completion_tokensを input/output の推定として使用します。 -
中間フラグメント
多数の chunk のresponse_metadata.usageは空オブジェクト{}です。累加しないでください。そうするとミス判定につながります。
セッション合計使用量アルゴリズム(推奨)
Map<completionId, { input, output, total }>を維持します。completionIdはメッセージ上のkwargs.id/id(chatcmpl-…または等価)から取得します。- 各 chunk を反復処理します:
messages:payload[0]から使用量を解析します。usage_metadataがありtotal_tokensが有効な数値の場合、map.set(id, { input, output, total })を実行します(後の書き込みが前の書き込みを上書きし、同じ id で複数セグメントが繰り返される場合も結果は一貫しています)。updates→model_request.messages(および互換性のあるmodel):その中の各 AI メッセージについて同様に解析し、同じ map に対してsetを実行します(ストリーム末尾と同じ id の場合は重複排除し、最後の書き込みのみ保持。updates のみにその id が現れた場合も記録されます)。
- セッション合計:
sumInput = Σ v.input、sumOutput = Σ v.output、sumTotal = Σ v.total(またはsumInput + sumOutputで検証。キャッシュ課金の対象かどうかはプロバイダーに確認してください)。 - しないこと:
response_metadata.usage.total_tokensとusage_metadataを混在させて加算しないこと。同一 id では 1 セットのみ保持し、usage_metadataを優先します。
main / subagent ごとの分割(オプション)
「Subagent の帰属」ルールと同じです:
payload[1].checkpoint_nsがtools:で始まらない → このメッセージの使用量は main に記録します。tools:で始まる → 現在の 解析済みtaskのsubagent_typeに記録します(updates.model_requestの処理時にpendingSubagentを維持し、updates.toolsのtaskToolMessage 後にクリアする必要があります)。
各 (completionId) に同時に agentKey(main / hello_agent / …)のタグを付け、その後 agentKey で input/output をグループ化して合計を求めます(注意:同じ subagent の複数回呼び出しは複数の completion id を生成し、グループ化して合算するだけです)。
実装のヒント(TypeScript)
- LangChain シリアル化オブジェクトから読み取ります:
msg.kwargs?.usage_metadata、msg.kwargs?.response_metadata?.usage、msg.kwargs?.id。 - ランタイム クラス インスタンス:トップレベルの
usage_metadata/idである可能性があり、両方と互換性がある必要があります。 usage_metadataがない場合は、prompt_tokens/completion_tokensを input/output にマッピングしてから map に書き込みます。
制限事項
- 使用量は プロバイダーが返す課金フィールド に基づきます。サブグラフとメイン オーケストレーションは各自 1 回の completion に対応する 1 つの
chatcmpl-*に相当し、セッション合計 = 各 completion の合計です。 - フレームワークまたはプロバイダーのアップグレード後にフィールド名が変わる可能性があります。実際の chunk に基づいてサンプリング回帰テストを行ってください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- caoaolong
- ライセンス
- MIT
- 最終更新
- 2026/5/9
Source: https://github.com/caoaolong/vscode-cadb / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。