LLMに計算を任せすぎない ― 多段計算を数式・ツール・Structured Outputsで検証する

プロンプト・LLM活用

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。OpenAIの現在のモデルガイダンスとGoogle GeminiのStructured Outputs公式情報を確認し、旧版の「計算手順を文章で細かく出力させる」設計を、計算規則・外部計算・構造化出力・アプリ側検証を中心に見直しました。

検証ステータス:📘 OpenAI・Google公式情報確認済み/特定モデル間の計算精度比較は未実施

LLMに「重量、距離、割引、税率を考慮して最終料金を出して」と頼むと、もっともらしい計算説明と答えを返すことがあります。しかし、説明が長いことと、計算が正しいことは別問題です。

業務で金額を扱うなら、モデルには条件整理や入力の解釈を担当させ、算術そのものは計算ツールやプログラムで検証できる形にします。

最初に計算ルールを固定する

基本料金 = 距離km × 距離単価
重量加算 = 重量kg × 重量単価
小計 = 基本料金 + 重量加算
割引後 = 小計 × (1 - 割引率)
税額 = 割引後 × 税率
最終料金 = 割引後 + 税額

「どの順序で割引するか」「端数処理はいつ行うか」まで業務ルールとして決めます。

モデルには入力の整理をさせる

次の依頼文から計算に必要な値だけを抽出してください。
不明な値は推測せず null にしてください。

必要項目:
- weight_kg
- distance_km
- distance_rate
- weight_rate
- discount_rate
- tax_rate

自然言語を数値入力へ変換する部分に生成AIを使い、その後の計算は決定的な処理へ渡します。

計算はプログラム側で行う

def calculate_price(weight_kg, distance_km, distance_rate,
                    weight_rate, discount_rate, tax_rate):
    base = distance_km * distance_rate
    weight_fee = weight_kg * weight_rate
    subtotal = base + weight_fee
    discounted = subtotal * (1 - discount_rate)
    tax = discounted * tax_rate
    return {
        "subtotal": subtotal,
        "tax": tax,
        "final_price": discounted + tax,
    }

計算規則をコードに固定すると、モデル変更によって算術結果が揺れる問題を減らせます。

最終結果は構造化して受け取る

OpenAIやGeminiでは、対応するAPI機能を使ってJSON Schemaに沿ったStructured Outputsを利用できます。単に「JSONで返して」と文章で頼むより、形式検証をAPI側へ寄せられます。

{
  "type": "object",
  "properties": {
    "final_price": {"type": "number"},
    "currency": {"type": "string", "enum": ["JPY"]},
    "needs_review": {"type": "boolean"}
  },
  "required": ["final_price", "currency", "needs_review"]
}

ただし、スキーマに合うJSONが返っても、値の意味が正しいとは限りません。Googleの公式ガイドでも、構造化出力の値はアプリ側で検証することが推奨されています。

検証で見るポイント

確認 方法
必須値 nullや欠損を検査
率の範囲 0〜1など業務ルールで検査
単位 kg / km / 円などを固定
端数処理 四捨五入・切捨て等をコード化
異常値 負数、過大値を拒否
計算結果 プログラムで再計算

役割を分ける

flowchart LR
    A[自然言語の依頼] --> B[LLMで値を抽出]
    B --> C[入力バリデーション]
    C --> D[プログラムで計算]
    D --> E[結果を構造化]
    E --> F[表示・保存]

まとめ

多段計算では、詳細な計算説明を文章として出させることより、計算ルールを明文化し、入力を型付きで受け、外部計算で再現可能にすることが重要です。

金額・数量・税率など業務上の重要値では、「AIの説明がもっともらしいから採用」ではなく、同じ入力なら同じ結果になる計算コードと検証を用意します。

公式情報・一次情報

この記事の更新履歴

  • 2026-09-13 追加:外部計算、入力検証、Structured Outputs、アプリ側意味検証を追加。
  • 2026-09-13 変更:長い計算説明を前提にした構成から、再現可能な計算パイプライン中心へ変更。
  • 2026-09-13 削除:内部メタ情報、本文H1、旧モデル固有の推奨、計算精度向上を断定する未検証記述を削除。

文書情報

記事タイトル
LLMに計算を任せすぎない ― 多段計算を数式・ツール・Structured Outputsで検証する
作成日
更新日
Source URL
https://papanda925.com/?p=5852

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました