Files

261 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

2026-07-10 17:59:59 +08:00
# 代码组织规范
## 📁 目录结构规范
### 核心原则
**禁止在根目录直接放置代码文件!** 所有代码必须按功能分类放入对应目录。
---
## 📂 目录定义
### 1. 提取器 (extractors/)
```
extractors/
├── current/ # 当前使用的提取器
│ ├── fusion/ # PC融合版提取器
│ │ └── extractor_fusion_complete.py
│ └── llm/ # LLM提取器
│ └── llm_extractor_dashscope.py
├── archive/ # 归档的旧版提取器
│ └── extractor_suc5.py (等)
└── utils/ # 提取器工具模块
└── chunker.py
```
**规则**:
- 新提取器默认放入 `current/` 对应子目录
- 废弃提取器移入 `archive/`
- 通用工具放入 `utils/`
---
### 2. 文档 (docs/)
```
docs/
├── changelogs/ # 变更日志
├── reports/ # 报告文档
├── plans/ # 计划文档
├── analysis/ # 分析文档
└── guides/ # 指南文档
```
**规则**:
- 所有 `.md` 文件必须分类存放
- 根目录仅保留 `README.md` 和索引文件
---
### 3. 脚本 (scripts/)
```
scripts/
├── shell/ # Shell脚本
├── utils/ # Python工具脚本
├── extractors/ # 提取器脚本 (v7-v12系列)
└── tests/ # 测试脚本
```
**规则**:
- `.sh` 文件放入 `shell/`
- 工具类脚本放入 `utils/`
- 版本化提取器放入 `extractors/`
---
### 4. 源代码 (src/)
```
src/
├── rag/
│ ├── extractors/ # RAG集成提取器
│ ├── advanced/ # 高级功能
│ └── agentic/ # Agent功能
├── llm/ # LLM模块
├── memory/ # 记忆模块
└── db/ # 数据库模块
```
**规则**:
- 按功能模块组织
- 保持现有 `src/rag/extractors/` 结构
---
### 5. 数据 (data/)
```
data/
├── rule_bases/ # 规则库
├── samples/ # 样本数据
└── output/ # 输出数据
```
**规则**:
- 规则库文件放入 `rule_bases/`
- 不要混放代码和数据
---
### 6. 测试 (tests/)
```
tests/
├── unit/ # 单元测试
├── integration/ # 集成测试
└── fixtures/ # 测试数据
```
**规则**:
- 测试文件统一放此处
- 不要分散在根目录
---
### 7. 配置 (config/)
```
config/
├── nginx.conf
├── prometheus.yml
└── settings.yaml
```
**规则**:
- 配置文件集中管理
- 环境配置使用 `.env` 或 `config/`
---
## 🚫 禁止事项
### 根目录禁止放置
- ❌ 提取器文件 (`extractor_*.py`)
- ❌ 测试文件 (`test_*.py`)
- ❌ Shell脚本 (`*.sh`)
- ❌ 文档文件 (`*.md`,除README外)
- ❌ 工具脚本 (`*.py` 工具)
### 根目录允许保留
- ✅ `README.md` - 项目说明
- ✅ `LICENSE` - 许可证
- ✅ `.gitignore` - Git忽略配置
- ✅ `requirements.txt` - 依赖文件
- ✅ `pyproject.toml` - 项目配置
- ✅ `DOCS_INDEX.md` - 文档索引
- ✅ `EXTRACTORS_INDEX.md` - 提取器索引
- ✅ 核心入口文件(软链接)
---
## ✅ 新代码放置流程
### 步骤1:确定代码类型
| 代码类型 | 目标目录 |
|---------|---------|
| 新提取器 | `extractors/current/{fusion,llm,utils}/` |
| 文档 | `docs/{changelogs,reports,plans,analysis,guides}/` |
| Shell脚本 | `scripts/shell/` |
| Python工具 | `scripts/utils/` |
| 测试 | `tests/` |
| RAG提取器 | `src/rag/extractors/` |
| 规则库 | `data/rule_bases/` |
### 步骤2:创建文件
```bash
# 示例:创建新提取器
touch extractors/current/fusion/extractor_new_v1.py
# 示例:创建新文档
touch docs/guides/NEW_FEATURE_GUIDE.md
# 示例:创建新工具
touch scripts/utils/new_utility.py
```
### 步骤3:更新索引
- 更新 `DOCS_INDEX.md`(如添加文档)
- 更新 `EXTRACTORS_INDEX.md`(如添加提取器)
### 步骤4:创建软链接(可选)
```bash
# 如果需要在根目录快速访问
ln -s extractors/current/fusion/extractor_new_v1.py extractor_new.py
```
---
## 🔍 代码审查检查项
提交代码前检查:
- [ ] 代码文件不在根目录
- [ ] 文件放在正确的功能目录
- [ ] 已更新相关索引文档
- [ ] 没有重复文件
- [ ] 导入路径正确
---
## 📋 目录索引维护
### 必须维护的索引文件
1. `DOCS_INDEX.md` - 文档索引
2. `EXTRACTORS_INDEX.md` - 提取器索引
### 更新时机
- 新增/删除文档时更新 `DOCS_INDEX.md`
- 新增/归档提取器时更新 `EXTRACTORS_INDEX.md`
---
## 📝 示例
### 示例1:添加新提取器
```bash
# 1. 创建文件
touch extractors/current/fusion/extractor_v13.py
# 2. 编辑代码
# ... 实现提取器 ...
# 3. 更新索引
echo "- extractor_v13.py - v13提取器" >> EXTRACTORS_INDEX.md
# 4. 可选:创建软链接
ln -s extractors/current/fusion/extractor_v13.py extractor_v13.py
```
### 示例2:添加新文档
```bash
# 1. 创建文件
touch docs/guides/V13_USAGE.md
# 2. 编辑文档
# ... 编写文档 ...
# 3. 更新索引
echo "- V13_USAGE.md" >> DOCS_INDEX.md
```
---
## ⚠️ 遗留文件处理
根目录当前遗留文件(待处理):
- `add_more_rules.py` → `scripts/utils/`
- `entity_disambiguation_prompt.py` → `src/rag/` 或归档
- `entity_disambiguation_system.py` → **保留**(核心功能)
- `extract_complete_sentence.py` → `extractors/archive/`
- `extractor_pc_based.py` → **保留**(有依赖)
- `prompt_v2_revised.py` → `scripts/utils/` 或归档
- `quick_validate.py` → `scripts/utils/`
- `rule_base_complete.py` → `data/rule_bases/`
- `rule_base_loader.py` → `data/rule_bases/`
---
*规范制定时间:2026-04-12*
*维护者:xialab的幸运星*