GEMINI LABEN
GA — Gemini 3.6 Flash が7月21日に一般提供へ移りました。入力 $1.50 / 出力 $7.50 per Mtok で、3.5 Flash の出力 $9.00 から下がっていますTOKENS — 3.6 Flash は Artificial Analysis Index で出力トークンが 3.5 Flash 比17%減。DeepSWE のようなエージェント系では平均 276K から 97K トークンまで縮んだと報告されていますLITE — Gemini 3.5 Flash-Lite も一般提供になりました。$0.30 / $2.50 per Mtok で、低レイテンシと高頻度の自動化に向いた価格帯ですOMNI — gemini-omni-flash-preview が公開プレビューに入りました。720p で3〜10秒の動画を生成し、そのまま対話的に編集できますSUNSET — 旧来の画像生成モデルは8月17日、Gemini Enterprise Agent Platform の Grok 4.1 系は8月20日、gemini-robotics-er-1.6-preview は8月31日に停止しますCOMPUTER — Gemini 3.5 Flash の Computer Use が公開プレビューになりました。ブラウザ・モバイル・デスクトップに対応し、プロンプトインジェクション検出と設定可能な安全ポリシーを備えますGA — Gemini 3.6 Flash が7月21日に一般提供へ移りました。入力 $1.50 / 出力 $7.50 per Mtok で、3.5 Flash の出力 $9.00 から下がっていますTOKENS — 3.6 Flash は Artificial Analysis Index で出力トークンが 3.5 Flash 比17%減。DeepSWE のようなエージェント系では平均 276K から 97K トークンまで縮んだと報告されていますLITE — Gemini 3.5 Flash-Lite も一般提供になりました。$0.30 / $2.50 per Mtok で、低レイテンシと高頻度の自動化に向いた価格帯ですOMNI — gemini-omni-flash-preview が公開プレビューに入りました。720p で3〜10秒の動画を生成し、そのまま対話的に編集できますSUNSET — 旧来の画像生成モデルは8月17日、Gemini Enterprise Agent Platform の Grok 4.1 系は8月20日、gemini-robotics-er-1.6-preview は8月31日に停止しますCOMPUTER — Gemini 3.5 Flash の Computer Use が公開プレビューになりました。ブラウザ・モバイル・デスクトップに対応し、プロンプトインジェクション検出と設定可能な安全ポリシーを備えます
記事一覧/API / SDK
API / SDK/2026-08-03上級

Memory profiles の更新ポリシーを測って選ぶ — 確定値を守るガードが精度を16ポイント下げた記録

Memory Bank の Memory profiles が GA になり、構造化された記憶を後段へ渡せるようになりました。更新ポリシーを3種類つくって同条件で比較したところ、直感的に正しく見えた防御が精度を下げていました。計測コード一式と、フィールド別TTLへ切り替えるまでの記録です。

Gemini API201Memory BankMemory profilesエージェント設計3スキーマ設計個人開発94

プレミアム記事

サポート問い合わせのログを眺めていて、手が止まりました。

壁紙アプリの問い合わせ窓口です。同じ利用者のプロファイルに billing_plan: pro と記録されているのに、当人は「無料のままです」と書いてきています。App Store 側の購読状況を照会すれば済む話ではありますが、そもそも記録が信じられないなら、プロファイルを持つ意味が半分なくなります。記録の更新日時を見ると3週間前。3週間前には確かに Pro でしたし、その時の記録は本人の明言に基づいた確度の高いものでした。

つまり、間違った値が入っていたわけではありません。正しかった値が、正しかったまま古くなっていたのです。

Memory Bank の Memory profiles が一般提供へ移ったのは 2026年8月1日の changelog でのことでした。静的なスキーマを定義しておくと、モデルがそれを埋めて更新してくれる。自由記述の記憶より後段の処理で扱いやすい形になる。読んだときは素直に嬉しかったのですが、実際に組み込む段になって、いちばん難しいのはスキーマの形ではなく更新をいつ受け入れ、いつ拒むかだと分かってきました。

その判断を勘で決めるのが嫌だったので、手元に小さな比較ハーネスを書いて測りました。結果は予想と逆でした。

構造化が持ち込んだのは、記憶の形式ではなく更新の責任

自由記述の記憶と Memory profiles の差は、しばしば「文章か JSON か」として語られます。ただ、運用してみると本質はそこではありませんでした。

自由記述のメモリは、矛盾をそのまま抱えられます。「7月上旬には Pro だと述べていたが、7月下旬には無料だと述べている」という2行を並べて置いておけば、読む側のモデルが文脈で判断してくれます。冗長ですが、判断を先送りできる余地がある。

構造化プロファイルには、その逃げ場がありません。billing_plan というフィールドは1つの値しか持てないため、書き込みの瞬間に「どちらが正しいか」を決め切る必要があります。この決定を誰がどう下すかを設計しないまま構造化すると、最後に書き込まれた値がそのまま正解として下流へ流れていきます。

私自身、最初はここを軽く見ていました。スキーマさえ丁寧に切れば、あとはモデルが埋めてくれると考えていたのです。

確度をスキーマに持たせる

そこでまず、値そのものだけでなく「その値がどこから来たか」をスキーマに入れました。

{
  "type": "object",
  "properties": {
    "billing_plan": {
      "type": "object",
      "properties": {
        "value":       { "type": "string", "enum": ["free", "pro", "ultra"] },
        "confidence":  { "type": "string", "enum": ["confirmed", "inferred"] },
        "observed_at": { "type": "string", "format": "date-time" },
        "source":      { "type": "string", "description": "発話ID または推論の根拠" }
      },
      "required": ["value", "confidence", "observed_at"]
    }
  }
}

confirmed は本人が明示的に述べた値、inferred はモデルが文面から推測した値です。この区別さえ入れておけば、あとは「推測値で確定値を上書きしない」というガードを書けば安全だろう。そう考えたのが、この記事で覆される仮説でした。

まず注入トークンを測る

ポリシーの話に入る前に、そもそも構造化がどれだけ効くのかを確かめました。20フィールドのプロファイルと、同じ20件の事実を文章で保持した自由記述メモリを、それぞれトークン化して比べます。

計測には cl100k_base を使いました。Gemini のトークナイザとは異なるため、絶対値ではなく比率として読んでください。日本語混じりのテキストにおける相対的な傾向は十分に見えます。

import json, tiktoken
 
enc = tiktoken.get_encoding("cl100k_base")
tok = lambda s: len(enc.encode(s))
 
fields = {
    "primary_language": "Swift", "target_platform": "iOS",
    "billing_plan": "pro", "preferred_locale": "ja",
    "build_tool": "Xcode", "notify_channel": "push",
    "team_size": "1", "ci_provider": "Xcode Cloud",
    "min_os_version": "iOS 26", "analytics_tool": "App Store Connect",
    "paywall_style": "hard", "review_prompt_timing": "3回目起動",
    "asset_pipeline": "Figma→SwiftGen", "crash_tool": "Crashlytics",
    "localization_langs": "ja,en", "monetization": "サブスク",
    "test_device": "iPhone 15", "design_system": "独自",
    "backend": "Cloudflare Workers", "push_provider": "APNs",
}
profile = json.dumps(fields, ensure_ascii=False, separators=(",", ":"))
 
def freeform(history_depth):
    """同じ20件を文章で保持し、更新履歴を history_depth 回分ぶら下げる"""
    out = []
    for k, v in fields.items():
        out.append(f"- ユーザーの{k}{v}です。")
        for i in range(history_depth):
            out.append(f"  ({i+1}回前の会話では別の値を述べていましたが、上記が最新です)")
    return "\n".join(out)
 
print(f"profile: {tok(profile)} tok")
for h in (0, 1, 2, 3):
    f = tok(freeform(h))
    print(f"freeform(history={h}): {f} tok  ratio={f / tok(profile):.1f}x")

手元での出力は次のとおりです。

形式トークン数プロファイル比
構造化プロファイル(20フィールド)1371.0x
自由記述・履歴なし2962.2x
自由記述・履歴1回分8966.5x
自由記述・履歴2回分1,49610.9x
自由記述・履歴3回分2,09615.3x

履歴を持たない自由記述との差は 2.2倍にとどまります。派手な数字ではありません。差が開くのは、更新履歴が積み上がったときです。

Gemini 3.6 Flash の入力単価 $1.50 per Mtok で、1日1,000リクエストを30日回した場合を試算すると、137トークンなら月 $6.17、1,496トークンなら月 $67.32。差は約 $61 です。個人開発の規模だと無視できない額になってきます。

ただ、この差は「構造化が偉い」という話ではありません。自由記述側も定期的に要約して圧縮すれば近づきます。むしろ圧縮を自前で運用し続けなくてよくなることが、Memory profiles を選ぶ実務上の理由でした。

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

この記事の続きを読む

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

この記事で得られること
確定値を推測値で上書きしないガードが、揮発しやすいフィールドで正解率を68.9%から52.5%へ下げた計測結果と、その理由
混在プロファイルでフィールド別TTLに切り替えて正解率76.0%→81.8%まで戻した、そのまま走る比較ハーネスの全コード
自由記述メモリとの注入トークン比較 — 137トークン対1,496トークン、1日1,000リクエストなら月$6.17対$67.32
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API / SDK2026-08-02
environment hooks に置いた門番の実測 — 判定は46マイクロ秒、起動は23ミリ秒
Managed Agents の environment hooks に破壊的コマンドのガードを置くまでの記録です。正規表現の denylist が20件中9件を素通りさせた実測から、argv 分解による検出率100パーセントまでの3段階と、判定より500倍重い起動コストの内訳をまとめました。
API / SDK2026-07-30
二段構成の採算を決めていたのは昇格率ではなく、昇格した集合の出力長でした
Flash-Lite を前段に置き、迷った分だけ 3.6 Flash に昇格させる二段構成。その採算を昇格率だけで見積もると外します。昇格した集合の出力長を式に入れて損益分岐点を解き直した記録です。
API / SDK2026-07-19
Managed Agents を background: true で走らせて画面を止めない — 個人開発の非同期ラン設計
Managed Agents の background 実行は結果ではなくラン ID を即座に返します。ポーリングの最小構成と、個人開発での使いどころ、認証情報リフレッシュの注意点を実務目線でまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →