从自然语言到科研报告:我用 Codex 打造了一个全自动遥感分析助手
引言:遥感分析的“最后一公里”困境
作为一名经常使用 Google Earth Engine(GEE)进行遥感研究的开发者,我深知这个平台有多么强大——海量的公开遥感数据、云端强大的计算能力、丰富的算法库……但与此同时
,我也深刻体会到一个痛点:从“我有一个研究想法”到“拿到完整的分析结果和报告”,中间隔着太多重复性劳动。
每次开始一个新的分析任务,流程几乎是固定的:
这套流程我重复了无数次。更让人沮丧的是,80% 的代码都是模板化的——换一个地点、换一个时间、换一种指数,本质上只是改几个参数而已。
于是我开始思考:能不能让 AI 帮我完成这一切?
这个念头最终催生了 GEE AutoLab——一个基于 Codex 开发的全自动遥感分析 Agent。
什么是 GEE AutoLab?
GEE AutoLab 是一个基于 Google Earth Engine 的全自动遥感分析流水线工具。它的核心理念极其简单:
用户只需输入一句话(时间 + 地点 + 任务),系统自动完成数据检索 → GEE 脚本生成 → 指数/分类/变化检测分析 → GeoTIFF/CSV 导出 → 实验报告生成的全流程
简单来说,从自然语言到完整的科研报告,一键完成。
为什么选择 Codex?
在决定如何构建这个工具时,我面临一个核心问题:如何将用户的自然语言描述,转化为可执行的 GEE 代码?
传统的方法是写一个复杂的规则引擎,用正则表达式和关键词匹配来解析用户输入。但这种方法有两个致命缺陷:
而 Codex(以及后来的 GPT 系列模型)给了我一个全新的思路:与其手工编写解析规则,不如让 LLM 来理解用户的意图。
Codex 的核心优势在于:
- 代码生成能力:Codex 在大量公开代码上训练过,对 GEE 的 JavaScript/Python API 有很好的理解
- 自然语言理解:能够从用户的自然语言描述中提取关键参数(地点、时间、任务类型、分类器选择等)
- 灵活性:不需要为每种任务类型单独写解析器,模型本身就能理解任务的语义
基于这些考虑,我决定以 Codex 作为 GEE AutoLab 的“大脑”,负责自然语言理解和 GEE 代码生成。
核心功能
1. 零代码操作:一句话启动科研
GEE AutoLab 最核心的体验就是零代码。用户不需要写任何 GEE 代码,只需要用自然语言描述自己的研究需求:
# 计算植被指数
python scripts/run_pipeline.py "在武汉市,2023年,计算NDVI和EVI"
# 土地覆盖分类
python scripts/run_pipeline.py "黑龙江,2022年,土地覆盖分类,Random Forest"
# 变化检测
python scripts/run_pipeline.py "云南省,2018-2023年,森林变化检测"
# 时间序列分析
python scripts/run_pipeline.py "长江流域,2000-2023年,NDVI时间序列趋势分析"
系统会自动完成参数补全——如果用户没有指定某些参数(比如云量阈值、分辨率、分类器类型等),系统会使用智能默认值。
2. 12 大类分析任务全覆盖
GEE AutoLab 目前支持 12 大类遥感分析任务:
| 植被指数分析 | NDVI, EVI, NDWI, MNDWI, NDBI, NDMI, SAVI, GCI, RECI, NBR, PSRI, SIPI, ARVI, GNDVI, NDRE, MSAVI(16+种指数) |
| 水体与湿地分析 | 水体提取、面积统计、湿地分类、岸线变化 |
| 土地覆盖分类 | Random Forest, CART, SVM, Gradient Boosted Trees,含精度评估 |
| 变化检测 | LandTrendr, CCDC, 双期差分检测, 光谱角, PCA 变化检测 |
| 时间序列分析 | 年度/月度合成、趋势分析、异常检测、物候参数 |
| 城市与夜光分析 | 城市扩张、不透水面、NPP-VIIRS 夜光分析、城市热岛 |
| 森林与碳汇分析 | 森林覆盖、扰动检测、生物量估算、碳储量计算 |
| 灾害监测 | MODIS/VIIRS 火点检测、洪水制图、旱情监测、滑坡检测 |
| 地形与DEM分析 | 高程、坡度/坡向、流域划分、地形指数 |
| 气象与气候分析 | 降水、气温、蒸散量、干旱指数 |
| SAR 分析 | Sentinel-1 GRD、洪水检测、船只检测、土壤湿度 |
| 综合统计与导出 | 面积统计、分区统计、CSV 导出、图表生成 |
3. 全面的数据源支持
GEE AutoLab 完整支持 50+ 个 GEE 公开数据集,涵盖光学、SAR、气候、地形、夜光等各类数据:
- 光学数据:Sentinel-2 MSI SR(10m)、Landsat 8-9 OLI/TIRS SR(30m)、MODIS(250-500m)
- SAR 数据:Sentinel-1 GRD(10m)、ALOS PALSAR(25m)
- 气候数据:GPM IMERG(10km)、ERA5(11km)、CHIRPS(5km)、GRIDMET(4km)
- 土地覆盖:ESA WorldCover(10m)、Hansen Global Forest(30m)、JRC Global Surface Water(30m)
- 地形数据:SRTM DEM(30m)、Copernicus DEM(30m)、NASADEM(30m)
- 夜光数据:NPP-VIIRS(500m)、DMSP-OLS(1km)
系统还会根据任务类型和分辨率需求智能自动选择最合适的数据集。
4. 全自动导出与报告生成
分析完成后,GEE AutoLab 会自动导出多种格式的结果:
- GeoTIFF:云优化栅格导出
- CSV:统计表格和时间序列数据
- Shapefile/GeoJSON:矢量分析结果
- PNG/JPG:可视化缩略图
更重要的是,系统会自动生成一份完整的实验报告(Markdown/HTML 格式),包含:
- 研究区域概述
- 数据来源文档
- 方法学描述
- 参数配置记录
- 结果统计与分析
- 精度评估(分类任务)
- 图表与可视化
- 局限性与改进建议
技术架构
GEE AutoLab 的整体架构可以分为以下几个核心模块:
用户输入(自然语言)
↓
task_parser ← 解析地点、时间、任务、参数
↓
generate_gee ← 生成 GEE JavaScript/Python 代码
↓
run_pipeline ← 协调全流程执行
↓
generate_report ← 生成 MD/HTML 报告
↓
最终输出:GeoTIFF + CSV + 精度评估 + 图表 + 实验报告
核心模块详解
1. task_parser(自然语言解析器)
这是整个系统的“入口”。task_parser 负责从用户的自然语言输入中提取关键参数:
- 地理位置(location)
- 时间范围(start_date / end_date)
- 任务类型(tasks)
- 数据源(datasets)
- 其他参数(分类器类型、云量阈值、分辨率等)
解析器内置了丰富的关键词映射表,能够识别 12 大类任务和 50+ 数据集的别名。缺失的参数会自动使用默认值补全。
2. generate_gee(GEE 代码生成器)
这是 Codex 发挥核心作用的地方。generate_gee 根据解析后的参数,生成完整的 GEE Python 脚本。生成的脚本包含:
- GEE 初始化和认证
- ROI(研究区域)定义
- 数据加载和预处理(云掩膜、滤波、合成)
- 分析任务执行(指数计算、分类、变化检测等)
- 结果导出(GeoTIFF、CSV)
生成的代码是可直接在 GEE 环境中执行的完整脚本,用户也可以选择只生成代码而不执行(–code-only 模式)。
3. run_pipeline(流水线协调器)
run_pipeline 是整个系统的“指挥中心”,负责协调 7 个步骤的完整执行流程:
4. generate_report(报告生成器)
根据分析结果和参数配置,自动生成结构化的科研报告。报告模板位于 templates/report.md,用户可以自由定制。
项目结构
GEE-AutoLab/
├── SKILL.md # Skill 定义(Codex)
├── README.md / README_CN.md # 中英文文档
├── LICENSE / CITATION.cff
├── requirements.txt # Python 依赖
├── scripts/
│ ├── run_pipeline.py # 主入口
│ ├── task_parser.py # 自然语言解析器
│ ├── generate_gee.py # GEE 代码生成器
│ ├── generate_report.py # 报告生成器
│ └── check_gee.py # 环境检查
├── templates/
│ └── report.md # 报告模板
├── references/
│ └── data_sources.md # 数据集参考(50+ 数据集)
└── examples/
├── ndvi_analysis.md
├── classification.md
├── change_detection.md
└── timeseries.md
使用示例
示例 1:植被指数分析
python scripts/run_pipeline.py "在武汉市,2023年,计算NDVI和EVI" –output result_wuhan
系统会自动:
- 选择 Sentinel-2 SR(10m 分辨率)作为数据源
- 加载 2023 年全年的影像
- 应用云掩膜和中值合成
- 计算 NDVI 和 EVI
- 导出 GeoTIFF 和统计 CSV
- 生成包含均值 NDVI、植被覆盖率等信息的报告
示例 2:土地覆盖分类
python scripts/run_pipeline.py "黑龙江,2022年,土地覆盖分类,Random Forest" –output result_heilongjiang
系统会自动:
- 选择合适的 Landsat 或 Sentinel 数据
- 提取训练样本(或使用内置样本)
- 训练 Random Forest 分类器(100 棵树)
- 执行分类并评估精度
- 输出分类结果 GeoTIFF 和精度评估表(总体精度、Kappa 系数等)
示例 3:变化检测
python scripts/run_pipeline.py "云南省,2018-2023年,森林变化检测" –output result_yunnan_forest
系统会自动:
- 加载两个时间段的影像
- 计算差值或应用 LandTrendr/CCDC 算法
- 检测森林变化区域
- 导出变化图斑和统计结果
快捷模式
GEE AutoLab 还提供了几种快捷模式:
# 安静模式 – 隐藏详细进度信息
python scripts/run_pipeline.py "…" –output output_dir -q
# 仅生成 GEE 代码(不执行)
python scripts/run_pipeline.py "…" –output output_dir –code-only
# 仅从已有结果生成报告
python scripts/run_pipeline.py "…" –output output_dir –report-only
应用场景
GEE AutoLab 可以广泛应用于以下场景:
总结与展望
GEE AutoLab 是基于 Codex 开发的一次尝试,目标是把遥感分析从“写代码”变成“说话”。目前它已经能够:
- 支持 12 大类、数十种具体的遥感分析任务
- 覆盖 50+ 个 GEE 公开数据集
- 从自然语言到完整科研报告的全自动流水线
- 导出 GeoTIFF、CSV、Shapefile 等多种格式
当然,这个项目还有很多可以改进的地方:
- 更精准的 ROI 识别:目前对地理位置的解析还不够智能,未来可以集成地理编码 API
- 更丰富的报告模板:支持更多学术期刊格式
- 交互式分析:在生成报告后支持用户追问和调整
- 更深的 Codex 集成:让模型不仅能生成代码,还能根据执行结果进行自我修正
如果你对这个项目感兴趣,欢迎访问 GitHub 仓库:
https://github.com/xingguangYan/GEE-AutoLab
如果你有好的想法或改进建议,也欢迎提交 Pull Request。项目采用 MIT 许可证,完全开源免费。
最后,感谢 Google Earth Engine 提供的强大云计算平台,感谢 SAT-IO 社区扩展的数据集目录,感谢 ESA、NASA、USGS、JAXA 等机构提供的开放地球观测数据。
