Skip to content

Latest commit

 

History

77 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

生产交付协同助手

用大白话说:这是生产经理的“第二大脑”。你在对话里说「帮我建个生产计划,4G 小卡 100 台,交期 30 天」,它会在确认后把数据落库并生成分角色驾驶舱;把采购合同交给它,还能自动匹配标准 BOM、核对库存,经人工审核后生成可发供应商的正式采购订单。

业务台账不需要 SeaTable 账号,下载后即可用本地 CSV;采购库存可选一键部署的 PartDB,也可接客户已有 ERP 的 API、MCP 或 Excel/CSV 导出。

生产项目管理驾驶舱 · 生产经理视角

↑ 生产经理视角首屏实拍。数据为虚构演示数据。首屏只放 3-4 块:「今天要处理」置顶 → 4 张核心指标 → 行动建议,其余分析收在「更多分析」里,点开才展开。

想直接点开玩玩?交互式使用指南(在线,无需安装)

为什么跑在 WorkBuddy 上

这个项目完全可以在裸 Windows 上跑,但配合 WorkBuddy 用,有四个别人替代不了的点:

# 理由 具体表现
1 技能两级共享 用户级(~/.workbuddy/skills/,个人私有)和项目级(<项目>/.workbuddy/skills/,团队同版本)天然分开,一人维护、全员即时升级,版本不会漂移
2 团队资料库分发 驾驶舱 HTML 发到团队空间就是一个固定链接,服务端权限(owner/editor/reader),每日覆盖更新自动留版本历史——同事永远打开的是最新版,不用重新发文件
3 定时自动化 「每日 9 点自动重建部署」「每周一物料行情检查」挂在平台侧,机器开着就能跑:拉云端数据 → 重新生成驾驶舱 → 重新发布到固定链接 → 推送摘要,全自动无人值守
4 Agent Mail 推送 哨兵抓到的异常、站会摘要走发件箱,由 AI 会话经 Agent Mail 真正推送出去;企微群也可以直接推(wecom_push.py --body-file)——消息主动找你,不用你盯着看

30 秒装好

在 WorkBuddy 里 「我的项目 → 新建项目」,项目来源粘贴这个链接:

https://github.com/Darling5/seatable-production

创建后会自动带上 seatable-production 技能和「生产驾驶舱」专家。然后直接说话:

你说 它做
生成演示版驾驶舱 用内置示例数据出一张完整网页,立刻看到效果
帮我建个生产计划:4G 小卡,100 台,交期 30 天 整理成待写入数据 → 等你确认 → 落库
这批货缺什么料 拉 BOM 比库存,列出缺料清单
出一张发货清单 生成清单并可导出 Excel

⚠️ 写入前一定先问你:任何增删改都会把待写入数据完整摊开给你看,你点头才落库。 网页上的「一键发起」也只是拉起 WorkBuddy 并预填任务,不会自动写库。这是刻意设计,不是 bug。

其他安装方式(clone / ZIP)
# clone 到技能目录,可随 git 更新
git clone https://github.com/Darling5/seatable-production.git \
  ~/.workbuddy/skills/seatable-production        # Windows Git Bash 用 "$HOME/..."

或在 GitHub 点 Code → Download ZIP,解压后把 seatable-production/ 放进 ~/.workbuddy/skills/

装好后重启 WorkBuddy。想跑引导式配置向导:

cd ~/.workbuddy/skills/seatable-production
python setup.py            # 交互式:选 本地 / SeaTable
python setup.py --local    # 或直接零配置

一键全自动部署(deploy.py)

setup.py 只负责写配置;deploy.py 把剩下的活全部干完:装依赖 → 生成/更新配置 → 连通验证 → 拉云端数据 → 物料清单 → 驾驶舱 → 体检 → 部署报告。幂等可重跑,已有配置做「外科手术式」更新(口令、微信、行情段原样保留)。

你需要做的只有一件事:把资料给到下面任意一层。

资料给到哪层 命令
命令行参数 python deploy.py --seatable-token XXX --seatable-uuid YYY --partdb-url http://... --partdb-token K
环境变量 export SEATABLE_TOKEN=... SEATABLE_UUID=... 后跑 python deploy.py --yes
资料文件(推荐) 复制 deploy.yaml.exampledeploy.yaml 填好 → python deploy.py --profile deploy.yaml
什么都不给 终端可交互则逐项问答;加 --yes 走本地模式
零资料演示 python deploy.py --demo(60 秒全链路跑通,不需要任何账号)

部署结果长这样:

步骤    名称              结果
----------------------------------------------
S1    环境检测            [OK]  完成   Python 3.13.14
S2    依赖自装            [OK]  完成   已安装 requests, pyyaml
S3    生成 config.yaml  [OK]  完成   全新生成配置,backend=seatable
S4    连通验证            [OK]  完成   SeaTable ✓;PartDB ✓(HTTP 200)
S5    数据初始化           [OK]  完成   云端业务表已同步到本地 data/;物料监控清单已生成
S6    驾驶舱生成           [OK]  完成   项目管理驾驶舱.html(145.5 KB)
S7    开局体检            [OK]  完成   体检完成(BLOCK 项才需要立即处理)
S8    部署报告            [OK]  完成   已写入 data/deploy-report.md

常用参数:--dry-run 只预览不落盘 · --skip-deps / --skip-sync / --skip-doctor / --no-cockpit 跳步 · --yes 免交互(CI 友好)。

🔒 deploy.yaml 含凭证,已被 .gitignore 排除;config.yaml 同理,两者都不会进仓库。

发布到团队资料库(publish.py)

本地生成的驾驶舱是给构建用的,分发走 WorkBuddy 团队资料库:固定链接、服务端权限(owner/editor/reader)、每日覆盖更新自动留版本历史。

python publish.py --setup --space-id <空间ID> --token-stdin   # 首次发布,node_id 回写 config.yaml
python publish.py --token-stdin                                # 之后每天覆盖更新,链接不变
python publish.py --status                                     # 查看当前发布目标
  • 首次发布前先建团队空间(如「生产交付」),把同事按角色拉为协作者。
  • token 在 WorkBuddy 会话中由 AI 调 connect_open_platform(skill_id=library)取得,经 stdin 传入,不落盘。
  • 发布目标存 config.yamlpublish 段(space_id / node_id / url),已 gitignore。
  • 发布失败保留本地 HTML 兜底,退出码 2 可被自动化流程识别为"仅发布失败"。

混合架构建议:生成在本地(凭证与数据源都在本机,快、可离线重跑),分发在库内(一个 URL 永远最新)。不要砍掉本地生成环节。


它到底解决什么问题

小批量电子制造的活儿,数据散在一堆地方:项目在 SeaTable、物料在 PartDB、发货记录在某个 Excel 里。 每个人都要问别人「那个单子到哪一步了」。

这个技能做七件事:

  1. 统一读写——op.py 一个入口管业务表,不管后端是本地 CSV 还是 SeaTable 云。
  2. 按角色出网页——cockpit.py 把数据算成 KPI、甘特图、缺料预警,生成单文件 HTML,5 个角色各一套视图,可设口令分享给同事。
  3. 采购合同变采购订单——合同解析 → 标准 BOM 扩量 → PartDB/ERP API/MCP/文件库存源 → 人工审核 → 供应商分组 → 正式采购订单 PDF。
  4. 微信消息变业务情报——双引擎只读本地微信数据库(4.x 直读加密库 / 3.x 走 merge_all.db),按监控群拉取新消息,提取交期、价格、停产、催货、进度和库存事件,确认后才写回业务表。
  5. 消息↔业务表逐条核对——wxmatch.py 把群消息里的收款、新下单、合同 PDF 与 SeaTable 业务表对账,专抓「群里说了但表里没有」的缺口;只读核对,高置信项生成预填意图等人确认。
  6. 行情可追踪——从采购记录生成物料监控清单,记录渠道价快照、采购价偏差、环比涨跌和 NRND/EOL 生命周期;上游原料(金/银/铜/锡/塑料)另有独立行情线看成本走向。
  7. 风险可预知——foresee.py 用历史真实工期给新合同倒排各环节最晚开始日(哪些必须立刻执行),用承诺 vs 实际交期给供应商画像(组装料平均晚 29 天,排程自动加 buffer),BOM 缺口 × 在途 ETA 判断哪些计划必须立刻下单补料。
  8. 事项与证据可治理——微信群里的业务事实进入 production 候选,负责人/截止日期/追问进入 tasks 候选;图片证据允许确认后上传,普通文件优先文本化;季度只列 90 天以上已闭环证据的清理候选,显式 --yes 才删除。
flowchart LR
    A[业务数据<br/>SeaTable · PartDB · 本地CSV] --> B[op.py 统一读写]
    B --> C[cockpit.py<br/>单文件 HTML 驾驶舱]
    C --> D[老板 / 生产经理 / 采购 / 仓库 / 销售<br/>各自视角 + 口令分享]
    C --> E[一键发起 → 写回<br/>先确认再落库]
    F[微信群消息<br/>收款 / 下单 / 合同PDF] --> G[wxmatch.py 只读核对]
    G --> H{匹配上了?}
    H -- 高置信 --> I[生成预填意图<br/>人确认后写库]
    H -- 对不上 --> J[待核对清单<br/>提示漏立项 / 漏登记]
    I --> B
    J --> C
    K[历史工期 · 供应商交期<br/>BOM缺口 × 在途] --> L[foresee.py 风险预测]
    L --> M[合同倒排 · 必须立刻执行<br/>缺料必须立刻下单]
    M --> C
Loading

微信情报 · 行情监控 · 消息核对

新增能力采用“本地专用数据 + 业务表确认写入”的方式,避免每日同步时覆盖监控信息:

微信 4.x:wxengine/wa_db.py 直读本地加密库(主密钥从进程内存提取)
微信 3.x:win-wechat-summary 生成 merge_all.db(回退路径)
        ↓ 只读,不连接微信服务器
wechat_intake.py pull(引擎A优先,自动回退引擎B)
        ↓
微信事件.csv(待确认)
        ↓ AI 分流,同一消息可拆两条
production:业务事实候选 / tasks:负责人·截止日期·追问候选
        ↓ 分别展示目标 Base/表/字段,用户确认后才写入
SeaTable 业务表 + 事项表 + 工作日志

图片:先登记摘要/来源/哈希,允许确认后上传
普通文件:优先文本化,失败或需核验版式/签章时才上传原件
        ↓ 同一批消息换个用法:对账而非提取
wxmatch.py scan(只读核对,绝不自动写库)
        ↓ 收款/下单/合同PDF ↔ 业务表逐条匹配
核对结果.csv → 高置信生成预填意图 → 用户确认 → 写回业务表

采购记录 → market.py watchlist
        ↓
物料监控清单.csv + 物料行情记录.csv
        ↓
价格涨跌 / NRND / EOL → 驾驶舱告警

market.py raw(commodities.py 驱动)
        ↓
原料行情记录.csv(金/银/铜/锡/塑料)→ 成本走向告警

个人微信没有开放读取 API。本项目不会连接微信服务器;微信 4.x 用户保持 PC 版登录即可(引擎A 自动从进程内存提取密钥),微信 3.x 用户需在 Windows 本机用 win-wechat-summary 生成 merge_all.db。涉及交期、价格、数量、金额或采购下单的微信事件,默认只进入“待确认”,不会自动改业务表;wxmatch.py 更进一步——它只做核对不写库,连预填意图都要你点头才生效。


微信情报反哺

微信 4.x(推荐,零工具依赖):保持微信 PC 版登录,安装 pip install cryptography 即可。微信 3.x:安装运行 win-wechat-summary 生成 merge_all.db。配置 config.yaml

⚠️ 依赖装在哪个 venv 就用哪个 venv 跑python wechat_intake.py doctor 自检)。本仓库自带的 .venv-pipeline 可能缺 cryptography,症状是:

[warn] 引擎A(wechatauto)加载失败:No module named 'cryptography'
[!] 引擎A不可用(微信4.x未登录 / 版本不支持 / 缺 cryptography)

这条报错里"微信4.x未登录 / 版本不支持"是误导项——真正原因几乎总是当前解释器缺包。修复:

.venv-pipeline/Scripts/python.exe -m pip install cryptography pyyaml

自检通过的标准输出是 数据库:19 个,已解密 19 个 + 群聊数量,而不是任何 [!]

⚠️ 微信 4.x 用户不要用 win-wechat-summary / WeChat-Summary 类工具:这类工具(含网络上的 GUI 版)通过 psutil.process_iter 精确匹配进程名 WeChat.exe 来检测微信,而微信 4.x 的主程序已改名为 Weixin.exe,必然报"未检测到微信进程"。其内置 PyWxDump 偏移表也只支持到 3.9.12.55,对 4.x 无解。本项目引擎A 直读 4.x db_storage 加密库,是 4.x 唯一可行路径。

wechat:
  enabled: true
  db_dir: ""                          # 引擎A:微信4.x数据根目录,留空=自动探测
  db_path: "C:/.../merge_all.db"      # 引擎B:3.x回退路径,留空=自动搜索
  watch_groups: [供应商群, 项目群]     # 留空=所有群(群多时首拉很慢)
  max_hours: 48

怎么选监控群(重要):先列出你的全部群聊,再按业务挑——不要拍脑袋写:

python wechat_intake.py groups    # 列出全部群(名称+群ID,缓存到 groups.json)

一个微信群列表动辄几百个,推荐按四类勾选(以本仓库实际 380 群筛选 31 群为例):

类别 挑什么 价值
生产/组装/贴片 贴片厂、组装厂、灌胶/加工群 工序进度、送料返料情报
IC/物料/供应商 芯片代理、外壳模具、电机马达群 价格变动、停产通知、交期变更
客户/项目 甲方项目群、商务群 催货、付款、需求变更——与超期预警交叉印证
内部 公司内部生产群 决策、跨部门协调

群名直接原样写进 watch_groups 列表即可(含空格、&、全角括号都没问题),匹配支持群名精确匹配 / 群 ID / 子串包含三种。改完配置跑一次 python wxwatch.py once --minutes 60 验证扫描的群数对不对。

检查数据库并列出群:

python wechat_intake.py doctor
python wechat_intake.py groups
python wechat_intake.py pull

pull 使用 data/wechat_intake/bookmark.json 按群记录读取位置,重复执行不会反复拉取同一批消息。AI 提取事件后登记为待确认:

python wechat_intake.py add-event \
  --group 供应商群 --sender 供应商A \
  --category 价格变动 \
  --text "FR8018HD 下周报价可能上涨 12%" \
  --intent '{"op":"log","table":"工作日志","data":{"原话":"FR8018HD 下周报价可能上涨 12%"}}'

python wechat_intake.py list --status 待确认
python wechat_intake.py approve WX20260821-001
python wechat_intake.py ignore WX20260821-002

可识别分类:交期变更、价格变动、停产通知、催货、进度、库存、其他。驾驶舱的「微信情报台」展示原文、来源群、分类、待确认状态和最终写入结果。

微信事项双 Base 分流与证据保留

启用命名 Base 后,微信候选不要全部写进默认 Base:

Base 内容 示例
production 已发生或待登记的业务事实 回款、订单、交期变更、采购/库存/生产/发货/质量记录
tasks 需要执行和追踪的事项 负责人、截止日期、提醒、催办、追问、未闭环问题

「已到账 3 万,请小王今天核对发票」应拆为 production 回款候选和 tasks 核票事项候选。 自动化只生成待确认清单;人工确认前不执行 approve,也不得把“高置信”说成“已写入”。 需要手工核验 Base 时使用 python op.py --base production ...python op.py --base tasks ...

附件采用“可检索优先”策略:

  • 图片允许在确认后上传到目标记录的图片/附件列,但先登记 OCR/视觉摘要、来源群、发送人、时间和哈希;
  • PDF、Word、Excel、PPT、TXT 等普通文件优先提取正文/表格,文本化失败或必须查看版式/签章时再上传原件;
  • 每季度运行 python evidence.py scan --root data/wechat_intake --days 90 --json,只列出超过 90 天、已闭环且非长期保留的候选;
  • 真正删除必须由人工明确批准后运行 python evidence.py prune --root data/wechat_intake --days 90 --yes。不带 --yes 永远只预览。

每日和季度自动化模板见 automations/README.md,AI 总结分流规范见 references/wx-ai-summary-prompt.md

事件提取解决的是「群里说了什么」。如果你还想知道「群里说的和表里记的对不对得上」,继续看 消息↔SeaTable 核对——同一批消息,换个用法从提取变成对账。

实时哨兵 · 异常检测 · 站会摘要(第二大脑三件套)

数据不再等你看,而是主动找你:

# 🌉 耳朵:实时监听(1 秒轮询,监控群命中关键词自动登记事件+写通知发件箱)
python wxwatch.py watch              # 常驻监听(微信保持登录)
python wxwatch.py once --minutes 60  # 低频模式:扫描过去 N 分钟(配合定时任务)
python wxwatch.py status             # 哨兵状态/最近命中

# 🧠 神经:异常检测(超期项目/逾期应收/采购在途/计划停滞/行情异动/数据体检)
python alerts.py run                 # 跑全部规则 → data/alerts.json
python alerts.py show                # 查看上次结果

# 📋 嘴巴:站会摘要(合成异常+微信情报+业务面,一段话说完今天要管什么)
python daily_brief.py --push         # 生成 data/daily_brief.md / _short.md 并写发件箱

# 📬 发件箱(进程解耦:生产者只管写,AI 会话经 agent-mail 发送)
python notify.py dump                # 取未发送通知(JSON 行)
python notify.py mark-sent --ids 1,2 # 发送后标记

关键词分两级:高危(交期/延期/涨价/停产/缺料/催货,命中即通知)和一般(价格/库存/到货/进度等,仅登记事件)。通知走发件箱,由每日 9 点自动化或对话中的 AI 经 Agent Mail 发送。

异常规则一览:A1 交期逼近(≤7 天未完货)· A2 项目已超期 · A3 逾期应收(交期过 + 待收>0)· A4 采购在途逐条 · A5 计划停滞(超 2 周无推进)· A6 行情异动(±10%)与 NRND/EOL 停产 · A7 数据体检(空状态/#VALUE! 脏值)。

物料行情监控

从 IC、组装料、成品、外壳和 PCBA 采购记录提取型号与历史采购价,生成监控清单:

python market.py watchlist
python market.py watchlist --refresh
python market.py add FR8018HD --price 3.10 --category IC

每周检查后写入行情快照;没有可靠价格或生命周期来源时填“未知”,不要猜测。NRND/EOL 需要保留来源链接:

python market.py snapshot \
  --model FR8018HD --price 3.50 \
  --channel 立创商城 --lifecycle 在产 \
  --source "https://example.com/source"

python market.py report
python market.py alerts

默认 market.alert_threshold: 10

  • 最新价相对上次采购价达到 ±10% 时预警;
  • 最新快照环比达到 ±10% 时预警;
  • NRND(不推荐继续使用)和 EOL停产 立即预警;
  • 驾驶舱「物料行情」展示采购价、最新行情、偏差、生命周期和内联 SVG 趋势。

代理商 API 自动查价(得捷 / 贸泽)

人工录入太慢,行情可以自动拉suppliers.py 抹平得捷与贸泽两个官方 API 的差异,统一折算人民币。

python suppliers.py doctor              # 凭证自检(值脱敏,不打印明文)
python suppliers.py doctor --live       # 真实联网探测一次(消耗 1 次配额)
python market.py lookup FR8018HD        # 单型号查价,**只查不写**
python market.py compare FR8018HD       # 多源比价,原价与 ¥ 并列,标出最低/最高/差价
python market.py sync --dry-run         # 预览这轮将查哪些(不联网、不写库)
python market.py sync                   # 按节奏批量拉价并写快照
python market.py sync --limit 5         # 只查前 5 个(省配额调试)
python market.py sync --force           # 忽略节奏强制全查

凭证怎么配config.yamlmarket.api_keys,已被 .gitignore 排除,不会进仓库):

market:
  currency: CNY          # 默认人民币 ¥
  cadence: auto          # 自适应复查节奏,省钱
  api_keys:
    digikey:             # 得捷:developer.digikey.com 注册应用
      client_id: ""
      client_secret: ""
      api_version: v4    # 默认 v4(Product Information API,App 需订阅它)
      site: CN           # 站点/币种/语种,决定了报价币种
      currency: CNY
    mouser:              # 贸泽:My Account → APIs → Search API Key
      api_key: ""

从 GitHub clone 的人自己去官网申请,仓库里只有 config.yaml.example 的空占位符。

得捷订阅坑(2026-09-02 实测):App 状态 Approved ≠ 能调通。一个 App 可订阅多个 API 产品(Barcode / OrderStatus / ProductInformation V4 / Quote / Reference APIs), 代码调的端点必须在你 App 的订阅列表里,否则 401 "You are not subscribed to this API"。 本项目默认调 V4 keyword 端点/products/v4/search/keyword,价 + 库存 + 中文生命周期 一应俱全);如果你的 App 订阅的是旧 Search API,把 api_version 改成 v3

自适应节奏(省 API 配额的核心):按「库存电子料数量」自动选复查间隔,逐型号比对上次快照日期,未到期直接跳过——

库存电子料数量 复查间隔 依据
≤ 100 种 每 7 天(每周) 料少,盯紧点
101 ~ 300 种 每 15 天(半月) 折中
> 300 种 每 30 天(每月) 料多,配额优先

数量取自 data/partdb_snapshot.jsonpart_count(当前 369 种 → 每月一次)。想写死就把 market.cadence 设成数字(如 7),或改 market.cadence_tiers 自定义阈值。

三道省配额闸门sync 依次过滤,越往后越省):

闸门 拦什么 实测效果(25 个启用型号)
① 本地预筛 P1Z3.5458*326MHz/0.5ppm 这类内部料号与规格描述——不是制造商型号,永远查不到 拦下 7 个(28%)
② 未知缓存 近 30 天已确认「查无此型号 / 无报价」的型号 拦下 17 个
③ 节奏到期 上次快照距今未超复查间隔的型号 视历史而定

三道走完,25 个型号第二轮只剩 1 个真正发请求。缓存最多挡 30 天,--force 可随时绕过。

⚠️ 先看清适用性,别指望它管全部料:得捷/贸泽是欧美代理商,对国产料和定制料号基本零覆盖。实测本仓库 25 个启用型号(FR8018HD 奉加微、ML307N 中移物联、OM6626B 等国产芯片为主),贸泽有效命中 0 条。 这两个 API 的正确用法是选型阶段查新料号lookup / compare 打价、查库存、查生命周期),而不是给国产 BOM 做行情巡检 —— 后者仍以人工录入和立创商城为主。

四条铁律(改代码前先读 suppliers.py 文件头):

  1. 只读——只调查询接口,绝不碰下单/报价/购物车。下单必须人工在官网完成。
  2. 凭证不落库——只从本地 config.yaml 读,日志与报错一律脱敏(只显示前 4 位)。
  3. 失败降级——网络超时/鉴权失败/查无此料都返回 ok=False不抛异常,批处理继续跑下一个。
  4. 统一人民币——返回原始币种 + 折算后的 price_cny;汇率走免费接口,拿不到退回 market.fx.static 静态值并在备注标注来源。

其他要点:贸泽一次可查 10 个型号(代码自动分批,省配额),得捷只能逐个查;得捷令牌自动缓存到 data/.supplier_tokens.json,过期自动刷新;多渠道各写一条快照时,涨跌幅只跟同渠道的上一条比,避免把渠道差价误报成涨跌。

数据保存在 data/物料监控清单.csvdata/物料行情记录.csv,均为本地专用文件,不会被 seatable_sync.py 覆盖。

原料行情(金 / 银 / 铜 / 锡 + 塑料原料)

元器件之外,还有一层更上游的成本:原料。锡价直接决定 SMT 焊料成本,铜价决定 PCB 与线材,金银决定镀层与键合线,而 ABS/PC/PS 决定外壳与结构件。

python market.py raw list                      # 看有哪些品种、各自的数据源
python market.py raw fetch                     # 拉一次实时价并写库(每天跑一次即可积累走势)
python market.py raw show --days 30            # 走势表(sparkline + 区间涨跌)
python market.py raw trend --days 30           # 波动超阈值告警(默认 ±3%)
python market.py raw add ABS --price 11800     # 人工录入现货价
python market.py raw backfill AU --contract au2612 --days 60   # 一次性补历史
品种 类别 数据源 单位
黄金 / 白银 / 铜 / / 铝 / 镍 金属 新浪期货连续合约(实时) 元/克、元/千克、元/吨
聚丙烯 PP / 聚乙烯 LLDPE / PVC 塑料代理指标 新浪期货连续合约(实时) 元/吨
ABS / PC / PS 树脂 塑料现货 人工录入 元/吨

关于塑料的诚实说明:ABS、PC、PS 是石化下游现货品种,没有公开的免费 API——报价被生意社、卓创、中塑在线等资讯商垄断(付费)。所以本模块的做法是:

  • 金属走免费实时接口,全自动;
  • PP / LLDPE / PVC 期货作为 ABS/PC/PS 的上游石化链代理指标(趋势相关,能提前感知塑料成本拐点);
  • ABS/PC/PS 现货走人工录入(你的采购报价填进去即可积累走势)。

若日后接入含产业数据的付费源(如同花顺 iFinD 有化工品现货库),只需在 commodities.py 里加一个 source 适配器,CSV 结构与展示层都不用动

数据源细节commodities.py 文件头有完整记录):

  • 实时价走 hq.sinajs.cn/list=nf_XXX0(上期所/大商所连续合约),免费、无需申请、无 API key,人民币计价,一次请求取回全部 9 个品种;
  • 新浪的日 K 线服务已下线(返回 Service not found),所以历史补录改走东方财富 K 线,secid 形如 113.au2612(113 上期所 / 114 大商所);
  • 口径隔离:补录的具体合约(如 au2612)与日常的「连续」是两个口径,写进 CSV 的「口径」列,环比只跟同口径比——拼接不同口径会出现假涨跌(与元器件的「串渠道假涨跌」是同一类坑)。

数据保存在 data/原料行情记录.csv(本地专用)。原料波动阈值默认 ±3%,比元器件的 ±10% 敏感,可在 config.yamlcommodities.alert_threshold 调整。

驾驶舱展示(v1.6.0)cockpit.py 已内置「原料行情(上游成本 · 金属 / 塑料)」模块——最新价、近 30 天区间涨跌、SVG 走势线、口径徽章(连续/合约)一目了然;波动 ≥ 阈值的品种进「原料波动告警」卡片,动静最大的 2 条还会进「下一步行动建议」(标注影响的是报价基调,不是停线事件)。老板页与采购页均可见。阈值与回看天数与 CLI 同源(commodities 段),不会出现命令行显示 ±3% 而网页按别的数算的情况。

消息↔SeaTable 核对(v1.6.2)

微信情报解决了「群里说了什么」,核对引擎解决「群里说的和 SeaTable 记的对不对得上」—— 收款、新下单、合同 PDF 逐条对账,专抓「群里说了但表里没有」的缺口。

python wxmatch.py scan                # 扫描监控群消息 + 微信收到的合同 PDF,写核对台账
python wxmatch.py list                # 查看待核对项
python wxmatch.py done WX-M-...001    # 处置留痕
python wxmatch.py intent              # 导出高置信项的预填意图(确认后走 approve 写库)
核对类型 群里看到的 对 SeaTable 哪张表 匹配规则
收款 「已打款 xx 万」「到账了」 项目表「待收」 金额 ±2% 容差 → 高置信
下单 「下单」「返单」 项目表客户名 匹配不到 → 提示可能漏立项
客户合同 合同 PDF(微信文件) 项目表「合同」列 客户名+产品词双维度匹配
供应商合同 采购合同 PDF 5 张采购记录表 供应商名归一(含一字之差别名),金额差 >5% 警示

为什么可信:核对引擎只读,绝不自动写 SeaTable——高置信收款项只生成「预填意图」, 人在驾驶舱或对话里确认后才落库(复用微信情报的 approve 链路)。

驾驶舱展示:老板/生产/销售页新增「消息↔SeaTable 核对台」——36 条待核对项按置信度排序 (高置信收款红字置顶进行动建议),类型/置信度徽章 + 匹配项目 + 建议动作一目了然。

三种用法,按需选

① 零配置(默认) — 数据存 data/ 下的 CSV,Excel 直接打开:

python3 op.py append 生产计划 '{"生产产品":"4G小卡","数量":100,"关联项目":"演示项目A"}'
python3 op.py list 生产计划
python3 op.py export-excel 生产数据.xlsx
python3 cockpit.py                      # 生成驾驶舱网页

② 接你自己的 SeaTablecp config.yaml.example config.yaml,填上:

backend: seatable
seatable:
  api_token: "你的Token"
  base_uuid: "你的BaseUUID"

命令一行都不用改。想退回本地,backend 改回 local

③ 采购库存源:按客户现状选一种

inventory:
  source: partdb      # 也可选 api / mcp / file
partdb:
  enabled: true
  url: "http://你的PartDB:端口/api"
  token: "你的PartDBToken"
  • 没有 ERP:可部署 PartDB,使用 partdb
  • 已有金蝶、简道云、禅道或自建 ERP:优先使用 apimcp,通过配置完成鉴权、分页与字段映射。
  • 暂时无法在线连接:使用 file 读取 Excel/CSV 导出。

完整配置见 config.yaml.example。所有通用库存默认属于“未确认库存”,必须经过人工库存审核才可抵扣生产需求。


深入阅读


分享与安全

公共仓库只包含通用代码、规则模板和示例配置,不保存客户数据或凭证。config.yamldata/pipeline/customer/pipeline/rules.local.yamlpipeline/out/ 都在 .gitignore 内。

首次使用采购流水线:运行 python pipeline/run.py init,把客户 BOM 和流程文件放入 pipeline/customer/,再填写本地 rules.local.yaml。库存可来自一键部署的 PartDB;客户已有金蝶、简道云、禅道或自建 ERP 时,优先通过通用 HTTP API 或 MCP 连接器在线接入,Excel/CSV 导出作为离线兜底。

驾驶舱网页里嵌的是你的真实业务数据。公开演示前必须用演示数据重新生成。

目录结构
seatable-production/
├── SKILL.md              # 领域知识(流程/表规则/格式/分析),不含任何凭证
├── config.yaml.example   # 配置模板(复制为 config.yaml 后填写)
├── op.py                 # 统一数据操作 CLI(模型与用户都只调它)
├── cockpit.py            # 驾驶舱网页生成器(单文件 HTML)
├── wechat_intake.py      # 微信本地库 → 待确认事件 → production/tasks 分流候选(双引擎)
├── evidence.py           # 图片证据元数据 + 90 天清理候选(显式 --yes 才删除)
├── wxengine/wa_db.py     # 微信 4.x 解密引擎(SQLCipher4 直读,主密钥从进程内存提取)
├── wxmatch.py            # 消息↔SeaTable 核对引擎(只读对账,高置信生成预填意图)
├── foresee.py            # 风险预测引擎(合同倒排·供应商画像·缺料预警 → data/foresee.json)
├── wxwatch.py            # 实时哨兵:监听监控群,关键词命中自动登记事件+通知
├── alerts.py             # 异常检测引擎:超期/应收/在途/停滞/行情 → data/alerts.json
├── daily_brief.py        # 站会摘要:异常+微信情报+业务面 合成一段话
├── notify.py             # 通知发件箱:进程解耦,AI 会话经 agent-mail 发送
├── market.py             # 物料监控清单 / 价格涨跌 / NRND-EOL(含 raw 子命令入口)
├── suppliers.py          # 得捷·贸泽官方 API 只读查价(凭证本地化 / 失败降级 / 统一 ¥)
├── commodities.py        # 上游原料行情(金/银/铜/锡/塑料,零凭证数据源)
├── seatable_sync.py      # 拉 SeaTable 云表快照供驾驶舱离线渲染
├── partdb_sync.py        # 拉 PartDB 库存与缺料快照
├── backfill_seatable.py  # 历史数据补录(确定性字段预填,需拍板的留空)
├── wecom_push.py         # 企业微信推送(发件箱 flush / 单条 push)
├── pipeline/             # 合同 → BOM → 库存审核 → 正式采购订单
│   ├── inventory_sources.py # PartDB / API / MCP / Excel·CSV 适配器
│   └── rules.yaml        # 无客户信息的公共采购规则模板
├── adapters/             # 业务台账后端适配器(可插拔)
│   ├── local.py          #   本地 CSV(默认,零依赖)
│   ├── seatable.py       #   SeaTable(配置驱动)
│   ├── partdb.py         #   PartDB(可选)
│   └── schema.py         #   14 表结构 + 15 条语义关联 + 默认值
├── references/           # 长文档(业务流程 / 分析公式)
├── tests/                # 离线回归测试(含双 Base、证据清理与自动化文档契约,不碰线上数据)
├── automations/          # 每日/季度自动化模板 + bridge/ 桥接脚本(挂到项目分组用)
├── scripts/              # 便捷 shell(SeaTable token / PartDB 查询)
├── partdb-price-import/  # 子技能:采购合同 PDF → PartDB 价格录入
├── partdb-part-create/   # 子技能:PartDB 新建物料 + 供应商件
├── expert/               # 专家包(内嵌技能副本,python sync_expert.py 同步,CI 校验漂移)
├── data/                 # 本地数据(自动生成,已 gitignore)
└── docs/                 # 手册、配图、在线指南

本文档由 混元3(腾讯混元大模型)辅助撰写。

About

生产交付协同 WorkBuddy 技能(解耦版):开箱零配置,默认本地 CSV 存储,可选接入 SeaTable/PartDB。覆盖立项→计划→采购→执行→库存→发货→维修→分析全流程。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages