222 lines
7.2 KiB
Markdown
222 lines
7.2 KiB
Markdown
|
|
# 产品分类模块(CategorizeLabel)
|
|||
|
|
|
|||
|
|
[](https://www.python.org/downloads/)
|
|||
|
|
[](tests/)
|
|||
|
|
[](https://www.python.org/dev/peps/pep-0008/)
|
|||
|
|
|
|||
|
|
基于通义千问LLM的产品自动分类工具,采用整洁架构设计,支持批量处理。
|
|||
|
|
|
|||
|
|
## ✨ 特性
|
|||
|
|
|
|||
|
|
- 🚀 **批量处理**:使用通义千问Batch API,费用仅为实时调用的50%
|
|||
|
|
- 🏗️ **整洁架构**:遵循Clean Architecture和SOLID原则
|
|||
|
|
- ✅ **完整测试**:77个单元测试,100%通过率
|
|||
|
|
- 📦 **易于使用**:简单的命令行接口
|
|||
|
|
- 📊 **详细日志**:完整的运行日志记录
|
|||
|
|
- 📈 **实时进度**:实时显示任务处理进度和状态(新增)
|
|||
|
|
- 🔧 **可扩展**:基于接口编程,易于扩展和维护
|
|||
|
|
|
|||
|
|
## 📋 快速开始
|
|||
|
|
|
|||
|
|
### 1. 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用Poetry(推荐)
|
|||
|
|
poetry install
|
|||
|
|
|
|||
|
|
# 或使用pip
|
|||
|
|
pip install -e .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 配置API Key
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Windows PowerShell
|
|||
|
|
$env:DASHSCOPE_API_KEY="your-api-key-here"
|
|||
|
|
|
|||
|
|
# Linux/Mac
|
|||
|
|
export DASHSCOPE_API_KEY="your-api-key-here"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 编辑配置文件
|
|||
|
|
|
|||
|
|
编辑 `config/config.yaml`,设置你的参数:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
files:
|
|||
|
|
input_file: "input/product_list.xlsx"
|
|||
|
|
category_file: "config/product_type.jsonl"
|
|||
|
|
output_file: "output/classification_result.jsonl"
|
|||
|
|
|
|||
|
|
api:
|
|||
|
|
model: "qwen-flash"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 运行分类
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用默认配置文件
|
|||
|
|
python -m src.main
|
|||
|
|
|
|||
|
|
# 或指定自定义配置
|
|||
|
|
python -m src.main --config config/my_config.yaml
|
|||
|
|
|
|||
|
|
# 或使用命令行参数覆盖配置
|
|||
|
|
python -m src.main --model qwen-plus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 监控任务进度 ⚡️新增
|
|||
|
|
|
|||
|
|
程序运行时会实时显示任务处理进度:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
2025-10-15 14:30:00 - INFO - 等待Batch任务完成(系统将定期查询并输出进度信息)...
|
|||
|
|
2025-10-15 14:30:00 - INFO - 开始轮询Batch任务状态(轮询间隔: 60秒)
|
|||
|
|
2025-10-15 14:30:05 - INFO - [轮询 #1] 任务状态: in_progress | 已等待: 5秒 | 剩余时间: 23小时59分55秒
|
|||
|
|
2025-10-15 14:30:05 - INFO - ↳ 处理进度: 45/100 (45.0%) | 失败: 0
|
|||
|
|
2025-10-15 14:31:05 - INFO - [轮询 #2] 任务状态: in_progress | 已等待: 1分5秒 | 剩余时间: 23小时58分55秒
|
|||
|
|
2025-10-15 14:31:05 - INFO - ↳ 处理进度: 78/100 (78.0%) | 失败: 2
|
|||
|
|
2025-10-15 14:32:05 - INFO - [轮询 #3] 任务状态: completed | 已等待: 2分5秒
|
|||
|
|
2025-10-15 14:32:05 - INFO - 任务完成,开始下载结果
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
实时日志可以帮助您:
|
|||
|
|
- ✅ 了解任务是否正在正常运行
|
|||
|
|
- ✅ 预估任务完成时间
|
|||
|
|
- ✅ 及时发现并处理错误
|
|||
|
|
|
|||
|
|
详细说明请参考 [进度日志功能说明](docs/进度日志功能说明.md)
|
|||
|
|
|
|||
|
|
## 📚 文档
|
|||
|
|
|
|||
|
|
- [使用说明](docs/使用说明.md) - 详细的使用指南
|
|||
|
|
- [进度日志功能](docs/进度日志功能说明.md) - 实时进度反馈功能说明(新增)
|
|||
|
|
- [测试报告](docs/测试报告.md) - 完整的测试覆盖报告
|
|||
|
|
- [架构设计](docs/project_docs/产品分类模块架构设计.md) - 详细的架构设计文档
|
|||
|
|
- [功能设计](docs/project_docs/产品分类模块功能设计.md) - 功能需求文档
|
|||
|
|
- [API文档](docs/API/Tongyi-API.md) - 通义千问API使用教程
|
|||
|
|
|
|||
|
|
## 🏗️ 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
CategorizeLabel/
|
|||
|
|
├── src/ # 源代码
|
|||
|
|
│ ├── core/ # 核心实现层
|
|||
|
|
│ │ ├── file_handler.py # 文件处理
|
|||
|
|
│ │ ├── batch_client.py # Batch API客户端
|
|||
|
|
│ │ └── prompt_builder.py # Prompt构建
|
|||
|
|
│ ├── models.py # 数据模型
|
|||
|
|
│ ├── interfaces.py # 抽象接口
|
|||
|
|
│ └── main.py # 主程序入口
|
|||
|
|
├── tests/ # 单元测试(77个测试)
|
|||
|
|
│ ├── fixtures/ # 测试数据
|
|||
|
|
│ ├── test_models.py # 22个测试
|
|||
|
|
│ ├── test_file_handler.py # 20个测试
|
|||
|
|
│ ├── test_batch_client.py # 15个测试
|
|||
|
|
│ ├── test_prompt_builder.py # 11个测试
|
|||
|
|
│ └── test_main.py # 9个测试
|
|||
|
|
├── config/ # 配置文件
|
|||
|
|
├── input/ # 输入文件目录
|
|||
|
|
├── output/ # 输出文件目录
|
|||
|
|
├── logs/ # 日志目录
|
|||
|
|
├── docs/ # 文档
|
|||
|
|
└── pyproject.toml # 项目配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 运行测试
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 运行所有测试
|
|||
|
|
pytest tests/ -v
|
|||
|
|
|
|||
|
|
# 运行特定测试
|
|||
|
|
pytest tests/test_models.py -v
|
|||
|
|
|
|||
|
|
# 查看测试覆盖率
|
|||
|
|
pytest tests/ --cov=src --cov-report=html
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**测试结果:77/77 测试通过 ✨**
|
|||
|
|
|
|||
|
|
## 🎯 设计原则
|
|||
|
|
|
|||
|
|
本项目严格遵循以下设计原则:
|
|||
|
|
|
|||
|
|
- **整洁架构(Clean Architecture)**:依赖倒置,核心业务逻辑不依赖外部实现
|
|||
|
|
- **SOLID原则**:单一职责、开闭原则、里氏替换、接口隔离、依赖倒置
|
|||
|
|
- **测试驱动开发(TDD)**:先写测试,再实现功能
|
|||
|
|
- **依赖注入**:通过构造函数注入依赖,便于测试和替换
|
|||
|
|
|
|||
|
|
## 📊 架构概览
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────┐
|
|||
|
|
│ main.py (组合根) │
|
|||
|
|
│ 初始化所有依赖并编排业务流程 │
|
|||
|
|
└─────────────────────────────────────────────┘
|
|||
|
|
↓
|
|||
|
|
┌───────────────┴───────────────┐
|
|||
|
|
│ │
|
|||
|
|
↓ ↓
|
|||
|
|
┌─────────┐ ┌─────────┐
|
|||
|
|
│ core/ │ ←─ interfaces ─→ │ models │
|
|||
|
|
└─────────┘ └─────────┘
|
|||
|
|
│
|
|||
|
|
├── FileHandler (文件处理)
|
|||
|
|
├── BatchClient (API调用)
|
|||
|
|
└── PromptBuilder (Prompt构建)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 技术栈
|
|||
|
|
|
|||
|
|
- **Python 3.9+**
|
|||
|
|
- **Pydantic V2**:数据验证和模型
|
|||
|
|
- **pandas**:Excel文件处理
|
|||
|
|
- **OpenAI SDK**:通义千问API调用
|
|||
|
|
- **pytest**:单元测试框架
|
|||
|
|
- **Poetry**:依赖管理
|
|||
|
|
|
|||
|
|
## 📝 输入输出格式
|
|||
|
|
|
|||
|
|
### 输入:产品列表 (Excel)
|
|||
|
|
```
|
|||
|
|
产品编号 | 产品名称 | 景区名称
|
|||
|
|
P001 | 黄山风景区门票 | 黄山
|
|||
|
|
P002 | 黄山温泉酒店 | 黄山
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 输入:类别配置 (JSONL)
|
|||
|
|
```json
|
|||
|
|
{"category":"门票","type":"自然类","sub_type":"自然风光"}
|
|||
|
|
{"category":"住宿","type":"商务酒店","sub_type":""}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 输出:分类结果 (JSONL)
|
|||
|
|
```json
|
|||
|
|
{"product_id":"P001","category":"门票","type":"自然类","sub_type":"自然风光"}
|
|||
|
|
{"product_id":"P002","category":"住宿","type":"商务酒店","sub_type":""}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 💡 使用场景
|
|||
|
|
|
|||
|
|
- ✅ 旅游产品自动分类
|
|||
|
|
- ✅ 电商商品分类
|
|||
|
|
- ✅ 内容标签化
|
|||
|
|
- ✅ 大规模数据标注
|
|||
|
|
|
|||
|
|
## 🤝 贡献
|
|||
|
|
|
|||
|
|
欢迎提交Issue和Pull Request!
|
|||
|
|
|
|||
|
|
## 📄 许可证
|
|||
|
|
|
|||
|
|
请遵守通义千问API的使用协议。
|
|||
|
|
|
|||
|
|
## 👥 开发团队
|
|||
|
|
|
|||
|
|
采用AI辅助开发,遵循专业的软件工程实践。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**项目状态**:✅ 开发完成,所有测试通过,可用于生产环境
|