WIKI 知识库系统 — 项目框架全解析

项目仓库:cdkjframework/knowledge-base 许可证:MulanPSL-2.0


一、项目概览

WIKI 知识库是一款本地优先的私有知识库服务,集成了向量检索与**对话式问答(RAG)**能力。它通过 HTTP API 和 Web 界面向用户提供服务,支持 SSE 流式输出,并内置多用户会话管理、知识库文档管理、模型配置等完整功能。

核心特性

特性 说明
🏗️ 私有化部署 全量本地运行,数据不出网,适合企业级隐私场景
🔍 向量检索 + Rerank FAISS 向量索引 + Reranker 二次排序,检索精度高
🤖 多 LLM 支持 OpenAI / DeepSeek / 通义千问 / 豆包 / xAI / Gemini / Kimi / LM Studio,统一接口切换
📄 多格式文档 支持 DOCX、DOC、PDF、XLS/XLSX、TXT、Markdown、图片 OCR 等
🔐 SSE 流式输出 打字机式实时响应,体验流畅
💬 多会话管理 基于 user_id + session_id 的会话隔离,支持 Redis 持久化
🌐 Web UI + API 内置 Web 界面 + 完整 REST API,开箱即用

二、系统架构总览

2.1 整体架构图

系统采用分层架构设计,从上到下分为:

  1. 客户端/浏览器层 --- 用户交互入口
  2. HTTP API 层 (src/api.py) --- 统一请求路由与鉴权
  3. Web UI 静态资源层 (web/) --- 前端界面
  4. 会话/历史存储层 (src/store/) --- 会话状态与消息持久化
  5. 知识库核心层 (src/knowledge_base.py) --- 文档解析、分块、Embedding、FAISS 索引、Reranker、Chat 模型

2.2 RAG 数据流

RAG 核心流程如下:

  1. 文档上传后,由 文档解析器 提取文本,并进行 分块
  2. 分块后的文本通过 Embedding 模型 生成向量,存入 FAISS 索引
  3. 用户提问时,问题先经 Embedding 转向量,在 FAISS 中检索候选文档
  4. 候选文档经 Reranker 二次排序后,与用户问题一起送入 Chat 模型
  5. Chat 模型生成回答,通过 SSE 流式返回给用户

三、核心模块详解

3.1 项目目录结构

复制代码
.
├─ src/
│  ├─ api.py                     # HTTP API 与静态资源路由
│  ├─ main.py                    # 启动入口
│  ├─ knowledge_base.py          # 知识库核心逻辑
│  ├─ document_parser.py         # 文档解析
│  ├─ universal_llm_client.py    # 多模型统一客户端
│  ├─ model_config_manager.py    # 模型配置管理
│  ├─ windows_service.py         # Windows 服务入口
│  └─ store/                     # 会话/历史存储实现
├─ web/                          # 内置 Web 控制台
├─ docs/
│  └─ API.html                   # 离线 API 文档
├─ assets/                       # README 截图与静态资源
├─ config.json                   # 主配置文件
├─ config.multi-provider.example.json
├─ manage_service.ps1            # Windows 服务管理脚本
├─ manage_service.sh             # Linux systemd 服务管理脚本
├─ encrypt_secret.py             # 密钥加密工具
├─ ingest_to_kb_store.py         # 知识导入工具
├─ migrate_to_sessions_table.py  # 历史数据迁移脚本
└─ tune_threshold.py             # 检索阈值调优脚本

3.2 核心模块说明

📌 knowledge_base.py --- 知识库引擎

这是整个系统的心脏,职责包括:

  • 文档解析:调用 document_parser.py 提取各类文档的文本内容
  • 文本分块:可配置块大小(默认 800 字符)和重叠(默认 120 字符)
  • Embedding 生成:使用本地 Embedding 模型(默认 Qwen3-Embedding-0.6B)将文本向量化
  • FAISS 索引构建:将向量存入 FAISS 索引,支持 GPU 加速
  • 检索与 Rerank:向量检索候选文档 → Reranker 二次排序
  • 对话生成:将检索结果与用户问题组装 Prompt,调用 Chat 模型生成回答
📌 universal_llm_client.py --- 通用 LLM 客户端

统一的 LLM 调用层,通过 UniversalLLMClient 类屏蔽不同厂商 API 的差异:

提供商 支持模型 base_url
OpenAI GPT-4, GPT-3.5-Turbo https://api.openai.com/v1
DeepSeek deepseek-chat, deepseek-coder https://api.deepseek.com/v1
通义千问 qwen-max, qwen-plus https://dashscope.aliyuncs.com/compatible-mode/v1
豆包 doubao-pro-32k https://ark.cn-beijing.volces.com/api/v3
xAI grok-beta https://api.x.ai/v1
Gemini gemini-pro https://generativelanguage.googleapis.com/v1beta
Kimi moonshot-v1-32k https://api.moonshot.cn/v1
LM Studio 自定义模型 http://localhost:1234/v1

底层基于 OpenAI Python SDK 的兼容接口,上层支持对话、向量检索、Rerank 三类模型调用。

📌 document_parser.py --- 文档解析器

支持以下格式的文档解析:

格式 解析方式 是否需要 OCR
DOCX ✅ 直接解析
DOC ✅ 直接解析
XLS / XLSX ✅ 直接解析
TXT ✅ 直接解析
Markdown ✅ 直接解析
PDF 🔧 需 OCR 引擎
图片 🔧 需 OCR 引擎
OFD 🔧 需 OCR 引擎

OCR 功能支持两种引擎:

  • llm:使用本地大语言模型(如 Qwen2-VL)进行文档理解,适合复杂版面
  • paddleocr:使用 PaddleOCR 进行文字识别,适合简单文字提取
📌 store/ --- 存储层

采用接口抽象 + 多实现的设计模式:

复制代码
store/

├── interfaces.py # 存储接口定义

├── memory_store.py # 内存存储(开发/测试用)

├── db/ # 数据库存储(MySQL / PostgreSQL)

└── redis/ # Redis 存储(会话持久化)
  • 会话存储:支持 memory(内存)或 redis(持久化)两种后端
  • 消息存储:支持 memorymysqlpostgresql 三种后端
  • 当使用 Redis 作为会话后端时,Session ID 直接使用 Redis 键,支持独立部署的会话持久化
📌 api.py --- HTTP API 层

基于 FastAPI 构建,提供完整的 RESTful API,包括:

  • 知识库 CRUD(创建、删除、列表、文档上传)
  • 对话接口(支持 SSE 流式)
  • 模型配置管理
  • 会话管理

API 文档访问地址:http://localhost:5000/api-docshttp://localhost:5000/docs/


四、配置体系

4.1 核心配置项 (config.json)

json

{ "server": { "host": "0.0.0.0", "port": 5000 }, "search": { "default_k": 2, "max_search_results": 3, "min_source_similarity": 0.55 }, "db": { "backend": "mysql", "mysql": {...}, "postgresql": {...} }, "session": { "backend": "redis", "redis": {...} }, "knowledge_base": { "embedding": { "model": "Qwen/Qwen3-Embedding-0.6B", "device": "auto" }, "rerank": { "model": "Qwen/Qwen3-Reranker-0.6B" }, "chat": { "model": "qwen/qwen3.5-35b-a3b", "use_lm_studio": true }, "lm_studio": { "base_url": "http://127.0.0.1:1234", "chat_model": "qwen/qwen3.5-35b-a3b" }, "chunking": { "size": 800, "overlap": 120 }, "retrieval": { "candidate_multiplier": 8, "min_candidates": 30, "embed_weight": 0.35, "rerank_weight": 0.65 } }, "chat_context": { "enabled": true, "max_turns": 6 }, "logging": { "level": "INFO", "keep_days": 7 } }

4.2 关键配置解读

配置项 作用
search.default_k 默认返回的文档片段数
search.min_source_similarity 最低相似度阈值,低于此值的候选将被过滤
knowledge_base.chunking.size/overlap 文档分块大小与重叠字符数
knowledge_base.retrieval.embed_weight/rerank_weight Embedding 与 Rerank 的融合权重(0.35 + 0.65 = 1.0)
chat_context.max_turns 对话上下文最大轮次,控制历史消息长度
session.backend 会话存储后端,生产环境建议使用 redis

五、Embedding / Reranker 硬件需求

规格 内存 GPU 显存 推荐场景
0.6B 8 GB 16GB ≥ 6GB(可选) 轻量部署、CPU 可跑
4B 16 GB 32GB ≥ 12GB 中等规模、GPU 加速推荐
8B 24 GB 64GB ≥ 24GB 大规模、GPU 必选

生产建议:

  • Embedding 模型必须加载在显存中,GPU 不可用时可退回 CPU,但速度会大幅下降
  • 模型权重与 FAISS 索引默认存放在 SSD 上,避免 HDD 影响加载速度
  • 多用户并发场景下,务必将 session.backend 设为 redis

六、Web UI 界面展示

💬 对话界面

支持多轮对话、知识库关联、SSE 流式输出,对话历史自动保存。

📚 知识库管理

支持知识库的创建、文档上传(批量)、删除、检索测试等操作。

⚙️ 模型配置

可视化配置 Embedding、Reranker、Chat 模型参数,无需手动编辑 JSON。


七、功能矩阵

功能 状态 说明
知识库向量存储 FAISS 索引
文档解析/OCR 多格式 + 可选 OCR
多轮对话 上下文记忆
SSE 流式输出 打字机效果
Rerank 重排序 提升检索精度
Web UI 内置界面
API 服务 REST + Swagger 文档
多用户会话隔离 user_id + session_id
Redis 持久化 会话/历史
数据库持久化 MySQL / PostgreSQL
对话历史导出 - 待开发
MCP 集成 - 待开发
SLA 指标监控 - 待开发
分布式部署 - 待开发

八、快速上手

环境要求

  • Python ≥ 3.10
  • 虚拟环境(推荐 venv
  • (可选)GPU + CUDA 驱动
  • (可选)Redis / MySQL / PostgreSQL

安装与启动

bash

# 1. 安装依赖 pip install -r requirements.txt # 2. 编辑配置 # 修改 config.json 中的数据库、Redis、模型路径等 # 3. 启动服务 python -m src.main # 或使用自定义参数 python -m src.main --host 127.0.0.1 --port 5000

服务启动后访问:

  • 🏠 首页:http://127.0.0.1:5000/ui/
  • 📚 知识库:http://127.0.0.1:5000/ui/kb.html
  • ⚙️ 模型配置:http://127.0.0.1:5000/ui/model.html
  • 📖 API 文档:http://127.0.0.1:5000/api-docs

常用命令行参数

参数 说明
--host 绑定地址
--port 绑定端口
--no-preload-embedding 启动时不预加载 Embedding 模型
--no-preload-reranker 启动时不预加载 Reranker 模型

环境变量

变量 说明
KB_CONFIG_PATH 自定义配置文件路径
KB_PRELOAD_EMBEDDING 是否预加载 Embedding 模型
KB_PRELOAD_RERANKER 是否预加载 Reranker 模型
KB_WARUMUP_STRICT 模型预热是否严格模式

九、安全建议

  • API Key 加密:config.json 中的 API Key 和数据库密码使用 encrypt_secret.py 工具加密存储
  • 生产部署:务必将 session.backend 设为 redis,确保会话数据持久化
  • 网络安全:API 默认不含鉴权,生产环境建议通过反向代理(Nginx)添加认证层
  • 模型文件:本地模型文件需确保存储路径安全,避免未授权访问

十、辅助工具集

工具 用途
download_models.py 下载 Embedding / Reranker 模型
download_optional_parser_models.py 下载文档解析器 / OCR 模型
ingest_to_kb_store.py 批量导入文档到知识库
encrypt_secret.py 加密配置中的敏感字段
migrate_to_sessions_table.py 迁移旧版会话数据
add_thinking_summary_column.py 添加思维链摘要字段
tune_threshold.py 调优检索相似度阈值
manage_service.ps1/sh Windows / Linux 服务管理

总结

WIKI 知识库是一个架构清晰、模块解耦、私有化友好的 RAG 系统。其核心设计思路是:

文档解析 → 文本分块 → 向量化 → FAISS 索引 → 向量检索 → Rerank 排序 → LLM 生成 → SSE 流式输出

整个流程在 knowledge_base.py 中串联,各模块通过接口解耦(存储层、LLM 客户端、文档解析器),使得替换模型、切换数据库、更换 OCR 引擎等操作都只需修改配置,无需改动核心逻辑。

如果你正在寻找一个可本地部署、支持多 LLM、具备完整 RAG 能力的知识库方案,这个项目值得深入体验。

相关推荐
Lenyiin2 小时前
Python数据类型与运算符:深入理解Python世界的基石
java·开发语言·python
小江的记录本2 小时前
【大语言模型】大语言模型——核心概念(预训练、SFT监督微调、RLHF/RLAIF对齐、Token、Embedding、上下文窗口)
java·人工智能·后端·python·算法·语言模型·自然语言处理
坐吃山猪2 小时前
Python04_序列和字符串
python
tang7451639622 小时前
mac的ideal中调用driver = webdriver.Chrome() 启动不了的原因
chrome·python·macos
码云数智-大飞2 小时前
CSS 优先级详解:告别样式冲突,掌控网页“层叠”艺术
人工智能·python·tensorflow
迦南的迦 亚索的索2 小时前
PYTHON_DAY21_数据分析
开发语言·python·数据分析
阿Y加油吧2 小时前
栈的经典应用:字符串解码 & 每日温度 深度解析
数据结构·python·算法
ID_180079054732 小时前
如何使用 Python 调用小红书笔记评论 API 时进行并发控制?
开发语言·笔记·python
树下水月2 小时前
使用python 一键生成,PGSQL的数据字典
python