コスト記録としてのDeepSeek Harnessセッションログ
Updated August 16, 2026 · first published August 16, 2026
多くのエージェントスタックは、コスト追跡を後付けでボルト留めします。モデル呼び出しをラップして別システムにトークンを書き込み、その別システムはやがて実態からずれていきます。DeepSeek Harness は逆の順序を取ります。セッションログが一次成果物であり、トークン使用量はその中に住んでいます。
セッションは追記専用のイベントログ
セッションとは、型付き SessionEvent エントリの順序付き追記専用シーケンスです。各イベントは四つのフィールドを持ちます。
| フィールド | 意味 |
|---|---|
type | イベントの種類(例:assistant/message) |
seq | セッション内で単調増加するシーケンス番号 |
time | タイムスタンプ |
data | 型固有のペイロード |
サーフェスイベント(UI が表示するもの)はさらに二つのフィールドを加えます。派生元の生イベントを指す sourceEventSeqs と、surfaceOp です。この逆参照があるからこそ、コストの数値をそれを生んだ正確なイベントまで遡れます。
コストモデルが気にするイベント
turn/startとturn/end:ユーザーリクエストの外枠。turn/endは完了・中断・打ち切りを示すTurnEndReasonを持ちます。step/startとstep/end:ステップとは、一回のモデルリクエストとそれが引き起こすツール呼び出しのことです。これが自然な課金単位になります。assistant/message:モデル出力。任意でTokenUsageを伴います。assistant/chunk:ストリーミング出力。使用量チャンクを含みます。tool/callとtool/result:ツール実行。結果はmetaを持てます。request/headerとrequest/context:EpochHeaderと、プロバイダ・モデル・コンテキストウィンドウを含むリクエストコンテキスト。この組が使用量の数値に価格を与えます。
ドキュメントの指針は明快です。モデルから見えるものはログに残る。モデルのコンテキストに入るものはすべてイベントを残します。つまりログは構成上完全であり、「誰も計測を忘れない限り完全」ではありません。
使用量は出力とともに運ばれる
トークン使用量はサイドチャネルに書かれるのではなく、それが属する出力とともに運ばれます。プロバイダが実際に課金した内容に最も近いので、使用量チャンク({ type: 'usage' } の assistant/chunk)を優先し、チャンクが無い場合に assistant/message.usage へフォールバックしてください。このように読むコストモデルは、生成していないステップに数値を割り当てることが原理的にできません。
複製ではなく導出された履歴
モデルが見るメッセージ履歴は、イベントログから射影されます。第二の真実として横に保持されるわけではありません。コストの数値が実行と一致するシステムと、両者が乖離してどちらが正しいか誰にも言えないシステムとの差はここにあります。
「モデルから見えるものはログに残る」は、コストの再構成を可能にする唯一の規律です。これが無ければ、あらゆる帰属の数値は誤差幅の分からない推定にすぎません。
この上に何を作るか
step/startとstep/endを結合してステップスパンを作る。コストを報告する単位はこれです。- 各スパンに
request/context(プロバイダ、モデル、コンテキストウィンドウ)とチャンク使用量から求めた価格を付与する。 - ステップごとの
tool/callのファンアウトを数える。ツールの分岐は、あるターンの費用が突然十倍になる典型的な理由です。 TurnEndReasonの分布を監視する。中断・打ち切りのターンは成果のない支払い済み作業であり、ログが無ければ最初に失われる指標です。
Related
Want this applied to your own LLM spend? FinOps LLM runs a free audit of your AI costs and shows where the savings are. Book free audit →