MenuPilot 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- menupilot-0.1.0/LICENSE +21 -0
- menupilot-0.1.0/MenuPilot.egg-info/PKG-INFO +397 -0
- menupilot-0.1.0/MenuPilot.egg-info/SOURCES.txt +37 -0
- menupilot-0.1.0/MenuPilot.egg-info/dependency_links.txt +1 -0
- menupilot-0.1.0/MenuPilot.egg-info/entry_points.txt +2 -0
- menupilot-0.1.0/MenuPilot.egg-info/requires.txt +7 -0
- menupilot-0.1.0/MenuPilot.egg-info/top_level.txt +1 -0
- menupilot-0.1.0/PKG-INFO +397 -0
- menupilot-0.1.0/README.md +368 -0
- menupilot-0.1.0/menupilot/__init__.py +3 -0
- menupilot-0.1.0/menupilot/__main__.py +4 -0
- menupilot-0.1.0/menupilot/agent/__init__.py +0 -0
- menupilot-0.1.0/menupilot/agent/agent_loop.py +414 -0
- menupilot-0.1.0/menupilot/agent/matching_engine.py +974 -0
- menupilot-0.1.0/menupilot/agent/option_expander.py +490 -0
- menupilot-0.1.0/menupilot/agent/orchestration.py +570 -0
- menupilot-0.1.0/menupilot/agent/rule_engine.py +509 -0
- menupilot-0.1.0/menupilot/agent/sandbox.py +216 -0
- menupilot-0.1.0/menupilot/agent/schema_analyzer.py +1026 -0
- menupilot-0.1.0/menupilot/agent/template_preprocessor.py +293 -0
- menupilot-0.1.0/menupilot/agent/token_classifier.py +816 -0
- menupilot-0.1.0/menupilot/agent/tools.py +365 -0
- menupilot-0.1.0/menupilot/agent/workflow.py +1072 -0
- menupilot-0.1.0/menupilot/cli/human_review.py +191 -0
- menupilot-0.1.0/menupilot/cli/repl.py +821 -0
- menupilot-0.1.0/menupilot/config.py +113 -0
- menupilot-0.1.0/menupilot/data/__init__.py +0 -0
- menupilot-0.1.0/menupilot/data/canonical_schema.py +135 -0
- menupilot-0.1.0/menupilot/data/mapping_rules.yaml +387 -0
- menupilot-0.1.0/menupilot/data/memory.py +674 -0
- menupilot-0.1.0/menupilot/data/token_dict.py +275 -0
- menupilot-0.1.0/menupilot/excel_io/__init__.py +0 -0
- menupilot-0.1.0/menupilot/excel_io/excel_reader.py +552 -0
- menupilot-0.1.0/menupilot/excel_io/excel_writer.py +413 -0
- menupilot-0.1.0/menupilot/main.py +322 -0
- menupilot-0.1.0/menupilot/wizard.py +86 -0
- menupilot-0.1.0/pyproject.toml +46 -0
- menupilot-0.1.0/setup.cfg +4 -0
- menupilot-0.1.0/tests/test_cli.py +29 -0
menupilot-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 yuan wu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MenuPilot
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: 智能 POS 模板映射助手 — 自动将主数据 SOP 代码填入 POS 模板
|
|
5
|
+
Author-email: yuan wu <694904422@qq.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/wyyyyy04/MenuPilot
|
|
8
|
+
Keywords: pos,menu,excel,sop,bubble-tea,menu-pilot
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Requires-Python: >=3.9
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: openai>=2.0.0
|
|
22
|
+
Requires-Dist: openpyxl>=3.1.0
|
|
23
|
+
Requires-Dist: pandas>=2.0.0
|
|
24
|
+
Requires-Dist: numpy>=1.24.0
|
|
25
|
+
Requires-Dist: rapidfuzz>=3.0.0
|
|
26
|
+
Requires-Dist: langgraph>=1.2.0
|
|
27
|
+
Requires-Dist: langchain>=1.3.0
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
# MenuPilot — 智能 POS 模板映射助手
|
|
31
|
+
|
|
32
|
+
> 上传主数据表和 POS 模板,一句话完成 SOP 字段自动填充。
|
|
33
|
+
|
|
34
|
+
[](https://python.org)
|
|
35
|
+
[](./LICENSE)
|
|
36
|
+
[](https://pypi.org/project/MenuPilot/)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 安装
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pip install menupilot
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
首次运行会自动弹出中文配置向导,引导你设置 DeepSeek API Key(申请地址: https://platform.deepseek.com/api_keys)。配置保存在本地 `~/.menupilot/config.json`,不会上传到任何服务器。
|
|
47
|
+
|
|
48
|
+
## 快速开始
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# 命令行模式 —— 一条指令完成映射
|
|
52
|
+
menupilot -m 主数据表.xlsx -t POS模板.xlsx -o 输出.xlsx --sheet 1
|
|
53
|
+
|
|
54
|
+
# 选项展开模式
|
|
55
|
+
menupilot expand -m 选项主数据.xlsx -t 选项模板.xlsx -o 输出.xlsx
|
|
56
|
+
|
|
57
|
+
# 自然语言交互模式
|
|
58
|
+
menupilot
|
|
59
|
+
pos-agent> 把主数据匹配到模板,输出到 result.xlsx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 这是什么?
|
|
63
|
+
|
|
64
|
+
MenuPilot 专为**奶茶/餐饮行业**设计,解决 POS 系统切换时最头疼的问题——不同平台的导入模板格式各异,手工填写 SOP 代码耗时且易出错。
|
|
65
|
+
|
|
66
|
+
你只需要告诉它"把主数据匹配到模板",Agent 会**自动分析表格结构、识别列映射、执行匹配、生成报告**,把几小时的手工操作缩短到几秒钟。
|
|
67
|
+
|
|
68
|
+
## 能做什么
|
|
69
|
+
|
|
70
|
+
| 场景 | 说明 |
|
|
71
|
+
|------|------|
|
|
72
|
+
| **SOP 代码填充** | 主数据表 → POS 模板,自动匹配产品名 + 规格组合,填入 SOP 代码 |
|
|
73
|
+
| **选项规格展开** | 将产品配方(糖度/温度/杯型/奶底/茶底)展开为选项模板明细行 |
|
|
74
|
+
| **自然语言交互** | 不用记参数,直接说"匹配这两张表"即可,Agent 自动选择工具 |
|
|
75
|
+
| **零代码运营** | 无需 Python 基础,CLI 或自然语言都能驱动 |
|
|
76
|
+
|
|
77
|
+
## 工作原理
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
用户输入(CLI 或自然语言)
|
|
81
|
+
│
|
|
82
|
+
▼
|
|
83
|
+
Agent Loop(LLM 分析意图 → 选择工具)
|
|
84
|
+
│
|
|
85
|
+
├─→ Schema Analyzer:自动识别表格列语义
|
|
86
|
+
├─→ Rule Engine:字段标准化 + Token 验证
|
|
87
|
+
├─→ Matching Engine:快速模糊匹配 + 属性精确匹配
|
|
88
|
+
└─→ Excel Writer:保留原格式写入结果
|
|
89
|
+
│
|
|
90
|
+
▼
|
|
91
|
+
输出:填充完成的 Excel + 校验报告(含低置信度明细和建议)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 命令参考
|
|
95
|
+
|
|
96
|
+
| 参数 | 含义 | 示例 |
|
|
97
|
+
|------|------|------|
|
|
98
|
+
| `-m` / `--master` | 主数据表 Excel 文件路径 | `-m testdata/SOPcodemaindata.xlsx` |
|
|
99
|
+
| `-t` / `--template` | POS 模板 Excel 文件路径 | `-t testdata/pos1test.xlsx` |
|
|
100
|
+
| `-o` / `--output` | 输出 Excel 文件路径 | `-o testdata/result.xlsx` |
|
|
101
|
+
| `--target-col` | 模板中要填充的目标列名,默认「配料」 | `--target-col 配料` |
|
|
102
|
+
| `-r` / `--report` | 校验报告输出路径(可选) | `-r report.txt` |
|
|
103
|
+
| `--sheet N` | Sheet 序号(默认 0),跟在 `-t` 后指定模板 Sheet,跟在 `-m` 后指定主数据 Sheet | `--sheet 1` |
|
|
104
|
+
| `--header-row N` | 模板表头行号(`expand` 子命令使用,默认 2) | `--header-row 2` |
|
|
105
|
+
|
|
106
|
+
### SOP 匹配管线
|
|
107
|
+
```bash
|
|
108
|
+
menupilot -m <主数据> -t <模板> -o <输出> [--target-col <列名>] [--sheet N] [-r <报告>]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 选项展开管线
|
|
112
|
+
```bash
|
|
113
|
+
menupilot expand -m <主数据> -t <模板> -o <输出> [--header-row N]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 交互模式(自然语言)
|
|
117
|
+
```bash
|
|
118
|
+
menupilot # 进入 REPL,输入自然语言或 / 命令
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 场景一:SOP 匹配管线
|
|
124
|
+
|
|
125
|
+
示例:
|
|
126
|
+
run -m testdata/SOPcodemaindata.xlsx -t testdata/pos1test.xlsx --sheet 1 -o testdata/0613resules.xlsx
|
|
127
|
+
输出:
|
|
128
|
+
Agent: 我已分析两个文件,以下是自动识别的列映射方案:
|
|
129
|
+
|
|
130
|
+
**主数据表** → **POS模板(Sheet 1)**
|
|
131
|
+
|
|
132
|
+
| 主数据列 | → | POS模板列 | 说明 |
|
|
133
|
+
|---------|---|----------|------|
|
|
134
|
+
| 品名 | → | 菜品名称 | 匹配产品名称 |
|
|
135
|
+
| 杯型 | → | 规格 | 匹配杯型规格 |
|
|
136
|
+
| 温度 | → | 口味做法组合 | 温度信息在口味做法组合字段中 |
|
|
137
|
+
| 糖 | → | 口味做法组合 | 糖度信息在口味做法组合字段中 |
|
|
138
|
+
| 代码(SOP) | → | 配料(目标填充列) | 将SOP代码填入配料列 |
|
|
139
|
+
|
|
140
|
+
**目标填充列:配料**
|
|
141
|
+
|
|
142
|
+
请问这个方案是否正确?确认后我将执行 SOP 匹配管线。
|
|
143
|
+
你: yes
|
|
144
|
+
[INFO] 主数据表未检测到「奶底」列,该维度将作为通配符处理
|
|
145
|
+
[Schema] 缓存命中:模板指纹 8f3800015e6e...(跳过 LLM)
|
|
146
|
+
|
|
147
|
+
SOP 匹配管线已完成!以下是执行结果汇总:
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## ✅ SOP 匹配完成
|
|
152
|
+
|
|
153
|
+
| 项目 | 数量 | 占比 |
|
|
154
|
+
|------|:----:|:----:|
|
|
155
|
+
| **总行数** | 870 | 100% |
|
|
156
|
+
| **✅ 高置信匹配** | **783** | **90.0%** |
|
|
157
|
+
| **⚠️ 低置信/需确认** | **87** | **10.0%** |
|
|
158
|
+
| **❌ 完全失败** | 0 | 0% |
|
|
159
|
+
|
|
160
|
+
输出文件:`testdata/0613resules.xlsx`
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### ⚠️ 低置信匹配明细
|
|
165
|
+
|
|
166
|
+
| 商品名 | 不匹配原因 | 行数 |
|
|
167
|
+
|--------|-----------|:----:|
|
|
168
|
+
| **芒果波波** | 商品名在主数据中未找到 | 30 |
|
|
169
|
+
| **葡萄多多** | 主数据中无「温热」「热」温度、无「大杯」规格 | 20 |
|
|
170
|
+
| **百香果果茶** | 主数据中无「温热」「热」温度、无「大杯」规格 | 12 |
|
|
171
|
+
| **芒果多多** | 主数据中无「果蔬瓶」规格 | 10 |
|
|
172
|
+
| **枇杷椰露** | 商品名在主数据中未找到 | 10 |
|
|
173
|
+
| **西柚冰沙** | 主数据中无「热」温度、无「额外加一份糖」糖度 | 2 |
|
|
174
|
+
| **樱桃冰沙** | 主数据中无「热」温度、无「额外加一份糖」糖度 | 2 |
|
|
175
|
+
| **葡萄冰沙柠檬茶** | 糖度在主数据中缺失 | 1 |
|
|
176
|
+
|
|
177
|
+
### 💡 建议
|
|
178
|
+
1. **芒果波波、枇杷椰露** — 检查主数据表中是否有这些商品名(可能有错别字或命名不一致)
|
|
179
|
+
2. **葡萄多多、百香果果茶** — 主数据缺少「温热」「热」「大杯」的配置,需补充
|
|
180
|
+
3. **芒果多多** — 主数据缺少「果蔬瓶」规格
|
|
181
|
+
4. **西柚冰沙、樱桃冰沙** — 主数据缺少「热」「额外加一份糖」的配置
|
|
182
|
+
5. **葡萄冰沙柠檬茶** — 糖度字段缺失,需补充主数据
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 场景二:选项展开(自然语言)
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
pos-agent> 帮我把主数据testdata/mainproduct.xlsx 映射到testdata/kouwei.xlsx,输出文件为testdata/0617.xlsx
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
Agent: 我已分析两个文件,以下是识别的列映射方案:
|
|
194
|
+
|
|
195
|
+
**主数据表** (`mainproduct.xlsx`) → **口味做法模板** (`kouwei.xlsx`)
|
|
196
|
+
|
|
197
|
+
kouwei模板结构说明:
|
|
198
|
+
- 第0行:列名(合并单元格)
|
|
199
|
+
- 第1行:字段名(实际表头)
|
|
200
|
+
- 第2行:字段说明
|
|
201
|
+
- **数据从第3行开始写入**
|
|
202
|
+
|
|
203
|
+
**映射方案:**
|
|
204
|
+
|
|
205
|
+
| 主数据信息 | → | kouwei模板列 | 说明 |
|
|
206
|
+
|-----------|---|-------------|------|
|
|
207
|
+
| 主编码 | → | 列0「商品编码*」 | 商品编码 |
|
|
208
|
+
| 产品名称(中文) | → | 列1「商品名称*」 | 商品名称 |
|
|
209
|
+
| 温度选项(如"正常冰""去冰"等) | → | 列2「口味做法组名*」 | 温度作为口味做法组 |
|
|
210
|
+
| 糖度选项(如"标准糖""七分糖"等) | → | 列2「口味做法组名*」 | 糖度作为另一个口味做法组 |
|
|
211
|
+
| 温度选项名称 | → | 列7「选项名称*」 | 温度组下的选项明细 |
|
|
212
|
+
| 糖度选项名称 | → | 列7「选项名称*」 | 糖度组下的选项明细 |
|
|
213
|
+
| 推荐温度 → 是 | → | 列18「默认项」 | 推荐温度设为默认 |
|
|
214
|
+
| 推荐甜度 → 是 | → | 列18「默认项」 | 推荐甜度设为默认 |
|
|
215
|
+
|
|
216
|
+
**具体展开逻辑:**
|
|
217
|
+
每个商品需要展开为:
|
|
218
|
+
1. **温度组**(口味做法组名=温度)→ 各温度选项作为明细行
|
|
219
|
+
2. **糖度组**(口味做法组名=甜度)→ 各糖度选项作为明细行
|
|
220
|
+
|
|
221
|
+
例如「枇杷椰露」:
|
|
222
|
+
- 温度组:冰沙(默认)
|
|
223
|
+
- 糖度组:标准糖、七分糖(推荐/默认)、五分糖、三分糖、不另加糖
|
|
224
|
+
|
|
225
|
+
请问这个方案是否正确?确认后我将执行选项展开管线。
|
|
226
|
+
你: yes
|
|
227
|
+
========================================================
|
|
228
|
+
Option Specification Template Expander
|
|
229
|
+
========================================================
|
|
230
|
+
主数据表: testdata/mainproduct.xlsx (Sheet 0)
|
|
231
|
+
模板表: testdata/kouwei.xlsx (Sheet 0)
|
|
232
|
+
输出: testdata/0617.xlsx
|
|
233
|
+
--------------------------------------------------------
|
|
234
|
+
[INFO] 列名别名: 「产品名称(中文)」→「商品名称」
|
|
235
|
+
[INFO] 列名别名: 「推荐甜度」→「推荐糖度」
|
|
236
|
+
[INFO] 列名别名: 「默认甜度」→「默认糖度」
|
|
237
|
+
|
|
238
|
+
[OK] 展开完成!
|
|
239
|
+
主数据行数: 12
|
|
240
|
+
生成模板行数: 76
|
|
241
|
+
维度分布: 糖度=30, 温度=23, 规格=12, 奶底=5, 茶底=6
|
|
242
|
+
|
|
243
|
+
输出文件: testdata/0617.xlsx
|
|
244
|
+
|
|
245
|
+
选项展开已完成!以下是执行结果汇总:
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## ✅ 选项展开完成 — 口味做法模板
|
|
250
|
+
|
|
251
|
+
| 项目 | 数量 |
|
|
252
|
+
|------|:----:|
|
|
253
|
+
| **商品数** | 6个(枇杷椰露、芒果波波、西瓜酪酪、芒果乳茶、荔枝酪酪、枇杷酪酪) |
|
|
254
|
+
| **生成行数** | **76行数据**(从第3行到第78行) |
|
|
255
|
+
| **输出文件** | `testdata/0617.xlsx` |
|
|
256
|
+
|
|
257
|
+
### 展开的维度(每个商品)
|
|
258
|
+
|
|
259
|
+
每个商品展开为以下口味做法组:
|
|
260
|
+
|
|
261
|
+
| 口味做法组 | 说明 |
|
|
262
|
+
|-----------|------|
|
|
263
|
+
| **糖度** | 标准糖、七分糖、五分糖、三分糖、不另加糖(推荐=七分糖) |
|
|
264
|
+
| **温度** | 各商品对应的温度选项(推荐温度设为默认) |
|
|
265
|
+
| **规格** | 中杯、大杯(推荐=大杯) |
|
|
266
|
+
| **奶底** | 牛奶(如适用) |
|
|
267
|
+
| **茶底** | 各商品对应的茶底(如茉莉绿茶、草莓波波等) |
|
|
268
|
+
|
|
269
|
+
### 示例 — 枇杷椰露(KAZ0001)
|
|
270
|
+
| 口味做法组 | 选项名称 | 推荐项 | 默认项 |
|
|
271
|
+
|-----------|---------|:-----:|:-----:|
|
|
272
|
+
| 糖度 | 标准糖 | 否 | 否 |
|
|
273
|
+
| 糖度 | **七分糖** | **是** | **是** |
|
|
274
|
+
| 糖度 | 五分糖 | 否 | 否 |
|
|
275
|
+
| 糖度 | 三分糖 | 否 | 否 |
|
|
276
|
+
| 糖度 | 不另加糖 | 否 | 否 |
|
|
277
|
+
| 温度 | **冰沙** | **是** | **是** |
|
|
278
|
+
| 规格 | 中杯 | 否 | 否 |
|
|
279
|
+
| 规格 | **大杯** | **是** | **是** |
|
|
280
|
+
| 茶底 | 茉莉绿茶 | 否 | 否 |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## 场景三:SOP 匹配(单商品低覆盖率)
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
pos-agent> 把主数据testdata/newmaindata映射到testdata/qingticopy.xlsx --sheet 1
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
Agent: 我已分析两个文件,以下是自动识别的列映射方案:
|
|
291
|
+
|
|
292
|
+
**主数据表** (`newmaindata.xlsx`) → **POS模板** (`qingticopy.xlsx`,Sheet 1)
|
|
293
|
+
|
|
294
|
+
| 主数据列 | → | POS模板列 | 说明 |
|
|
295
|
+
|---------|---|----------|------|
|
|
296
|
+
| 品名 | → | 菜品名称 | 匹配产品名称 |
|
|
297
|
+
| 杯型 | → | 规格 | 匹配杯型规格 |
|
|
298
|
+
| 温度 | → | 口味做法组合 | 温度信息在口味做法组合中 |
|
|
299
|
+
| 糖 | → | 口味做法组合 | 糖度信息在口味做法组合中 |
|
|
300
|
+
| 代码(SOP) | → | 配料(目标填充列) | 将SOP代码填入配料列 |
|
|
301
|
+
|
|
302
|
+
**目标填充列:配料**
|
|
303
|
+
|
|
304
|
+
注意:主数据中只有「芒果波波」这一个商品(中杯/大杯 × 少冰 × 5种糖度),模板中「芒果波波」有30行(中杯/大杯 × 5种糖度 × 3种温度:温热/去冰/少冰),但主数据只有「少冰」温度,缺少「温热」和「去冰」的SOP代码。
|
|
305
|
+
|
|
306
|
+
请问这个方案是否正确?确认后我将执行 SOP 匹配管线。
|
|
307
|
+
你: yes
|
|
308
|
+
[INFO] 主数据表未检测到「奶底」列,该维度将作为通配符处理
|
|
309
|
+
|
|
310
|
+
SOP 匹配管线已完成!以下是执行结果汇总:
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## ✅ SOP 匹配完成 — qingticopy.xlsx (Sheet 1)
|
|
315
|
+
|
|
316
|
+
| 项目 | 数量 | 占比 |
|
|
317
|
+
|------|:----:|:----:|
|
|
318
|
+
| **总行数** | 837 | 100% |
|
|
319
|
+
| **✅ 高置信匹配** | **10** | **1.2%** |
|
|
320
|
+
| **⚠️ 低置信/需确认** | **827** | **98.8%** |
|
|
321
|
+
| **❌ 完全失败** | 0 | 0% |
|
|
322
|
+
|
|
323
|
+
输出文件:`testdata/0617.xlsx`
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
### ⚠️ 低置信匹配明细
|
|
328
|
+
|
|
329
|
+
| 商品名 | 不匹配原因 | 行数 |
|
|
330
|
+
|--------|-----------|:----:|
|
|
331
|
+
| **柠檬乳茶、草莓多多、芒果乳茶、葡萄冰沙、荔枝酪酪、奇异果果茶、草莓酪酪、山竹果茶、芒果果茶、西瓜酪酪、荔枝乳茶、草莓波波、凤梨冰沙、枇杷酪酪、葡萄多多、百香果果茶、石榴波波、芒果多多、石榴奶茶、枇杷椰露、车厘子酪酪、樱桃甘露、西柚冰沙、樱桃冰沙** | 商品名在主数据中**未找到** | 807 |
|
|
332
|
+
| **芒果波波** | 主数据中没有温度「**温热**」「**去冰**」、没有规格「**大杯**」 | 20 |
|
|
333
|
+
|
|
334
|
+
### 💡 建议
|
|
335
|
+
1. **主数据 `newmaindata.xlsx` 只有「芒果波波」这一个商品**,模板中其他24个商品(如石榴波波、芒果乳茶等)均无法匹配 ,需要补充主数据
|
|
336
|
+
2. **芒果波波** — 主数据中只有「少冰」温度,但模板中有「温热」「去冰」「少冰」三种温度;主数据中有中杯和大杯,但大杯的SOP代码在部分糖度组合下缺失(五分糖、三分糖为NaN)
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
pos-agent> 把所有低置信度的值都去掉
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
已完成!所有低置信度的值已去掉,结果保存到新文件。
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## ✅ 处理完成
|
|
347
|
+
|
|
348
|
+
由于原文件 `testdata/0617.xlsx` 被占用,已将清理后的结果保存到 **`testdata/0617_cleaned.xlsx`**
|
|
349
|
+
|
|
350
|
+
| 项目 | 数量 |
|
|
351
|
+
|------|:----:|
|
|
352
|
+
| **总行数** | 837 |
|
|
353
|
+
| **✅ 保留的高置信匹配** | **6行** |
|
|
354
|
+
| **❌ 已清除的低置信值** | **831行**(配料设为空) |
|
|
355
|
+
|
|
356
|
+
### 保留的6行高置信匹配(均为「芒果波波」的「少冰」组合)
|
|
357
|
+
|
|
358
|
+
| 行 | 规格 | 口味做法组合 | 配料(SOP代码) |
|
|
359
|
+
|:--:|:----:|:-----------:|:---------------:|
|
|
360
|
+
| 576 | 中杯 | 标准糖,少冰,茉莉绿茶,牛奶 | UD13、GW93/63、GW18、IO91(S)、LG95 3-5 |
|
|
361
|
+
| 579 | 中杯 | 七分糖,少冰,茉莉绿茶,牛奶 | UD13、GW93/63、TL83、IO91(S)、LG95 3-5 |
|
|
362
|
+
| 588 | 中杯 | 不另加糖,少冰,茉莉绿茶,牛奶 | UD13、GW93/63、IO91(S)、LG95 3-5 |
|
|
363
|
+
| 591 | 大杯 | 标准糖,少冰,茉莉绿茶,牛奶 | XI41、HO85/10、GW18、LF57(M)、LG95 3-5 |
|
|
364
|
+
| 594 | 大杯 | 七分糖,少冰,茉莉绿茶,牛奶 | XI41、HO85/10、TL83、LF57(M)、LG95 3-5 |
|
|
365
|
+
| 603 | 大杯 | 不另加糖,少冰,茉莉绿茶,牛奶 | XI41、HO85/10、LF57(M)、LG95 3-5 |
|
|
366
|
+
|
|
367
|
+
其余831行的配料列已全部清空(设为NaN)。
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
pos-agent> 把testdata/qingticopy.xlsx的配料列的内容以,分隔作为单独的元素,并去重
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
已完成!以下是处理结果:
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## ✅ 配料列拆分与去重结果
|
|
378
|
+
|
|
379
|
+
| 项目 | 数量 |
|
|
380
|
+
|------|:----:|
|
|
381
|
+
| 原始非空配料行 | 6行 |
|
|
382
|
+
| 分割后总元素数 | 28个 |
|
|
383
|
+
| **去重后唯一元素** | **9个** |
|
|
384
|
+
|
|
385
|
+
### 去重后的9个唯一元素
|
|
386
|
+
|
|
387
|
+
| 序号 | 元素 | 说明 |
|
|
388
|
+
|:---:|:----|:----|
|
|
389
|
+
| 1 | `GW93/63` | 配方比例(中杯) |
|
|
390
|
+
| 2 | `HO85/10` | 配方比例(大杯) |
|
|
391
|
+
| 3 | `LF57(M)` | 冰量(大杯) |
|
|
392
|
+
| 4 | `IO91(S)` | 冰量(中杯) |
|
|
393
|
+
| 5 | `LG95 3-5` | 操作步骤 |
|
|
394
|
+
| 6 | `TL83` | 糖度代码(七分糖) |
|
|
395
|
+
| 7 | `GW18` | 糖度代码(标准糖) |
|
|
396
|
+
| 8 | `UD13` | 时间参数(中杯) |
|
|
397
|
+
| 9 | `XI41` | 时间参数(大杯) |
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
MenuPilot.egg-info/PKG-INFO
|
|
5
|
+
MenuPilot.egg-info/SOURCES.txt
|
|
6
|
+
MenuPilot.egg-info/dependency_links.txt
|
|
7
|
+
MenuPilot.egg-info/entry_points.txt
|
|
8
|
+
MenuPilot.egg-info/requires.txt
|
|
9
|
+
MenuPilot.egg-info/top_level.txt
|
|
10
|
+
menupilot/__init__.py
|
|
11
|
+
menupilot/__main__.py
|
|
12
|
+
menupilot/config.py
|
|
13
|
+
menupilot/main.py
|
|
14
|
+
menupilot/wizard.py
|
|
15
|
+
menupilot/agent/__init__.py
|
|
16
|
+
menupilot/agent/agent_loop.py
|
|
17
|
+
menupilot/agent/matching_engine.py
|
|
18
|
+
menupilot/agent/option_expander.py
|
|
19
|
+
menupilot/agent/orchestration.py
|
|
20
|
+
menupilot/agent/rule_engine.py
|
|
21
|
+
menupilot/agent/sandbox.py
|
|
22
|
+
menupilot/agent/schema_analyzer.py
|
|
23
|
+
menupilot/agent/template_preprocessor.py
|
|
24
|
+
menupilot/agent/token_classifier.py
|
|
25
|
+
menupilot/agent/tools.py
|
|
26
|
+
menupilot/agent/workflow.py
|
|
27
|
+
menupilot/cli/human_review.py
|
|
28
|
+
menupilot/cli/repl.py
|
|
29
|
+
menupilot/data/__init__.py
|
|
30
|
+
menupilot/data/canonical_schema.py
|
|
31
|
+
menupilot/data/mapping_rules.yaml
|
|
32
|
+
menupilot/data/memory.py
|
|
33
|
+
menupilot/data/token_dict.py
|
|
34
|
+
menupilot/excel_io/__init__.py
|
|
35
|
+
menupilot/excel_io/excel_reader.py
|
|
36
|
+
menupilot/excel_io/excel_writer.py
|
|
37
|
+
tests/test_cli.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
menupilot
|