ローカルLLMで天気予報〜AIアシスタントを使ったプログラミング

AIアシスタントとともにプログラミングを行うバイブコーディングと呼ばれているものをやってみました。

テーマは「tenki.jpから現時点、2時間前、4時間前、6時間前の気象画像をダウンロードし、2時間後の気象画像を予測生成し、それらをもとにローカルLLMを使って天気予報を生成する」というもの。予測に使用する情報が気象画像(赤外線画像、可視光画像、水蒸気量画像)だけなので、気象モデルを使った高度な予測に基づく天気予報の精度は出ませんが、色々と応用できそうなプログラムだと思います。

使用したアシスタントはChatGPT、天気予報の生成にはローカルで動くgpt-ossを使いました。

所要時間は約3時間。

最初はAIが難解なコードを生成してきて理解が追いつかなかったので、仕切り直しをして、わかりやすい簡単なコードを自分で書いて、それをベースにAIにコード生成を手伝ってもらいながら、少しずつ機能を充実させていきました。出来上がったのはコマンドラインベースのPythonプログラムです。

プログラムを実行すると次のような処理を行います。

tenki.jpから直近、2時間前、4時間前、6時間前の気象画像をダウンロードする

直近画像

2時間前画像

4時間前画像

6時間前画像

これらを元に2時間後の気象画像を予測して生成します。(時刻のタイムスタンプは直近画像のままですが)

この予測を分析したものが最上部の画像です。

プログラムを実行したときの様子がこちらです。↓

赤外線画像

$ python jma_tenki_nowcast_llm_presen.py –product ir –region japan-near –use-llm \ –ollama-model gpt-oss:latest –annotate –gif –mp4 –report-html –report-md –ollama-temp=0.95 –save-json –verbose

[ok] 0h: 2025-08-24 12:30 JST  -> ./himawari_images/ir_japan-near_obs_0h_20250824_1230.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/12/30/00/japan-near-large.jpg  prod: ir
[ok] 2h: 2025-08-24 10:30 JST  -> ./himawari_images/ir_japan-near_obs_2h_20250824_1030.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/10/30/00/japan-near-large.jpg  prod: ir
[ok] 4h: 2025-08-24 08:30 JST  -> ./himawari_images/ir_japan-near_obs_4h_20250824_0830.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/08/30/00/japan-near-large.jpg  prod: ir
[ok] 6h: 2025-08-24 06:30 JST  -> ./himawari_images/ir_japan-near_obs_6h_20250824_0630.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/06/30/00/japan-near-large.jpg  prod: ir
[ok] saved: ./himawari_images/ir_japan-near_forecast_+2h.jpg
[ok] annotated: ./himawari_images/ir_japan-near_forecast_+2h_annotated.png
[ok] gif: ./himawari_images/ir_japan-near_timelapse.gif
IMAGEIO FFMPEG_WRITER WARNING: input image is not divisible by macro_block_size=16, resizing from (692, 520) to (704, 528) to ensure video compatibility with most codecs and players. To prevent resizing, make your input image divisible by the macro_block_size or set the macro_block_size to 1 (risking incompatibility).
[ok] mp4: ./himawari_images/ir_japan-near_timelapse.mp4
[ok] json: ./himawari_images/ir_japan-near_summary.json
[ok] markdown: ./himawari_images/ir_japan-near_report.md
[ok] html: ./himawari_images/ir_japan-near_report.html

=== 予報テキスト ===
**青空が広がる、やさしい一日を**

全国的には、午前中の雲量がわずかに増加しても、全域で雲量は0.20を大きく下回り「晴天優勢」のままです。2時間後の14時50分には、東日本と西日本でやさしい曇りが少し広がりますが、晴空が優勢な状態を保ちます。全体的に快適な陽気が続く予報です。

- **北海道**:晴天優勢。雲量はわずかに増加しますが、天候は安定しています。  
- **東日本**:晴天優勢。雲量が0.168から0.201へとやさしく増加しますが、晴空が主流です。  
- **西日本**:晴天優勢。雲量が0.049から0.058へとわずかに増えます。  
- **九州~四国**:晴天優勢。雲量はほぼ変わらず0.008から0.009へ。  
- **沖縄・南西**:晴天優勢。雲量は0.012から0.013へとほぼ同じです。

**注意喚起**:特に気象上の警戒は必要ありません。快適にお過ごしください。

可視画像

$(.venv) ➜ example git:(main)$ python jma_tenki_nowcast_llm_presen.py –product vis –region japan-near –use-llm
–ollama-model gpt-oss:latest –annotate –gif –mp4 –report-html –report-md –ollama-temp=0.95 –save-json –verbose

[ok] 0h: 2025-08-24 12:30 JST  -> ./himawari_images/vis_japan-near_obs_0h_20250824_1230.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/12/30/00/japan-near-large.jpg  prod: vis
[ok] 2h: 2025-08-24 10:30 JST  -> ./himawari_images/vis_japan-near_obs_2h_20250824_1030.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/10/30/00/japan-near-large.jpg  prod: vis
[ok] 4h: 2025-08-24 08:30 JST  -> ./himawari_images/vis_japan-near_obs_4h_20250824_0830.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/08/30/00/japan-near-large.jpg  prod: vis
[ok] 6h: 2025-08-24 06:30 JST  -> ./himawari_images/vis_japan-near_obs_6h_20250824_0630.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/06/30/00/japan-near-large.jpg  prod: vis
[ok] saved: ./himawari_images/vis_japan-near_forecast_+2h.jpg
[ok] annotated: ./himawari_images/vis_japan-near_forecast_+2h_annotated.png
[ok] gif: ./himawari_images/vis_japan-near_timelapse.gif
IMAGEIO FFMPEG_WRITER WARNING: input image is not divisible by macro_block_size=16, resizing from (692, 520) to (704, 528) to ensure video compatibility with most codecs and players. To prevent resizing, make your input image divisible by the macro_block_size or set the macro_block_size to 1 (risking incompatibility).
[ok] mp4: ./himawari_images/vis_japan-near_timelapse.mp4
[ok] json: ./himawari_images/vis_japan-near_summary.json
[ok] markdown: ./himawari_images/vis_japan-near_report.md
[ok] html: ./himawari_images/vis_japan-near_report.html

=== 予報テキスト ===
午後2時に向けて晴天が続きます  

全国概況:全域で雲量は低く、晴天優勢です。2時間後に少し雲が増える見込みですが、依然として快適な晴れの一日となりそうです。全体的に天気は安定し、外出には最適な条件です。  

北海道:北海道では午後も晴天が続き、雲量はわずかに増加しますが、晴れが優勢です。  
東日本:東日本では雲量が0.168から0.212へと増加しますが、晴れが主体で快適な午後を過ごせます。  
西日本:西日本では雲量が0.049から0.061へとわずかに増加しますが、晴天優勢です。  
九州~四国:九州~四国では雲量が0.008から0.010へとほとんど変わらず、晴天が続きます。  
沖縄・南西:沖縄・南西では雲量が0.012から0.013へとほとんど変わらず、晴天が優勢です。

水蒸気画像

$ python jma_tenki_nowcast_llm_presen.py –product wv –region japan-near –use-llm
–ollama-model gpt-oss:latest –annotate –gif –mp4 –report-html –report-md –ollama-temp=0.95 –save-json –verbose

[ok] 0h: 2025-08-24 12:30 JST  -> ./himawari_images/wv_japan-near_obs_0h_20250824_1230.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/12/30/00/japan-near-large.jpg  prod: wv
[ok] 2h: 2025-08-24 11:00 JST  -> ./himawari_images/wv_japan-near_obs_2h_20250824_1100.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/11/00/00/japan-near-large.jpg  prod: wv
[ok] 4h: 2025-08-24 09:00 JST  -> ./himawari_images/wv_japan-near_obs_4h_20250824_0900.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/09/00/00/japan-near-large.jpg  prod: wv
[ok] 6h: 2025-08-24 07:00 JST  -> ./himawari_images/wv_japan-near_obs_6h_20250824_0700.jpg
     url: https://static.tenki.jp/static-images/satellite/2025/08/24/07/00/00/japan-near-large.jpg  prod: wv
[ok] saved: ./himawari_images/wv_japan-near_forecast_+2h.jpg
[ok] annotated: ./himawari_images/wv_japan-near_forecast_+2h_annotated.png
[ok] gif: ./himawari_images/wv_japan-near_timelapse.gif
IMAGEIO FFMPEG_WRITER WARNING: input image is not divisible by macro_block_size=16, resizing from (692, 520) to (704, 528) to ensure video compatibility with most codecs and players. To prevent resizing, make your input image divisible by the macro_block_size or set the macro_block_size to 1 (risking incompatibility).
[ok] mp4: ./himawari_images/wv_japan-near_timelapse.mp4
[ok] json: ./himawari_images/wv_japan-near_summary.json
[ok] markdown: ./himawari_images/wv_japan-near_report.md
[ok] html: ./himawari_images/wv_japan-near_report.html

=== 予報テキスト ===
**【晴天優勢】2025年8月24日 15時の天気概況**

全国的に雲量は低く、晴天優勢のままです。午前中に比べて東日本ではわずかに雲が増える見込みですが、まだ晴れ間主体の状態です。西日本と九州~四国ではほぼ雲がなく、太陽が差し込む日となりそうです。北海道も軽い雲が薄く漂う程度で、快適な天候が続きます。

- **北海道**:雲量0.086で晴天優勢。ほんの軽い雲が漂います。  
- **東日本**:雲量0.203へわずかに増加。晴天優勢のままです。  
- **西日本**:雲量0.059で晴天優勢。太陽が輝きます。  
- **九州~四国**:雲量0.009でほぼ晴天。  
- **沖縄・南西**:雲量0.012で晴天優勢。  

**注意喚起**:特に異常な天候は予想されません。外出の際は日差し対策を忘れずに。

ここから更に、出力をHTMLやMarkdown形式にし、気象画像のタイムラプス画像をそこに貼る、という処理を加えました。HTMLファイルをブラウザで開いた様子が下の動画です。

コマンドを実行すると15秒程度で処理が完了します。

ここからGUIをつける、機械音声付きの動画を作ってYouTubeにアップロードする、定期実行してDiscordに投稿する、といった拡張は容易ですし、他の情報を加えて予測の精度上げるといった改良するのも面白いですね。

AIに丸投げでもある程度は高機能なプログラムが作れますが、AIに対して希望する機能をしっかり言語化する必要や、AIが生成したコードを評価する必要はあります。プログラミング未経験者でもできるというわけではありませんから、基礎知識や経験は必要です。

モノづくり塾には「AI学習環境の整備構想」があります。現時点でもこの程度のことは余裕を持ってやれるのですが、多くの塾生が塾内外からAIを勉強できる環境を整備したいと考えています。様々な研究や仕事でAIを活用できる人が多く育って欲しいと思っています。

このような活動をしている理由は以下の記事に書いています。是非、目を通してください。

参考記事:

「ローカルLLMで天気予報〜AIアシスタントを使ったプログラミング」への1件のフィードバック

コメントする