◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-06-03上級

Gemini 生成物の来歴を残す — 再現と監査のためのプロベナンス設計

どのモデルとプロンプトで作った出力なのかを数ヶ月後にも追えるよう、Gemini の生成物に来歴メタデータを刻む設計をまとめました。最低限のフィールド、プロンプトのハッシュ固定、保存先の選択、誤分類を3分で再現できた監査の実例まで紹介します。

Gemini API248プロベナンス再現性本番運用49個人開発者8

✦ プレミアム記事

アプリの壁紙自動分類に Gemini を使い始めて半年ほど経った頃、一枚の画像が「夜景」ではなく「抽象」に分類されている、というユーザー報告を受け取りました。直したいと思ったのですが、その分類を下したのがどのモデルだったのか、どんなプロンプトを渡していたのか、手元のログからは追えませんでした。出力だけが残っていて、来歴(プロベナンス)が残っていなかったのです。

私は2014年から個人開発でアプリを運営してきました。累計5,000万ダウンロードを超えるなかで、壁紙・癒し・引き寄せ系のアプリを Gemini で支えています。生成 AI を本番に組み込むと、こうした「あとから理由を問われる」場面が必ず来ます。そのとき手がかりになるのは出力そのものではなく、その出力が「いつ・どのモデルとプロンプトと設定で」生まれたかという来歴です。ここでは、生成物に来歴を刻み込み、半年後でも当時の条件を組み直せるようにするための設計を、実装レベルでまとめます。

来歴として最低限刻むべきフィールド

来歴は欲張ると保存コストが膨らみ、削りすぎると再現の役に立ちません。私が壁紙分類と要約系の機能で実際に運用して、過不足がなかった最小セットは次の通りです。

まず生成条件として、モデル名(gemini-2.5-flash のような ID)、その時点のモデル世代、温度・thinking_budget・seed といった生成パラメータ。次に内容の指紋として、プロンプトテンプレートの ID とその正規化ハッシュ、入力全文のハッシュ、出力全文のハッシュ。最後に環境として、SDK のバージョンと生成時刻。これだけで「同じ条件をもう一度組めるか」「出力が当時と変わっていないか」の両方を判定できます。

ここで重要なのは、プロンプト全文をそのまま保存しないことです。プロンプトには利用者の入力が混ざることがあり、PII を抱え込むリスクがあります。全文ではなくハッシュを残し、テンプレートだけを別途バージョン管理するのが安全です。

import hashlib
import json
import time
from dataclasses import dataclass, asdict
 
def canonical_prompt(template_id: str, variables: dict) -> str:
    # 変数の順序ゆらぎを排除してから結合し、同じ意味の入力を同じ文字列にそろえる
    normalized = json.dumps(
        variables, ensure_ascii=False, sort_keys=True, separators=(",", ":")
    )
    return f"{template_id}\x1f{normalized}"
 
def sha256_short(text: str) -> str:
    return hashlib.sha256(text.encode("utf-8")).hexdigest()[:16]
 
@dataclass
class Provenance:
    model: str
    model_generation: str
    prompt_template_id: str
    prompt_hash: str
    temperature: float
    thinking_budget: int | None
    seed: int | None
    input_hash: str
    output_hash: str
    sdk_version: str
    created_at: float

プロンプトを「ハッシュで固定する」ということ

来歴の心臓部はプロンプトハッシュです。ただし素朴に「プロンプト文字列を SHA-256 にかける」だけだと、同じ意味なのにハッシュが変わる事故が起きます。変数の順序が違う、空白が一つ多い、改行コードが混ざる。こうした表記ゆれを吸収するために、ハッシュを取る前に正規化(canonicalization)を挟みます。

上の canonical_prompt は、テンプレート ID と「キーでソートした変数の JSON」を区切り文字で連結します。これにより {"style": "夜景", "lang": "ja"} と {"lang": "ja", "style": "夜景"} は同じハッシュになります。テンプレート本文そのものは別管理にして、テンプレートを書き換えたら ID を上げる運用にすると、「プロンプトの中身が変わったのにハッシュが同じ」という最悪のケースを避けられます。

私はテンプレート ID に wallpaper-classify-v3 のような版番号を含め、本文をリポジトリでバージョン管理しています。本文を1文字でも変えたら版番号を上げる、という規律だけで、来歴の信頼性は大きく変わります。宮大工だった祖父たちは、刻んだ墨付けを残すことで後の世代が同じ仕事をたどれるようにしていました。プロンプトハッシュは、それと同じ「あとからたどれる墨付け」だと感じています。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦生成1件ごとに刻むべき来歴フィールドの最小セット(モデル版・プロンプトハッシュ・温度・seed・入出力ハッシュ)
✦温度0でも揺れる Gemini で「何が再現でき、何が再現できないか」の実測ベースの線引き
✦壁紙分類アプリの誤分類を3分で再現できた、来歴サイドカーの保存先トレードオフ
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-07-27
消えないプロンプト資産をたたむ — 静的参照だけでは見えない稼働経路を炙り出す退役台帳
一本化したはずの旧プロンプトがまだ毎日呼ばれている——そんな見えない稼働経路を炙り出す退役台帳の設計です。静的参照、フラグ既定値、観測窓、モデル停止日、キャッシュ実効率の5つを突き合わせる判定基準と、実運用で得た設計の勘所を実行結果とともにまとめました。
◈ API / SDK2026-05-21
Gemini API × Cloud Pub/Sub によるイベント駆動 AI ワークフロー設計 — 個人開発者の実装メモ
Gemini API を Cloud Pub/Sub のイベント駆動型ワークフローに組み込む実装メモ。アプリレビュー解析パイプラインを題材に、リトライ・デッドレター・冪等性・コスト管理までを個人開発の視点で整理しました。
◈ API / SDK2026-05-04
Gemma 4 と Nemotron 3 Nano Omni を、総合スコアではなく自分の画像100枚で採否判定する
日本語マルチモーダルのローカル運用を検討するとき、Heron-Bench や JMMMU の総合スコアは採否の材料になりません。壁紙アプリの分類を題材に、100枚の評価セットの組み方・誤りのコストで重み付けした判定・量子化更新での回帰検知までを動くコードで組み立てます。