docs: 修正文档与代码对齐问题

- 附件分类说明.md 第4节:澄清程序输出为完整记录(含
  zong_pai_hao/status/has_attachment),types 仅为分类结果字段,
  示例只截取 types 展示格式差异,消除"只输出 types"误导。
- README.md:项目结构由错误的 src/ 子目录布局改为实际根目录平铺
  (并补入已弃用的 attachment_classifier.py 旧 Excel 版);
  修正 src/prompts.py 为 prompts.py 的引用。
This commit is contained in:
Misaka_Company
2026-07-24 14:06:05 +08:00
parent 2110e6f38c
commit 4ca048bd26
2 changed files with 140 additions and 11 deletions

View File

@@ -59,7 +59,7 @@ python main.py --id 26B742 --mode fine --enable-other
- **fine**:在同一个 `types` 字段里直接给出"大类:细分类目",例如
"配件:针型阀""资料:说明书"
两种模式对应的提示词都定义在 `src/prompts.py` 中,修改分类边界或细分类目
两种模式对应的提示词都定义在 `prompts.py` 中,修改分类边界或细分类目
枚举,只需要改这一个文件。
### 分类体系(已与业务方确认边界)
@@ -186,15 +186,15 @@ JSON 的括号、引号、转义更容易被模型写错。约定 LLM 只输出"
## 项目结构
```
├── config.yaml # 配置文件
├── main.py # 命令行入口
├── config.yaml # 配置文件
├── main.py # 命令行入口(直接 import 同目录各模块)
├── requirements.txt
── src/
├── config_loader.py # YAML 配置读取与校验
├── db.py # SQL Server 查询 (pyodbc)
├── prompts.py # 提示词与细分类目枚举(唯一需要改分类边界时编辑的文件)
├── llm_client.py # LLM 调用 (OpenAI 兼容接口)
├── parser.py # LLM 输出格式校验与清洗 → 结构化数据
├── order_logger.py # 每个总排号一份的完整对话日志
└── classifier.py # 编排:查库 -> 调LLM -> 校验解析 -> 记日志 -> 组装结果
── config_loader.py # YAML 配置读取与校验
├── db.py # SQL Server 查询 (pyodbc)
├── prompts.py # 提示词与细分类目枚举(唯一需要改分类边界时编辑的文件)
├── llm_client.py # LLM 调用 (OpenAI 兼容接口)
├── parser.py # LLM 输出格式校验与清洗 → 结构化数据
├── order_logger.py # 每个总排号一份的完整对话日志
├── classifier.py # 编排:查库 -> 调LLM -> 校验解析 -> 记日志 -> 组装结果
└── attachment_classifier.py # 历史版本(旧 Excel 版,已弃用,保留仅供参考)
```

129
docs/附件分类说明.md Normal file
View File

@@ -0,0 +1,129 @@
# 附件分类说明
> 布莱迪压力表订单附件识别工具 —— 分类体系参考文档。
> 本文档只讲"能分成哪些类";怎么部署、怎么跑程序见 README.md。
## 总览
分类分两级:**粗分(大类)** 定位到"是资料/配件/耗材/其他里的哪一种"**精分(细分类目)** 在粗分基础上进一步给出具体是哪一项。
| 大类 | 细分类目数 | 是否默认启用 |
|---|---|---|
| 资料 | 12 | 是(固定,不可关闭) |
| 配件 | 25 | 是(固定,不可关闭) |
| 耗材 | 1 | 是(固定,不可关闭) |
| 其他 | 1固定值"其他" | 否,需手动开启 |
三大类任何时候都生效;"其他"是可选兜底类目,默认关闭,开启方式见文末第五节。
---
## 一、先排除:这些都不算附件
**产品本体**(压力表自身规格,永远不算附件、不参与判断):
表壳直径/材质、精度等级、防护等级(IP)、过压保护(这里指内置功能规格,注意和下文"过压保护器"这个实物配件区分开)、弹性元件材质、接头材质/螺纹、安装方式、表盘材质/刻度/颜色、量程、充油、玻璃、指针、调零装置、结构代号(如513/531)、卡盘尺寸、打标/示值/红线标识要求。
**工艺处理**(不算配件):缓冲钉、阻尼钉、阻尼帽。
**标识件**(不算配件):位号牌、铭牌、标牌、号牌。
**物流包装指令**(不算资料):装箱单、送货单、贴箱单、发货章、包装/箱体标注。
**合格证**(单独强调,整体排除):既不算资料,也不算任何附件类型。无论参数文本里出没出现"合格证"这个说法,一律忽略——不影响"是否携带附件"的判断,也不会出现在精分结果里。
> 补充:资料类精分里有一项叫"检验合格证书综合"见下文第9项这和上面被整体排除的"合格证"是两个不同的类目标签,互不冲突——文本里出现"合格证"三个字本身,按上面的规则忽略;"检验合格证书综合"作为独立的资料类细分类目正常参与判断,不受这条排除规则影响。
---
## 二、粗分:三大类 + 一个可选类
### 1. 资料类 —— 交付给客户的技术文件
检测报告、检验报告、出厂报告、材质证明/材质单/材质报告、说明书(使用/安装/维护)、标定证书/校验证书、制造记录/检验记录、图纸、营业执照、原产地证明、型式检验报告等。
### 2. 配件类 —— 随货交付的独立实物零件(不含垫片)
阀类(针型阀/球阀/截止阀/旋塞阀/角阀/阀组)、冷凝类(冷凝管/冷凝圈/冷凝弯)、表弯管/缓冲弯、虹吸管、过压保护器、散热器/散热片、焊接接头/短节/短管、法兰隔膜、隔离器、铅封、转换接头、卡箍/抱箍、紧固件(螺栓/螺母)、活接头、接线盒、电缆/插头、变送器等。凡随表一起出货的独立零件都算。
### 3. 耗材/密封件类 —— 垫片
垫片四氟垫片、紫铜垫片、缠绕垫、密封圈、O型圈等各种材质单独成类不算在配件里——一张订单只要一片垫片和要一整套阀组不该算同等权重的"携带配件"。
### 4. 其他类 —— 兜底选项,默认关闭
确认订单确实随货交付了某个附件,但资料/配件/耗材下所有具体细分类目(包括各大类里已有的"其他XX"兜底项,如"其他交工文件""检验合格证书综合")都覆盖不了时,才归入这里。是最后手段:能归到前三类具体细分的必须归到那里,不能图省事往"其他"里塞。
---
## 三、精分:完整细分类目清单
### 资料类12项
1. 出厂检测检验报告
2. 材质证明类
3. 说明书
4. 检验记录过程性
5. 图纸类
6. 标定校验证书
7. 质量证明书
8. 原产地证明
9. 检验合格证书综合
10. 其他交工文件
11. 营业执照
12. 型式检验报告
### 配件类25项
1. 针型阀
2. 球阀
3. 截止阀
4. 旋塞阀
5. 角阀
6. 阀组
7. 冷凝圈
8. 冷凝管
9. 冷凝弯
10. 虹吸管
11. 表弯管
12. 缓冲管缓冲弯
13. 法兰隔膜
14. 隔离器
15. 过压保护器
16. 散热器散热片
17. 铅封
18. 转换接头
19. 焊接接头短节短管
20. 卡箍抱箍
21. 紧固件
22. 活接头
23. 接线盒
24. 电缆插头
25. 变送器
### 耗材类1项
1. 垫片
### 其他类1项仅开启后生效
1. 其他(固定值,模型不允许编造具体名称)
---
## 四、和实际输出的对应关系
分类结果集中在 `types` 字段(完整输出记录还包含 `zong_pai_hao` / `status` / `has_attachment`,详见 README 的「输出格式」一节);以下示例只截取 `types` 字段,用来展示两种模式下的格式差异:
**coarse 模式**——只到大类这一级:
```json
{"types": ["资料", "配件"]}
```
**fine 模式**——精确到细分类目,格式固定为"大类:细分"
```json
{"types": ["资料:出厂检测检验报告", "配件:针型阀", "耗材:垫片"]}
```
开启"其他"后,会以 `"其他"`coarse 模式)或 `"其他:其他"`fine 模式)的形式,混在同一个 `types` 列表里输出,不单独开字段、不需要额外解析逻辑。
---
## 五、"其他"类目怎么开
默认关闭,二选一即可开启:
- `config.yaml` 里设置 `business.enable_other_category: true`
- 运行时加命令行参数 `--enable-other`
两者是"或"的关系:只要有一处开了就生效;命令行参数只能把关闭状态调成开启,不能把配置文件里已经开启的状态强制关掉。