Spaces:
Sleeping
Sleeping
| title: Myspace | |
| emoji: 📊 | |
| colorFrom: yellow | |
| colorTo: blue | |
| sdk: gradio | |
| sdk_version: 6.20.0 | |
| python_version: '3.13' | |
| app_file: app.py | |
| pinned: false | |
| license: mit | |
| short_description: 测试空间 | |
| Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference | |
| # 渔业数据智能查询代理 | |
| 基于 Hugging Face **smolagents** 框架构建的自然语言查询智能代理,面向渔业科研数据场景,支持查询 logbook 捕捞日志可用性、以及 GFW 渔船作业努力量检索,通过 Gradio Web 界面提供交互式体验。 | |
| ## 主要功能 | |
| - **自然语言查询**:用户以中文自然语言描述需求,代理自动提取参数并调用对应工具 | |
| - **Logbook 可用性查询**:按海区、年份范围、物种、数据类型筛选捕捞日志数据 | |
| - **GFW 作业努力量查询**:按时间(2012-2024)、空间范围、船旗国、渔具类型检索渔船作业数据 | |
| - **CPUE 文献查询**:查询单位捕捞努力量渔获量相关研究文献,支持按海区、年份、物种等筛选 | |
| - **SPRFMO 数据查询**:查询南太平洋区域渔业管理组织数据,支持捕捞量/努力量查询和聚合统计 | |
| - **交互式 Web 界面**:基于 Gradio 的 Chat 界面,支持流式输出和步骤可视化 | |
| ## 目录结构 | |
| ``` | |
| myspace/ | |
| ├── app.py # 主程序入口,包含 Agent 定义、Tool 类、Web 界面启动 | |
| ├── query_tools/ # 查询工具模块目录 | |
| │ ├── __init__.py # 模块初始化文件 | |
| │ ├── logbook_availability_query.py # Logbook 数据可用性查询函数 | |
| │ ├── query_gfw.py # GFW 渔船作业努力量查询函数(2012-2024) | |
| │ ├── literature_cpue_query.py # 文献 CPUE 数据查询函数 | |
| │ └── query_sprfmo.py # SPRFMO 南太平洋数据查询函数 | |
| ├── requirements.txt # Python 依赖清单 | |
| └── .gradio/ # Gradio 自动生成的 SSL 证书目录 | |
| └── certificate.pem | |
| ``` | |
| | 文件/目录 | 说明 | | |
| |------|------| | |
| | `app.py` | 项目核心文件,包含 5 个 Tool 类(参数提取、Logbook 查询、GFW 查询、CPUE 文献查询、SPRFMO 查询)、Agent 工厂函数和 GradioUI 启动入口 | | |
| | `query_tools/` | 查询工具模块目录,统一管理所有数据查询工具 | | |
| | `query_tools/logbook_availability_query.py` | Logbook 查询模块,读取本地 CSV 数据并支持多维度筛选与文件输出 | | |
| | `query_tools/query_gfw.py` | GFW 查询模块,从嵌套 ZIP 中提取月度 CSV 数据并按时空范围筛选(仅支持 2012-2024 年数据) | | |
| | `query_tools/literature_cpue_query.py` | 文献 CPUE 数据查询模块,已集成到 Agent | | |
| | `query_tools/query_sprfmo.py` | SPRFMO 南太平洋数据查询模块,已集成到 Agent | | |
| | `requirements.txt` | 项目 Python 依赖包清单 | | |
| ## 技术栈 | |
| | 类别 | 技术 | 用途 | | |
| |------|------|------| | |
| | Agent 框架 | smolagents | 智能代理核心框架(ToolCallingAgent) | | |
| | LLM 接入 | OpenAIServerModel / DeepSeek API | 大语言模型推理,支持工具调用 | | |
| | Web 界面 | GradioUI (Gradio) | 交互式 Chat 界面,流式输出 | | |
| | 数据处理 | pandas | 数据读取、筛选、格式转换 | | |
| | 数据源 | Hugging Face Datasets | 远程数据集下载(huggingface_hub) | | |
| | 文件解析 | zipfile / openpyxl / csv | ZIP 解压、Excel/CSV 解析 | | |
| | 模块组织 | Python Package (query_tools) | 查询工具统一管理 | | |
| | 编程语言 | Python 3.12+ | 项目开发语言 | | |
| ## 环境要求与前置条件 | |
| - **Python**:3.12 或更高版本 | |
| - **Hugging Face Token**:拥有 HF 账号并在 Settings 中申请 Read 权限的 Access Token(用于访问数据集) | |
| - **LLM API Key**:DeepSeek API Key 或其他 OpenAI 兼容服务的 API Key | |
| - **数据文件**(Logbook/GFW 查询需要): | |
| - Logbook:本地需有 `../data/logbook_availability.csv` 数据文件 | |
| - GFW:本地需有 GFW ZIP 数据包,或自动从 `~/Desktop/资料下载/柔鱼数据/` 搜索 | |
| ## 安装与配置 | |
| ### 1. 克隆项目 | |
| ```bash | |
| cd /your/workspace | |
| git clone <repository-url> testAgent | |
| cd testAgent | |
| ``` | |
| ### 2. 创建虚拟环境(推荐) | |
| ```bash | |
| conda create -n agentproject python=3.12 | |
| conda activate agentproject | |
| ``` | |
| ### 3. 安装依赖 | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| 依赖清单: | |
| | 包名 | 最低版本 | 用途 | | |
| |------|---------|------| | |
| | `smolagents[gradio]` | >=1.0.0 | Agent 框架 + Gradio 集成 | | |
| | `requests` | >=2.31.0 | HTTP 请求 | | |
| | `pandas` | >=2.0.0 | 数据处理 | | |
| | `huggingface_hub` | >=0.23.0 | HF 数据集 API | | |
| | `openpyxl` | >=3.1.0 | Excel 文件解析 | | |
| | `openai` | >=2.0.0 | OpenAI 兼容 LLM 接入 | | |
| ### 4. 配置常量 | |
| 编辑 `readData.py` 文件顶部的常量: | |
| ```python | |
| # Hugging Face 数据集访问 Token | |
| HF_TOKEN = "hf_你的Token" | |
| # LLM API 配置 | |
| OPENAI_API_KEY = "sk-你的APIKey" | |
| OPENAI_API_BASE = "https://api.deepseek.com/v1" # API 地址 | |
| MODEL_ID = "deepseek-chat" # 模型 ID | |
| # DeepSeek 思考模式 | |
| THINKING_MODE_ENABLED = True # True 启用,False 禁用 | |
| THINKING_EFFORT = "high" # low/medium/high/max | |
| ``` | |
| **常见 API 地址配置**: | |
| | 服务 | `OPENAI_API_BASE` | `MODEL_ID` | | |
| |------|-------------------|------------| | |
| | DeepSeek | `https://api.deepseek.com/v1` | `deepseek-chat` | | |
| | OpenAI | `https://api.openai.com/v1` | `gpt-4o-mini` | | |
| | 本地 Ollama | `http://localhost:11434/v1` | 模型名称 | | |
| | 智谱 GLM | `https://open.bigmodel.cn/api/paas/v4` | `glm-4-flash` | | |
| > **注意**:使用 DeepSeek 思考模式时必须选择 `deepseek-chat`,`deepseek-reasoner` 不支持工具调用。 | |
| ## 本地开发启动 | |
| ```bash | |
| cd /your/workspace/myspace | |
| python3 app.py | |
| ``` | |
| 启动后终端将输出: | |
| ``` | |
| 正在启动 GradioUI Web 界面... | |
| Running on local URL: http://127.0.0.1:7860 | |
| Running on public URL: https://xxxxx.gradio.live (72小时有效) | |
| ``` | |
| 浏览器打开上述地址即可使用 Chat 界面进行查询。 | |
| ## 生产环境部署 | |
| ### 方式一:直接运行 | |
| ```bash | |
| # 前台运行 | |
| python3 app.py | |
| # 后台运行(使用 nohup) | |
| nohup python3 app.py > agent.log 2>&1 & | |
| ``` | |
| ### 方式二:Docker 部署 | |
| ```dockerfile | |
| FROM python:3.12-slim | |
| WORKDIR /app | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| COPY . . | |
| # 暴露 Gradio 默认端口 | |
| EXPOSE 7860 | |
| CMD ["python3", "app.py"] | |
| ``` | |
| ```bash | |
| docker build -t fishery-agent . | |
| docker run -d -p 7860:7860 \ | |
| -e HF_TOKEN=hf_你的Token \ | |
| -e OPENAI_API_KEY=sk_你的Key \ | |
| fishery-agent | |
| ``` | |
| ### 方式三:Systemd 服务 | |
| ```ini | |
| [Unit] | |
| Description=Fishery Data Query Agent | |
| After=network.target | |
| [Service] | |
| Type=simple | |
| User=your_user | |
| WorkingDirectory=/your/workspace/myspace | |
| ExecStart=/your/venv/bin/python3 app.py | |
| Restart=on-failure | |
| RestartSec=5 | |
| [Install] | |
| WantedBy=multi-user.target | |
| ``` | |
| ## 使用示例 | |
| ### 示例 1:查询 Logbook 数据可用性 | |
| ``` | |
| 用户:2010到2020年东南太平洋有哪些鱿鱼捕捞日志数据? | |
| ``` | |
| 代理将调用 `logbook_query` 工具,参数提取为 `region="东南太平洋"`, `year_start=2010`, `year_end=2020`, `species="鱿鱼"`。 | |
| ### 示例 2:查询 GFW 渔船作业努力量 | |
| ``` | |
| 用户:查询2012年1月太平洋区域中国渔船的作业努力量 | |
| ``` | |
| 代理将调用 `gfw_query` 工具,参数提取为 `year=2012`, `month=1`, `flag="CN"`,以及对应的经纬度范围。 | |
| 注意:GFW 查询仅支持 **2012-2024 年** 的数据,超出范围会返回错误。 | |
| ### 示例 3:无明确工具指向的查询 | |
| ``` | |
| 用户:帮我查一下有什么数据可以用 | |
| ``` | |
| 代理将根据系统提示词中加载的数据集文件列表,告知用户可用的数据和查询方式。 | |
| ## Agent 工具一览 | |
| | 工具名 | 类名 | 功能 | 必填参数 | | |
| |--------|------|------|---------| | |
| | `parameter_extractor` | `ParameterExtractionTool` | 从自然语言提取数据集查询参数 | `user_input` | | |
| | `logbook_query` | `LogbookQueryTool` | 查询 Logbook 捕捞日志可用性 | 无(均为可选) | | |
| | `gfw_query` | `GfwQueryTool` | 查询 GFW 渔船作业努力量(2012-2024) | `year`, `month`, `lat_min`, `lat_max`, `lon_min`, `lon_max` | | |
| | `literature_cpue_query` | `LiteratureCpueQueryTool` | 查询 CPUE 相关文献数据 | 无(均为可选) | | |
| | `sprfmo_query` | `SprfmoQueryTool` | 查询 SPRFMO 南太平洋数据 | `data_type` | | |
| **注意:** | |
| - `logbook_query` 支持可选参数:`region`(海区)、`year_start`(起始年份)、`year_end`(结束年份)、`species`(物种)、`data_type`(数据类型) | |
| - `gfw_query` 仅支持查询 **2012-2024 年**的数据,超出范围会返回错误 | |
| - `gfw_query` 支持可选参数:`flag`(船旗国)、`geartype`(渔具类型)、`min_fishing_hours`(最小捕捞小时数) | |
| - `literature_cpue_query` 支持可选参数:`region`(海区)、`year_start`、`year_end`、`species`、`response_variable`(响应变量)、`paper_type`(论文类型) | |
| - `sprfmo_query` 必须指定 `data_type`('catch' 或 'effort'),支持可选参数:`country`(国家)、`year_start`、`year_end`、`species`(仅捕捞量)、`gear_type`(仅努力量)、`group_by`(聚合维度) | |