系统基于 OpenClaw 框架,采用 一主多子 的 Agent 架构。每个 Agent 拥有独立的网关端口、配置文件、WeCom Bot、模型池,通过主 Agent 进行统一调度。
将所有 Agent 的默认模型从 deepseek-v4-pro 切换为 qwen3.6-plus(阿里云百炼),响应延迟降低约 60%。同时配置了 11 个可选模型供按需切换。
从单一全能 Agent 拆分为 1 主 + 3 子 的专业 Agent 架构:
| Agent | 端口 | 职责 |
|---|---|---|
| 主 Agent(管理调度) | 15447 | 接收指令、分发任务、监控状态,不做具体业务处理 |
| 成本管控 | 15448 | 成本核算、配方分析、BOM 计算、原材料价格查询 |
| 差评收集 | 15449 | 差评监控、舆情汇总、售后投诉处理 |
| 小红书运营 | 15451 | 社交媒体内容运营、跟帖回复 |
对成本管控 Agent 的工具权限进行了严格限制:
workspaceOnly: true从零重建了统一的配方解析引擎(Python),支持 23 种表达方式,其中 18 种常用格式 经过完整测试验证:
使用 Python HTTP 服务(端口 18900)实现配方解析 + 成本计算全链路本地化,不经过大模型,响应时间 < 50ms。支持:
对未在数据库中找到的食材:
为所有 4 个 Agent 创建了 systemd 服务单元文件,支持 systemctl start/stop/restart/status 管理。同时编写了批量管理脚本 /workspace/manage-agents.sh。
| 配置项 | 主 Agent | 成本管控 | 差评收集 | 小红书运营 |
|---|---|---|---|---|
| 服务名 | openclaw-main | openclaw-cost | openclaw-review | openclaw-social |
| 端口 | 15447 | 15448 | 15449 | 15451 |
| 默认模型 | qwen3.6-plus | qwen3.6-plus | qwen3.6-plus | qwen3.6-plus |
| WeCom | ✅ | ✅ | ✅ | ✅ |
| 配置路径 | home/.openclaw/ | home-cost/.openclaw/ | home-review/.openclaw/ | home-social/.openclaw/ |
| SOUL.md | 管理角色 | 成本专家 | 差评监控 | 社交运营 |
| 浏览器 | 关闭 | 启用 | 关闭 | 关闭 |
用户 WeCom 消息
→ OpenClaw Gateway (15448)
→ SOUL.md 判断为成本相关
→ curl 调用 V6 本地服务 (18900)
→ parse_recipe() 解析配方
→ calculate_local() 计算成本
→ 返回格式化 Markdown 表格
→ Agent 返回 msg 字段给用户
| CSV 文件 | 用途 | 加载位置 |
|---|---|---|
01_原材料价格表.csv | 原材料品名、分类、每克成本、规格 | /vol1/ai-server/csv/ |
02_产品配方BOM_在售.csv | BOM 使用频率统计、单位计价 | /vol1/ai-server/csv/ |
03_门店自制半成品BOM.csv | 门店自制半成品每克成本 | /vol1/ai-server/csv/ |
配方中的名称会自动映射到数据库中的标准品名:
| 配方中名称 | 映射目标 |
|---|---|
| 酸奶 | 散装甜浆 |
| 酸奶机 | 散装甜浆 |
| 进口蓝莓 | 蓝莓 |
| 燕麦奶 / OATLY | Amazing燕麦饮 |
| 紫薯芋泥爆珠 | 芋泥 |
| 桂花 | 桂花原浆(酒酿) |
解析器位于 dify-proxy-v6.py,采用 四级级联策略:
| 模式编号 | 描述 | 示例 | 状态 |
|---|---|---|---|
| 1 | 品名 + 阿拉伯数字 + g/克 | 雪酪100g | ✅ |
| 2 | 阿拉伯数字 + g/克 + 品名 | 40g桂花原浆 | ✅ |
| 3 | 品名 + 阿拉伯数字 + 非克单位 | 芋圆2份 | ✅ |
| 4a | 中文数字 + 克 + 品名 | 二十克雪酪 | ✅ |
| 4b | 品名 + 中文数字 + 克 | 雪酪二十克 | ✅ |
| 5a | 中文数字 + 非克单位 + 品名 | 一份奶酪 | ✅ |
| 5b | 品名 + 中文数字 + 非克单位 | 奶酪一份 | ✅ |
| 6 | 品名 + 分数 + 单位 | 桂花½克 | ✅ |
| 7 | 纯品名(无数量) | 百香果果茸 | ✅ |
从文本片段中提取食材名,采用 双策略组合:
多个匹配项时,按 BOM 使用频率 降序排列,频率最高的作为默认选项。
当食材在数据库中不存在时,使用 字符重叠度 + 连续子串匹配 算法,在数据库中查找最接近的品名作为参考:
| 问题 | 状态 | 说明 |
|---|---|---|
| SeARXNG 中文搜索效果差 | 降级 | 改为数据库相似匹配 + 提示用户手动搜索 1688 |
| 1688.com 有 WAF 防爬 | 未解 | 无法通过浏览器自动化直接抓取价格 |
| 部分新食材数据库缺失 | 已知 | 寒天晶球、猕猴桃果茸等,需通过相似匹配或手动询价 |
| 小红书 Agent WeCom 认证 | 待修复 | Bot credentials 被拒绝 (error 853000),需在企业微信管理后台确认 |
| 个别别名不够精准 | 优化中 | 如"桂花冻"映射到"桂花原浆"不够准确 |
# 查看全部状态
/workspace/manage-agents.sh status
# 重启单个 Agent
/workspace/manage-agents.sh restart cost
# 查看日志
/workspace/manage-agents.sh logs main
# 查看全部状态
systemctl status openclaw-main openclaw-cost openclaw-review openclaw-social --no-pager
# 重启全部
systemctl restart openclaw-main openclaw-cost openclaw-review openclaw-social
# 单独操作
systemctl restart openclaw-cost
journalctl -u openclaw-cost -f --no-pager
# 启动 V6 本地计算服务
python3 /vol1/@apphome/trim.openclaw/data/workspace/dify-proxy-v6.py &
# 测试 V6 服务
curl -s http://127.0.0.1:18900/
# 测试配方计算
curl -s http://127.0.0.1:18900/ -X POST \
-H "Content-Type: application/json" \
-d '{"query":"桂花原浆40g+雪酪120g","user":"test","mode":"local"}'
成本核算:在群聊中 @成本管控 Agent 后发送配方即可
管理调度:在群聊中 @主 Agent 询问各 Agent 状态
差评/社交:对应 @差评收集 Agent / @小红书运营 Agent
支持多种格式,任意一种都可以:
序号 品名 用量 单位 1 桂花原浆 40 g 2 雪酪 120 g
桂花原浆40g+雪酪120g+散装甜浆200g+冰淇淋80g
先放桂花原浆40g,然后加雪酪120g,再倒散装甜浆200g
1. 桂花原浆 40g 2. 雪酪 120g 3. 散装甜浆 200g
猕猴桃果茸40g,芒果果茸30g,奶酪50g,淡奶油80g
Agent 会返回一个 Markdown 表格,包含:
| 标记 | 含义 | 操作 |
|---|---|---|
| ✅ | 正常匹配,无价格冲突 | 无需操作 |
| 🔀 请确认 | 多个匹配选项,差价较大 | 请回复确认使用哪个品牌 |