docs: 更新文档记录多格式支持特性

This commit is contained in:
2026-07-10 14:27:11 +08:00
parent b8afc9043d
commit eda080bc05
2 changed files with 29 additions and 8 deletions
+25 -8
View File
@@ -31,12 +31,19 @@ uv run python scripts/ingest_obsidian.py
## 架构 ## 架构
``` ```
core/ # 核心逻辑(不依赖 server/cli ├── core/ # 核心逻辑(不依赖 server/cli
├── config.py # YAML → dataclass, load_dotenv() 加载 .env ├── config.py # YAML → dataclass, load_dotenv() 加载 .env
├── db.py # VectorDB: 线程安全的 ChromaDB 封装 ├── db.py # VectorDB: 线程安全的 ChromaDB 封装
├── embedder.py # 策略模式: LocalEmbedder / OpenAIEmbedder / DashscopeEmbedder ├── embedder.py # 策略模式: LocalEmbedder / OpenAIEmbedder / DashscopeEmbedder
├── ingest.py # MarkdownSplitter(混合分块) + DocumentIngestor(分批嵌入) ├── ingest.py # DocumentIngestor: 按扩展名自动选择 Splitter
── search.py # Searcher: 语义检索 + 源文件管理 │ ├── search.py # Searcher: 语义检索 + 源文件管理
│ └── splitters/ # 文档分块器包
│ ├── base.py # Splitter(Protocol) + BaseTextSplitter(ABC)
│ ├── markdown.py # MarkdownSplitter: 标题+段落混合分块
│ ├── text.py # TextSplitter: 纯文本段落切分
│ ├── pdf.py # PDFSplitter: pymupdf 提取文字
│ ├── html.py # HTMLSplitter: bs4 去标签
│ └── registry.py # 扩展名 → Splitter 自动选择
server/ # FastAPI HTTP 层 server/ # FastAPI HTTP 层
├── app.py # Depends(get_state) 依赖注入, 速率限制中间件 ├── app.py # Depends(get_state) 依赖注入, 速率限制中间件
@@ -46,7 +53,9 @@ server/ # FastAPI HTTP 层
cli/main.py # Typer CLI5 个命令 + --config 选项 cli/main.py # Typer CLI5 个命令 + --config 选项
``` ```
**数据流**: MD 文件 → `MarkdownSplitter.split()``batch_embed()``ChromaDB collection.add()``Searcher.search()` **数据流**: 文件 → `get_splitter(path)` 自动选择 → `Splitter.split()``batch_embed()``ChromaDB collection.add()``Searcher.search()`
**支持的格式**: `.md` / `.txt` / `.pdf` / `.html` — 安装可选依赖: `uv sync --extra all`
**依赖方向**: `config``db``embedder``ingest`/`search``server`/`cli` **依赖方向**: `config``db``embedder``ingest`/`search``server`/`cli`
@@ -111,10 +120,18 @@ cli/main.py # Typer CLI5 个命令 + --config 选项
| 集合名 | 来源 | 文件数 | chunks | 说明 | | 集合名 | 来源 | 文件数 | chunks | 说明 |
|--------|------|--------|--------|------| |--------|------|--------|--------|------|
| `novel_taohou` | `D:\Code\doing_exercises\exercise\Novel\我有太后罩着,你们有什么\原有章节剧情` | 220 | 670 | 小说章节(GPU bge-small-v1.5 |
| `obsidian_blog` | `D:\Code\Obsidian` | 51 | 3,611 | 博客笔记(GPU bge-small-v1.5 | | `obsidian_blog` | `D:\Code\Obsidian` | 51 | 3,611 | 博客笔记(GPU bge-small-v1.5 |
| `default` | 测试文件 | 2 | ~30 | test-guide.md + stdin-doc.md | | `default` | 测试文件 | 2 | ~30 | test-guide.md + stdin-doc.md |
搜索时务必用 `-C obsidian_blog` 指定博客集合,否则只会搜到 default 中的测试数据。 搜索时务必用 `-C` 指定集合,否则只会搜到 default 中的测试数据。
**小说搜索示例**
```bash
uv run md-vector-db search "张莽和孙太后的关系" -k 3 -C novel_taohou
uv run md-vector-db search "抄家事件" -k 5 -C novel_taohou
uv run md-vector-db search "文谦变法" -k 3 -C novel_taohou
```
## 已知问题 / 注意事项 ## 已知问题 / 注意事项
+4
View File
@@ -11,6 +11,7 @@ Markdown 文档向量数据库 — 将 Markdown 文件自动分块、嵌入、
- **多集合**: 支持多项目数据隔离,不同知识库存入不同 ChromaDB collection - **多集合**: 支持多项目数据隔离,不同知识库存入不同 ChromaDB collection
- **HTTP API**: FastAPI 提供 RESTful 接口,附带 Swagger 文档 - **HTTP API**: FastAPI 提供 RESTful 接口,附带 Swagger 文档
- **安全**: 可选 API Key 认证、速率限制、路径遍历防护 - **安全**: 可选 API Key 认证、速率限制、路径遍历防护
- **多格式文档**: 支持 `.md` / `.txt` / `.pdf` / `.html`,按扩展名自动选择分块器,可通过 `Splitter` Protocol 扩展
- **去重**: 同一文件重复入库自动覆盖旧版本(基于路径 SHA256 哈希) - **去重**: 同一文件重复入库自动覆盖旧版本(基于路径 SHA256 哈希)
## 快速开始 ## 快速开始
@@ -21,6 +22,9 @@ Markdown 文档向量数据库 — 将 Markdown 文件自动分块、嵌入、
git clone git@lhy-git.liuhangyv.top:Serendipity/md-vector-db.git git clone git@lhy-git.liuhangyv.top:Serendipity/md-vector-db.git
cd md-vector-db cd md-vector-db
uv sync uv sync
# 安装 PDF + HTML 支持(可选)
uv sync --extra all
``` ```
### 2. 配置 ### 2. 配置