使用说明
供应链弹性代理
监控食品价格波动,以发现供应链风险。
→ SETUP_GUIDE.md –MCP、GitHub Pages和警报的一步一步。在供应链理论中,当物流网络运行良好时,标准化商品(如1公斤大米)的价格在整个地区应该相似。 低方差=稳定的供应链。高差异=可能囤积、交付失败或当地短缺。
该项目结合了:
- MCP服务器 –通过Cursor进行LLM驱动的调查和按需警报
- 每日批量扫描 –通过GitHub Actions自动分析和生成报告
- 静态仪表板 –GitHub页面上的暗模式UI
- 警报 –当商品达到临界状态时,通过重新发送电子邮件
项目概述
| 组件 | 描述 |
|---|---|
| 价格分散=风险 | 变异系数(CV=标准值/平均值)映射到临界值(>0.5)、警告值(>0.3)或稳定值(≤0.3) |
| 开放价格API | 数据来源: https://prices.openfoodfacts.org/api/v1/prices |
| 商品 | 大米、牛奶、鸡蛋、油、小麦 |
MCP设置
使用Cursor或其他MCP客户的供应链弹性工具。
-
安装依赖项:
pip install -r src/requirements.txt -
项目配置:
.cursor/mcp.json已配置。确保cwd指向项目根。 -
重新启动游标 所以它拿起MCP服务器。这些工具将出现在MCP面板中:
investigate_commodity–商品的实时风险分析get_supply_chain_report–最新缓存报告list_commodities–跟踪商品清单compare_commodities–不同商品的比较风险send_supply_chain_alert–发送电子邮件/短信提醒
-
手动运行(可选):
python src/server.py
警报设置
为自动(批量)和按需(MCP)警报配置电子邮件(重新发送)。
-
复制模板:
cp .env.example .env -
电子邮件(重新发送):
- 集
RESEND_API_KEY(免费套餐:100封邮件/天) - 可选:设置
RESEND_FROM(已验证的发件人)。默认为onboarding@resend.dev.
- 集
-
批量警报: 集
ALERT_EMAIL当任何商品变得关键时,自动接收电子邮件。
GitHub操作: 将这些添加为存储库机密(设置→ 秘密与变量→ 行动)。发送警报时,日常工作流程将使用它们。
启用GitHub页面
- 首选 存储库设置→ Pages
- 在...之下 构建和部署,选择 从分支部署
- 分行:
main(或您的默认分支) - 文件夹:
/ (root) - 保存
您的仪表板将位于: https://<username>.github.io/<repo>/frontend/
每日扫描的工作原理
- 日程 GitHub Actions每天08:00 UTC运行(
cron: '0 8 * * *') - 步骤: 结账→ 设置Python→ 安装deps→ Run
python src/agent.py - 代理人: 获取大米、牛奶、鸡蛋、油、小麦的价格数据;计算CV和状态;写
data/latest_report.json - 警报: 如果任何商品至关重要
ALERT_EMAIL已设置,发送电子邮件 - 承诺: 推动
data/latest_report.json返回仓库,以便GitHub Pages和仪表板可以读取它
本地开发
# Run the batch agent (generates data/latest_report.json)
python src/agent.py
# Run the MCP server (for Cursor integration)
python src/server.py
使用 .env (复制自 .env.example)在本地测试警报。
项目结构
.github/workflows/daily_scan.yml # Daily cron workflow
.cursor/mcp.json # Cursor MCP config
src/
analyzer.py # Price fetch, CV, risk analysis
agent.py # Batch script, writes report
alerts.py # Email/SMS delivery
server.py # FastMCP server with tools
requirements.txt
.env.example # Env var template
frontend/
index.html
style.css
app.js
data/
latest_report.json # Generated report
.gitignore
README.md
