ENGINEERING LOG · 2026-09-01

計測の1列が、その日のうちにバグを4つ見つけた

朝、上流プロバイダの残高切れ(HTTP 402)で直結ルートが2日間静かに縮退していたことに気づいた。悔しかったのは障害そのものより「ログから見えなかった」こと。そこで今日は1日、teai.ioのゲートウェイを「見える化してから直す」に全振りした。結果: 課金ログに足した1列が、その日のうちに隠れバグを4つ見つけた。

公開 2026-09-01 変更 PR #531〜#539(全て本番デプロイ済み) 方針 実測ログ以外は書かない

1. 事故: 残高切れは、エラーにならない

上流の一社で残高が尽きると、リクエストは402で落ちる — が、ゲートウェイにはフォールバックがあるので利用者には200が返り続ける。裏では「頼んだモデルと違うモデル」が黙って答えていた。実測では deepseek/deepseek-v4-flash-0731 指定が llama-4-maverick にすり替わっていた。エラー率だけ見ていると一生気づけない類の障害だった。

恒久対策として3つ入れた: ①仕入れ先が全滅した時は同一モデルのまま別経路(パススルー)へ逃がす ②残高切れは毎時の実推論プローブで即検知 ③外部監視のプローブを単独系モデルから複数上流モデルへ(誤報10%→実障害のみに)。

2. プロンプトキャッシュの割引を、売値に転嫁した

エージェントは毎ステップ同じ長大な文脈を再送する。上流のプロンプトキャッシュは効いていた(実測95%ヒット)のに、課金は全トークン定価のままだった。これは「実費+5%」の約束に反する。

cached入力は通常入力単価の1/10で課金するよう変更(割引率を一次情報で確認できた経路のみ・確認できない経路は据え置きで逆ざやを作らない)。実測: エージェントの1ステップ 13万トークン入力が 344クレジット→約48クレジット(-86%)。コーディングエージェントを teai.io で回している人は、今日から勝手に安くなっている。

3. 1列足した: requested_model / auto_reason

課金ログは「解決後のモデル」しか記録しておらず、teai/auto の利用実態も、フォールバックによる差し替えの発生量も見えなかった。そこで 「何を頼まれたか」を1列足した。効果は初日から出た:

計測が見つけたもの実測直したもの
プロバイダprefix付きID(teai/z-ai/glm-5.2)が未掲載扱い→別モデルに差し替え18万tokens×9件/日prefix救済をゲートウェイに追加(#535)
思考型モデルが小さいmax_tokensでcontent:""を200で返すglm-5.2はmax_tokens=10で空応答思考型のmax_tokens床を全経路に適用+GLM-5系追加(#539)
CLIの既定モデルの実態(autoの解決先・理由の分布)tools→K3が支配的既定をteai/default(K3固定)に(#537)
表現(キーワード)一致のルーティングは言い換えで壊れる判定を構造シグナルのみに全廃・簡素化(#534)

※「計測できないものは直せない」を地で行く1日だった。

4. teai/default と /api/v1/search

teai/default: teai/auto はリクエストの形で解決先が変わる。それが便利な場面もあるが、エージェントの土台には「常に同じ強いモデル」が要る。ヒューリスティック一切なしでKimi K3に固定されるエイリアスを追加した。

GET /api/v1/search: チャット内ツールと同じWeb検索(複数バックエンドの並列レース)を、認証付きGETで開放した。エージェントやCLIの検索ツールの受け口にそのまま使える。

5. エージェント実験室 — 「どのモデルにどの仕事を任せるか」を計測で決める

仕上げに、仮説エージェント(モデル×プロンプト)を並べて回答品質・時間・コストを自動計測→勝者を自動更新する小さなラボを作った。コスト計測は自前実装ゼロ — エージェントごとにAPIキーを分けるだけで、teaiの利用ログが勝手に帰属してくれる。

初回の計測は仮説を裏切った: 即答・取得系はK3全勝、しかし検索ツール連打系は初回gemini-2.5-flashだけが完走し、K3は時間切れ。glm-5.3-flashはツールを空引数で呼び続ける癖まで定量化された(それが上の#539の発見につながった)。そこで検索側を改善(店探し系クエリにレビューサイト限定の変種を並行合成)して再計測すると、今度はK3(速度優先経路)が首位に返り咲いた — 弱かったのはモデルでなく検索結果の質だった。「このモデルは頭がいい」ではなく「この仕事のこの制約では、このモデル」を、毎回の計測で更新していく。

今日の変更まとめ

PR内容
#531仕入れ先全滅時の同一モデルパススルー+監視プローブ改善
#532プロンプトキャッシュ割引を売値に転嫁(cached入力=1/10)
#534requested_model/auto_reason計測列+ルーティングの構造シグナル化
#535teai/prefix付きモデルIDの救済
#536GET /api/v1/search(汎用Web検索・認証付き)
#537teai/default(K3固定エイリアス)
#539思考型モデルのmax_tokens床を全経路適用+GLM-5系追加

全部、今日の実測ログから始まった変更です。teai.io は「実費+5%」と「隠れた差し替えを作らない」を守りながら、こうやって毎日少しずつ硬くしていきます。