0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに12人の制作チームを演じさせたら、1日半で1億6千万トークンが消えた

0
Last updated at Posted at 2026-09-27

📝 この記事は forge.workstyle.tech に掲載した記事の転載です。

Codex の利用画面に、こう出た。

ERROR: You've hit your usage limit.
try again at Sep 24th, 2026 1:36 PM.

5日後まで使えない。51話の動画シリーズは38話まで出来ていて、残りは13本だった。

制作は Claude Code に回させていた。その少し前に「Codex はどれくらい使った?」と聞いたとき、返ってきた答えはこうだ。

約740万トークン、101回

止まってから、別の端末で集計し直した。

ai-boardroom   約 1億5,937万トークン   Codex 全体の約94%

20倍ずれていた。 私はその数字を疑わずに、無人で回し続けていた。この記事は、その内訳と、なぜ数え間違えたかの記録。

作っていたもの

実在の経営者や技術者を似顔絵で登場させる、縦型15秒前後のショート動画シリーズ。1話の作り方はこう。

台本(JSON) → 合成音声(TTS)
          → 似顔絵(FLUX / ComfyUI)
          → 口の動き(InfiniteTalk)
          → 字幕・画面・小道具を ffmpeg で合成 → 1080×1920

制作の回し方を途中で変えた。Claude Code に出した指示はこうだ。

最初にシナリオをあなたが作成して、Codex に映像制作チームを作らせ、その中でレビューを回し、スクリプトと制作指示書を作らせてください。あなたはそれを見て映像化したあと、再度 Codex のチームにレビューを依頼し、FB を受けて対応、FB がなくなったら完了です。

Codex に作らせたチームは12役。プロデューサー、構成作家、SNSマーケター、脚本家、ディレクター、出演者(声と芝居)、撮影、エディター、モーションデザイナー、サウンド、SNS運用、データアナリスト。それに校閲。会議ログは「発言をそのまま、要約しない、却下案と対立も残す」形で書かせた。あとから私が読んで、どこで何が決まったか追えるようにしたかった。

これは、ちゃんと効いた

先に良かった点を書いておく。コストの話だけだと、やり方ごと捨てられそうだからだ。

相互に疑う形が効いた。 試写レビューの会議は、Claude Code が台本に落とすときに紛れ込ませた誇張を差し戻してきた。チームが一度「功績の断定になる」として不採用にしたエンドカードの文言(「一家に一台のパソコンを、本当に実現した男」)を、Claude Code が古い台本から持ち込んでいたのだ。

同じことは逆向きにも起きた。投稿文を別のセッションに書いてもらったとき、その案を台本と突き合わせると、事実と食い違う箇所が2ラウンドで6か所あった。

投稿文の案: 「会議の冒頭で正解を言った人が」
台本:       サムが1人で資料を作っていて、42枚目でピチャイが入ってくる → 冒頭ではない

投稿文の案: 「否定は一度もしませんでした」
台本:       8.81秒「戻ってないよ。」→ 相手の指摘を否定している

書いた本人は、どちらも自分では気づかなかった。

決まりごとをリポジトリに置くと、指示は短くて済んだ。 途中から、Codex に渡す指示をこれだけにした。

縦1080×1920のショート動画を1本仕上げてください。
台本: scripts/v2/ep13_ellison.json
作り方も素材もこのリポジトリにあります。
仕上がりを自分で静止画で確認し、直したほうがよいところは自分の判断で直してください。

似顔絵のみ、企業ロゴなし、尺、手を顔の高さに上げない、といった制約は docs/PRODUCTION.md に書いてある。Codex はそれを自分で読み、文字の重なりや顔の色抜けを自分で直して返してきた。

無人で回った。 1話ぶんを「会議 → 台本化と似顔絵 → 音声 → 口の動き → 仕上げ → 公開準備」と進める制作ドライバを Claude Code に書かせ、15話から38話まで止めずに回した。1話あたり約1時間、失敗や飛ばしは0件だった。

問題はその裏で起きていた。

実際の使用量

Codex は実行ごとの記録を ~/.codex/sessions に JSONL で残している。各セッションの最後の token_count を合計し、作業ディレクトリで分けるとこうなった。

セッション 合計トークン
ai-boardroom 344 159,366,148
そのほか5件 31 約986万

ai-boardroom の内訳はこう。

入力   158,022,372
  うちキャッシュ済み 147,115,008(約93%)
出力     1,343,776

出力は134万トークンしかない。 使った量の99%は入力で、その9割以上はキャッシュ済みの入力、つまり同じ文脈の送り直しだった。

モデルは全実行が gpt-6-astra。私も Claude Code も一度も指定していない。CLI の既定がそのまま使われていた。

Codexの使用量の棒グラフ。自己申告の約740万に対して実測は1億5,937万で、その大半の1億4,712万がキャッシュ済み入力

なぜ20倍も数え間違えたか

Claude Code が数えていたのは、codex exec が最後に出すこの行だけだった。

tokens used
84,294

これには3つの穴があった。

1. 会議が裏で別のエージェントを立てていた

12役の会議を頼むと、Codex は役ごとに別のエージェントを立てて発言させていた。10話の議事録には、実際にこう書かれている。

制作統括が5役の別担当エージェントを立て、各担当が入力を読んだ第1巡、脚本改稿R2に対する第2巡を実施した。

子のエージェントはそれぞれ別セッションとして記録され、親の tokens used には出ない。Claude Code が数えた101回に対して、実際のセッションは344あった。

2. 打ち切られた実行は集計行を出さない

10分のタイムアウトや、メモリ不足で強制終了された実行は、最後の tokens used を出さずに終わる。途中までの消費は記録にだけ残る。

3. 1手ごとに、全部を送り直している

エージェントは1手ごとに、それまでの会話と読んだファイルを丸ごと送り直す。台本、制作指示書、過去3話ぶんの見本、試写用の静止画を毎回読ませていたので、1セッションが長くなるほど入力は二次関数的に膨らむ。キャッシュが効いても、使用量としては数えられる。

使用量を数える正しい方法

CLI の表示ではなく、セッションの記録から数える。

import glob, json, os, collections

rows = collections.defaultdict(lambda: [0, 0])  # セッション数, 合計トークン
for f in glob.glob(os.path.expanduser("~/.codex/sessions/**/*.jsonl"), recursive=True):
    cwd, last = None, None
    for ln in open(f, encoding="utf-8", errors="replace"):
        j = json.loads(ln)
        p = j.get("payload", j)
        cwd = cwd or p.get("cwd")
        t = (p.get("info") or {}).get("total_token_usage")
        if t:
            last = t                    # 累計なので最後の値を使う
    if last:
        key = os.path.basename(cwd or "不明")
        rows[key][0] += 1
        rows[key][1] += last["total_tokens"]

for k, (n, tok) in sorted(rows.items(), key=lambda x: -x[1][1]):
    print(f"{k:24s} {n:4d}セッション {tok:>13,}")

total_token_usage はセッション内の累計なので、最後の1件だけ取る。サブエージェントも1セッションとして並ぶので、漏れない。

自動化で踏んだ、ほかの地雷

利用枠切れの誤検知。 最初、ドライバは出力に usage limit という文字列があれば枠切れと判定していた。Codex がドライバ自身のソースを読んだ瞬間、その文字列が出力に混ざり、30分止まった。本物のエラー行だけを見るように直した。

if re.search(r"^ERROR: You've hit your usage limit", text, re.M):

別の話のセッションを再開する。 2本を並行で回しているとき、codex exec resume --last は「最後に動いたセッション」を拾う。それが隣の話のものだと、別の台本に手を入れられる。出力の session id: を控えて、ID を指定して再開するようにした。

画像生成サーバがメモリを抱えたまま。 ComfyUI は待機中も約11GBを保持していた。同時に Codex を動かすと、メモリ不足で Codex のほうが落ちた。生成しない間は止める。

何を変えるか

工程ごとにモデルを選ぶ。 確定した台詞表をJSONに書き写す作業も、決まった手順で合成して静止画で確かめる作業も、最重量モデルは要らなかった。判断の質が効くのは企画会議くらいだ。codex exec -m <モデル> で工程ごとに指定する。

会議でサブエージェントを立てさせない。 1セッションの中で12役を書き分けさせる。役ごとに別の文脈を持たせる必要はなかった。

読ませるファイルを絞る。 見本として過去3話ぶんを毎回渡していたのをやめ、工程に必要なものだけにする。

走らせる前に見積もる。 1話あたりの使用量 × 本数を、週の残り枠と突き合わせてから無人実行を始める。今回は1話あたり約500万トークンだった。残り13本なら6,500万トークンになる。

「かかっていない」をそのまま信じない。 枠切れの数分前、Claude Code は「制限にはかかっていません」と答えていた。見ていたのは直前のログだけで、残りの枠は見ていなかった。私もそれを確かめずに受け取った。残量は自分で見る。

おわりに

12人のチームを演じさせる、という発想自体は間違っていなかった。会議は誇張を拾い、台本とのずれは突き合わせで消え、指示を2行に減らしても動画は仕上がった。

足りなかったのは、それを何で回しているかという私自身の意識だ。チームが増えれば人件費が増えるのと同じで、エージェントが増えればトークンが増える。会議を開けば、議事録を書く人の分まで請求が来る。


元記事: https://forge.workstyle.tech/blog/twelve-ai-roles-160m-tokens/?utm_source=qiita&utm_medium=crosspost&utm_campaign=twelve-ai-roles-160m-tokens

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?