# 土壤评价
**Repository Path**: mzb329/soil-assessment
## Basic Information
- **Project Name**: 土壤评价
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-29
- **Last Updated**: 2026-10-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 种植适应性评价领域 Agent 平台
基于《第三次全国土壤普查土壤农业利用适宜性评价技术规范》(2025-07-25) 的自建对话式领域 Agent 平台。
## 定位
以 LLM 对话为底座(ChatGPT 式 Web 聊天),挂载垂直领域 **system prompt + 工具(tools) + 技能(skills)**,泛化处理土壤农业利用适宜性评价任务。Agent 即产品:评价规则引擎、文档知识库、作物参考库全部是它可调用的工具;任何数值/等级/统计均由**确定性规则引擎**产出,LLM 永不参与计算。
## 三条工程原则
1. **不要回退** —— 零降级路径;缺失的硬依赖在安装期锁定,启动自检失败即拒绝服务。
2. **规则硬编码** —— 评价规则与规范条文逐条对应、纯确定性函数、可单测;每条规则带 `spec_ref` 条款号。
3. **错了就报错** —— 转录存疑/规则未核验/输入不合法 → 显式报错(`ErrRuleUnverified` / `ErrIndicatorInvalid`),不猜、不填默认值。
## 目录
- `docs/` 规范 PDF 原件
- `data/` 文档规范化产物:原始转录、校对全文、机器可读知识库(`knowledge/`)、人工核验阻断清单(`review/`)
- `engine/seval/` 纯规则评价引擎(零外部依赖,可离线)
- `.claude/skills/` 领域技能库(8 技能:单地块/批量评价、指标解释、成果导出、报告撰写、规范问答、作物建议、联网检索)
- `backend/` FastAPI + SQLite 后端(SSE 对话、上传、产物下载、知识配色接口)
- `frontend/` Vite + React 前端(ChatGPT 式聊天界面)
- `scripts/` 文档规范化流水线与校验
## 快速开始
```bash
make install # Python 3.12 venv + 全量依赖(硬锁,GIS/文档依赖缺失即报错)
make demo # 全流程验收:知识库校验 + 引擎/后端全部测试 + 前端构建
make run-backend # uvicorn :8000(启动自检:依赖缺失拒绝服务)
make run-frontend # vite dev :5173(frontend/,首次 npm install 自动走 .npmrc 镜像)
```
LLM 运行时(`backend/app/services/cc_runtime.py`,官方 Claude Agent SDK):环境变量
`ANTHROPIC_BASE_URL` / `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_MODEL`。
**LLM 不可达 → 显式报错中断(不降级、不让 LLM 参与任何数值计算)。**
## 能力一览(P1–P5 已交付)
| 层 | 内容 |
|---|---|
| 文档规范 | 36 页扫描 PDF → 转录 → 人工核验;`data/knowledge/*.yaml` 知识库(2257 县 / 81 作物 / 附录 A–E);阻断清单 `data/review/corrections.yaml` |
| 评价引擎 | `engine/seval/` 纯规则:14 指标 → 表1/2/3 → 特殊规则(重金属/现状地类)→ E.1 字段 + 统计;每条规则带 `spec_ref`;`Err*` 显式错误 |
| 底座服务 | FastAPI + SQLite:session/upload/artifacts/knowledge(colors)/chat;SSE 对话;产物 CSV/MD/图件PNG/overlay.geojson + 结构 JSON(Excel/Word 由官方 document-skills 排版渲染) |
| Agent | Claude Agent SDK 运行时(`backend/app/services/cc_runtime.py`):PreToolUse 白名单 + 引擎 CLI 唯一放行;8 技能(`make run-backend` 下 SSE 事件翻译为中断/恢复补问);LLM 仅意图/编排/解释 |
| 前端 | Vite+React ChatGPT 式:会话侧栏、对话流、CC 转录时间线(AgentFlow)、补问卡片、产物面板(Markdown/E.1表格/Leaflet+overlay/图件/下载)、配色与服务端 /api/knowledge/colors 同源 |
## 主要评价流程(引擎硬编码)
县域/评价单元 14 项指标(p坡度 h海拔 o坡向 e侵蚀量 l土体厚度 g砾石 r基岩 w水源 d排水 s盐碱 m质地 n有机质 a pH c重金属)
→ 附录D 分区分级表定级 → 表1 判断矩阵定限制级别(一~六级)→ 表2 定适宜类(宜耕/宜园/宜林/宜草/不适宜,优先序耕>园>林>草)
→ 表3 定适宜程度(Ⅰ/Ⅱ/Ⅲ)→ 特殊规则(重金属下调/现状地类调整)→ 表E.1 结果字段 + 统计 + 图件 + 报告。
> 标注:附录A 县名单与表1 部分单元格转录存疑,已列入 `data/review/corrections.yaml` 阻断清单,人工确认后放行。
## 测试与验收
```text
make validate-kb 知识库校验(ERROR gate)+ 黄金样例 5 个防漂移
pytest engine/tests 150 个:分级/表1全单元/表2、3组合/黄金样例/统计/分区严格匹配
pytest backend/tests 73 个:SSE 对话回放、CC 运行时白名单、上传解析、E.1/E.3 结构守卫、制图
make demo 上面的全量验收 + 前端构建
```
浏览器演示:`make run-backend` + `make run-frontend` → http://localhost:5173
单会话聊天页真实 LLM 全流程(技能选择→工具链→流式回答/补问恢复);Composer 支持上传附件(Excel/CSV/图片),产物面板内嵌 E.1 表格/E.2 图件/Leaflet overlay 并提供下载。
演示数据:`.venv/bin/python scripts/make_demo_batch.py` 生成 `data/instance/demo_batch.xlsx`
(6 单元覆盖宜耕Ⅰ/Ⅱ、宜园、宜林、宜草、不适宜 5 类 + 双乡镇,供统计/潜力/E.2.4 演示;运行期生成,不内置)。
## 成果产物(每评价批次)
- E.1 结果表:CSV(45 字段按附录 E.1)+ 结构 JSON(官方 document-skills:xlsx 排版渲染)
- E.3 技术报告:Markdown + 结构 JSON(官方 document-skills:docx 排版渲染 Word,含 E.3.1 表格与 E.1 附表)
- E.2 图件:土壤农业利用适宜性评价图 PNG(单元多边形按适宜类着色)+ overlay.geojson(供 Leaflet);限制因素分级图(评价单元必须带几何,缺几何显式报错不出图)
- 统计:E.3.1 面积占比 / E.3.2 交叉表 / E.2.4 可耕地潜力(JSON,产物面板渲染)