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
├── config.py # YAML → dataclass, load_dotenv() 加载 .env
├── db.py # VectorDB: 线程安全的 ChromaDB 封装
├── embedder.py # 策略模式: LocalEmbedder / OpenAIEmbedder / DashscopeEmbedder
├── ingest.py # MarkdownSplitter(混合分块) + DocumentIngestor(分批嵌入)
── search.py # Searcher: 语义检索 + 源文件管理
├── core/ # 核心逻辑(不依赖 server/cli
├── config.py # YAML → dataclass, load_dotenv() 加载 .env
├── db.py # VectorDB: 线程安全的 ChromaDB 封装
├── embedder.py # 策略模式: LocalEmbedder / OpenAIEmbedder / DashscopeEmbedder
├── ingest.py # DocumentIngestor: 按扩展名自动选择 Splitter
│ ├── 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 层
├── app.py # Depends(get_state) 依赖注入, 速率限制中间件
@@ -46,7 +53,9 @@ server/ # FastAPI HTTP 层
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`
@@ -111,10 +120,18 @@ cli/main.py # Typer CLI5 个命令 + --config 选项
| 集合名 | 来源 | 文件数 | 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 |
| `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
```
## 已知问题 / 注意事项