IPCC AR6 Climate Retrieval について
IPCC AR6 Climate Retrieval は、ライブ予報、ERA5 の極端値、IPCC AR6 の資料を組み合わせ、気候リスクレポートを作成するエージェントです。根拠が不足する質問や対象外の質問には回答を拒否します。
主な機能
- 01地点ごとのライブ予報を取得
- 02ERA5 年最大値から再現水準を推定
- 03地点固有のまれさに基づくリスク分類
- 04IPCC AR6 を検索しページ番号を引用
- 05根拠のない質問への回答拒否
活用シーン
- 01地点ごとの高温・大雨・強風リスクの評価
- 02予報と長期的な極端気候記録の比較
- 03地域に関する IPCC AR6 の予測変化の確認
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e GEMINI_API_KEY -e GOOGLE_GENAI_USE_VERTEXAI -e GOOGLE_CLOUD_PROJECT ghcr.io/aswanisahoo/climate-ipcc-rag-mcp:0.1.0GEMINI_API_KEYシークレットAI Studio API key. Either this or the Vertex variables must be set: retrieval is hybrid, so the dense half embeds every query.GOOGLE_GENAI_USE_VERTEXAISet to "true" to authenticate through Vertex AI with Application Default Credentials instead of an API key.GOOGLE_CLOUD_PROJECTGoogle Cloud project id. Required when GOOGLE_GENAI_USE_VERTEXAI is true.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/aswanisahoo/climate-ipcc-rag-mcp:0.1.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
Climate-Risk Analyst Agent
地球上のあらゆる場所について、熱、極端な雨、または風に関する平易な言葉での質問をすると、リアルタイムの予報データ、60年以上にわたるERA5の極値、IPCC AR6に基づく、型付けされた出典付きのリスクレポートが返されます。確認できる範囲外の質問には、推測せず回答を拒否します。
ライブデモ: https://climate-risk-agent-714882950125.us-central1.run.app/(一般公開されている[Google Cloud Run](https://cloud.google.com/run)へのデプロイです)。
できること
- あらゆる場所について回答します。地名を入力してジオコーディングするか、緯度と経度を直接入力できます。
- その地点のリアルタイム予報を、60年以上にわたるERA5の年間最大値と並べて表示し、参照したIPCC AR6のページを番号で引用します。
- 固定のしきい値ではなく、その場所固有の再現レベル曲線に基づいてリスクを区分します。
- 信頼度の内訳を示します。対象の日数における予報スキルの実測値、気候学的適合度、回答を裏付ける引用の有無が含まれます。
- その地点を含む参照地域について、AR6第12章の予測変化を一字一句そのまま引用します。

測定に基づく優位性
- ERA5 の GEV ハザード統計。 すべてのハザード値は、クエリ地点における ERA5 の 60 年以上の年最大値に適合させた一般化極値分布から得られます。各再現期間レベルには、90%ブートストラップ信頼区間が付属します。
- リスクレベルは固定しきい値ではなく、地点ごとの希少性です。 区分は、その地点固有の曲線における予報ピークの再現期間で決まります。2 年レベル未満は低、2 年から 10 年は中、10 年から 50 年は高、50 年以上は深刻です。同じコードでも、通常の年にすでに達する地点では 46 °C のピークが低に、前例のない地点では深刻になります。各レポートには、区分の判定根拠となった文が含まれ、上下のレベルと推定再現期間が明記されます。適合済みの気候統計がない地点では、絶対しきい値に切り替え、そのことを明示します。地域固有の基準であるかのように示すことはありません。
- 非定常 GEV。 定常適合に加え、位置パラメーターが変化する GEV で、その地点の気候が実際に温暖化しているかを調べ、尤度比検定で判断します。傾向が実際にある場合、再現期間レベルは 6 年間の平均ではなく、最新年時点の「実効」レベルとして報告されます。ベルリンでは 10 年あたり +0.76 °C(p < 0.0001)となり、実効レベルが適用されます。デリーでは定常と判定され(p = 0.56)、エアロゾルによるマスキングが南アジアの気温上昇傾向を抑えているという公表済み研究と一致します。
- 根拠が検証に耐える引用付きの IPCC AR6 RAG。 すべての引用について、その質問に対して実際に取得されたページと構造的に照合します。モデルが取得済みの実在ページを示せない場合は、引用を無理に提示せず、回答を拒否します。
- 予測変化は生成せず、引用します。 各レポートには、地点を含む参照地域についての AR6 WG1 第12章の気候影響要因の予測が含まれます。第12章からの逐語的な文、その方向性、IPCC 独自の確信度表現、記載されている温暖化レベルまたは期間を示します。これらはすべて、モデルを介さず、取得したチャンクから正規表現で抽出されます。その地域やハザードについて章でそのような変化が評価されていない場合、このセクションは省略され、レポートには地域別予測がコーパス内に見つからなかったことが記載されます。
同じレポートを下にスクロールすると、ERA5 の再現期間レベル表とブートストラップ信頼区間、温暖化傾向のバナー、その実行で測定されたコストとレイテンシーが表示されます。

仕組み
フリーテキストの質問は、エージェントに届く前に、解析、ジオコーディング、AR6 地域へのマッピングを経ます。その後、5 ノードの LangGraph エージェント(plan、call、research、project、synthesize)が、型付きの RiskReport を生成するか、回答を拒否します。
flowchart LR
Q[free-text question] --> PARSE[parse<br/>location · hazard · horizon]
PARSE --> GEO[geocode<br/>Open-Meteo]
GEO --> REGION[map to IPCC AR6 region<br/>reference regions v4]
REGION --> PLAN[agent: plan<br/>scope check]
PLAN -->|unsupported hazard| REFUSE[refusal<br/>valid typed output]
PLAN --> CALL[agent: call<br/>forecast]
CALL --> RESEARCH[agent: research]
RESEARCH --> PROJECT[agent: project<br/>AR6 Ch.12 CID projection]
PROJECT --> SYNTH[agent: synthesize]
SYNTH --> REPORT[RiskReport<br/>typed · cited · grounded]
subgraph HAZARD [ERA5 to GEV hazard statistics]
ERA5[ERA5<br/>60+ yr annual maxima] --> GEV[stationary + drifting-location GEV]
GEV --> LRT[likelihood-ratio test<br/>is the trend real?]
LRT --> LEVELS[return levels + 90% bootstrap CI<br/>effective at latest year if trend holds]
end
CALL -.-> HAZARD
HAZARD -.-> SYNTH
subgraph RAG [IPCC AR6 RAG]
HYBRID[BM25 + dense hybrid<br/>RRF fusion] --> VALID[citations validated<br/>against retrieved pages]
end
RESEARCH -.-> RAG
RAG -.-> SYNTH
UI では、同じ実行が名前付きの 7 つのステップとして次の順序で表示されます(agent/progress.py)。地点の特定、ERA5 の 60 年分の極値の適合、質問が対象範囲内かの確認、予報の取得、IPCC AR6 の検索、お住まいの地域の第12章の予測の確認、引用付きレポートの作成です。
評価
- 開発用データセット: 60 件の質問を使用し、チャンク化や検索設定などの開発上の判断に役立てています。
cid-tableの 15 件の質問は、第12章の予測レイヤーとともに追加され、このセットは新しい SHA-256 で再凍結されました。 - テスト用データセット: 開発用データセットの作成後に新たに作成された 105 件の質問です。調整には一切使用せず、どちらのセットも予告なく変更されないよう、SHA-256 で凍結しています。
開発用データセットでの検索結果。全 60 件(うち回答可能な質問 49 件)。測定日:2026-09-02
| 検索方式 | R@3 | R@5 | R@10 | MRR |
|---|---|---|---|---|
| BM25 のみ | 76% | 82% | 88% | 0.68 |
| 密検索のみ | 61% | 69% | 86% | 0.59 |
| ハイブリッド(採用方式) | 82% | 90% | 94% | 0.70 |
スライスごとのハイブリッド R@3:単一ページ 92%(n=12)、地域別テーブル 90%(n=10)、複数ページ 80%(n=10)、前提の注入 75%(n=4)、cid-table 67%(n=15)。cid-table は最も成績が低いスライスであり、全60問での総合値が、当初の45問での91%から82%になった理由です。 |
開発セットのエンドツーエンド評価、全60問(gemini-2.5-flash、top_k 8、スコープガードのステージ2はオフ、2026-09-02に測定):
| セル | 件数 |
|---|---|
| 正答 | 48 |
| 正しい拒否 | 11 |
| 誤拒否 | 1 |
| 誤回答 | 0 |
引用の妥当性は41/48(85%)です。数値の出典追跡率は42/48(88%)です。根拠のある拒否は3/4です。実行コストは$0.20で、1問あたり約$0.0034です。モデル呼び出し55回でのp50レイテンシは5.5秒で、レート制限による再試行が6回あり、失敗はありませんでした。
ホールドアウト結果(2回目の評価、実際にデプロイされた正確な設定):
- 検索:回答可能な質問でR@3 87%、R@5 91%、R@10 96%。
- ホールドアウトの拒否マトリックス全体で誤回答はゼロです。捏造はありません。
- 引用の妥当性:96%。数値の出典追跡率:88%。
- 測定コストは1問あたり約$0.003、p50レイテンシは3.9秒です。
リランキングとクエリ書き換え:測定済み、無効のまま。 どちらもHybridRetrieverのキーワード引数として組み込まれており、デフォルトでは無効です。cid-tableの質問が追加される前に、45問の開発セット(回答可能な質問は34問)で測定しました:
| 構成 | R@3 | R@5 | R@10 | MRR | p50 | 1問あたりのコスト |
|---|---|---|---|---|---|---|
| ハイブリッド(採用構成) | 88% | 94% | 94% | 0.76 | 40〜48 ms | $0 |
| + MiniLM cross-encoder | 79% | 85% | 91% | 0.68 | 4.0 s | $0 |
| + Geminiリランカー | 82% | 94% | 94% | 0.74 | 38 s | $0.0123 |
| + クエリ書き換え | 79% | 79% | 88% | 0.74 | 6.1 s | $0.0013 |
| + Geminiリランカーと書き換え | 74% | 79% | 85% | 0.65 | 39 s | $0.0127 |
どの構成も、いずれのkでもベースラインを上回らず、最も安価な構成でもレイテンシが約100倍になります。無効のままにしておく判断を測定結果で正当化できるよう、コードには切り替え箇所を残しています。
セマンティックスコープガード、ステージ2:測定済み、無効のまま。 ステージ1は語彙ベースで、モデル呼び出しの前に実行されます。ステージ2(rag/scope_semantic.py、CRG_SCOPE_STAGE2=off|embed|llm)は、ステージ1で判定が保留された質問だけを読み取ります。45問の開発セットで測定した結果は、正答/正しい拒否/誤拒否/誤回答です:
| 構成 | マトリックス | 1問あたりの追加レイテンシ | 1問あたりの追加コスト |
|---|---|---|---|
| off(採用構成) | 34/11/0/0 | 0 | $0 |
| embed | 33/11/1/0 | 24 ms | $0 |
| llm | 34/11/0/0 | 2.8 s | $0.00025 |
どの構成でも誤回答はゼロで、どの構成にも利点がないため、デフォルトは無効のままです。embed構成で発生した誤拒否1件は、語彙ベースの危険語彙を含んでいたため、ステージ2には到達しませんでした。ホールドアウト実行でマトリックスが維持されることを確認できたら、昇格させる構成はembedです。詳しい根拠はLIMITATIONS.mdをご覧ください。
すべての評価アーティファクトには、それを生成したモデルが記録されます。モデルの切り替えはテストスイートでは検知できないためです。これらの評価を再実行せずに回答モデルを変更した際、ユニットテストでは検知できなかった有用性の低下をベンチマークが検出しました。詳しくはadr/0001-answering-model-selection.mdをご覧ください。
拒否は4セルの混同行列(正答、正しい拒否、誤拒否、誤回答)で採点されます。このマトリックスで誤回答が1件でもあれば、リリースはブロックされます。
ゲート: 目視確認ではなく、終了コードで判定します。誤回答が1件でもある場合、総合R@3が最後にコミットされた実行より3ポイントを超えて低下した場合、またはハイブリッドリトリーバーがアーティファクトに含まれていない場合(その場合、実行で測定されたのがBM25のみだと気付かない可能性があります)、ビルドは失敗します。DEPLOY.mdをご覧ください。
予報スキル
すべてのハザード数値は予報に基づいており、6日後のピーク予測と明日のピーク予測は同じ主張ではありません。その差は推測ではなく、測定されています。scripts/measure_forecast_skill.py は Open-Meteo の Previous Model Runs API を読み込みます。この API には、発生の1〜7日前にモデルが各時間について予測していた内容が保存されており、2024-01-01〜2025-12-31 の期間、6大陸の13都市を対象に、各リードタイムの予測をモデル自身の当日(day 0)の実行結果と比較して評価します。1リード日あたり、都市ごとに約9,200日分が対象です。
| ハザード | MAE、1日後 | MAE、7日後 | 極端な日を捉えた割合、1日後 → 7日後 |
|---|---|---|---|
| 日最高気温 | 0.70 °C | 1.93 °C | 85% → 47% |
| 日降水量 | 2.03 mm | 3.03 mm | 53% → 3% |
| 日最大風速 | 2.16 km/h | 4.68 km/h | 71% → 29% |
| 日最大瞬間風速 | 3.47 km/h | 8.26 km/h | 69% → 34% |
「極端な日を捉えた割合」とは、その地点における独自の95パーセンタイルを超えた日のうち、予報もその値を超えていた割合です。確定済みの数値は、その出典情報とともに tools/forecast_skill_table.json に保存されています。tools.forecast_skill.skill_for(hazard, horizon_days) はこれらの数値を読み込み、アーカイブが終了する7日を超える予報期間を7日に制限し、外挿であることを示します。
レポートは数値をただ表示するのではなく、信頼度の算出に使います。信頼度は min(0.75, 0.3 * w + climatology bonus + 0.1 if IPCC-cited) です。ここで w = min(hit rate over lead days 1..L) / hit rate at day 1 は、リード日 L の時点で、1日後の極端な現象の検出率がどれだけ維持されているかを表します。1日後の高温レポートでは予報要素の0.3がそのまま反映されますが、7日後のレポートではその0.56が反映されます。すべてのレポートには、この数値の根拠を示す forecast_skill ドライバーが含まれます。「7日後の気温予報が地域の極端値を捉える割合は47%です(GFS Global と独自の day-0 実行結果を比較。13都市、2024-2025)。そのため、予報の根拠は1日後の値の0.56に重みを下げています。」w で最小値を使うのは意図的です。降水の検出率は6日後に1.7%、7日後に3.5%ですが、これは約458件の極端な日を対象としたサンプリングノイズであり、リードタイムが長いほど予報精度が向上していることを意味するものではありません。最小値を使うことで信頼度が単調に保たれ、予報期間が長いほど確信度が高いという報告にならないようにしています。
この数値には3つの注意点があります。参照する時系列は観測所の実測値ではなく、モデル自身の最新の実行結果であるため、これは実行間の一貫性の誤差であり、真の予報誤差の下限を示します。Open-Meteo のデフォルトの best_match は、リードタイムの異なる位置で複数のモデルをつなぎ合わせ、予報スキルのように見える偏りを生み出すため、モデルは GFS Global に固定しています。たとえばデリーでは、1日後の風速予報は実測値から5.3 km/hずれていましたが、7日後の予報は0.1 km/h以内でした。また、予報開始から120時間を超えると、GFS の出力頻度は毎時から3時間ごとに下がります。そのため、日降水量の合計値が平滑化され、4日後以降の降水検出率の急落は、予報が嵐を見逃したことだけでなく、出力解像度の影響も受けています。
運用
- 気候学的適合、予測、回答キャッシュの背後には、1 つの共有キャッシュがあります。
UPSTASH_REDIS_REST_URLとUPSTASH_REDIS_REST_TOKENが設定されている場合は Upstash Redis over REST、設定されていない場合はディスクを使用します。tools/cache_backend.pyは選択したバックエンドをログに記録し、scripts/prewarm.pyはデモの前にキャッシュを準備します。 - 構造化ログとリクエストごとのテレメトリを、すべてのモデル呼び出しが通る単一の SDK 境界で計測します。計測項目はレイテンシ、トークン数、再試行回数、コストです。推論トークンは課金対象の出力として数え、料金エントリーのないモデルのコストはゼロではなく不明として報告します。インメモリーのイベントリングには上限があり、JSONL シンクには長期の履歴が保持されます。
- Cloud Run のインスタンス数の形状ごとのアイドルコスト、実測した 30 日間の負荷、リサイズ計画については、DEPLOY.md を参照してください。
- リクエストごとの API キーアクセス制御と
/metricsエンドポイントを備えた、非同期 FastAPI サービス(POST /report)です。 - 2 つの MCP サーバー(weather、IPCC RAG)が、Model Context Protocol 経由で同じツールを公開します。
CRG_BOOTSTRAP_Nは適合ごとの GEV ブートストラップ再適合回数を設定します(デフォルト:定常モデルでは 300、トレンド調整モデルでは 200)。インポート時に読み込まれ、ハザード適合のキャッシュキーに含まれます。信頼区間の精度と適合時間のトレードオフを調整します。- Docker イメージのローカルでの実測サイズは 0.31 GB です。
ci.ymlはプッシュとプルリクエストのたびに ruff、mypy、pytest を実行します。evals.ymlはv*タグのプッシュ時、または手動実行時に、リリースアセットとしてダウンロードした事前ビルド済み埋め込みキャッシュを使って両方の評価を実行するため、リリースを作成してもコーパスを再度埋め込む必要はありません。
実行方法
uv sync
uv run streamlit run ui/app.py
自然言語で質問するか、サイドバーを使って地球上の任意の地点を選択できます。場所の名前を入力してジオコーディングするか、緯度と経度を直接入力してください。例のボタンを押すと、事前に準備されたデモ都市が読み込まれます。地図には選択した地点(表示のみ)とその IPCC AR6 地域が表示され、その地点に該当する地域がない場合は通知が表示されます。
リクエストの処理中は、現在のステップ名と各ステップにかかった秒数を示すライブ進行状況パネルが表示され、キャッシュから提供されたステップには、提供したキャッシュ階層のバッジが付きます。
新しい場所の最初のレポートには、60 年以上分の ERA5 日次極値を取得し、その地点の GEV を一度適合させるため、約 1~2 分かかります。その後、適合結果は設定に応じて Redis またはディスクにキャッシュされ、再訪問時には 1 秒未満で返されます。
Docker を使用する場合:
docker build -t climate-risk-agent .
docker run -p 7860:7860 -e GEMINI_API_KEY=... climate-risk-agent
ライブデモ は Google Cloud Run で稼働しています。デプロイ(Cloud Run、ローカルの Docker、その他のホスト)については、DEPLOY.md を参照してください。
MCP サーバーを使う
両方のサーバーは stdio を使用します。リポジトリのルートから、任意の MCP クライアントで次のように指定してください。
{
"mcpServers": {
"climate-weather": {
"command": "uv",
"args": ["run", "--no-sync", "python", "-m", "tools.weather_mcp"]
},
"climate-ipcc-rag": {
"command": "uv",
"args": ["run", "--no-sync", "python", "-m", "tools.ipcc_mcp"]
}
}
}
| サーバー | ツール |
|---|---|
| climate-weather | forecast, hazard_climatology |
| climate-ipcc-rag | search_ipcc, answer_ipcc |

両方のサーバーは、現行リビジョンである MCP プロトコル 2026-07-28(mcp 2.0.0)を対象としています。すべてのツールには、人が読めるタイトルとオープンワールドまたはクローズドワールドのヒントが付いた読み取り専用の注釈があり、outputSchema を公開し、決定的な順序で一覧表示されます。2 つのテストでは、各サーバーを実際のサブプロセスとして起動し、ツール関数をプロセス内で直接呼び出すのではなく、プロトコルを介して通信します。
検索はハイブリッド方式のため、両方の IPCC ツールはクエリを埋め込む必要があり、サーバープロセスに認証情報が必要です。GOOGLE_GENAI_USE_VERTEXAI=true と GOOGLE_CLOUD_PROJECT を設定するか、GEMINI_API_KEY を設定してください。
クライアントはシェルをサーバーに渡しません。サーバーがシークレットを取得できないように、PATH、APPDATA、TEMP などの短い許可リストにある変数だけを渡します。そのため、クライアントから起動したサーバーには認証情報がありません。認証情報は、クライアント独自の env ブロックで渡すか、.env.example を .env にコピーして指定してください。IPCC サーバーは起動時にこれを読み込み、クライアントが渡した値を上書きすることはありません。
ツールを手動で試すには、次を実行してください:uv run mcp dev tools/ipcc_mcp.py。
公式 MCP レジストリに公開
IPCC RAG サーバーは、io.github.AswaniSahoo/climate-ipcc-rag(v0.1.0)として
公式 MCP レジストリに公開されており、
GHCR 上の公開 OCI イメージ(ghcr.io/aswanisahoo/climate-ipcc-rag-mcp:0.1.0)によって
提供されています。Docker/OCI トランスポートに対応する MCP クライアントであれば、
レジストリから直接インストールできます。

貢献
セットアップ、CI で実行するコマンド、評価リリースのゲート、プルリクエストに関する要件はCONTRIBUTING.mdに記載されています。参加にあたっては行動規範をご確認ください。 イシューには、バグ、データの正確性、質問の各テンプレートを使用してください。 返されるレベルの誤り、ページの引用ミス、地域のマッピングの誤りも、ここでは正式なバグとして扱います。見つけた場合は、バグとしてご報告ください。
技術スタック
Python、LangGraph、Google Gemini(生成)+ Vertex AI(グローバルエンドポイント)上の gemini-embedding-2(高密度)、BM25+高密度のハイブリッド検索(RRF 融合)、Pydantic、FastAPI、Streamlit、MCP Python SDK、scipy、Docker、GitHub Actions。
制限事項
- ERA5 は格子化された再解析データであり、観測所の観測値ではありません。ハザード統計は、クエリ位置の近くにある補間された格子点を示すもので、その場所で取得された測定値ではありません。
- 対象範囲は熱、極端な降水、風です。それ以外については、回答ではなく拒否を返す必要があります。
- 対象範囲は世界全体ですが、IPCC AR6 の地域コンテキストは全域を網羅していません。いずれの AR6 陸域地域にも属さない地点(外洋)についても、予測とハザード統計は返されますが、地域コンテキストがないことを通知します。
- 対象外のハザードを LLM に渡さないようにするスコープガードは、語彙ベース(キーワードベース)です。既知の語彙を避けた言い換えは、このガードをすり抜ける可能性があります。
データソースとライセンス
- 予測:Open-Meteo、CC BY 4.0。
- ERA5 日次極値:ERA5 再解析データ。Open-Meteo アーカイブを通じて、同じライセンスで提供されています。
- 気候評価:IPCC AR6 WG1 SPM、第11章および第12章の PDF。IPCC の規約に基づき、研究目的で再利用しています。
- AR6 参照地域ポリゴン:CC BY 4.0 の下、IPCC WGI Atlasから
tools/ar6/に同梱しています。必要な引用:Iturbide, M., Fernández, J., Gutiérrez, J.M. et al. Implementation of FAIR principles in the IPCC: the WGI AR6 Atlas repository. Scientific Data 9, 629 (2022). https://doi.org/10.1038/s41597-022-01739-y
一覧についてはLIMITATIONS.md、脅威モデルについてはSECURITY.mdをご覧ください。提供済みの機能と今後の予定についてはROADMAP.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。