Skip to content

wzbb66/knowledge

Repository files navigation

RAG 智能问答系统

基于 LangGraph 构建的 RAG (检索增强生成) 智能问答系统,支持文档检索、混合搜索、联网搜索、引用溯源和多轮对话记忆。

架构

用户输入 → Agent 分诊(基于文档列表判断) → 知识库检索 → Rerank 重排 → 相关性评分 → 生成回复
                   ↓ (无匹配)                       ↓ (不相关)
               联网搜索/直接回答                   查询改写 → 重新检索

核心特性:

  • 混合检索 — 向量检索 (ChromaDB) + 关键词检索 (BM25),双路召回
  • Rerank 精排 — 调用 BGE Reranker 模型对召回结果重排序
  • 相关性评分 — LLM 评估检索结果与问题的匹配度,不匹配时自动改写查询
  • 引用溯源 — 回答中标注信息来源 [来源: 文件名],方便验证
  • 智能分诊 — 根据知识库已上传文档列表自动判断是否需要检索,无匹配时可联网搜索
  • 会话记忆 — PostgreSQL 持久化,支持跨会话记忆和线程内上下文
  • 并行工具调用 — ThreadPoolExecutor 并行执行多个工具
  • 流式输出 — FastAPI SSE 流式响应 + Gradio 前端逐字展示
  • 文档管理 — 支持上传/删除/重置知识库,标题感知拆分

项目结构

.
├── main.py              # FastAPI 后端服务
├── webUI.py             # Gradio Web 前端
├── ragAgent.py          # LangGraph Agent 核心逻辑
├── vectorSave.py        # PDF 向量化入库脚本
├── test_Rag.py          # 测试脚本
├── prompts/             # Prompt 模板
│   ├── prompt_template_agent.txt
│   ├── prompt_template_generate.txt
│   ├── prompt_template_grade.txt
│   └── prompt_template_rewrite.txt
├── utils/
│   ├── config.py              # 统一配置
│   ├── llms.py                # LLM 初始化
│   ├── tools_config.py        # 工具装配
│   └── document_processor.py  # 文档拆分处理
├── input/               # 待处理的 PDF 文件
├── docker-compose.yml   # PostgreSQL 容器配置
├── .env.example         # 环境变量模板
└── requirements.txt

快速开始

1. 环境准备

# 克隆项目
git clone https://github.com/wzbb66/knowledge.git
cd knowledge

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

2. 配置环境变量

cp .env.example .env

编辑 .env 文件,填入你的 API Key:

变量 说明
DB_URI PostgreSQL 连接字符串
DASHSCOPE_API_KEY 通义千问 API Key
RERANK_API_KEY 硅基流动 Rerank API Key
SEARCH_API_KEY Tavily 搜索 API Key

3. 启动数据库

docker-compose up -d

4. 导入文档

启动服务后,通过 Gradio 前端(http://localhost:7860)上传 PDF/TXT 文档到知识库。

也可以将 PDF 文件放入 input/ 目录,通过脚本批量导入:

python vectorSave.py

5. 启动服务

# 启动 FastAPI 后端 (端口 8012)
python main.py

# 启动 Gradio 前端 (端口 7860)
python webUI.py

API 接口

POST /v1/chat/completions

兼容 OpenAI Chat Completions 格式:

{
  "messages": [{"role": "user", "content": "张三九的基本信息是什么?"}],
  "stream": false,
  "userId": "user123",
  "conversationId": "conv456"
}

POST /v1/documents/upload

上传 PDF/TXT 文档到知识库(multipart/form-data):

curl -X POST http://localhost:8012/v1/documents/upload \
  -F "file=@example.pdf"

GET /v1/documents/list

返回已入库的文档列表。

DELETE /v1/documents/{doc_id}

删除指定文档,同时清理 ChromaDB 向量和 BM25 语料库。

POST /v1/documents/reset

清空整个知识库(向量库 + BM25 + 元数据),用于清理旧数据后重新上传。

使用示例

知识库问答:Agent 检测到问题与已上传文档相关,走知识库检索

用户: 李四六的健康档案信息是什么?
助手: 根据李四六的健康档案,她对阿司匹林过敏,曾出现皮疹和轻度呼吸困难的症状 [来源: 健康档案.pdf]

联网搜索:Agent 检测到问题与知识库文档无关,自动联网搜索

用户: 嬴政是谁?
助手: 嬴政是中国历史上著名的政治人物,也是中国第一个称帝的君主,被称为秦始皇... [来源: 联网搜索]

技术栈

  • Agent 框架: LangGraph
  • LLM: 通义千问 (qwen-max)
  • 向量数据库: ChromaDB
  • 关系数据库: PostgreSQL + pgvector
  • 重排序: BGE Reranker (硅基流动)
  • 后端: FastAPI + Uvicorn
  • 前端: Gradio

About

LangGraph RAG 知识库系统 — 混合检索 / 文档管理 / 流式输出 / 引用溯源

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages