HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

コードを画像に変換し、モデルにOCRさせることでFableのコストを60%削減

60% Fable cost cut by converting code to images and having the model OCR it (github.com)

215 pointsby dimitropoulos86 コメント

要約

pxpipeは、Claude Codeの入力トークンを削減するために、大量のコンテキスト(システムプロンプト、ツールドキュメント、履歴など)を画像にレンダリングするローカルプロキシです。画像はピクセル数でトークンコストが決まるため、テキストよりもトークン効率が良い場合があり、特にコードやJSONのようなトークン密度の高いコンテンツで顕著です。この手法により、Fableのコストを最大70%削減できる可能性があり、トークン削減はコスト削減の主要因となります。ただし、画像化は一部の情報を損失する可能性があり、IDやハッシュのような正確性が求められるデータはテキストのままにする必要があります。

全文翻訳

pxpipeは、Claude Codeの入力トークンを、バルキーなコンテキストを画像としてレンダリングすることで削減します。同じシステムプロンプト、ツールドキュメント、履歴が、トークンの一部で済みます。画像のトークンコストは、その中のテキスト量ではなく、ピクセル寸法によって固定されます。高密度コンテンツ(コード、JSON、ツール出力)は、実際のClaude Codeトラフィックでのテキストあたり約1文字に対して、画像あたり約3.1文字をパックします。 pxpipeは、リクエストがマシンを離れる前に、リクエストのバルキーな部分(システムプロンプト、ツールドキュメント、古い履歴)をコンパクトなPNGに書き換えるローカルプロキシです。節約額はワークロードに依存します。pxpipeはトークン密度の高いコンテンツで有利であり、疎または小さなリクエストはそのままにします。したがって、これらは測定されたスナップショットであり、定数ではありません。 主な、永続的な結果は入力トークンの削減です。高密度のシステムプロンプト、ツールドキュメント、履歴は、テキストの代わりにコンパクトな画像として入力されます(上記の例は、約2.7kの画像トークンとしてレンダリングされた約25kのテキストトークンです)。各リクエストは、count_tokensカウンターパートに対して測定されます。 ドルはそれ以降です。現在のFableのリスト価格では、トークン削減により、エンドツーエンドの請求額が約59〜70%削減されます(圧縮されたリクエストでは約72〜74%。完全な価格計算はFAQにあります)。しかし、リスト価格は明日変更される可能性があり、トークン数は変更されないため、注意すべき数値はトークン数です。 両方を~/.pxpipe/events.jsonlから再現できます。 これがモデルがテキストの代わりに目にするものです:約48k文字のシステムプロンプト+ツールドキュメント(このリポジトリ自体のREADME、FINDINGS、およびソース)、テキストとして約25kトークン、このページとして約2.7k画像トークン。 実際のtransformRequestパイプラインによって生成されました:空白が最小化され、元の改行を示す↵でフル行にリフローされ、OCR命令バナーが上に共同レンダリングされています。 モデルは、クリーンな評価で100/100でこのようにレンダリングを読み取ります(ベンチマークを参照)。 デモ Fable 5デモ(デフォルト、100/100リーダー):Fable-AB-Demo.mp4 両方のデモで、両方のペインがFable 5にあります(左がプレーン、右がpxpipe)。 FableはOpusが読めないものを読みます。 Opusが拒否する画像フレーズ数(Opusデモを参照):pxpipeアームは、39個の画像化されたフィラーファイル全体で正確なトークン10/10をカウントし(grepのグラウンドトゥルースと行ごとに一致)、複数ステップの元帳算術を正しく行います(8037 →…→ 15,021)。同じ回答、約7倍安価です。 両方のデモ後のセッション合計:プレーン $42.21、コンテキスト96%フル(964.5k/1M —強制圧縮まであと1タスク)対pxpipe $6.06、コンテキストに余裕あり(73.5k/1M)。 正直な注意点、クリップで見えるように:pxpipeアームは最初にカウントに答え、要求された1行形式で元帳残高も印刷するために1回のフォローアップの指示が必要でした。プレーンアームは最初の試行でフォーマットに従いました。可読性はFableで解決されています — 単一返信フォーマットコンプライアンスが残りの粗いエッジです。 Opus 4.8デモ(Opusはデフォルトで無効):Opus-AB-Demo.mp4 サイドバイサイド — プレーンClaude(左)対pxpipe(右)、両方ともOpus 4.8(オプトイン、pxpipeはFable用に調整されています — Fableクリップを参照)。 画像をクリックして視聴(Googleドライブ)。 デモ1 — 失敗したテストスイートを修正:両方ともパスします。ダッシュボードは、pxpipeがリクエストをトークンの一部に削減したことを示しています(実際のサーバー測定コンテキスト/トークン削減)。 デモ2 — 大きなファイルコンテキスト(40ファイル、約382kトークン)と数学の問題、「このフレーズを数える」タスク:数学の回答(小さなテキストの針)は両方で読み取れます。フレーズカウントは画像化されたフィラーを読む必要があります — そのため、pxpipe-on-Opusはそれを読むことができず、正直に数字を捏造しないことを示します(文書化されたロスレス制限:正確な値はテキストのままです)。一方、プレーンはファイルごとに数えて遅くなります。 試してみてください(30秒) npx pxpipe-proxy # プロキシを127.0.0.1:47821に設定 ANTHROPIC_BASE_URL=http://localhost:47821 claude # Claude Codeをそれにポイントする http://127.0.0.1:47821/ を開いてライブダッシュボードを表示:保存されたトークン、セッションごとの統計、テキスト→画像のすべての変換を並べて表示、グローバルキルスイッチ、GPT 5.6およびGPT 5.5を含むランタイムモデルチップ。 他には何も変わりません。応答は通常ストリームされます。pxpipeはリクエスト(アップロードされるコンテキスト)のみを圧縮し、モデルの出力は圧縮しません。 最近のターンはテキストのままです。システムプロンプト、ツールドキュメント、および古いバルク履歴は画像化されます。 それを信頼する前に、正直な部分を読んでください。 これはロスレスではありません。pxpipeはロスレスストアではなく、ギストティアです。 ニードルインアヘイスタック評価では、高密度画像コンテンツ内の正確な12文字の16進数文字列は、Opusで0/15、Fable 5で13/15で返され、失敗モードはサイレントなこじつけです。つまり、もっともらしい間違った値であり、エラーではありません。 バイト単位で正確に必要とするもの(ID、ハッシュ、秘密、正確な数値)はテキストのままにする必要があります。 最近のターンはそのままです。専用の正確なリコールリスクガードはまだ構築されていません。 pxpipeはFableリクエストのみを画像化します(PXPIPE_MODELS=claude-fable-5)。そのため、非Fableモデルのサブエージェントはテキストとして通過します。 バイト単位で正確な値が必要な作業をいずれかにルーティングします。グローバルにCLAUDE_CODE_SUBAGENT_MODEL=claude-sonnet-4-6を使用するか、エージェントフロントマターのmodel: sonnetでエージェントごとにルーティングします。 ソース(ファイル/JSONL)から読み取ります。画像化された履歴からではありません。 これは、意図的にルーティングした正確なリコールをカバーします。上記で構築されていない、予期せずサイレントに誤読したものをキャッチするものではありません。 実際の作業を妨げますか? 測定したものとの同等性:10インスタンスのSWE-bench Liteパイロット(簡単なサブセット)は、両方のアームで10/10を解決しました。pxpipe ONは27ドル対OFFは54ドルのトークン相当で、19のSWE-bench Proペア(より困難で長期間)は19/19 ON対15/19 OFFを-60%/リクエストで解決しました。判定は18/19で一致し、単一の分割(1つのON失敗)は、再現すると3/3で再解決されました。つまり、実行ごとのエージェントの変動であり、圧縮ではありません。 nが少なく、詳細と注意点は以下の通りです。 節約額はワークロードに依存します。トークン密度の高いコンテンツ(約1文字/トークン:コード、JSON、ハッシュ)で有利であり、疎な英語の散文(約3.5文字/トークン)では損をします。 組み込みゲートは、数学が有利なコンテンツのみを画像化します。N=391のプロダクション行でキャリブレーションされています。 モデルスコープ:1つのPXPIPE_MODELS CSVは、両方のファミリーでどのモデルベースが画像化されるかを制御します。デフォルトはclaude-fable-5、gpt-5.6(GPT 5.5はオプトイン、画像化されたコンテキストで低下します)。 画像化を完全に無効にするにはPXPIPE_MODELS=offを設定するか、~/.config/pxpipe/config.jsonで{ "models": "off" }(またはリスト)を使用します。 GPTの場合、pxpipeはツール定義をネイティブJSONで保持します(冗長なスキーマの散文のみが画像に移動します)。そのため、ツール呼び出しは信頼性が保たれます。Claudeパスとは異なり、GPTパスはAnthropicのcache_controlプロンプトキャッシュマーカーを追加したり依存したりしません。 ダッシュボードチップは、クライアント構成を変更せずに任意のモデルをライブで切り替えることができます。 Opus 4.7/4.8は元のClaudeスコープでしたが、約7%のレンダリングを誤読しました(10200→9400)。そのため、Fable 5が100/100に達し、画像請求額が同一になったため、デフォルトで無効になりました。PXPIPE_MODELSまたはダッシュボードチップを介して、リスクを冒して再度有効にしてください。 それ以外はすべてそのまま通過します。 ベンチマーク(再現可能) モデルが記憶していない可能性のある新しい乱数問題で測定されました: テスト N テキスト pxpipe (画像) トークン 新しい算術、claude-fable-5 100 100% 100% -38% 新しい算術、claude-opus-4-8 100 100% 93% -38% ギストリコール A/B(決定、値、パス、名前、否定;ディストラクタあり;15k-45k文字セッション)、Fable 5 98/アーム 98/98 98/98 - 状態追跡(値が3回変更、最終/最初/カウント)、Fable 5 18/アーム 18/18 18/18 - 明示されていない事実のこじつけ(低い方が良い)、Fable 5 16/アーム 0/16 0/16 - バイト単位の12文字16進数リコール、高密度レンダリング、Opus 15 15/15 0/15 - バイト単位の12文字16進数リコール、高密度レンダリング、Fable 5 15 - 13/15 - SWE-bench Liteパイロット(エンドツーエンドタスク品質) 10のSWE-bench Liteインスタンス、Claude Code + Fable 5、pxpipe ON対OFFでのペア実行、公式swebench Dockerハーネスで採点: pxpipe ON OFF 解決済み 10/10 10/10 リクエストサイズ対非圧縮ボディ -65% ±0 -65%はリクエストごとです(圧縮前の各ボディのcount_tokensプローブ)。そのため、ターン数による混同はありません。n=10/アーム、Liteは簡単な方に偏っています。実行合計、領収書、注意点:eval/swe-bench/。 SWE-bench Proベンチ(より困難で長期間) 2回の実行で完了した19ペア(2つはドロップ:チェックアウトが両アームで失敗しました)、同じセットアップ、公式SWE-Bench_Pro-os Dockerハーネス:pxp