ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-05-20上級

Antigravity AIエージェントの『知識鮮度』を運用設計する — モデルカットオフ・コーパス老朽化・実世界時刻ずれを本番で扱う時間管理アーキテクチャ

Antigravity で動かす AI エージェントは、モデル側・RAG コーパス側・実世界側の三つの時間軸を別々に管理しないと、半年前のドキュメントを根拠に古い実装を提案してきます。Freshness Oracle と時間認識プロンプトで知識の鮮度を運用設計する実装パターンを、TypeScript の動くコードとともに整理しました。

antigravity436ai-agents4freshnessrag8production59architecture13observability17

プレミアム記事

2014年から個人で iOS / Android アプリを運営してきて、累計5,000万ダウンロードという規模に育つ過程で何度も痛い思いをしたことがあります。それは「半年前まで正しかった答えが、ある日いつの間にか間違っている」という事象です。AdMob のポリシー、App Store の審査ガイドライン、Google Play のターゲット API レベル、これらは静かに更新されていきます。

Antigravity でエージェントを組み立て始めた頃、私は同じ落とし穴に何度かはまりました。エージェントが「2024年11月時点では AdRequest.Builder().build() でテストデバイスを設定するのが推奨です」と自信満々に答えてくる。けれども実装してみると、新しい SDK では別のメソッドに置き換わっています。LLM の知識は止まっているのに、現場のドキュメントは動き続けているのです。

この記事は、その不一致を構造的に解決するための運用設計をまとめたものです。Antigravity エージェントを本番で動かすときに、知識の鮮度をどう扱うかという話を、設計指針と動くコードの両方から見ていきます。

知識の鮮度は三つの時間軸に分解する

最初に整理しておきたいのは、エージェントが扱う知識には少なくとも三つの独立した時間軸があるという事実です。これを混ぜて議論すると、対策が散漫になります。

一つ目はモデル本体のカットオフ日付です。LLM が訓練データを取り込んだ最終日を指し、これより新しい情報はモデルそのものには入っていません。Gemini 2.5 系であればおおむね2025年初頭、Claude 4 系であれば2025年中盤など、モデルごとに固定値が存在します。

二つ目は RAG コーパスの更新日付です。社内ドキュメント・公式マニュアル・自分のコードベースなど、エージェントに参照させる外部知識ベースには、個々のドキュメントごとに「最後に更新された日付」があります。コーパス全体ではなく、ファイル単位、できれば段落単位で持つのが理想的です。

三つ目は実世界の現在時刻です。AdMob のポリシーが今日変わったかもしれありません。Google が来週新しい API を発表するかもしれありません。エージェントの実行時点で、その情報がどの程度有効かを判断する基準時刻です。

この三つを別々に管理しないと、後で「どこが原因で古い答えを返したのか」が追えなくなります。Antigravity のエージェント設計では、最初からこの三軸を別フィールドとして持たせるのが推奨です。

Freshness Oracle というコンポーネントを置く

私が個人開発で使っているパターンは、エージェントとは別に Freshness Oracle と呼ぶ小さなサービスを置く方法です。エージェントが何かを答える前に、参照しようとしている知識ソースの鮮度を Oracle に問い合わせ、判定結果を踏まえて応答方針を決めます。

判定結果は三段階で十分です。fresh(基準内・そのまま使ってよい)、stale(基準を超えた・注意喚起付きで使う)、expired(完全に失効・使ってはいけない)。これをコーパス側のメタデータと、エージェント側のクエリトピックの両方から計算します。

実装はシンプルにできます。TypeScript で書くと、こんな具合です。

// freshness-oracle.ts
export type FreshnessStatus = "fresh" | "stale" | "expired";
 
export interface KnowledgeSource {
  id: string;
  topic: string;          // e.g. "admob-policy", "ios-review-guideline"
  updatedAt: Date;        // コーパス側の最終更新日
  ttlDays: number;        // トピックごとに設定する有効期限
}
 
export interface FreshnessVerdict {
  status: FreshnessStatus;
  ageDays: number;
  ttlDays: number;
  reason: string;
}
 
const TOPIC_TTL: Record<string, number> = {
  "admob-policy": 30,            // 広告ポリシーは月単位で変わる
  "ios-review-guideline": 60,    // App Review は2ヶ月単位
  "play-target-api": 90,         // ターゲットAPIレベルは四半期単位
  "antigravity-feature": 14,     // Antigravity 機能変更は2週間単位
  "general-tech": 365,           // 一般的なプログラミング知識
};
 
export function judgeFreshness(
  source: KnowledgeSource,
  now: Date = new Date()
): FreshnessVerdict {
  const ageMs = now.getTime() - source.updatedAt.getTime();
  const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));
  const ttlDays = TOPIC_TTL[source.topic] ?? source.ttlDays;
 
  if (ageDays > ttlDays * 2) {
    return {
      status: "expired",
      ageDays,
      ttlDays,
      reason: `Exceeded TTL by ${ageDays - ttlDays}d (over 2x)`,
    };
  }
  if (ageDays > ttlDays) {
    return {
      status: "stale",
      ageDays,
      ttlDays,
      reason: `Past TTL of ${ttlDays}d by ${ageDays - ttlDays}d`,
    };
  }
  return {
    status: "fresh",
    ageDays,
    ttlDays,
    reason: `Within TTL (${ageDays}d / ${ttlDays}d)`,
  };
}

ポイントは TTL をトピックごとに変えていることです。AdMob のポリシーは30日、iOS の審査ガイドラインは60日、ターゲット API レベルは90日、というように、現場の更新頻度から逆算します。私の場合は AdMob 関連が一番短いので30日に設定しています。これは、過去2年で月に1回くらいの頻度で関連情報が更新されてきた実感からの閾値です。

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

この記事の続きを読む

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

この記事で得られること
モデルカットオフ・RAG コーパス更新日・実世界時刻という三つの時間軸を分けて扱う Freshness Oracle の設計と、TypeScript の完成形コードをそのまま持ち帰れます
『古い情報を自信満々に答える』を防ぐためのタイムアウェアプロンプト・鮮度メタデータ・自動失効ルールの具体的な書き方と、私が個人開発で実際に使っている閾値を共有します
AdMob ポリシー改定や Google Play 規約変更のような『静かに古くなる知識』を Crashlytics 風のダッシュボードで監視する手順を、運用チェックリスト付きで整理しています
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-06-15
Antigravity のマルチエージェントを本番で壊さない封じ込め設計 — 連鎖障害を止める3つの境界の実装メモ
Antigravity のマルチエージェント構成は単体では綺麗に動くのに、本番では小さな失敗が全体に波及します。連鎖障害を止めるための制御の階層化・信頼境界・観測と冪等性という3つの境界を、TOML 設定と相関IDラッパーの実装まで含めて整理しました。
Agents & Manager2026-05-29
Antigravity 長時間実行エージェントの監視設計 — watchdog と段階的リカバリ
AdMob 収益最適化を 8 週間バックグラウンドエージェントに任せて見えた、長時間タスクが静かに停止する 3 つの故障モード。watchdog タイマーと段階的リカバリの実装メモを残します。
Agents & Manager2026-05-27
Antigravity Agent の Record & Replay — 失敗を3分で再現する本番運用パターン
Antigravity の自律エージェントが本番で失敗した瞬間を、後からオフラインで決定的に再生する Record & Replay の設計と実装。Dolice Labs 4 サイトを並行運用してきた経験から、ストレージ設計・PII マスク・ハーネスのコードまで具体的に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →