· 濱田優貴 / Sente開発側による実測

AIに実務コードを頼んだら、正解でも次の回には答えが返らなかった

AIを仕事に使うとき、どのモデルを選ぶか。

Senteで使うモデルを選ぶために、短い実務課題を作って比べています。今回はDeepSeekとGPTの優劣を最初から決めず、実際に結果が分かれる問題を探しました。

使ったAPIのモデル名は DeepSeek V4.1 Flash(deepseek/deepseek-v4.1-flash)と GPT-6 Astra(openai/gpt-6-astra)です。

差が見つかったのは、答えが返ってくるかどうかでした。同じ問題で、正しく動くコードが返る回と、本文が空になる回もありました。

1つ目は、小数の丸め

作ってもらったのは、数字の文字列を小数第2位に丸めるJavaScript関数です。

条件は「ちょうど中間なら、残す最下位の桁を偶数にする」。たとえば、こうなります。

入力正解
1.0051.00
1.0151.02
-1.015-1.02
-0.0050.00
999999999999999999.9951000000000000000000.00

大きな数も含むので、JavaScriptのNumberに変換して丸めるだけでは精度を保てません。負数や桁上がりも扱う必要があります。

問題文と出力上限を変えずに、2回ずつ依頼しました。

モデル1回目2回目
DeepSeek V4.1 Flash本文が空・27.35秒本文が空・24.06秒
GPT-6 Astra16値すべて正解・9.16秒16値すべて正解・8.72秒

GPTの回答は、返ってきたコードを実行して確かめました。DeepSeekは2回とも、APIが報告するcompletion tokensが設定上限の4,096に達し、本文は空でした。

これは「DeepSeekが丸め方を間違えた」という結果ではありません。今回のAPI経路と上限では、使える回答を受け取れなかったという結果です。空になった内部原因までは確認できていません。

もう1つは、空いている時間帯を求める関数

次に試したのは、区間の引き算です。予約可能な時間帯から、予約済みの時間帯を除く処理に相当します。

例として、次の区間を渡します。数字は時刻ではなく、単位を持たない整数です。

{
  a: [[0, 10], [5, 20]],          // 残したい範囲
  b: [[3, 7], [9, 12], [18, 22]] // 取り除く範囲
}

期待する結果はこちらです。

[[0, 3], [7, 9], [12, 18]]

各区間は開始点を含み、終了点を含まない半開区間です。入力の順序はばらばらで、重なり、隣接、長さゼロの区間もあります。出力では空区間を除き、隣り合う区間をまとめます。

今回は基本5ケースに、固定乱数で作った100ケースを加えました。回答を見る前に正解を固定し、整数点の集合差と、別実装の境界点走査で一致を確認しています。

モデル1回目2回目
DeepSeek V4.1 Flash105ケースすべて正解・17.53秒本文が空・25.87秒
GPT-6 Astra105ケースすべて正解・13.30秒105ケースすべて正解・12.28秒

DeepSeekは最初の回答では、ちゃんと105ケースを通りました。2回目はcompletion tokensが4,096に達し、本文が空でした。GPTは2回とも通りました。

こちらは、小数の丸めと違って2回とも同じ差が出たわけではありません。少なくとも、同じ条件でも答えが返るかどうかに揺れがありました。2回だけなので、その発生率までは分かりません。

なお、105ケースは「105回AIに聞いた」という意味ではありません。1回の回答で作られた1つの関数に、105通りの入力を渡した結果です。

差が出なかったもの、GPT側で止まったものもある

差が出た例だけだと、比較の印象が偏ります。他の結果も残しています。

502は計算の誤答として採点していません。GPTというモデル自体、上流サービス、途中のゲートウェイのどこに原因があるかも、ここでは確定できていません。

最初に行った5モデル・12課題の60試行では、DeepSeekとGPTは全12課題で採点結果が一致していました。そのうち2課題は問題文に必要な項目名が抜けており、能力評価に使えないと後から分かりました。問題を作る側の不備も、モデルの失敗とは分けて扱う必要があります。

どう測ったか

今回の追加探索は、差が出る例を探すためのものです。広い用途を代表するランキングではありません。

今回の区間計算は4コールで、ゲートウェイの記録上は54クレジット、9円でした。先行試験と確認用コールを含む同じ専用キーの合計は363クレジット、60.50円です。上流の確定請求との照合は済んでいないため、これを確定した全費用とは呼んでいません。

予算上限は2,700円。失敗時の上流再試行も含む保守的な引当は通算2,674円となったため、追加比較はここで止めました。引当は実支出ではありません。

モデル選びで見たいことが1つ増えた

今回、内容の正解と誤答が分かれる例は見つかっていません。はっきり見えたのは、決めた上限内で使える答えが戻ってくるかどうかでした。

空き時間の問題では、DeepSeekが一度は全ケースを通しています。だから「このモデルには解けない」とは言えません。一方、仕事でそのまま使うなら、次の回に本文が空になることは無視できません。

Senteのモデル選びでも、正解率だけでなく、回答が完成したか、どれくらい待ったか、失敗した分まで含めていくらかかったかを見ていきます。今回の2問は、その違いが具体的に見えた例でした。