[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83978":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},83978,"rag-knowledge-system","helloHupc\u002Frag-knowledge-system","helloHupc","通用知识库管理平台，用于自建 RAG 知识库场景。支持多种文档解析、灵活切分策略、混合检索，可对接 Dify、自建页面、HTTP 调用等多种前端入口。",null,"Python",61,12,52,0,6,9,21,60.74,"MIT License",false,"main",true,[],"2026-06-12 04:01:42","# RAG KNOWLEDGE SYSTEM\n\n通用知识库管理平台，用于自建 RAG 知识库场景。支持多种文档解析、灵活切分策略、混合检索，可对接 Dify、自建页面、HTTP 调用等多种前端入口。\n\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11+-blue.svg)](https:\u002F\u002Fwww.python.org\u002F)\n[![FastAPI](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastAPI-0.115+-green.svg)](https:\u002F\u002Ffastapi.tiangolo.com\u002F)\n[![React](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Freact-19-blue.svg)](https:\u002F\u002Freact.dev\u002F)\n\n## ✨ 特性\n\n### 📄 文档处理\n- **多种格式支持**：PDF、Word、Excel、Markdown、HTML、CSV、邮件、聊天记录\n- **图片知识库**：JPG \u002F PNG \u002F GIF \u002F BMP \u002F TIFF \u002F WebP 上传和识别\n- **图片识别**：PaddleOCR 文字识别 + 多模态大模型描述，支持表格检测\n- **PDF 图片提取**：自动提取 PDF 中嵌入的图片并识别\n\n### ✂️ 智能切分\n- **6 种切分策略**：固定长度、按结构、表格感知、父子分层、语义、聊天记录\n- **策略预览**：上传前可预览不同策略的切分效果\n- **灵活配置**：每种策略支持独立参数调整\n\n### 🔍 检索模式\n- **稠密检索（dense）**：纯向量语义检索\n- **混合检索（hybrid）**：BM25 + 向量双路召回，alpha 加权融合\n- **Rerank 支持**：搜索结果二次排序，提升准确率\n- **可调权重**：融合权重 alpha 自由配置\n- **评测工作台**：批量评测检索质量（Hit@1、MRR 等指标）\n\n### 🔌 第三方对接\n- **Dify 集成**：一键生成 Dify 外部知识库 API 地址，支持多知识库组合\n- **IM 机器人**：支持飞书、企业微信自建应用机器人回调，用户可在 IM 内直接提问\n- **通用查询接口**：HTTP POST 接口，任意平台可调用\n- **search \u002F qa 双模式**：纯检索或检索+LLM 问答\n\n### 🛡️ 企业落地\n- **知识库分类**：通过 source_module 字段分类管理知识库\n- **可插拔权限**：实现 PermissionChecker 接口即可对接企业权限系统\n- **异步处理**：文档异步解析，上传即返回\n\n## 🏗️ 技术架构\n\n```\n┌─────────────────────────────────────────────────────┐\n│                    前端 (React 19)                    │\n│              管理后台 · 检索测试 · 评测工作台           │\n└─────────────────┬───────────────────────────────────┘\n                  │ HTTP \u002F REST API\n┌─────────────────▼───────────────────────────────────┐\n│                 后端 (FastAPI)                        │\n│  ┌──────────┐ ┌──────────┐ ┌──────────┐            │\n│  │ 文档管理  │ │  检索服务  │ │  切分引擎  │            │\n│  └──────────┘ └──────────┘ └──────────┘            │\n│  ┌──────────┐ ┌──────────┐ ┌──────────┐            │\n│  │ 图片识别  │ │  权限系统  │ │  评测服务  │            │\n│  └──────────┘ └──────────┘ └──────────┘            │\n└─────────────────┬───────────────────────────────────┘\n                  │\n    ┌─────────────┼─────────────┐\n    ▼             ▼             ▼\n┌───────┐  ┌──────────┐  ┌──────────┐\n│PostgreSQL│  │ Milvus\u002FZilliz│  │  Redis   │\n│  元数据  │  │  向量存储    │  │  缓存    │\n└───────┘  └──────────┘  └──────────┘\n```\n\n## 🚀 快速开始\n\n### 前置要求\n\n- Python 3.11+\n- PostgreSQL 14+\n- Redis 6+\n- Milvus 2.4+ 或 Zilliz Cloud\n- Node.js 18+\n\n### 1. 克隆项目\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FhelloHupc\u002Frag-knowledge-system.git\ncd rag-knowledge-system\n```\n\n### 2. 后端配置\n\n```bash\npython3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npip install -r requirements.txt\n\n# 复制配置文件\ncp .env.example .env\n```\n\n编辑 `.env` 配置数据库和向量存储：\n\n```bash\n# ── 数据库 ──\nDATABASE_URL=postgresql+psycopg:\u002F\u002Fuser:password@localhost:5432\u002Fknowledge_base\n\n# ── 向量存储 ──\nVECTOR_STORE_PROVIDER=zilliz         # local | zilliz\nZILLIZ_URI=https:\u002F\u002Fyour-zilliz-endpoint\nZILLIZ_TOKEN=your-zilliz-token\nZILLIZ_COLLECTION=your-collection-name\n\n# ── 图片识别（可选）──\nPADDLE_OCR_TOKEN=your_token          # PaddleOCR API Token\nMULTIMODAL_API_BASE=                 # 多模态 API 地址\nMULTIMODAL_API_KEY=                  # 多模态 API Key\nMULTIMODAL_MODEL=                    # 模型名称\n\n# ── 运行模式 ──\nINGESTION_MODE=async                 # async | sync\n```\n\n### 3. 数据库初始化\n\n```bash\nalembic upgrade head\n```\n\n### 4. 启动后端\n\n```bash\nuvicorn app.main:app --reload --host 127.0.0.1 --port 18080\n```\n\n后端启动后访问：\n- API 文档：http:\u002F\u002Flocalhost:18080\u002Fdocs\n- 健康检查：http:\u002F\u002Flocalhost:18080\u002Fapi\u002Fv1\u002Fhealth\n\n### 5. 启动前端\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n前端启动后访问：http:\u002F\u002Flocalhost:5173\n\n> 详细部署说明见 [`docs\u002Fguides\u002Fruntime.md`](docs\u002Fguides\u002Fruntime.md)，包含文件夹同步、对象存储、生产模式等高级配置。\n\n## 📡 API 文档\n\n项目基于 FastAPI 构建，启动后端后自动生成交互式 API 文档：\n\n- **Swagger UI**：http:\u002F\u002Flocalhost:18080\u002Fdocs\n- **ReDoc**：http:\u002F\u002Flocalhost:18080\u002Fredoc\n\n所有接口均可在线测试。完整接口列表见 [`docs\u002FAPI.md`](docs\u002FAPI.md)。\n\n### 通用查询接口\n\n```bash\n# 纯检索（指定知识库）\ncurl -X POST http:\u002F\u002Flocalhost:18080\u002Fapi\u002Fv1\u002Fknowledge\u002Fquery \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"query\": \"调岗审批流程\", \"top_k\": 5, \"response_mode\": \"search\", \"filters\": {\"source_module\": [\"oa\"]}}'\n\n# 纯检索（全部知识库）\ncurl -X POST http:\u002F\u002Flocalhost:18080\u002Fapi\u002Fv1\u002Fknowledge\u002Fquery \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"query\": \"调岗审批流程\", \"top_k\": 5, \"response_mode\": \"search\"}'\n\n# 检索+问答\ncurl -X POST http:\u002F\u002Flocalhost:18080\u002Fapi\u002Fv1\u002Fknowledge\u002Fquery \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"query\": \"调岗审批流程是什么？\", \"top_k\": 5, \"response_mode\": \"qa\"}'\n```\n\n通用查询接口详细文档见 [`docs\u002Fcontracts\u002Fknowledge-api.md`](docs\u002Fcontracts\u002Fknowledge-api.md)。\n\n### Dify 外部知识库配置\n\n在 Dify 中创建外部知识库时：\n\n- **API 端点**：`http:\u002F\u002Fhost.docker.internal:18080\u002Fapi\u002Fv1\u002Fdify`（不含 `\u002Fretrieval`，Dify 会自动拼接）\n- **API 密钥**：`.env` 中的 `DIFY_APP_KEY`\n- **知识库 ID**：\n  - 单知识库：`oa`\n  - 多知识库组合：`oa,kf`（逗号分隔多个 source_module）\n\n> ⚠️ Dify 容器内访问宿主机必须用 `host.docker.internal`，不能用 `127.0.0.1`\n\n### 飞书 \u002F 企业微信机器人配置\n\n- 飞书事件订阅回调：`https:\u002F\u002F\u003C域名>\u002Fapi\u002Fv1\u002Ffeishu\u002Fevents`\n- 企业微信 API 接收回调：`https:\u002F\u002F\u003C域名>\u002Fapi\u002Fv1\u002Fwecom\u002Fcallback`\n- 回调收到文本消息后会立即向平台返回成功响应，并在后台调用知识库问答，再通过平台发消息 API 主动回复。\n- 私聊直接响应；飞书群聊仅在消息包含 `mentions`（即 @ 机器人）时响应。\n- 飞书接入说明见 [`docs\u002Fguides\u002Ffeishu-bot-integration.md`](docs\u002Fguides\u002Ffeishu-bot-integration.md)。\n- 企业微信接入说明见 [`docs\u002Fguides\u002Fwecom-bot-integration.md`](docs\u002Fguides\u002Fwecom-bot-integration.md)。\n\n## 📖 配置参考\n\n### 完整环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `DATABASE_URL` | — | PostgreSQL 连接串（必填） |\n| `REDIS_URL` | `redis:\u002F\u002Flocalhost:6379\u002F0` | Redis 连接串 |\n| `VECTOR_STORE_PROVIDER` | `local` | 向量存储类型（local | zilliz） |\n| `ZILLIZ_URI` | — | Zilliz 连接地址 |\n| `ZILLIZ_TOKEN` | — | Zilliz 连接 Token |\n| `ZILLIZ_COLLECTION` | `oa_rag_chunks` | Zilliz 集合名称 |\n| `INGESTION_MODE` | `sync` | 文档解析模式 |\n| `PADDLE_OCR_TOKEN` | — | PaddleOCR API Token |\n| `MULTIMODAL_API_BASE` | — | 多模态 API 地址 |\n| `MULTIMODAL_API_KEY` | — | 多模态 API Key |\n| `MULTIMODAL_MODEL` | — | 多模态模型名称 |\n| `LLM_PROVIDER` | `openai` | LLM 提供者 |\n| `LLM_API_BASE` | — | LLM API 地址 |\n| `LLM_API_KEY` | — | LLM API Key |\n| `LLM_MODEL` | — | LLM 模型名称 |\n| `PERMISSION_MODE` | `none` | 权限模式 |\n| `DIFY_APP_KEY` | — | Dify 接入密钥 |\n| `DIFY_BASE_URL` | — | Dify 服务地址（用于 QA 模式调用 Dify） |\n\n### 图片识别模式\n\n系统根据配置自动选择识别方式：\n\n| 配置情况 | 自动模式 | 效果 |\n|----------|----------|------|\n| PaddleOCR + 多模态 | 混合 | OCR 文字 + 多模态描述 |\n| 仅 PaddleOCR | OCR | 识别图片中文字 |\n| 仅多模态 | 描述 | 生成图片内容描述 |\n| 都没配 | — | 上传图片时报错 |\n\n## 📂 项目结构\n\n```\n.\n├── app\u002F\n│   ├── api\u002F            # FastAPI 路由（14 个模块）\n│   ├── core\u002F           # 配置、错误处理、中间件、日志\n│   ├── db\u002F             # SQLAlchemy 基础、会话管理\n│   ├── ingestion\u002F      # 解析器注册（10 种）+ 切分引擎（6 种策略）\n│   ├── integrations\u002F   # Embedding、LLM、向量存储、图片识别、Rerank\n│   ├── models\u002F         # SQLAlchemy 数据模型\n│   ├── permissions\u002F    # 权限检查器接口\n│   ├── repositories\u002F   # 数据访问层\n│   ├── retrieval\u002F      # 混合检索、BM25、评分\n│   ├── schemas\u002F        # Pydantic 请求\u002F响应模型\n│   ├── services\u002F       # 业务逻辑层\n│   └── sources\u002F        # 数据源连接器\n├── frontend\u002F           # React 19 + Vite + TypeScript 管理后台\n├── docs\u002F\n│   ├── contracts\u002F      # 接口契约文档\n│   ├── feature_list.json  # 功能清单\n│   └── reference\u002F      # 参考文档\n├── tests\u002F              # 测试用例（173+）\n├── requirements.txt\n└── .env.example\n```\n\n## 🧪 测试\n\n```bash\n# 全量测试\npytest tests\u002F -x -q\n\n# 切分策略专项\npytest tests\u002Ftest_chunking_strategies.py -v\n\n# 图片识别专项\npytest tests\u002Ftest_image_recognition.py -v\n```\n\n## 🤝 致谢\n\n学AI，上L站\n\n感谢 [linux.do](https:\u002F\u002Flinux.do) 社区各位佬的公益站！\n\n---\n",2,"2026-06-11 04:11:57","CREATED_QUERY"]