删除了无用文件,修改了readme
This commit is contained in:
parent
f68b4bba37
commit
6ca2b48d2d
|
|
@ -1,2 +0,0 @@
|
|||
3.13.9
|
||||
|
||||
155
API_USAGE.md
155
API_USAGE.md
|
|
@ -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
|
||||
|
||||
47
README.md
47
README.md
|
|
@ -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 数据库)
|
||||
|
||||
- 点击"新增数据源"-"选择类型"-"选择数据库"
|
||||
|
||||

|
||||
|
||||
- 数据库连接配置
|
||||
- 主机地址(必填):MySQL 数据库主机地址
|
||||
- 端口(必填):MySQL 数据库端口
|
||||
- 用户名(必填):MySQL 用户名
|
||||
- 密码(必填):MySQL 密码
|
||||
- 点击"测试连接",检查数据库连接是否成功。
|
||||
- 点击"获取数据库列表",获取所有数据库
|
||||
- 数据库配置
|
||||
- 点击"选择数据库",选中需要配置的数据库
|
||||
- 点击"获取表列表"
|
||||
- 点击"选择表",选中对应的数据表
|
||||
- 点击"获取表结构",配置ID列、内容列、标题列、更新时间列(建议选择,以加速数据同步效率)
|
||||
- 点击右上角"保存"按钮,保存数据库配置
|
||||
|
||||
2. **文件夹类型 (folder)**
|
||||
- 支持文件夹
|
||||
- 支持递归扫描
|
||||
- 支持文件过滤规则
|
||||
|
||||
- 点击"新增数据源"-"选择类型"-"文件夹"
|
||||
|
||||

|
||||
|
||||
- 文件夹配置
|
||||
- 填写要同步文档所在的文件夹路径
|
||||
- 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 |
|
|
@ -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$"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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 ""
|
||||
|
||||
Loading…
Reference in New Issue