ragjson 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.
@@ -0,0 +1,12 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ data/
@@ -0,0 +1 @@
1
+ 3.12
ragjson-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,259 @@
1
+ Metadata-Version: 2.4
2
+ Name: ragjson
3
+ Version: 0.1.0
4
+ Summary: 遵循RAG-Storage-Spec的知识库构建工具
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: langchain-text-splitters>=0.3
7
+ Requires-Dist: openai>=1.0
8
+ Provides-Extra: all
9
+ Requires-Dist: markitdown[all]; extra == 'all'
10
+ Requires-Dist: mineru-vl-utils; extra == 'all'
11
+ Provides-Extra: markitdown
12
+ Requires-Dist: markitdown[all]; extra == 'markitdown'
13
+ Provides-Extra: mineru
14
+ Requires-Dist: mineru-vl-utils; extra == 'mineru'
15
+ Description-Content-Type: text/markdown
16
+
17
+ # ragjson
18
+
19
+ 遵循 [RAG-Storage-Spec](docs/RAG-Storage-Spec.md) 规范的基于文件系统的 RAG 知识库构建工具。
20
+
21
+ 将文档解析为 Markdown、切片、生成向量嵌入,并以 `.ragjson` 格式存储到文件系统中 —— 零外部数据库依赖。
22
+
23
+ ## 特性
24
+
25
+ - **零外部依赖**:仅依赖操作系统文件系统,无需向量数据库或中间件
26
+ - **文档解析**:支持 markitdown(默认)和 MinerU 两种解析引擎
27
+ - **文本切片**:支持 RecursiveCharacterTextSplitter(默认)和 MarkdownTextSplitter
28
+ - **Embedding**:兼容 OpenAI API 的向量生成
29
+ - **原子写入**:write-to-tmp + rename 保证写入安全性
30
+ - **增量更新**:基于 MD5 对比,仅处理变更文件
31
+ - **目录级并发**:不同目录可并行处理,目录内 flock 互斥
32
+
33
+ ## 安装
34
+
35
+ ```bash
36
+ # 全局安装为独立命令(推荐,无需 venv)
37
+ uv tool install ragjson[all]
38
+ ```
39
+
40
+ 或在项目虚拟环境中使用:
41
+
42
+ ```bash
43
+ uv venv
44
+ source .venv/bin/activate
45
+ uv pip install ragjson[all]
46
+ ```
47
+
48
+ 本地开发模式(从源码安装):
49
+
50
+ ```bash
51
+ uv venv
52
+ uv pip install -e ".[all]"
53
+ source .venv/bin/activate
54
+ ```
55
+
56
+ 可选的 extras 组合:
57
+
58
+ | extras | 说明 |
59
+ |--------|------|
60
+ | `ragjson` | 基础安装(切片 + Embedding) |
61
+ | `ragjson[markitdown]` | 增加 markitdown 文档解析 |
62
+ | `ragjson[mineru]` | 增加 MinerU 文档解析(轻量 HTTP 客户端) |
63
+ | `ragjson[all]` | 全部依赖 |
64
+
65
+ ## 配置
66
+
67
+ 在用户 home 目录下创建 `~/.rag.config` 文件(JSON 格式):
68
+
69
+ ```json
70
+ {
71
+ "embedding_model": {
72
+ "base_url": "https://api.example.com/v1",
73
+ "api_key": "sk-your-token",
74
+ "model_name": "text-embedding-3-small",
75
+ "dimension": 1536
76
+ },
77
+ "mineru": {
78
+ "backend": "http-client",
79
+ "server_url": "https://your-mineru-server:8443",
80
+ "image_dir": "/tmp/mineru_output",
81
+ "image_url_prefix": "https://yoursite.com"
82
+ },
83
+ "splitter": {
84
+ "chunk_size": 1000,
85
+ "chunk_overlap": 200
86
+ }
87
+ }
88
+ ```
89
+
90
+ | 配置项 | 说明 |
91
+ |--------|------|
92
+ | `embedding_model.base_url` | OpenAI 兼容 API 的地址 |
93
+ | `embedding_model.api_key` | API 密钥 |
94
+ | `embedding_model.model_name` | Embedding 模型名称 |
95
+ | `embedding_model.dimension` | 向量维度 |
96
+ | `mineru.*` | MinerU 解析服务配置(仅 `--parser mineru` 时需要) |
97
+ | `splitter.chunk_size` | 切片最大字符数 |
98
+ | `splitter.chunk_overlap` | 切片重叠字符数 |
99
+
100
+ ## 使用方法
101
+
102
+ ### 初始化目录
103
+
104
+ 在目标目录下创建 `.rag/` 和 `.rag/tmp/` 控制目录:
105
+
106
+ ```bash
107
+ rag init ./docs
108
+ ```
109
+
110
+ ### 查看状态
111
+
112
+ ```bash
113
+ # 当前目录
114
+ rag status
115
+
116
+ # 指定目录
117
+ rag status ./docs
118
+
119
+ # 递归扫描子目录
120
+ rag status ./docs -r
121
+ ```
122
+
123
+ 输出说明:
124
+ - 🟢 **EMBEDDED** — 已完成嵌入且 MD5 一致,无需更新
125
+ - 🔴 **NEW / CHANGED** — 新文件或 MD5 已变更,需要更新
126
+ - 🟡 **DELETED / SLICING / EMBEDDING** — 中间状态或已标记删除
127
+
128
+ ### 增量更新
129
+
130
+ 仅处理 MD5 发生变化的文件,执行完整流水线:**解析 → 切片 → 嵌入 → 写入**
131
+
132
+ ```bash
133
+ # 使用默认解析器 (markitdown) 和默认切片器 (recursive)
134
+ rag update ./docs
135
+
136
+ # 递归更新子目录
137
+ rag update ./docs -r
138
+
139
+ # 使用 MinerU 解析器
140
+ rag update ./docs --parser mineru
141
+
142
+ # 使用 Markdown 切片器
143
+ rag update ./docs --splitter markdown
144
+
145
+ # 指定并发数
146
+ rag update ./docs -r -j 4
147
+ ```
148
+
149
+ 参数说明:
150
+
151
+ | 参数 | 说明 | 默认值 |
152
+ |------|------|--------|
153
+ | `-r` | 递归扫描子目录 | 否 |
154
+ | `-j N` | 并行处理的目录数 | CPU 核心数 |
155
+ | `--splitter` | 切片器类型:`recursive` / `markdown` | `recursive` |
156
+ | `--parser` | 解析器类型:`markitdown` / `mineru` | `markitdown` |
157
+
158
+ ### 清理临时文件
159
+
160
+ 清除崩溃后残留的 `.tmp` 文件:
161
+
162
+ ```bash
163
+ rag clean ./docs
164
+ rag clean ./docs -r # 递归清理
165
+ ```
166
+
167
+ ### 清除已删除记录
168
+
169
+ 物理删除状态为 `DELETED` 的 `.ragjson` 文件:
170
+
171
+ ```bash
172
+ rag cleanup ./docs
173
+ rag cleanup ./docs -r # 递归清除
174
+ ```
175
+
176
+ ### 导出
177
+
178
+ 将所有 `.ragjson` 文件打包为 tar.gz 归档:
179
+
180
+ ```bash
181
+ rag export ./docs ./backup.tar.gz
182
+ ```
183
+
184
+ ## 目录结构
185
+
186
+ 执行 `rag init` 和 `rag update` 后的目录结构示例:
187
+
188
+ ```
189
+ docs/
190
+ ├── .rag/ # 控制目录
191
+ │ ├── tmp/ # 原子写入暂存区
192
+ │ ├── readme.md.ragjson # readme.md 的元数据
193
+ │ └── manual.pdf.ragjson # manual.pdf 的元数据
194
+ ├── readme.md # 源文件
195
+ └── manual.pdf # 源文件
196
+ ```
197
+
198
+ ## `.ragjson` 文件格式
199
+
200
+ ```json
201
+ {
202
+ "ragjson_version": "2.0",
203
+ "processing": {
204
+ "status": "EMBEDDED",
205
+ "create_dt": "2026-07-14T10:00:00Z",
206
+ "modify_dt": "2026-07-14T12:00:00Z"
207
+ },
208
+ "source": {
209
+ "md5_hash": "d41d8cd98f00b204e9800998ecf8427e",
210
+ "size_bytes": 2048,
211
+ "mtime": 1710508800
212
+ },
213
+ "embedding": {
214
+ "model_name": "text-embedding-3-small",
215
+ "dimension": 1536
216
+ },
217
+ "slices": [
218
+ {
219
+ "index": 0,
220
+ "content": "切片完整原文内容...",
221
+ "vector_base64": "P0A/0D9A/0D9A/0D9A=="
222
+ }
223
+ ]
224
+ }
225
+ ```
226
+
227
+ ## 支持的文件类型
228
+
229
+ `.pdf` `.docx` `.doc` `.pptx` `.ppt` `.xlsx` `.xls` `.md` `.txt` `.html`
230
+
231
+ ## 状态流转
232
+
233
+ ```
234
+ INITIAL → SLICING → SLICED → EMBEDDING → EMBEDDED
235
+
236
+ (MD5 变更) ←────────────────── INITIAL (回退)
237
+
238
+ 任意状态 → DELETED → (cleanup 物理删除)
239
+ ```
240
+
241
+ ## 开发
242
+
243
+ ```bash
244
+ # 克隆项目
245
+ git clone <repo>
246
+ cd knowledge-base-processor
247
+
248
+ # 创建虚拟环境并安装开发版本
249
+ uv venv
250
+ uv pip install -e ".[all]"
251
+ source .venv/bin/activate
252
+
253
+ # 运行 CLI
254
+ rag --help
255
+ ```
256
+
257
+ ## 许可证
258
+
259
+ MIT
@@ -0,0 +1,243 @@
1
+ # ragjson
2
+
3
+ 遵循 [RAG-Storage-Spec](docs/RAG-Storage-Spec.md) 规范的基于文件系统的 RAG 知识库构建工具。
4
+
5
+ 将文档解析为 Markdown、切片、生成向量嵌入,并以 `.ragjson` 格式存储到文件系统中 —— 零外部数据库依赖。
6
+
7
+ ## 特性
8
+
9
+ - **零外部依赖**:仅依赖操作系统文件系统,无需向量数据库或中间件
10
+ - **文档解析**:支持 markitdown(默认)和 MinerU 两种解析引擎
11
+ - **文本切片**:支持 RecursiveCharacterTextSplitter(默认)和 MarkdownTextSplitter
12
+ - **Embedding**:兼容 OpenAI API 的向量生成
13
+ - **原子写入**:write-to-tmp + rename 保证写入安全性
14
+ - **增量更新**:基于 MD5 对比,仅处理变更文件
15
+ - **目录级并发**:不同目录可并行处理,目录内 flock 互斥
16
+
17
+ ## 安装
18
+
19
+ ```bash
20
+ # 全局安装为独立命令(推荐,无需 venv)
21
+ uv tool install ragjson[all]
22
+ ```
23
+
24
+ 或在项目虚拟环境中使用:
25
+
26
+ ```bash
27
+ uv venv
28
+ source .venv/bin/activate
29
+ uv pip install ragjson[all]
30
+ ```
31
+
32
+ 本地开发模式(从源码安装):
33
+
34
+ ```bash
35
+ uv venv
36
+ uv pip install -e ".[all]"
37
+ source .venv/bin/activate
38
+ ```
39
+
40
+ 可选的 extras 组合:
41
+
42
+ | extras | 说明 |
43
+ |--------|------|
44
+ | `ragjson` | 基础安装(切片 + Embedding) |
45
+ | `ragjson[markitdown]` | 增加 markitdown 文档解析 |
46
+ | `ragjson[mineru]` | 增加 MinerU 文档解析(轻量 HTTP 客户端) |
47
+ | `ragjson[all]` | 全部依赖 |
48
+
49
+ ## 配置
50
+
51
+ 在用户 home 目录下创建 `~/.rag.config` 文件(JSON 格式):
52
+
53
+ ```json
54
+ {
55
+ "embedding_model": {
56
+ "base_url": "https://api.example.com/v1",
57
+ "api_key": "sk-your-token",
58
+ "model_name": "text-embedding-3-small",
59
+ "dimension": 1536
60
+ },
61
+ "mineru": {
62
+ "backend": "http-client",
63
+ "server_url": "https://your-mineru-server:8443",
64
+ "image_dir": "/tmp/mineru_output",
65
+ "image_url_prefix": "https://yoursite.com"
66
+ },
67
+ "splitter": {
68
+ "chunk_size": 1000,
69
+ "chunk_overlap": 200
70
+ }
71
+ }
72
+ ```
73
+
74
+ | 配置项 | 说明 |
75
+ |--------|------|
76
+ | `embedding_model.base_url` | OpenAI 兼容 API 的地址 |
77
+ | `embedding_model.api_key` | API 密钥 |
78
+ | `embedding_model.model_name` | Embedding 模型名称 |
79
+ | `embedding_model.dimension` | 向量维度 |
80
+ | `mineru.*` | MinerU 解析服务配置(仅 `--parser mineru` 时需要) |
81
+ | `splitter.chunk_size` | 切片最大字符数 |
82
+ | `splitter.chunk_overlap` | 切片重叠字符数 |
83
+
84
+ ## 使用方法
85
+
86
+ ### 初始化目录
87
+
88
+ 在目标目录下创建 `.rag/` 和 `.rag/tmp/` 控制目录:
89
+
90
+ ```bash
91
+ rag init ./docs
92
+ ```
93
+
94
+ ### 查看状态
95
+
96
+ ```bash
97
+ # 当前目录
98
+ rag status
99
+
100
+ # 指定目录
101
+ rag status ./docs
102
+
103
+ # 递归扫描子目录
104
+ rag status ./docs -r
105
+ ```
106
+
107
+ 输出说明:
108
+ - 🟢 **EMBEDDED** — 已完成嵌入且 MD5 一致,无需更新
109
+ - 🔴 **NEW / CHANGED** — 新文件或 MD5 已变更,需要更新
110
+ - 🟡 **DELETED / SLICING / EMBEDDING** — 中间状态或已标记删除
111
+
112
+ ### 增量更新
113
+
114
+ 仅处理 MD5 发生变化的文件,执行完整流水线:**解析 → 切片 → 嵌入 → 写入**
115
+
116
+ ```bash
117
+ # 使用默认解析器 (markitdown) 和默认切片器 (recursive)
118
+ rag update ./docs
119
+
120
+ # 递归更新子目录
121
+ rag update ./docs -r
122
+
123
+ # 使用 MinerU 解析器
124
+ rag update ./docs --parser mineru
125
+
126
+ # 使用 Markdown 切片器
127
+ rag update ./docs --splitter markdown
128
+
129
+ # 指定并发数
130
+ rag update ./docs -r -j 4
131
+ ```
132
+
133
+ 参数说明:
134
+
135
+ | 参数 | 说明 | 默认值 |
136
+ |------|------|--------|
137
+ | `-r` | 递归扫描子目录 | 否 |
138
+ | `-j N` | 并行处理的目录数 | CPU 核心数 |
139
+ | `--splitter` | 切片器类型:`recursive` / `markdown` | `recursive` |
140
+ | `--parser` | 解析器类型:`markitdown` / `mineru` | `markitdown` |
141
+
142
+ ### 清理临时文件
143
+
144
+ 清除崩溃后残留的 `.tmp` 文件:
145
+
146
+ ```bash
147
+ rag clean ./docs
148
+ rag clean ./docs -r # 递归清理
149
+ ```
150
+
151
+ ### 清除已删除记录
152
+
153
+ 物理删除状态为 `DELETED` 的 `.ragjson` 文件:
154
+
155
+ ```bash
156
+ rag cleanup ./docs
157
+ rag cleanup ./docs -r # 递归清除
158
+ ```
159
+
160
+ ### 导出
161
+
162
+ 将所有 `.ragjson` 文件打包为 tar.gz 归档:
163
+
164
+ ```bash
165
+ rag export ./docs ./backup.tar.gz
166
+ ```
167
+
168
+ ## 目录结构
169
+
170
+ 执行 `rag init` 和 `rag update` 后的目录结构示例:
171
+
172
+ ```
173
+ docs/
174
+ ├── .rag/ # 控制目录
175
+ │ ├── tmp/ # 原子写入暂存区
176
+ │ ├── readme.md.ragjson # readme.md 的元数据
177
+ │ └── manual.pdf.ragjson # manual.pdf 的元数据
178
+ ├── readme.md # 源文件
179
+ └── manual.pdf # 源文件
180
+ ```
181
+
182
+ ## `.ragjson` 文件格式
183
+
184
+ ```json
185
+ {
186
+ "ragjson_version": "2.0",
187
+ "processing": {
188
+ "status": "EMBEDDED",
189
+ "create_dt": "2026-07-14T10:00:00Z",
190
+ "modify_dt": "2026-07-14T12:00:00Z"
191
+ },
192
+ "source": {
193
+ "md5_hash": "d41d8cd98f00b204e9800998ecf8427e",
194
+ "size_bytes": 2048,
195
+ "mtime": 1710508800
196
+ },
197
+ "embedding": {
198
+ "model_name": "text-embedding-3-small",
199
+ "dimension": 1536
200
+ },
201
+ "slices": [
202
+ {
203
+ "index": 0,
204
+ "content": "切片完整原文内容...",
205
+ "vector_base64": "P0A/0D9A/0D9A/0D9A=="
206
+ }
207
+ ]
208
+ }
209
+ ```
210
+
211
+ ## 支持的文件类型
212
+
213
+ `.pdf` `.docx` `.doc` `.pptx` `.ppt` `.xlsx` `.xls` `.md` `.txt` `.html`
214
+
215
+ ## 状态流转
216
+
217
+ ```
218
+ INITIAL → SLICING → SLICED → EMBEDDING → EMBEDDED
219
+
220
+ (MD5 变更) ←────────────────── INITIAL (回退)
221
+
222
+ 任意状态 → DELETED → (cleanup 物理删除)
223
+ ```
224
+
225
+ ## 开发
226
+
227
+ ```bash
228
+ # 克隆项目
229
+ git clone <repo>
230
+ cd knowledge-base-processor
231
+
232
+ # 创建虚拟环境并安装开发版本
233
+ uv venv
234
+ uv pip install -e ".[all]"
235
+ source .venv/bin/activate
236
+
237
+ # 运行 CLI
238
+ rag --help
239
+ ```
240
+
241
+ ## 许可证
242
+
243
+ MIT