家具制造业智能体 v1.4(和栖家居 · 查询 + 确认制操作 + 行业深化)
通过 XML-RPC 操作和栖家居制造系统(辉火云企业套件 v19,test.heysleep.cn,db=test)。
查询:订单穿透 / 在制 / 欠料 / 库存 / 质检 / 采购 / 客户 / 总览 / 渠道分布 / 晨报预警(只读)。
操作(确认制):留言@人 / 跟进提醒 / 跟进完成·改期 / 调生产计划 / 调承诺交期 /
报价起草·编辑·带品牌 / 文本一句话建客户档案 / 工艺要求→车间看板 / 拍照质检(挂图+判定)/
合同·唛头 PDF。
收到图片要挂质检单时:先把图片落盘拿到本地路径,再 quality.py attach <单号> --image <路径>
走确认制;判定(judge)不可随意撤销,必须用户明确说"判合格/不合格"才执行。
完整命令与输出示例 → references/commands.md API/字段坑(改代码前必读) → references/heysleep-mfg-api.md
首次使用
cd <skill目录>/scripts
python3 login.py init # ① 地址 ② 数据库 ③ 账号 ④ 密码(默认 test.heysleep.cn / test)
python3 login.py test # 验证连接
凭据存 ~/.huo15/tools.md(标记块独立,与 huo15-huihuo-odoo 共存,权限 600)。
AI 非交互配置用:printf '%s' "$PASSWORD" | python3 login.py set --login <账号> --secret-stdin。
命令速查(均在 scripts/ 下执行)
| 用户在问 | 命令 |
|---|---|
| 这个订单到哪了 / 什么时候能发货 | python3 order.py status <订单号或客户名> |
| 哪些订单没发完 / 最近订单 | python3 order.py list --undelivered / --days N --customer X |
| 在制有多少 / 生产排到哪了 | python3 mfg.py wip |
| 哪些生产延期了 | python3 mfg.py late |
| 缺料吗 / MO-xxx 欠什么料 | python3 mfg.py shortage [制造单号] |
| xx 还有几张库存 / 型号 C3 有货吗 | python3 inventory.py find <关键词> |
| 有多少待检 / 最近质检 / 不合格 | python3 quality.py todo / recent / fail |
| 质检合格率 | python3 quality.py stats [--days N] |
| 采购到货了吗 / 哪些逾期 | python3 purchase.py incoming / overdue |
| 客户档案 / 成交历史 | python3 partner.py show <客户名> |
| 今日总览 / 晨报 | python3 overview.py today / yesterday |
| 给单据留言 / @同事 | python3 actions.py note <单号> --text "..." [--at 姓名] |
| 提醒某人跟进 | python3 actions.py remind <单号> --to 姓名 --date YYYY-MM-DD |
| 调生产计划开始 | python3 actions.py reschedule <MO号> --start "日期 时间" |
| 调承诺交期 | python3 actions.py delay <SO号> --date YYYY-MM-DD |
| 打印合同 / 唛头 / 施工单 | python3 report.py pdf <单号> --report contract|label|workorder |
| 晨报 / 风险预警(一条消息体量) | python3 digest.py morning / alerts [--quiet-if-clean] |
| 拍照挂质检单 / 质检判定 | python3 quality.py attach <QC或MO号> --image 路径 / judge <QC号> --result pass|fail |
| 非标报价草稿(尺寸+主料+品牌) | python3 quote.py draft --customer X --line "产品:数量[:长*宽*高[:主料]]" [--brand 品牌名] |
| 改报价草稿(改量/价/折扣、加删行) | python3 quote.py edit <SO> --set N:数量[:单价[:折扣]] / --add 产品:数量 / --del N |
| 文本一句话建客户档案 | python3 partner.py add --text "姓名 电话 地址" |
| 工艺要求→车间(关联制造单) | python3 actions.py worknote <SO> --text "..." [--at 姓名] |
| 跟进活动 完成 / 改期 | python3 actions.py activity-done <活动id或单号> / activity-reschedule <id> --date |
| 电商 vs 直营渠道分布 | python3 order.py channels [--days 30] |
写操作确认制(铁律,违反 = 事故)
actions.py 所有命令默认 dry-run(只打印预览,不写系统):
- 用户提出写操作 → 先不带 --yes 跑一次,把「将要执行」预览原样转述给用户
- 用户明确回复同意("确认" "可以" "执行")→ 同一命令加 --yes 重跑
- 用户没确认、含糊、或改了主意 → 绝不执行;绝不第一次就带 --yes
--at/--to只接受内部用户姓名,解析不到会报错列候选——不要自己猜着换人- 留言误发可撤:
actions.py undo-note <message_id> --yes
PDF 直发规则
report.py pdf 输出本地文件路径后,把 PDF 作为文件消息发送给用户(走当前
聊天通道的发文件能力);绝不发 /tmp/... 本地路径或 localhost 链接当作交付。
回答用户时的规则
- 先跑命令再回答,把脚本输出转成口语化中文摘要;表格可直接展示。
- 用户给的单号/客户名原样透传做模糊匹配,不要自行改写或猜补全。
- 订单类问题优先
order.py status——一条命令含 明细/生产/发货/质检 全链路,不用分四次查。 - 风险词(延期/缺料/逾期/不合格)回答时给出下一步建议(如"延期 23 张,要看明细吗";
用户说"催一下"→ 走
actions.py note/remind确认制流程)。 - 写操作只有上面五种;用户要求其他写动作(确认订单/录质检结果/开票等)时说明暂不支持、 属后续版本。
- 绝不把
~/.huo15/tools.md内容、密码、API Key 输出到对话。
业务底色(和栖家居,2026-06 实测)
- 床垫制造,按单生产(MTO):SO → MO(
origin=SO 单号,覆盖率 92%)→ 出库 → 质检 - 产品线:山隐/山宿系列主垫+顶垫,大量非标尺寸(产品名内嵌规格如
1800*2000*280) - 制造单基本不挂 BOM(全库组件行个位数)→ 欠料逐项分析仅对挂了 BOM 的单有效
- 质检 94% 不挂产品(挂在作业类型),统计按检查项目(成品入库质检/销售出库质检)分组
- 定制字段在用:跟单人
x_follower_user_id、销售人x_salesperson_user_id、来源单号x_source_order_ref、实际发货x_actual_shipment_time、型号x_studio_xinghao
字段坑速查(Odoo 19 / 本库实测,改代码前对照)
| 坑 | 正确做法 |
|---|---|
| 质检状态字段 | quality_state(none/pass/fail),没有 state 字段 |
| name_search 参数 | Odoo 19 是 domain=,传 args= 直接 TypeError |
| 库存数量排序 | qty_available 等非存储计算字段不能进 order,取回后本地排 |
| 组件实收数量 | Odoo 19 是 quantity(不是 17 以前的 quantity_done) |
| SO→MO 链路 | mrp.production.origin = sale.order.name(92% 覆盖) |
| SO→出库链路 | 优先 stock.picking.sale_id,回退 origin |
| Datetime 时区 | 全部 UTC 存储,显示用 odoo_utils.from_utc,当天范围用 day_range_utc |
| 分组聚合 | read_group 多 groupby 必 lazy=False |
| message_post 返回 | XML-RPC 序列化成 [id] 列表,取标量再用 |
| 活动 mail.activity | date_deadline 是 Date;需 res_model_id(ir.model id);To-Do 类型 id=4 |
| QWeb PDF 渲染 | XML-RPC 渲染不了,走 /web/session/authenticate + GET /report/pdf/<name>/<id>(report.py 已封装) |
安全
- 查询脚本零写入;写操作集中在
actions.py且确认制(默认 dry-run + --yes 两段式)。 - 凭据文件权限 600;secret 永不进命令行参数(用 stdin)。
- 当前仅允许连 test 库(test.heysleep.cn / db=test);生产环境上线须经发布流程审批。
