基于 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
# 克隆项目
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.txtcp .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 |
docker-compose up -d启动服务后,通过 Gradio 前端(http://localhost:7860)上传 PDF/TXT 文档到知识库。
也可以将 PDF 文件放入 input/ 目录,通过脚本批量导入:
python vectorSave.py# 启动 FastAPI 后端 (端口 8012)
python main.py
# 启动 Gradio 前端 (端口 7860)
python webUI.py兼容 OpenAI Chat Completions 格式:
{
"messages": [{"role": "user", "content": "张三九的基本信息是什么?"}],
"stream": false,
"userId": "user123",
"conversationId": "conv456"
}上传 PDF/TXT 文档到知识库(multipart/form-data):
curl -X POST http://localhost:8012/v1/documents/upload \
-F "file=@example.pdf"返回已入库的文档列表。
删除指定文档,同时清理 ChromaDB 向量和 BM25 语料库。
清空整个知识库(向量库 + BM25 + 元数据),用于清理旧数据后重新上传。
知识库问答:Agent 检测到问题与已上传文档相关,走知识库检索
用户: 李四六的健康档案信息是什么?
助手: 根据李四六的健康档案,她对阿司匹林过敏,曾出现皮疹和轻度呼吸困难的症状 [来源: 健康档案.pdf]
联网搜索:Agent 检测到问题与知识库文档无关,自动联网搜索
用户: 嬴政是谁?
助手: 嬴政是中国历史上著名的政治人物,也是中国第一个称帝的君主,被称为秦始皇... [来源: 联网搜索]
- Agent 框架: LangGraph
- LLM: 通义千问 (qwen-max)
- 向量数据库: ChromaDB
- 关系数据库: PostgreSQL + pgvector
- 重排序: BGE Reranker (硅基流动)
- 后端: FastAPI + Uvicorn
- 前端: Gradio