AIに金額の配分を任せると、合計が元の金額に戻らないことがあります。10,000円を3社に均等配分したら9,999円になる、という類のずれです。
実際に計算したところ、素朴なやり方では4件中1件で合計がずれました。コードで処理すれば0件です。
0.1 + 0.2 は 0.3 にならない。実行すればその場で分かる配分4件を実際に計算しました。素朴なやり方では1件で合計がずれ、コードで処理すると0件です。
コードインタプリタが要る場面を確かめるため、実際に計算しました。題材は端数の出る配分を4件です。
配分の計算も小数の比較も、本当に実行して得た値です。想定ではありません。
// 素朴な計算: 比率をかけて四捨五入するだけ。合計がずれる
function naive(c) {
const sum = c.parts.reduce((a, b) => a + b, 0);
const out = c.parts.map((p) => Math.round((c.total * p) / sum));
return { out, sum: out.reduce((a, b) => a + b, 0) };
}
// コードで処理: 端数を配り直して、合計を必ず一致させる
function exact(c) {
const sum = c.parts.reduce((a, b) => a + b, 0);
const out = c.parts.map((p) => Math.floor((c.total * p) / sum));
let rest = c.total - out.reduce((a, b) => a + b, 0);
// 余りは小数部の大きい順に1円ずつ配る
/* ... */
}
題材 合計 素朴な計算の内訳 合計 一致 3社に均等配分 10000 3333 / 3333 / 3333 9999 ずれ 売上比で配分 88000 32560 / 36080 / 19360 88000 一致 日割り(7/31日) 45000 10161 / 34839 45000 一致 端数の出ない配分 12000 3000 / 3000 / 3000 / 3000 12000 一致 題材 合計 コードで処理した内訳 合計 一致 3社に均等配分 10000 3334 / 3333 / 3333 10000 一致 合計が合わなかった件数 素朴な計算: 1 / 4 コードで処理: 0 / 4 小数の足し算をそのまま比べた場合 0.1 + 0.2 = 0.30000000000000004 0.1 + 0.2 === 0.3 → false 整数に直して比較 → true
1件だけずれました。10,000円を3で割ると3333.33…になるため、四捨五入した3社ぶんを足しても9,999円にしかなりません。
差は1円です。ところがこの1円は消えません。同じ処理を月に100件走らせれば、その月だけで100円合わないことになります。
しかも合わないことに気づくのは、たいてい締めの段階です。どの件でずれたかを後から探すのは骨が折れます。
もうひとつ実行して確かめたのが小数の扱いです。0.1 + 0.2 の結果は 0.30000000000000004 で、0.3 と等しいかを比べると false になりました。
整数に直してから比べれば true になります。この種の性質は、実行して初めて表に出ます。
コードを実行できることの本当の利点は、計算そのものより合計が一致するかをその場で確かめられる点にあります。
合わなければ結果を返させない、という作りにできます。文章の中で計算させている限り、この検査は挟めません。
1円のずれは消えない。件数を重ねれば締めで必ず表に出る。
Run Python and bash code in a sandboxed container to analyze data, generate files, and iterate on solutions.原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17
AIが書いたコードを、隔離された環境でそのまま実行させます。結果を受け取って、続きの判断に使えます。
コードインタプリタは、AIにコードを書かせ、それを隔離された環境で実行して結果を返す仕組みです。文章の中で計算させるのとは別物になります。
Anthropicの説明では、コマンドの実行とファイルの操作、そしてコードを書くこと自体を、安全に隔離された環境で行えるとされています。
同じ文書には、データの分析、図の作成、複雑な計算、コマンドの実行、ファイルの作成と編集、受け取ったファイルの処理が、やりとりの中で直接できると書かれています。
実行できることの効き目は、誤りがその場で表に出る点にあります。動かなければエラーが返り、書き直せます。
文章の中で計算させた場合、誤っていても何も返りません。ですから受け取る側が検算するまで気づけません。
実行の場所も押さえておいてください。隔離された環境で動くので、呼ぶ側の環境がそのまま触られるわけではありません。触れる範囲を環境側で決める考え方はサンドボックス実行の記事で扱っています。
運用していて効いたのは、計算の最後に検算を書かせておくことでした。配分なら合計が元の金額に戻るか、日割りなら日数の合計が期間と一致するか。合わなければその場でエラーになるので、結果が外に出ません。
The code execution tool allows Claude to run Bash commands and manipulate files, including writing code, in a secure, sandboxed environment.原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17
合計や整合が求められる計算から始めます。実行できる範囲は環境側で絞ってください。
コードインタプリタを使うかどうかは、その処理に検算が要るかで決まります。前の節の1円のずれが、その分かれ目でした。
4番目に注意してください。2つの数を足すだけの処理に実行を挟むと、往復が増えて遅くなるだけです。
隔離されているとはいえ、実行できる操作は絞っておいてください。計算に必要なのは読み取りと計算だけで、外部への送信は要りません。
この絞り込みの効き方はサンドボックス実行の記事で数字とともに扱っています。許可する操作を7個から2個に絞っても、集計と読み取りは通りました。
実行結果はコードのとおりに動いた結果であって、正しい答えとは限りません。書かれたコードが間違っていれば、間違った結果がきれいに返ってきます。
ですから検算をコードの中に入れます。合計が一致しなければ結果を返さない、という形にしておけば、誤りが外に出る手前で止まります。
ひと目で分かる計算に実行を挟むと、遅くなるだけ。
Claude can analyze data, create visualizations, perform complex calculations, run system commands, create and edit files, and process uploaded files directly within the API conversation.原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る