删除了无用文件,修改了readme

This commit is contained in:
zhangxunhui 2026-01-26 18:27:19 +08:00
parent f68b4bba37
commit 6ca2b48d2d
7 changed files with 38 additions and 429 deletions

View File

@ -1,2 +0,0 @@
3.13.9

View File

@ -1,155 +0,0 @@
# RAG API 使用文档
## 文档上传和检索 API
### 1. 上传文档
**端点**: `POST /documents/upload`
**功能**: 上传各种格式的文档并解析为知识库
**支持的文件格式**:
- 文本文件: `.txt`, `.md`, `.markdown`
- PDF 文件: `.pdf`
- Word 文档: `.docx`, `.doc`
- HTML 文件: `.html`, `.htm`
- CSV 文件: `.csv`
- JSON 文件: `.json`
**请求示例** (使用 curl):
```bash
# 基本上传
curl -X POST "http://localhost:8001/documents/upload" \
-F "file=@document.pdf"
# 指定文档 ID
curl -X POST "http://localhost:8001/documents/upload" \
-F "file=@document.pdf" \
-F "doc_id=my_document_001"
# 添加额外元数据
curl -X POST "http://localhost:8001/documents/upload" \
-F "file=@document.pdf" \
-F "doc_id=my_document_001" \
-F 'metadata={"author": "John Doe", "category": "technical"}'
```
**请求参数**:
- `file` (required): 要上传的文件
- `doc_id` (optional): 自定义文档 ID如果不提供则使用文件名不含扩展名
- `metadata` (optional): JSON 格式的额外元数据
**响应示例**:
```json
{
"doc_id": "my_document_001",
"filename": "document.pdf",
"file_type": "pdf",
"chunks": 5,
"message": "Document uploaded and processed successfully"
}
```
### 2. 根据文档 ID 检索所有内容
**端点**: `GET /documents/{doc_id}`
**功能**: 根据文档 ID 检索文档的所有内容(包括所有分块)
**请求示例**:
```bash
curl -X GET "http://localhost:8001/documents/my_document_001"
```
**响应示例**:
```json
{
"doc_id": "my_document_001",
"chunks": [
{
"id": "my_document_001_chunk_0",
"text": "这是文档的第一部分内容...",
"metadata": {
"doc_id": "my_document_001",
"chunk_id": "my_document_001_chunk_0",
"chunk_index": 0,
"file_name": "document.pdf",
"file_type": "pdf",
"source": "file_upload"
},
"chunk_index": 0
},
{
"id": "my_document_001_chunk_1",
"text": "这是文档的第二部分内容...",
"metadata": {...},
"chunk_index": 1
}
],
"total_chunks": 5,
"full_text": "这是文档的第一部分内容...\n\n这是文档的第二部分内容..."
}
```
**响应字段说明**:
- `doc_id`: 文档 ID
- `chunks`: 文档的所有分块列表(按 chunk_index 排序)
- `total_chunks`: 分块总数
- `full_text`: 所有分块合并后的完整文本
### 3. 其他现有 API
#### 查询 RAG 系统
```bash
POST /query
{
"query": "你的问题",
"top_k": 5,
"stream": true
}
```
#### 检索相关文档
```bash
POST /retrieve
{
"query": "搜索关键词",
"top_k": 5
}
```
#### 手动同步
```bash
POST /sync
{
"full_sync": false,
"force": false
}
```
#### 系统统计
```bash
GET /stats
```
## 工作流程
1. **上传文档**: 使用 `/documents/upload` 上传文档
2. **文档解析**: 系统自动解析文档并分块
3. **向量化**: 自动生成 embeddings 并存储到 ChromaDB
4. **检索使用**:
- 使用 `/query` 进行 RAG 查询(会使用上传的文档)
- 使用 `/retrieve` 进行向量检索
- 使用 `/documents/{doc_id}` 获取完整文档内容
## 注意事项
1. **文档 ID 唯一性**: 如果上传相同 `doc_id` 的文档,会覆盖之前的文档
2. **分块处理**: 大文档会被自动分块,每个分块都有独立的 ID
3. **元数据**: 可以通过 `metadata` 参数添加自定义元数据,用于后续过滤和检索
4. **文件大小**: 建议单个文件不超过 100MB

View File

@ -126,20 +126,49 @@ ollama pull qwen3-embedding:8b # Embedding模型用于向量化
#### 配置界面访问
访问配置管理界面http://localhost:8001/static/config/index.html
访问配置管理界面http://localhost:8001/config
#### 支持的数据源类型
1. **数据库类型 (database)**
- 支持 MySQL 数据库
- 可配置多个数据库和表
- 支持多列内容合并
- 支持文件附件内容解析
1. **数据库类型 (database)**(目前仅支持 MySQL 数据库)
- 点击"新增数据源"-"选择类型"-"选择数据库"
![数据库源配置界面](./README_imgs/数据库配置界面.png)
- 数据库连接配置
- 主机地址必填MySQL 数据库主机地址
- 端口必填MySQL 数据库端口
- 用户名必填MySQL 用户名
- 密码必填MySQL 密码
- 点击"测试连接",检查数据库连接是否成功。
- 点击"获取数据库列表",获取所有数据库
- 数据库配置
- 点击"选择数据库",选中需要配置的数据库
- 点击"获取表列表"
- 点击"选择表",选中对应的数据表
- 点击"获取表结构"配置ID列、内容列、标题列、更新时间列建议选择以加速数据同步效率
- 点击右上角"保存"按钮,保存数据库配置
2. **文件夹类型 (folder)**
- 支持文件夹
- 支持递归扫描
- 支持文件过滤规则
- 点击"新增数据源"-"选择类型"-"文件夹"
![文件夹源配置界面](./README_imgs/文件夹配置界面.png)
- 文件夹配置
- 填写要同步文档所在的文件夹路径
- SSH连接配置
- 主机地址(必填):要同步的文件夹所在的 SSH 主机地址
- 端口必填SSH 端口(默认 22
- 用户名必填SSH 用户名
- 密码必填SSH 密码
- 点击"测试SSH连接",检查 SSH 连接是否成功。
- 点击右上角"保存"按钮,保存文件夹配置
3. 更新数据源配置
- 点击左侧数据源列表中的数据源
- 修改配置后点击保存,后台会自动删除原来同步的数据并重新同步
## 生产环境部署

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -1,80 +0,0 @@
{
"exclude_databases": [
"information_schema",
"performance_schema",
"mysql",
"sys"
],
"exclude_databases_patterns": [
"^test_",
".*_temp$"
],
"exclude_tables_patterns": {
"forgeplus": [
"^.*_migrations$",
".*_metadata$",
".*_users$",
".*_members$",
".*_roles$",
".*_trackers$",
".*_relationships$",
".*_authentications$",
"^action_.*$",
"^apply_.*$",
"^applied_.*$",
"^attachment.*$",
"^ci_.*$"
],
"gitea_hat": [
"^.*_index$",
"^.*_version$",
"^.*_state$",
"^.*_data$",
"^.*_meta$",
"^.*_hash$",
"^.*_import$",
"^.*_label$",
"^.*_user$",
"^.*_issue$",
"^.*_redirect$",
"^.*_topic$",
"^.*_transfer$",
"^.*_unit$",
"^.*_status$",
"^.*_setting$",
"^.*_repo$",
"^.*_team$",
"^.*_badge$",
"^.*_open_id$",
"^session$",
"^star$",
"^stopwatch$",
"^topic$",
"^tracked_time$",
"^watch$",
"^access$",
"^action$"
],
"ruoyi-gitlink": [
"^.*_file$",
"^.*_tag$",
"^.*_type$",
"^.*_like$",
"^.*_task$",
"^.*_favorite$",
"^.*_dynamic$",
"^.*_visits$",
"^.*_requirement$",
"^.*_members$",
"^.*_sheet$",
"^.*_record$",
"^.*_issues$",
"^.*_role$",
"^.*_menu$",
"^.*_post$",
"^.*_status$",
"^.*_to_type$"
]
}
}

View File

@ -1,183 +0,0 @@
#!/bin/bash
# Docker 镜像源配置脚本
# 用于配置国内 Docker 镜像加速器,解决无法访问 Docker Hub 的问题
# 注意: 在关键步骤使用 set -e但在用户交互和测试部分不使用
set -e
echo "=== Docker 镜像源配置脚本 ==="
echo ""
# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "错误: 请使用 sudo 运行此脚本"
exit 1
fi
# 创建 Docker 配置目录
mkdir -p /etc/docker
# 检查是否已存在 daemon.json
BACKUP_CREATED=false
if [ -f /etc/docker/daemon.json ]; then
echo "检测到已存在的 /etc/docker/daemon.json 文件"
echo "将保留现有配置(如存储路径等),只更新镜像源配置"
read -p "是否备份现有配置?(y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d_%H%M%S)
BACKUP_CREATED=true
echo "已备份到 /etc/docker/daemon.json.backup.*"
fi
# 读取现有配置并合并镜像源
echo "合并现有配置和镜像源配置..."
# 使用 Python 来安全地合并 JSON 配置(保留所有现有配置)
python3 << 'PYTHON_SCRIPT'
import json
import sys
# 镜像源列表
mirrors = [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://docker.1panel.live"
]
try:
# 读取现有配置
with open('/etc/docker/daemon.json', 'r', encoding='utf-8') as f:
config = json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
print(f"Error reading existing config: {e}", file=sys.stderr)
sys.exit(1)
# 更新或添加 registry-mirrors
if 'registry-mirrors' in config:
# 合并现有镜像源和新镜像源(去重)
existing_mirrors = config.get('registry-mirrors', [])
combined_mirrors = list(dict.fromkeys(existing_mirrors + mirrors)) # 保持顺序并去重
config['registry-mirrors'] = combined_mirrors
print(f"已合并镜像源配置(保留 {len(existing_mirrors)} 个现有镜像源,添加 {len(mirrors)} 个新镜像源)")
else:
# 添加新的镜像源配置
config['registry-mirrors'] = mirrors
print("已添加镜像源配置")
# 写入合并后的配置
try:
with open('/etc/docker/daemon.json', 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print("✓ 配置已更新,所有现有配置(如存储路径等)已保留")
except Exception as e:
print(f"Error writing config: {e}", file=sys.stderr)
sys.exit(1)
PYTHON_SCRIPT
if [ $? -ne 0 ]; then
echo "错误: 合并配置失败"
if [ "$BACKUP_CREATED" = true ]; then
echo "可以从备份文件恢复: /etc/docker/daemon.json.backup.*"
fi
exit 1
fi
else
# 如果文件不存在,创建新配置
echo "配置 Docker 镜像源(创建新配置文件)..."
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://docker.1panel.live"
]
}
EOF
fi
echo "✓ 已配置镜像源到 /etc/docker/daemon.json"
# 重新加载 Docker 配置
echo "重新加载 Docker 配置..."
systemctl daemon-reload
# 重启 Docker 服务
echo "重启 Docker 服务..."
systemctl restart docker
echo ""
echo "=== 配置完成 ==="
echo ""
# 验证配置是否生效
echo "验证配置是否生效..."
if docker info | grep -A 10 "Registry Mirrors" > /dev/null 2>&1; then
echo "✓ 镜像源配置已生效:"
docker info | grep -A 10 "Registry Mirrors"
else
echo "✗ 无法验证镜像源配置,请手动检查: docker info | grep -A 10 'Registry Mirrors'"
fi
echo ""
echo "测试拉取镜像(仅测试,不完整下载)..."
echo "提示: 这将尝试从镜像源拉取 ChromaDB 镜像,按 Ctrl+C 可以中断"
echo -n "是否继续测试?(y/n默认n): "
# 确保在交互式环境中正确读取输入
if [ -t 0 ]; then
# 交互式终端
read -t 30 -n 1 -r REPLY
READ_STATUS=$?
echo "" # 换行
if [ $READ_STATUS -ne 0 ]; then
REPLY="n"
echo "(未收到输入,默认跳过测试)"
fi
else
# 非交互式终端,默认跳过
REPLY="n"
echo "n非交互式终端默认跳过测试"
fi
if [[ "$REPLY" =~ ^[Yy]$ ]]; then
echo "开始测试拉取镜像 chromadb/chroma:1.3.5..."
echo "测试将在30秒后自动停止或按 Ctrl+C 中断)"
echo ""
# 使用 timeout 限制测试时间,并捕获输出
if timeout 30 docker pull chromadb/chroma:1.3.5 2>&1 | tee /tmp/docker_pull_test.log | head -30; then
echo ""
if grep -q "Pulling\|Downloading\|Pull complete" /tmp/docker_pull_test.log 2>/dev/null; then
echo "✓ 镜像拉取测试成功!镜像源配置正常工作。"
echo "提示: 看到下载进度说明镜像源配置成功。"
else
echo "⚠ 镜像拉取测试未显示下载进度"
echo "提示: 请检查网络连接或镜像源配置"
fi
rm -f /tmp/docker_pull_test.log 2>/dev/null
else
EXIT_CODE=${PIPESTATUS[0]}
if [ $EXIT_CODE -eq 124 ]; then
echo ""
echo "⏱ 测试超时30秒但这是正常的"
if grep -q "Pulling\|Downloading\|Pull complete" /tmp/docker_pull_test.log 2>/dev/null; then
echo "✓ 镜像源配置正常工作(已看到下载进度)"
else
echo "⚠ 未看到下载进度,请检查网络或手动测试"
fi
else
echo ""
echo "⚠ 镜像拉取测试失败(退出码: $EXIT_CODE"
echo "提示: 请检查 Docker 服务状态和网络连接"
fi
rm -f /tmp/docker_pull_test.log 2>/dev/null
fi
else
echo "跳过测试。您可以稍后手动测试:"
echo " docker pull chromadb/chroma:1.3.5"
fi
echo ""