# YunZhi **Repository Path**: zhangxilong191203/yun-zhi ## Basic Information - **Project Name**: YunZhi - **Description**: YunZhi: AI-Powered Agricultural Intelligence Platform - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-05 - **Last Updated**: 2026-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 耘智——农业数智化综合服务平台 耘智是一个农业数智化综合服务平台,旨在通过集成先进的AI技术解决农业生产中的关键问题。该项目采用了NVIDIA NeMo-Agent-Toolkit及其UI库,构建了一个强大的多智能体系统,该系统支持作物种植全周期的智能决策,包括选种、种植到销售的各个环节。 耘智的创新之处在于其专注于较少被关注的农业领域,通过实时聊天、主题切换、历史记录等特性为农民提供了便捷的交互方式。耘智不仅降低了AI工具的使用门槛,还通过智能分析环境和市场数据来辅助选种决策,诊断病虫害,管理农作物生长,给出农药使用建议,以及预测市场趋势,帮助农民优化销售策略。这些功能共同作用,旨在提升农作物产量,增加农民收入,改善食品安全,促进乡村振兴,并保障国家粮食安全。应用领域涵盖从个体农户到大型农场的各种规模的农业生产组织。 ## 项目名称 耘智——农业数智化综合服务平台 (YunZhi--AI-Powered Agricultural Intelligence Platform) “耘”取自“耕耘”,象征农业劳动;“智”意为“LLM 智能体”,AI多智能体协同决策。整体寓意:以AI之智,助农之耕耘。 ## 项目背景 农业是人类社会赖以生存的根基,目前 AI 领域对工业、服务业关注较多,农业问题受到的关注较少。 因此,我们决定尝试用 AI 技术去解决农业生产中的一些难点和痛点问题,并提供一个综合的服务平台,降低AI工具对农业领域的使用门槛。 ## 项目目标 为农民提供作物种植全周期智能决策支持,包括选种、种植、销售。 ## 社会价值 - 解决小农户生产时种什么、怎么种、怎么卖的痛点问题,提升农业数智化水平。 - 减少农药滥用、使用禁用农药等不规范使用行为,从源头解决食品安全问题。 - 提升农作物产量(预计15%-20%),提升农民收入,助力乡村振兴,保障国家粮食安全。 ## 软件架构 ### 前端 - **框架**: Next.js 14 + TypeScript - **UI库**: [NVIDIA NeMo-Agent-Toolkit-UI](https://github.com/NVIDIA/NeMo-Agent-Toolkit-UI) - **特性**: 实时聊天、主题切换、历史记录 ### 后端 - **核心**: [NVIDIA NeMo-Agent-Toolkit](https://github.com/NVIDIA/NeMo-Agent-Toolkit/tree/develop) - **工作流**: React Agent - **MCP 工具**: Tavily MCP Server ### 模型支持 - **默认**: Qwen模型 - **兼容**: 任何OpenAI格式的API - **自定义**: 用户可配置API密钥、模型名称、base_url ## 后端技术架构 构建后端用到的模块及结构如下: ```mermaid graph TD A[耘智:与用户交互] --> B[选种智能体:环境分析、市场分析] A --> C[种植智能体:病虫害诊断、农作物生长管理、农药使用建议] A --> D[销售智能体:市场预测、销售决策] B --> E[Tavily MCP Server:实时网络搜索] C --> E D --> E ``` ## 环境配置 ### 环境要求 - **Python**: 3.12+ - **Node.js**: 18+ - npm or Docker - **Git**: 最新版本 - **Python 虚拟环境管理器**: uv - **操作系统**: Windows 10+/macOS 10.15+/Ubuntu 20.04+ ### 安装依赖 ```bash # 创建 Python 虚拟环境 uv venv --seed .venv --python 3.12 source .venv/bin/activate # 配置后端 uv pip install nvidia-nat[all] tavily-python 'httpx[socks]' # 配置前端 # git clone git@github.com:NVIDIA/NeMo-Agent-Toolkit-UI.git git clone https://gitee.com/mirrors_NVIDIA/NeMo-Agent-Toolkit-UI.git cd NeMo-Agent-Toolkit-UI npm install npx update-browserslist-db@latest # 安装 tavily-mcp-server # Tavily 主要提供云服务,也可以通过 MCP 服务进行访问,由于比赛要求使用 MCP 服务,所以我们使用 Tavily MCP 服务。 uv pip install tavily-mcp-server ``` 验证后端是否配置成功: ```bash nat --version ``` 配置成功后,会有类似如下输出: ``` nat, version 1.2.1 ``` 测试 Tavily MCP 服务能否启动 ```bash python -m tavily_mcp_server.server # 或 tavily-mcp-server ``` 配置成功后,会有类似如下输出: ``` ╭────────────────────────────────────────────────────────────────────────────╮ │ │ │ _ __ ___ _____ __ __ _____________ ____ ____ │ │ _ __ ___ .'____/___ ______/ /_/ |/ / ____/ __ \ |___ \ / __ \ │ │ _ __ ___ / /_ / __ `/ ___/ __/ /|_/ / / / /_/ / ___/ / / / / / │ │ _ __ ___ / __/ / /_/ (__ ) /_/ / / / /___/ ____/ / __/_/ /_/ / │ │ _ __ ___ /_/ \____/____/\__/_/ /_/\____/_/ /_____(*)____/ │ │ │ │ │ │ FastMCP 2.0 │ │ │ │ │ │ 🖥️ Server name: tavily-search │ │ 📦 Transport: STDIO │ │ │ │ 🏎️ FastMCP version: 2.12.2 │ │ 🤝 MCP SDK version: 1.12.4 │ │ │ │ 📚 Docs: https://gofastmcp.com │ │ 🚀 Deploy: https://fastmcp.cloud │ │ │ ╰────────────────────────────────────────────────────────────────────────────╯ [09/07/25 15:11:28] INFO Starting MCP server 'tavily-search' with transport 'stdio' server.py:1493 2025-09-07 15:11:28 - __main__ - INFO - Environment variables loaded successfully ``` ## 创建 workflow ```bash nat workflow create --workflow-dir . agriculture_agent ``` 创建成功的输出如下: ```log Installing workflow 'agriculture_agent'... Workflow 'agriculture_agent' installed successfully. Workflow 'agriculture_agent' created successfully in '/home/lrc/zxl/yun-zhi/agriculture_agent'. ``` 这一步一定要确保创建成功,否则会面运行时会找不到注册的工具。 将 agriculture_agent 配置写入创建的 workflow 中: ```bash cp src/agriculture_agent_function.py agriculture_agent/src/agriculture_agent/agriculture_agent_function.py cp src/config.yml agriculture_agent/src/agriculture_agent/configs/config.yml cp src/register.py agriculture_agent/src/agriculture_agent/register.py ``` ## 设置密钥 ```bash # 设置 Tavily API 密钥(云服务) export TAVILY_API_KEY= # 设置 Tavily API 密钥(MCP 服务) echo "TAVILY_API_KEY=$TAVILY_API_KEY" >> .env # 生成一个 MCP API 密钥,自己要保存下来,后面可能还要用到; openssl rand -hex 16 echo "MCP_API_KEY=" >> .env # 设置 agriculture_agent/configs/config.yml 中的阿里云百炼密钥; # api_key: "ALIYUN_API_KEY" export ALIYUN_API_KEY="your_aliyun_api_key" sed -i "s/ALIYUN_API_KEY/$ALIYUN_API_KEY/g" agriculture_agent/src/agriculture_agent/configs/config.yml ``` ## 运行 ### 运行前端 ```bash cd NeMo-Agent-Toolkit-UI && npm run dev ``` 1. 浏览器打开 http://localhost:3000 2. 网页左下角 Settings, 检查端口号均设置为 8001 ``` HTTP URL for Chat Completion: http://127.0.0.1:8001/chat/stream WebSocket URL for Chat Completion: ws://127.0.0.1:8001/websocket ``` ### 运行后端 如果使用 stdio 模式,不需要单独启动 MCP 服务; 如果使用 http 模式,需要先启动 MCP 服务: ```bash # 启动 Tavily MCP 服务 fastmcp run .venv/lib/python3.12/site-packages/tavily_mcp_server/server.py:mcp --transport http --port 8083 ``` http 模式运行有报错,但是不影响运行,推荐 stdio 模式; 启动 NeMo-Agent-Toolkit agent: ```bash nat serve --config_file agriculture_agent/configs/config.yml --host 0.0.0.0 --port 8001 ``` ## 测试 好了,现在可以和我们的智能体交互了,可以问农作物选种、种植、销售相关的问题,例如: ``` 我在江苏省溧阳市,冬天种什么农作物好? 我的玉米叶子有斑点,怎么办? 我的水稻有稻瘟病,怎么办? 我的水稻有飞虱和稻螟,阿维菌素怎么用符合安全标准? 我种了水稻,预计产量5吨,现在卖还是等? ``` 在命令行中测试 NeMo-Agent-Toolkit agent (方便 debug): ```bash nat run --config_file agriculture_agent/configs/config.yml --input "我的水稻有稻瘟病,怎么办?" ``` ## 常见问题 1. 发送消息后,提示错误: ```log Something went wrong. Please try again. Details Error Message: fetch failed ``` 原因:端口不对; 解决方法:网页左下角 Settings, 检查端口号是否均为 8001。 2. 运行后端时,遇到的很多错误可以通过调整配置文件来解决,比如调整 `agriculture_agent/configs/config.yml ` 中下面的设置 ```yaml max_tokens: 8192 parse_agent_response_max_retries: 3 max_iterations: 3 ``` 3. 前端输入问题后等很久都没有结果 可能是因为 LLM 输出失败,点击 `Stop Generation`, 然后重试; 4. get_child_watcher NotImplementedError 如果运行时出现以下 get_child_watcher NotImplementedError 错误,这个是 NeMo Agent toolkit 前端 BUG,请按照下面的步骤解决: ```log | File "/usr/lib/python3.12/asyncio/subprocess.py", line 224, in create_subprocess_exec | transport, protocol = await loop.subprocess_exec( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/lib/python3.12/asyncio/base_events.py", line 1744, in subprocess_exec | transport = await self._make_subprocess_transport( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/lib/python3.12/asyncio/unix_events.py", line 200, in _make_subprocess_transport | watcher = events.get_child_watcher() | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/lib/python3.12/asyncio/events.py", line 828, in get_child_watcher | return get_event_loop_policy().get_child_watcher() | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/usr/lib/python3.12/asyncio/events.py", line 645, in get_child_watcher | raise NotImplementedError | NotImplementedError ``` ```bash cp src/fastapi_front_end_plugin.py .venv/lib/python3.12/site-packages/nat/front_ends/fastapi/fastapi_front_end_plugin.py ``` 参考:[Fix NAT FastAPI front end with Stdio-MCP server fails to initialize #788](https://github.com/NVIDIA/NeMo-Agent-Toolkit/pull/788) # 更新 2025-09-15 15:05:18 - 优化 README; - 优化 MCP 服务配置;