# 向量搜索配置

## 已安装的模型

### 1. bge-small-zh-v1.5 (15MB)
- **类型**：中文嵌入模型
- **用途**：中文文本向量化
- **维度**：512维
- **适用场景**：中文文档检索、语义搜索

### 2. nomic-embed-text (262MB)
- **类型**：英文嵌入模型
- **用途**：英文文本向量化
- **维度**：768维
- **适用场景**：英文文档检索、语义搜索

## 向量数据库结构

```
vector_db/
├── documents/           # 文档存储
│   ├── chunks/         # 文档分块
│   └── embeddings/     # 向量嵌入
├── index/              # 索引文件
└── metadata/           # 元数据
```

## 支持的文件类型

| 类型 | 处理方式 | 向量化 |
|------|---------|--------|
| .txt / .md | 直接读取 | ✅ |
| .docx | python-docx提取 | ✅ |
| .pdf | PyPDF2/pdfplumber提取 | ✅ |
| .xlsx / .xls | pandas读取后转文本 | ✅ |
| .qmd | 作为Markdown处理 | ✅ |

## 使用方式

### 1. 添加文档到向量库
```
用户发送文档 → 提取文本 → 分块 → 生成向量 → 存储
```

### 2. 语义搜索
```
用户提问 → 生成查询向量 → 相似度匹配 → 返回相关文档
```

### 3. 混合搜索
- 关键词搜索 + 语义搜索
- 提高召回率和准确率

## 文档处理流程

1. **接收文档** → 保存到 reference/documents/
2. **文本提取** → 提取纯文本内容
3. **智能分块** → 按语义/段落分块（每块500-1000字）
4. **生成向量** → 使用bge-small-zh-v1.5（中文）或nomic-embed-text（英文）
5. **存储索引** → 保存到向量数据库
6. **建立元数据** → 记录来源、日期、类型等信息

## 查询示例

### 简单搜索
用户问："楼梯灯的安装方法"
→ 生成向量 → 匹配最相似的文档块 → 返回答案

### 带过滤搜索
用户问："销售部2025年2月的客户名单"
→ 语义搜索 + 元数据过滤（部门=销售部，日期=2025-02）

## 安全机制

- 大文件分块处理，避免内存溢出
- 敏感文件需要确认后再索引
- 定期备份向量数据库
