这是一个刻意压缩成 4 个 Agent + 1 个 Streamlit 文件 的城市环境智能分析项目。

代码仓库:github.com/Fuhai-Liang/Project城市天气Agent/ 目录。

项目结构

agent1_data.py     数据获取与年度整理
agent2_change.py   重点变化检测
agent3_search.py   网页政策/报告检索
agent4_rag.py      RAG + 最终报告
app.py             Streamlit 动态界面

数据流程

Streamlit 选择城市和时间

Agent 1:Open-Meteo Geocoding + Historical Weather + Air Quality / 用户 AQI CSV

年度 CSV

Agent 2:识别 AQI / PM2.5 重点变化年份

Agent 3:搜索同期政府政策、环境公报和报告

Agent 4:网页正文 → Chunk → Embedding → FAISS → RAG → 报告

为什么要用 Open-Meteo

Open-Meteo 提供标准 API,不需要维护城市代码,也不需要应对 2345 的 403 反爬。历史天气 API 可用于很长时间范围;对于跨几十年的比较,项目固定使用 ERA5-Land 以保持模型来源尽量一致。

空气质量的重要限制

Open-Meteo 的全球空气质量数据主要来自 CAMS Global,全球历史覆盖远短于 Historical Weather。因此对于中国城市:

  • 历史天气:可直接通过 Open-Meteo 自动获取多年数据
  • 长期 AQI:建议上传以前爬取的历史 AQI CSV
  • 2022-08 之后:项目会尝试直接使用 Open-Meteo Air Quality

Agent 3:Selenium + 百度

新版 Agent 3 使用真实 Chrome 浏览器访问百度:从 Agent 2 的研究主题出发,走「百度搜索 → 进入结果页 → 正文文本 + HTML + 截图」的流程,结果存入 search_sources/<run_id>/。如出现百度验证码,程序会停止并提示人工处理,不做验证码绕过。

RAG 数据库怎么看

每次 Agent 4 都会生成:

rag_db/<run_id>/
├── sources.jsonl        # 最适合人工查看,每行一篇参考资料(S001、标题、URL、截图路径)
├── chunks.jsonl         # RAG 实际切成的文本块
├── final_evidence.json  # 本次回答真正召回的证据
└── faiss_index/         # 向量索引本体

最终 LLM 报告引用 [S001][S002],可以直接和 Streamlit 底部的「参考文献 / 网页来源」对应。

运行

conda activate env_langchain
pip install -r requirements.txt
cp .env.example .env   # 填写 OPENAI_API_KEY
streamlit run app.py