五金门店AI对话收银系统 - 完整技术方案
版本:v1.0
日期:2026-05-16
概述:基于 Hermes Agent 构建对话式五金门店收银进销存系统
一、系统架构
┌─────────────────────────────────────────────────────────────┐
│ 用户对话入口 │
│ (企业微信 / Rokid眼镜 / 网页 / API) │
└─────────────────┬───────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ Hermes Agent(意图Router) │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ 关键词匹配 │→ │ LLM意图分类 │→ │ Tool调用分发 │ │
│ │ (200+词) │ │ (模糊表达) │ │ (Structured) │ │
│ └─────────────┘ └──────────────┘ └──────────────────┘ │
└────────┬────────────────────┬────────────────────────────────┘
│ 简单操作 │ 复杂分析
▼ ▼
┌──────────────────┐ ┌──────────────────────────────────────┐
│ 预置接口直接调用 │ │ 智能体层(Multi-Agent) │
│ │ │ ┌──────────┐ ┌──────────┐ ┌────────┐│
│ • 开单/加商品 │ │ │Agent-02 │ │Agent-03 │ │Agent-04││
│ • 查库存/价格 │ │ │经营分析 │ │库存预测 │ │供应分析││
│ • 退货/退款 │ │ └──────────┘ └──────────┘ └────────┘│
│ • 查会员/账款 │ │ ┌──────────┐ ┌──────────┐ │
│ • 设置/配置 │ │ │Agent-05 │ │Agent-06 │ │
│ │ │ │财务分析 │ │预警监控 │ │
└──────────────────┘ └──────────────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 爱优CynosDB MySQL │
│ ls_hnjiuheng_cn (533表) │
│ 销售/采购/库存/会员/财务 │
└─────────────────────────────┘
二、接口清单
2.1 零售开单(retail)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 快速开单 | retail.quick_order | POST | /api/retail/quick_order | cashier |
| 加商品 | retail.add_goods | POST | /api/retail/add_goods | cashier |
| 整单优惠 | retail.order_discount | POST | /api/retail/order_discount | cashier |
| 支付收款 | retail.payment | POST | /api/retail/payment | cashier |
| 提交销售单 | retail.submit_order | POST | /api/retail/submit | cashier |
| 作废销售单 | retail.cancel_order | POST | /api/retail/cancel | manager |
| 查询销售单 | retail.get_order | GET | /api/retail/order | cashier |
2.2 采购管理(purchase)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 采购下单 | purchase.create_order | POST | /api/purchase/order | manager |
| 采购单列表 | purchase.order_list | GET | /api/purchase/orders | manager |
| 到货确认 | purchase.arrival_confirm | POST | /api/purchase/arrival | manager |
| 采购入库 | purchase.stock_in | POST | /api/purchase/stock_in | manager |
| 采购退货 | purchase.return | POST | /api/purchase/return | manager |
2.3 销售退货(refund)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 退货退款 | refund.create | POST | /api/refund/create | cashier |
| 退货单列表 | refund.list | GET | /api/refund/list | cashier |
| 退货撤回 | refund.cancel | POST | /api/refund/cancel | manager |
2.4 库存查询(stock)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 库存搜索 | stock.search | GET | /api/stock/search | cashier |
| 库存详情 | stock.detail | GET | /api/stock/detail | cashier |
| 库存预警 | stock.warning | GET | /api/stock/warning | manager |
| 库存流水 | stock.flow | GET | /api/stock/flow | manager |
2.5 商品查询(goods)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 商品模糊搜索 | goods.search | GET | /api/goods/search | cashier |
| 商品分类筛选 | goods.category | GET | /api/goods/category | cashier |
| 价格查询 | goods.price | GET | /api/goods/price | cashier |
| 商品批量查询 | goods.batch | POST | /api/goods/batch | cashier |
| 条码扫描查询 | goods.barcode | GET | /api/goods/barcode | cashier |
2.6 会员管理(vip)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 新增会员 | vip.create | POST | /api/vip/create | cashier |
| 会员查询 | vip.get | GET | /api/vip/get | cashier |
| 会员充值 | vip.recharge | POST | /api/vip/recharge | cashier |
| 积分兑换 | vip.points_exchange | POST | /api/vip/points_exchange | cashier |
| 积分查询 | vip.points | GET | /api/vip/points | cashier |
| 会员列表 | vip.list | GET | /api/vip/list | cashier |
| 会员消费记录 | vip.consume_history | GET | /api/vip/consume_history | cashier |
2.7 赊账管理(credit)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 赊账登记 | credit.create | POST | /api/credit/create | cashier |
| 赊账还款 | credit.repayment | POST | /api/credit/repayment | cashier |
| 赊账账期查询 | credit.list | GET | /api/credit/list | cashier |
| 赊账详情 | credit.detail | GET | /api/credit/detail | cashier |
| 逾期赊账查询 | credit.overdue | GET | /api/credit/overdue | manager |
2.8 员工业绩(employee)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 员工业绩查询 | employee.performance | GET | /api/employee/performance | manager |
| 销售排行 | employee.ranking | GET | /api/employee/ranking | manager |
| 员工列表 | employee.list | GET | /api/employee/list | manager |
| 员工销售明细 | employee.sales_detail | GET | /api/employee/sales_detail | manager |
2.9 门店设置(setting)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 收银员权限查询 | setting.permission_get | GET | /api/setting/permission | manager |
| 收银员权限设置 | setting.permission_set | POST | /api/setting/permission | admin |
| 支付配置查询 | setting.pay_config | GET | /api/setting/pay_config | manager |
| 支付配置设置 | setting.pay_config_set | POST | /api/setting/pay_config | admin |
| 门店信息查询 | setting.store_info | GET | /api/setting/store_info | manager |
| 收银员列表 | setting.cashier_list | GET | /api/setting/cashier_list | manager |
2.10 统计报表(stats)
| 接口名称 | identifier | method | path | 权限 |
|---|---|---|---|---|
| 日销售报表 | stats.daily | GET | /api/stats/daily | manager |
| 月销售报表 | stats.monthly | GET | /api/stats/monthly | manager |
| 商品销售排行 | stats.goods_ranking | GET | /api/stats/goods_ranking | manager |
| 分类销售统计 | stats.category_stats | GET | /api/stats/category_stats | manager |
| 利润统计 | stats.profit | GET | /api/stats/profit | manager |
| 供应商统计 | stats.supplier | GET | /api/stats/supplier | manager |
| 库存汇总报表 | stats.stock_summary | GET | /api/stats/stock_summary | manager |
| 会员统计报表 | stats.vip_stats | GET | /api/stats/vip_stats | manager |
| 赊账统计报表 | stats.credit_stats | GET | /api/stats/credit_stats | manager |
三、Agent调度逻辑
3.1 意图→Agent映射表
| 意图分类 | 触发关键词示例 | 目标Agent | 输入数据源 |
|---|---|---|---|
| 每日经营分析 | "日报"、"今天卖了多少"、"经营分析"、"销售额" | Agent-02 | ls_retail_sell |
| 库存预测补货 | "补货建议"、"缺货预警"、"该进什么货"、"安全库存" | Agent-03 | ls_retail_store_warehouse_goods |
| 供应商分析 | "供应商排名"、"哪个供应商好"、"账期" | Agent-04 | ls_retail_store_purchase_order |
| 客户分析 | "客户分析"、"会员画像"、"客户流失" | Agent-04 | ls_retail_vip, ls_retail_sell |
| 财务月度分析 | "财务报表"、"月度分析"、"利润"、"成本" | Agent-05 | ls_retail_sell, ls_retail_store_cost_price_record |
| 异常预警 | "异常预警"、"提醒"、"警告" | Agent-06 | 全部数据 |
3.2 Agent输入输出
Agent-02 每日经营分析
输入JSON:
{
"store_id": "S001",
"date": "2026-05-16",
"date_range": ["2026-05-01", "2026-05-16"],
"include_hmm": true
}
输出JSON:
{
"date": "2026-05-16",
"kpi": {
"total_sales": 15850.00,
"total_profit": 3200.00,
"profit_rate": 20.2,
"order_count": 125,
"avg_order_amount": 126.80,
"hmm_chain": 8.3,
"hmm_profit": 5.2
},
"top_goods": [
{"rank": 1, "goods_name": "螺丝刀套装", "sales_amount": 2500, "quantity": 43}
],
"cashier_performance": [
{"cashier_name": "张三", "sales": 5800}
]
}
Agent-03 库存预测与补货
输入JSON:
{
"store_id": "S001",
"forecast_days": 7,
"z_score": 1.96
}
输出JSON:
{
"suggested_reorder": [
{
"goods_id": "G001",
"goods_name": "螺丝刀套装",
"current_stock": 50,
"avg_daily_sales": 8,
"safe_stock": 20,
"suggested_qty": 100
}
],
"low_stock_warning": [...],
"overstock_warning": [...],
"seasonal_forecast": {...}
}
3.3 调度流程
用户输入
│
▼
┌──────────────────┐
│ 关键词精确匹配 │ ← 优先匹配
│ (200+ 关键词) │
└────────┬─────────┘
│ 未命中
▼
┌──────────────────┐
│ LLM意图分类 │ ← 模糊表达
│ (6大类+细分意图) │
└────────┬─────────┘
│
┌────┴────┐
│ │
▼ ▼
┌───────┐ ┌───────┐
│ 简单 │ │ 复杂 │
│ 操作 │ │ 分析 │
└───┬───┘ └───┬───┘
│ │
▼ ▼
┌───────┐ ┌───────────────┐
│预置 │ │ Agent调度 │
│接口 │ │ (可并行多个) │
└───────┘ └───────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Agent-02│ │Agent-03│ │Agent-05│
└────────┘ └────────┘ └────────┘
│ │ │
└─────────────┼─────────────┘
▼
结果格式化输出
(用户友好消息)
四、对话流程设计
4.1 开单销售流程
用户:开单
系统:开始新订单,请说客户名或会员手机(或者"散客"直接开单)
用户:张三 13800138000
系统:[识别会员] 已选择【张三】,会员等级:黄金,会员价。
商品?(直接说商品名称或编码)
用户:10个M8螺丝
系统:[查找并添加]
✓ M8螺丝 ¥3.50 × 10 = ¥35.00
还需要什么?输入"结账"或继续加商品
用户:再加5个M6螺母
系统:[添加]
✓ M6螺母 ¥1.20 × 5 = ¥6.00
小计:¥41.00,会员价¥38.00
用户:抹个零
系统:[整单优惠] 原价¥38.00,优惠¥3.00,实收¥35.00
确认结账?
用户:确认
系统:请选择支付方式:
1. 微信 ¥35
2. 支付宝 ¥35
3. 现金 ¥35
4. 赊账
用户:微信
系统:[收款确认]
═══════════════════
✅ 订单完成!
订单号:SO20260516001
商品:M8螺丝×10 + M6螺母×5
合计:¥35.00
支付:微信
时间:2026-05-16 20:45
═══════════════════
【超时处理】若30秒无响应:自动保存草稿,提示"订单已暂存"
【取消操作】用户说"取消":确认后清除订单,提示"订单已取消"
4.2 采购入库流程
用户:采购入库
系统:请说供应商名称或编号
用户:向XX供应商进货
系统:[识别供应商] 已选择【XX供应商】
请说商品和数量(如"20个M8螺丝,单价2.5元")
用户:M8螺丝100个,单价2.5元
系统:[确认商品]
采购单:PO20260516001
├─ 供应商:XX供应商
├─ M8螺丝:100个 × ¥2.50 = ¥250.00
└─ 状态:待到货
确认创建?
用户:确认
系统:[创建成功]
采购单 PO20260516001 已创建
期望到货日期?请说天数(如"7天")
用户:7天
系统:[设置期望到货日期]
采购单已确认,预计7天后到货
到货时对我说"到货确认"即可入库
4.3 销售退货流程
用户:退货
系统:请说原订单号,或者描述商品我来帮你找
用户:订单号SO20260516001
系统:[查找订单]
订单SO20260516001
├─ 商品:M8螺丝×10 + M6螺母×5
├─ 金额:¥35.00(微信支付)
└─ 时间:2026-05-16 20:45
请说退哪个商品,退多少
用户:退2个M8螺丝
系统:[计算退款]
退货:M8螺丝 × 2
单价:¥3.50(原价)
退款金额:¥7.00
退款方式:原路退回(微信)
确认退货?
用户:确认
系统:[退货成功]
═══════════════════
✅ 退货完成!
退货单:REF20260516001
商品:M8螺丝 × 2
退款:¥7.00(微信)
═══════════════════
4.4 库存查询流程
用户:查库存
系统:请说商品名称、编码或分类
用户:螺丝还有多少
系统:[搜索库存]
螺丝类库存:
├─ 十字螺丝M4×20:1,200个(正常)
├─ 十字螺丝M5×30:860个(正常)
├─ 六角螺丝M8:320个(偏低)
└─ 自攻螺丝M4:50个 ⚠️缺货预警
要查看某个商品的详细库存?
用户:M8螺丝
系统:[单品库存]
六角螺丝M8
├─ 当前库存:320个
├─ 安全库存:100个
├─ 日均销量:15个
├─ 库存可售天数:21天
└─ 建议补货量:200个
4.5 会员充值流程
用户:会员充值
系统:请说会员手机号或姓名
用户:13800138000
系统:[识别会员]
会员:张三
├─ 等级:黄金
├─ 当前余额:¥200.00
├─ 当前积分:1,500分
└─ 充值享好礼:充100送5、充200送15、充500送50
请说充值金额
用户:充300
系统:[确认充值]
充值金额:¥300.00
赠送金额:¥20.00(充300送20)
到账余额:¥520.00
支付方式?
用户:现金
系统:[收款确认]
═══════════════════
✅ 充值成功!
会员:张三
充值:¥300.00(现金)
赠送:¥20.00
到账:¥520.00
当前积分:1,500分
═══════════════════
五、意图识别与路由机制
5.1 两层路由架构
用户输入
│
▼
┌─────────────────────────────────────────┐
│ 第一层:关键词精确匹配(毫秒级) │
│ 匹配则直接路由到对应接口/Agent │
│ 未匹配进入第二层 │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 第二层:LLM意图分类 │
│ 6大类 × N细分意图 │
│ 输出:意图类型 + 参数 + 置信度 │
└─────────────────┬───────────────────────┘
│
┌────────┴────────┐
│ 置信度≥0.8 │ 置信度<0.8
▼ ▼
直接执行 进入多轮澄清
5.2 关键词匹配表(200+词)
| 关键词 | 映射操作 | 类别 |
|---|---|---|
| 开单/开单销售/卖给/零售 | retail.quick_order | retail |
| 加商品/加个/再来/添 | retail.add_goods | retail |
| 结账/收款/支付/买单 | retail.payment | retail |
| 退货/退款/退货退款 | refund.create | refund |
| 退货撤回/撤销退货 | refund.cancel | refund |
| 采购/进货/订购 | purchase.create_order | purchase |
| 到货确认/入库 | purchase.arrival_confirm | purchase |
| 查库存/库存还有多少 | stock.search | stock |
| 缺货/库存预警 | stock.warning | stock |
| 查商品/商品价格 | goods.search | goods |
| 条码/扫一扫 | goods.barcode | goods |
| 会员/会员价/积分 | vip.get | vip |
| 充值/会员充值 | vip.recharge | vip |
| 赊账/欠款/账期 | credit.create | credit |
| 还款/付欠款 | credit.repayment | credit |
| 日报/今天卖多少 | Agent-02 | analysis |
| 经营分析/销售分析 | Agent-02 | analysis |
| 补货建议/该进什么货 | Agent-03 | analysis |
| 库存预测/安全库存 | Agent-03 | analysis |
| 供应商分析/供应商排名 | Agent-04 | analysis |
| 财务报表/利润/成本 | Agent-05 | analysis |
| 异常/预警/提醒 | Agent-06 | analysis |
| 设置/配置/权限 | setting.permission_get | setting |
| 员工业绩/销售排行 | employee.performance | employee |
5.3 LLM意图分类Prompt
你是一个五金门店收银系统的意图分类器。用户输入将映射到以下分类:
【分类体系】
1. retail(零售开单):quick_order, add_goods, order_discount, payment, cancel_order
2. purchase(采购管理):create_order, arrival_confirm, stock_in, return_order
3. refund(销售退货):create, cancel
4. stock(库存查询):search, detail, warning, flow
5. goods(商品查询):search, category, price, barcode
6. vip(会员管理):create, get, recharge, points
7. credit(赊账管理):create, repayment, list
8. employee(员工):performance, ranking
9. setting(设置):permission, pay_config, store_info
10. analysis(智能体分析):daily_report, inventory_forecast, supplier_analysis, financial, warning
【输出格式】
{
"intent": "分类.意图",
"params": {"key": "value"},
"confidence": 0.95,
"needs_clarify": false,
"missing_params": []
}
【示例】
输入:"卖给李四10个螺丝"
输出:{"intent": "retail.quick_order", "params": {"customer_name": "李四", "goods": "螺丝", "quantity": 10}, "confidence": 0.92}
输入:"还有多少库存"
输出:{"intent": "stock.search", "params": {}, "confidence": 0.85, "needs_clarify": true, "missing_params": ["keyword"]}
请分析以下用户输入:
5.4 路由优先级
| 优先级 | 路由类型 | 触发条件 | 响应时间 |
|---|---|---|---|
| 1 | 关键词精确匹配 | 命中关键词表 | <50ms |
| 2 | 参数完整的意图 | 置信度≥0.8 | <200ms |
| 3 | 需要澄清的意图 | 置信度0.5-0.8 | <500ms |
| 4 | 模糊意图 | 置信度<0.5 | 进入多轮对话 |
六、权限与数据隔离
6.1 角色权限体系
| 角色 | 权限范围 | 可操作 |
|---|---|---|
| admin | 全店 | 所有功能 + 人员管理 |
| manager | 店长 | 采购/退货审批/统报/设置 |
| cashier | 收银员 | 零售开单/退货/查询 |
| inventory | 仓库员 | 采购入库/库存管理 |
6.2 多租户数据隔离
-- 所有查询自动携带store_id条件
WHERE store_id = :current_store_id
-- 行级安全策略
CREATE POLICY tenant_isolation ON ls_retail_sell
FOR ALL
USING (store_id = current_setting('app.store_id')::uuid);
6.3 敏感操作二次确认
| 操作 | 确认方式 | 验证 |
|---|---|---|
| 退款 | 权限码 + 确认 | refundcode |
| 作废订单 | 权限码 + 原因 | manager权限 |
| 删除商品 | 权限码 | delete_goods_jurisdiction_code |
| 改价 | 权限码 | is_cut_price_type_permission_code |
| 赊账 | 会员密码 | 会员预存密码 |
6.4 审计日志
-- 操作审计表
CREATE TABLE ai_agent_audit_log (
id BIGINT PRIMARY KEY,
user_id VARCHAR(64),
store_id VARCHAR(64),
action VARCHAR(64),
params JSONB,
result JSONB,
confidence FLOAT,
agent_type VARCHAR(32), -- 'direct' / 'agent_02' / 'agent_03' ...
created_at TIMESTAMP DEFAULT NOW()
);
七、对话上下文管理
7.1 会话状态
class ConversationContext:
store_id: str
user_id: str
role: str # admin/manager/cashier
# 当前模式
mode: str # 'sell' / 'purchase' / 'refund' / 'query' / None
# 进行中的订单
active_order: {
'order_id': str,
'customer': dict,
'items': list,
'subtotal': float,
'discount': float,
'total': float,
'status': str # 'editing' / 'paid' / 'cancelled'
}
# 历史对话摘要(用于长程上下文)
history_summary: str
7.2 多轮对话示例
用户:开单 # mode=sell
系统:开始新订单,请说客户名
用户:李四 # 识别客户
系统:[已选李四] 商品?
用户:10个螺丝 # 添加商品
系统:[已加] 螺丝×10,还需什么?
用户:查一下库存还有多少 # 中断开单,临时查询
系统:[查询库存] 螺丝库存1200个
用户:再加5个螺母 # 恢复开单
系统:[已加] 螺母×5
用户:结账
系统:共计¥45,确认?
用户:确认,微信
系统:[完成] 订单SO20260516002
八、技术实现
8.1 技术栈
| 组件 | 技术选型 |
|---|---|
| 对话框架 | Hermes Agent |
| 意图识别 | 关键词 + MiniMax M2 |
| 业务接口 | 爱优 ThinkPHP 5.0 API |
| 数据库 | CynosDB MySQL(读写分离) |
| 缓存/Session | Redis |
| 分析引擎 | ClickHouse(扩展) |
| 部署架构 | 多租户 Docker |
8.2 接口注册
TOOL_REGISTRY = {
# 零售
"retail.quick_order": {
"api": "/api/retail/quick_order",
"method": "POST",
"params": ["store_id", "cashier_id", "goods_list", "vip_id"],
"context_mode": "sell"
},
"retail.add_goods": {
"api": "/api/retail/add_goods",
"method": "POST",
"params": ["order_id", "goods_id", "quantity", "price"],
"requires_context": ["sell"]
},
# ... 更多接口
}
AGENT_REGISTRY = {
"Agent-02": {
"name": "每日经营分析",
"trigger_keywords": ["日报", "经营分析", "今天卖了多少"],
"input_schema": {...},
"output_schema": {...},
"sql_template": "..."
},
# ... 更多Agent
}
九、对话示例
9.1 日常经营查询
用户:今天卖了多少钱
系统:[Agent-02 经营分析]
📊 今日经营汇总(2026-05-16)
💰 销售额:¥15,850(含退款¥320)
📦 订单数:125笔
💵 毛利:¥3,200(20.2%)
📈 环比:↑8.3%(昨日¥14,615)
🏆 TOP3商品:
1. 螺丝刀套装 - ¥2,500(43件)
2. 六角螺丝M8 - ¥1,800(360件)
3. 螺母M6 - ¥1,200(1000件)
👤 员工业绩TOP3:
1. 张三 - ¥5,800(32单)
2. 李四 - ¥4,200(28单)
3. 王五 - ¥3,850(25单)
9.2 补货建议
用户:补货建议
系统:[Agent-03 库存预测]
📦 建议补货(未来7天)
⚠️ 急需补货:
├─ 六角螺丝M8:需补500个
│ 当前320个 / 可售5天 / 安全库存100个
│
🔔 建议补货:
├─ 十字螺丝M5:需补200个
│ 当前860个 / 可售12天 / 安全库存150个
📉 滞销预警:
├─ 自攻螺丝M4:积压50个,连续15天无销售
│ 建议:促销或退供应商
9.3 快速开单
用户:开单卖给李四,10个M8螺丝,5个M6螺母
系统:[快速开单]
📝 订单 SO20260516003
👤 客户:李四(会员价)
├─ 六角螺丝M8 ¥3.50 × 10 = ¥35.00
├─ M6螺母 ¥1.20 × 5 = ¥6.00
└─ 会员价优惠 -¥2.00
─────────────────────
合计 ¥39.00
输入"结账"继续,或"加商品"继续添加