Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Risk Agent - AHP 风险评估智能体

基于 LangChain + LangGraph 框架的城市内涝风险评估系统。使用 AHP (层次分析法) 对各因子进行打分,通过一致性检验后计算最终权重,生成交互式风险地图。

功能特性

  • AI 驱动打分: 使用 LLM (硅基流动 deepseek-v3) 根据用户描述生成 AHP 权重矩阵
  • TIF 降雨处理: 自动提取 TIF 文件中的降雨数据并叠加到渔网
  • 自动一致性检验: 自动检验 CR < 0.1,失败则重试
  • 样本收集: 收集 20 个有效样本后计算平均权重
  • 交互式风险地图: 基于 Folium 生成交互式风险地图
  • 历史积水点标注: 可视化历史积水点,验证评估结果

技术栈

组件 技术
语言 Python 3.10+
框架 LangChain + LangGraph
LLM 硅基流动 deepseek-v3
数值计算 NumPy, Pandas
地理空间 GeoPandas, Rasterio
可视化 Folium, mapclassify
CLI Typer, Rich

项目结构

risk-agent/
├── config/
│   └── model_config.py           # 模型配置
├── src/
│   ├── main.py                   # CLI 入口
│   ├── graph/
│   │   ├── state.py              # LangGraph 状态
│   │   ├── nodes.py              # 节点函数
│   │   ├── graph.py              # LangGraph 构建
│   │   └── tools/
│   │       ├── consistency_tool.py   # 一致性检验工具
│   │       ├── weight_tool.py        # 权重平均工具
│   │       ├── raster_tool.py        # TIF 降雨处理工具
│   │       └── risk_map_tool.py      # 风险图生成工具
│   ├── models/
│   │   └── ahp_output.py         # AHP 输出模型
│   ├── prompts/
│   │   └── ahp_prompt.py         # AHP 打分提示词
│   └── chains/
│       └── ahp_chain.py          # LLM 调用链
├── data/
│   ├── input/                    # 输入数据
│   │   ├── 渔网.shp              # 渔网数据 (不含雨量)
│   │   ├── 降雨.tif              # 降雨 TIF 文件
│   │   ├── 行政区划.shp          # 行政区划边界
│   │   └── 积水点.csv            # 历史积水点 (可选)
│   └── output/                   # 输出结果
└── tests/
    ├── test_tools.py             # 工具测试
    └── test_graph.py             # 图流程测试

工作流程

┌─────────────────────────────────────────────────────────────────┐
│                         用户输入                                 │
├─────────────────────────────────────────────────────────────────┤
│  1. 暴雨场景描述 (如: "郑州市遭遇特大暴雨,24小时降雨超过500mm")  │
│  2. 渔网数据 (Shapefile,含地形、不透水、植被等因子)              │
│  3. 降雨 TIF 文件 (动态降雨数据)                                 │
│  4. 行政区划边界                                                 │
│  5. 历史积水点 CSV (可选)                                        │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│                    LangGraph 智能体工作流                         │
├─────────────────────────────────────────────────────────────────┤
│  ┌──────────────────┐                                           │
│  │ 1. 处理降雨 TIF  │ ← 提取降雨值并叠加到渔网                   │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 2. LLM AHP 打分  │ ← 根据场景描述生成权重矩阵                  │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 3. 解析 JSON     │ ← 解析 LLM 输出                           │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 4. 一致性检验     │ ← CR < 0.1? 通过则收集样本,否则重试      │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 5. 样本收集      │ ← 收集 20 个有效样本                       │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 6. 权重平均      │ ← 计算最终权重                             │
│  └────────┬─────────┘                                           │
│           ↓                                                    │
│  ┌──────────────────┐                                           │
│  │ 7. 生成风险地图   │ ← 结合渔网、权重、积水点生成地图            │
│  └──────────────────┘                                           │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│                          输出结果                                 │
├─────────────────────────────────────────────────────────────────┤
│  • risk_map.html       - 交互式风险地图 (含积水点标注)            │
│  • ahp_output.json     - AHP 打分和权重结果                      │
└─────────────────────────────────────────────────────────────────┘

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 配置 API Key

编辑 .env 文件,填入硅基流动 API Key:

SILICONFLOW_API_KEY=your_api_key_here

获取 API Key: https://cloud.siliconflow.cn/

3. 准备数据文件

文件 格式 说明
渔网数据 Shapefile 包含因子字段 (地形, 不透水, 植被, 湿度, 人口, 道路)
降雨数据 GeoTIFF 降雨栅格数据
行政区划 Shapefile 包含 NAME 或 name 字段
积水点 CSV 可选,包含 lng, lat, count 列

4. 运行风险评估

# 完整参数运行
python -m src.main run \
  --description "郑州市遭遇特大暴雨,24小时降雨量超过500mm" \
  --fishnet "data/input/渔网.shp" \
  --rainfall "data/input/降雨.tif" \
  --boundary "data/input/行政区划.shp" \
  --water-points "data/input/积水点.csv" \
  --output "data/output"

# 演示模式 (使用默认场景描述)
python -m src.main demo \
  --fishnet "data/input/渔网.shp" \
  --rainfall "data/input/降雨.tif" \
  --boundary "data/input/行政区划.shp" \
  --water-points "data/input/积水点.csv"

5. 查看输出结果

文件 说明
data/output/risk_map.html 交互式风险地图 (含积水点标注)
data/output/ahp_output.json AHP 打分和权重结果

评估因子

孕灾环境因子 (4个)

  1. 地形高程 - 地势高低对水流方向和积水形成的影响
  2. 不透水地表 - 城市化程度对径流和排水系统的影响
  3. 植被覆盖 - 植被对雨水的吸收和缓冲作用
  4. 地形湿度指数 - 地形与水分关系对内涝风险的控制作用

脆弱性因子 (2个)

  1. 人口密度 - 灾害暴露人口数量和潜在损失
  2. 道路密度 - 基础设施脆弱程度和交通瘫痪风险

致灾因子 (1个)

  1. 降雨量 - 从 TIF 文件动态提取

测试

# 运行所有测试
pytest tests/ -v

# 运行特定测试
pytest tests/test_tools.py -v
pytest tests/test_graph.py -v

CLI 命令

# 显示版本信息
python -m src.main version

# 运行完整评估
python -m src.main run \
  -d "场景描述" \
  -f "渔网.shp" \
  -r "降雨.tif" \
  -b "边界.shp" \
  -w "积水点.csv" \
  -o "输出目录"

# 演示模式
python -m src.main demo \
  -f "渔网.shp" \
  -r "降雨.tif" \
  -b "边界.shp" \
  -w "积水点.csv"

# 显示帮助
python -m src.main --help

常见问题

Q: API Key 如何获取?

A: 访问 https://cloud.siliconflow.cn/ 注册并获取 API Key

Q: 数据文件格式要求?

A:

  • 渔网数据: Shapefile 格式,需包含字段 (地形, 不透水, 植被, 湿度, 人口, 道路)
  • 降雨 TIF: GeoTIFF 格式,需与渔网坐标系兼容
  • 行政区划: Shapefile 格式,包含 NAME 或 name 字段
  • 积水点 CSV: 需包含 lng, lat 列,可选 count 列

Q: 渔网数据是否需要包含雨量字段?

A: 不需要。系统会自动从 TIF 文件提取降雨数据并添加到渔网。

Q: 如何调整样本数量?

A: 修改 src/graph/graph.py 中的条件判断,将 >= 20 改为其他值

Q: 积水点数据是必须的吗?

A: 不是必须的。积水点数据用于在地图上标注历史积水位置,辅助验证评估结果。

许可证

MIT License

About

基于 LangChain + LangGraph 的城市内涝风险评估系统,使用 AI (AHP层次分析法) 智能打分,生成交互式风险地图

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages