diff --git a/.python-version b/.python-version deleted file mode 100644 index ea37337..0000000 --- a/.python-version +++ /dev/null @@ -1,2 +0,0 @@ -3.13.9 - diff --git a/API_USAGE.md b/API_USAGE.md deleted file mode 100644 index ccef104..0000000 --- a/API_USAGE.md +++ /dev/null @@ -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 - diff --git a/README.md b/README.md index f1c8103..0434a33 100644 --- a/README.md +++ b/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 数据库) + +- 点击"新增数据源"-"选择类型"-"选择数据库" + +![数据库源配置界面](./README_imgs/数据库配置界面.png) + +- 数据库连接配置 + - 主机地址(必填):MySQL 数据库主机地址 + - 端口(必填):MySQL 数据库端口 + - 用户名(必填):MySQL 用户名 + - 密码(必填):MySQL 密码 + - 点击"测试连接",检查数据库连接是否成功。 + - 点击"获取数据库列表",获取所有数据库 +- 数据库配置 + - 点击"选择数据库",选中需要配置的数据库 + - 点击"获取表列表" + - 点击"选择表",选中对应的数据表 + - 点击"获取表结构",配置ID列、内容列、标题列、更新时间列(建议选择,以加速数据同步效率) + - 点击右上角"保存"按钮,保存数据库配置 2. **文件夹类型 (folder)** - - 支持文件夹 - - 支持递归扫描 - - 支持文件过滤规则 + +- 点击"新增数据源"-"选择类型"-"文件夹" + +![文件夹源配置界面](./README_imgs/文件夹配置界面.png) + +- 文件夹配置 + - 填写要同步文档所在的文件夹路径 +- SSH连接配置 + - 主机地址(必填):要同步的文件夹所在的 SSH 主机地址 + - 端口(必填):SSH 端口(默认 22) + - 用户名(必填):SSH 用户名 + - 密码(必填):SSH 密码 + - 点击"测试SSH连接",检查 SSH 连接是否成功。 +- 点击右上角"保存"按钮,保存文件夹配置 + +3. 更新数据源配置 +- 点击左侧数据源列表中的数据源 +- 修改配置后点击保存,后台会自动删除原来同步的数据并重新同步 ## 生产环境部署 diff --git a/README_imgs/数据库配置界面.png b/README_imgs/数据库配置界面.png new file mode 100644 index 0000000..0083ebd Binary files /dev/null and b/README_imgs/数据库配置界面.png differ diff --git a/README_imgs/文件夹配置界面.png b/README_imgs/文件夹配置界面.png new file mode 100644 index 0000000..92f029e Binary files /dev/null and b/README_imgs/文件夹配置界面.png differ diff --git a/scan_exclude_config.json b/scan_exclude_config.json deleted file mode 100644 index 7ae6940..0000000 --- a/scan_exclude_config.json +++ /dev/null @@ -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$" - ] - } -} - diff --git a/setup_docker_mirror.sh b/setup_docker_mirror.sh deleted file mode 100755 index a5071ec..0000000 --- a/setup_docker_mirror.sh +++ /dev/null @@ -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 < /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 "" -