Skip to content
HAKUKA503Public

About

本项目开发了一个 RAG 知识库自动化处理工具,采用 DeepSeek 大模型进行语义分割。利用 Python 和 FastAPI 框架,构建了一套从文件上传到知识库入库的完整流水线(读取→清洗→AI 语义分割→保存→上传 Dify),并通过多格式支持(9 种文档格式)、元数据自动标注、定时调度等设计提升了工具的实用性。

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🧹 Dify RAG 知识库自动化工具

Python License

核心功能:上传文件即自动处理 — 将原始文档放入 raw_data/ 目录(或通过 API 上传),系统自动完成读取→清洗→AI语义分割→保存本地→上传 Dify 知识库,全流程无需人工干预。

🚀 推荐使用 API 方式:一行 curl 命令上传文件即可触发完整流水线,详见 API 快速上传。

✨ 特性

  • 📤 上传即处理 — 【核心功能】通过 API 上传文件到 raw_data/ 后,自动完成读取→清洗→AI 语义分割→上传 Dify 的完整流水线,无需手动调用各步骤
  • 📄 多格式支持 — 自动识别并读取 9 种文件格式:TXT、MD、HTML、CSV、JSON(L)、PDF、DOCX、XLSX、XLS
  • 🧹 智能清洗 — 自动去除 PUA 乱码字符(PDF 数学公式常见问题)、控制字符、合并空白与空行
  • 🤖 AI 语义分割 — 先按 AI 语义切分(DeepSeek),再按字符数二次切分,段落主题精准
  • 🏷️ 语义命名 — AI 自动概括段落主题作为文件名(原文件名_语义标签.txt)
  • ☁️ Dify 集成 — 一键上传到 Dify 知识库,自动轮询等待嵌入完成,多轮重试保障可靠性
  • 🏷️ 元数据标注 — 自动分析文档内容,生成分类、部门、适用对象等元数据标签
  • ⏱️ 时间戳归档 — 每次运行自动创建独立输出目录和日志文件,历史记录不覆盖
  • 🔄 流水线调度 — 支持每日定时执行(crontab)和文件监听(watch)两种运维模式
  • ⏭️ 跳过已处理 — 基于文件哈希/标题的状态追踪,避免重复处理

📦 安装

环境要求

  • Python 3.10+
  • pip

本地安装

pip install -r requirements.txt

服务器部署

chmod +x install.sh
./install.sh

部署脚本会自动:创建 venv → 安装依赖 → 配置 .env → 设置 crontab(每天早上 7:00 运行)

🔑 配置方式

方式一:环境变量(推荐生产环境)

创建 .env 文件(基于 .env.example):

cp .env.example .env
# 编辑 .env 填入真实的 API Key
# .env
DIFY_API_BASE=http://your-dify-server:8080/v1
DATASET_ID=your-dataset-id
DIFY_API_KEY=dataset-your-key
DEEPSEEK_API_KEY=sk-your-key
DEEPSEEK_MODEL=deepseek-v4-flash

方式二:直接修改脚本(开发环境)

也可直接修改脚本顶部的配置区默认值。

⚠️ Dify API Key 必须使用数据集密钥(dataset- 前缀),应用 Key(app- 前缀)无权操作知识库。在 Dify 后台 → 知识库 → API 访问 中创建。

📤 API 上传文件即自动处理

这是核心功能 — 通过 HTTP 上传文件到 API 服务,服务端自动执行完整流水线,无需手动调用各步骤。

# 上传文件到 API,自动完成清洗→分割→上传 Dify
curl -X POST http://localhost:8001/api/v1/pipeline/upload \
  -F "file=@学生手册2025.pdf" \
  -F "chunk_size=2000"

处理流程: 文件保存到 raw_data/ → 读取内容 → 清洗 → AI 语义分割 → 保存到 cleaned/ → 逐一上传到 Dify 知识库

查询进度:

# 获取返回的 task_id 后,查询处理结果
curl http://localhost:8001/api/v1/pipeline/upload/status/up-20260601-103000-a1b2c3

完整的 API 接口文档请参见 自动化知识库API接口文档.md,包含全部 15+ 个接口的详细说明和调用示例。


🚀 快速开始

1. 准备数据

将文档放入 raw_data/ 目录。

2. 运行清洗+上传

python Dify知识库数据清洗+文件分割+自动上传.py

3. (可选)元数据标注

python 元数据标注.py -i ./cleaned_时间戳

⚙️ 命令行参数

清洗上传脚本

python Dify知识库数据清洗+文件分割+自动上传.py [参数]
参数 说明 默认值
-i, --input-dir 输入文件夹路径 ./raw_data
-o, --output-dir 输出文件夹(会自动追加时间戳) cleaned_时间戳
-p, --pattern 文件匹配模式(glob) *
--chunk-size 字符分割阈值,0 关闭分割 5000
--chunk-overlap 段落重叠字符数 500
--no-save 只上传,不保存本地 —
--no-dify 只本地清洗,不上传 —
--no-ai 禁用 AI 语义分割,回退到纯字符分割 —
--semantic-only 仅 AI 语义分割,不二次切分 —
--skip-processed 跳过已处理的文件(运维用) —
--state-dir 状态文件目录 .pipeline_state
--env-file 指定 .env 文件路径 自动查找

使用示例:

# 基本用法(AI 语义分割 + 上传)
python Dify知识库数据清洗+文件分割+自动上传.py

# 仅本地清洗不上传
python Dify知识库数据清洗+文件分割+自动上传.py --no-dify

# 禁用 AI 语义分割,纯字符分割
python Dify知识库数据清洗+文件分割+自动上传.py --no-ai

# 跳过已处理文件(定期运行用)
python Dify知识库数据清洗+文件分割+自动上传.py --skip-processed

# 自定义切分大小
python Dify知识库数据清洗+文件分割+自动上传.py --chunk-size 3000

元数据标注脚本

python 元数据标注.py -i ./cleaned_时间戳 [参数]
参数 说明 默认值
-i, --input-dir 清洗输出目录 必填
--dry-run 仅预览 AI 生成结果,不写入 Dify —
--limit 限制处理文档数(0=全部) 0
--max-retry 最大重试轮数 3
--skip-processed 跳过已标注的文件 —
--state-dir 状态文件目录 .pipeline_state

流水线调度器

python run_pipeline.py --mode cron|watch [参数]
参数 说明 默认值
--mode 运行模式:cron(定时)/ watch(监听) 必填
-i, --input-dir 输入文件夹 ./raw_data
--skip-processed 跳过已处理文件 —
--watch-delay watch 模式:检测新文件后延迟小时数 1
--watch-poll watch 模式:轮询间隔秒数 60
--dry-run 仅显示将要执行的操作 —

使用示例:

# cron 模式:完整执行一次(供 crontab 调用)
python run_pipeline.py --mode cron --skip-processed

# watch 模式:持续监听新文件
python run_pipeline.py --mode watch

# 预览将要执行的操作
python run_pipeline.py --mode cron --dry-run

🔄 处理流程

raw_data/(输入)
  │
  ├── .pdf / .docx / .txt ... → 读取 + 清洗
  │
  ▼
AI 语义分割(DeepSeek)
  ├── 多段采样(头部+中部+尾部)→ AI 识别语义边界
  ├── 各段落独立命名(AI 概括语义)
  └── 超大段落 → 字符数二次切分(_partN)
  │
  ▼
保存到 cleaned_时间戳/
  └── 原文件名_语义标签.txt(如 国家奖学金管理办法.txt)
  │
  ▼
上传到 Dify 知识库(多轮重试)
  │
  ▼
元数据标注(可选)
  └── AI 分析 → 生成标签 → 更新 Dify

📁 项目结构

├── api_server.py                            # FastAPI 接口服务(新增)
├── Dify知识库数据清洗+文件分割+自动上传.py   # 主脚本:清洗+分割+上传
├── 元数据标注.py                            # 元数据自动标注工具
├── 元数据补充.py                            # 元数据重试补充工具
├── AI云辅导员.py                            # AI 辅导员(仅 API 服务依赖)
├── run_pipeline.py                          # 流水线调度器(cron/watch)
├── install.sh                               # 服务器一键部署脚本
├── .env.example                             # 环境变量模板
├── config/
│   └── settings.json                        # 非敏感配置
├── requirements.txt                         # 依赖清单
├── README.md                                # 本文件
├── 自动化知识库API接口文档.md                 # API 接口文档
├── raw_data/                                # 输入文件夹
├── cleaned_*/                               # 输出文件夹(自动生成)
├── .pipeline_state/                         # 处理状态记录(自动生成)
│   ├── processed_files.json
│   └── metadata_processed.json
└── log_*.txt / pipeline_*.txt               # 运行日志

📋 依赖清单

依赖 用途 必需
requests HTTP 请求(上传 Dify、调用 DeepSeek) ✅
python-dotenv 从 .env 文件加载环境变量 ✅
fastapi RESTful API 框架 仅 API 服务
uvicorn ASGI 服务器 仅 API 服务
PyMuPDF PDF 文本提取 仅 PDF
python-docx Word 文档读取 仅 DOCX
openpyxl Excel (.xlsx) 读取 仅 XLSX
xlrd Excel 旧版 (.xls) 读取 仅 XLS
watchdog 文件系统监听(run_pipeline.py watch 模式) 仅 watch 模式

🖥️ 服务器运维

推荐部署目录

/opt/dify-kb/
├── .env                    # API Keys
├── .pipeline_state/        # 处理状态
├── config/settings.json
├── raw_data/               # 放入待处理文件
├── cleaned_*/              # 自动生成输出
├── run_pipeline.py
├── install.sh
└── ...

crontab 自动运行

安装脚本已自动添加,每天早上 7:00 执行:

0 7 * * * cd /opt/dify-kb && ./venv/bin/python run_pipeline.py --mode cron --skip-processed >> ./cron.log 2>&1

手动触发

# 完整执行一次
cd /opt/dify-kb
./venv/bin/python run_pipeline.py --mode cron --skip-processed

# 查看最近日志
tail -f cron.log

API 服务部署

如果后端工程师需要通过 RESTful API 调用功能,可使用 FastAPI 接口服务:

# 安装额外依赖
pip install fastapi uvicorn

# 开发模式(自动重载)
uvicorn api_server:app --reload --host 0.0.0.0 --port 8001

# 生产模式(内存紧张时 workers=1-2)
uvicorn api_server:app --host 0.0.0.0 --port 8001 --workers 2

启动后浏览器访问:

地址 说明
http://localhost:8001/docs Swagger UI(交互式在线测试)
http://localhost:8001/redoc ReDoc(文档阅读)
http://localhost:8001/api/v1/health 健康检查

详细接口说明见 自动化知识库API接口文档.md。

端口说明:默认使用 8001 端口以避免与常见服务冲突。如需修改,编辑启动命令中的 --port 参数即可。

systemd 服务(开机自启)

# 创建服务文件
sudo tee /etc/systemd/system/dify-kb-api.service << 'SERVICE'
[Unit]
Description=Dify KB API Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/dify-kb
ExecStart=/opt/dify-kb/venv/bin/uvicorn api_server:app --host 0.0.0.0 --port 8001 --workers 2
Restart=always

[Install]
WantedBy=multi-user.target
SERVICE

# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable dify-kb-api
sudo systemctl start dify-kb-api

# 查看状态
sudo systemctl status dify-kb-api

📄 许可证

MIT

About

本项目开发了一个 RAG 知识库自动化处理工具,采用 DeepSeek 大模型进行语义分割。利用 Python 和 FastAPI 框架,构建了一套从文件上传到知识库入库的完整流水线(读取→清洗→AI 语义分割→保存→上传 Dify),并通过多格式支持(9 种文档格式)、元数据自动标注、定时调度等设计提升了工具的实用性。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages