Skip to main content

Reflection-RAG

Project description

ReflectionRAG

基于 LangGraph 构建的自适应 RAG 智能问答系统,集成 通义千问 (Qwen) 大模型、Qdrant 向量数据库与 Tavily 网络搜索,实现文档解析 → 智能分块 → 向量化存储 → 问题路由 → 检索增强生成的全链路闭环。


项目特点

  • 🔀 智能路由:LLM 自动判断走本地向量库检索还是网络搜索
  • 🔄 自适应反馈闭环:检索文档不相关时自动重写 Query 并重新检索
  • 文档相关性评分:LLM 对每篇检索文档进行 yes/no 评分,过滤噪声
  • 🛡️ 检索失败降级:检索或搜索失败时自动切换原始大模型直接回答
  • 📄 多格式文档解析:基于 MarkItDown 统一处理 PDF/Word/Excel/PPT
  • 🧠 语义感知分块:Markdown 标题层级识别 + Token 估算自适应分块
  • 📊 丰富元数据:每个 Chunk 附带章节路径、来源文件和位置信息

工作流

用户问题
   │
   ▼
┌──────────┐
│ 问题路由  │ ◄── LLM 判断:本地 RAG 还是网络搜索
└────┬─────┘
     │
  ┌──┴──────────┐
  ▼             ▼
┌──────┐    ┌──────────┐
│本地检索│    │ 网络搜索  │ ◄── Tavily Search API
└──┬───┘    └────┬─────┘
   │             │
   ▼             │
┌──────────┐     │
│ 文档评分  │     │
└────┬─────┘     │
     │           │
  ┌──┴───┐      │
  ▼      ▼      │
 yes    no      │
  │      │      │
  │   ┌──────────────┐
  │   │ 问题重写/改写  │ ◄── 优化 Query 后重新检索
  │   └──────┬───────┘
  │          │
  │    ┌─────┘ (循环)
  │    │
  ▼    ▼
┌──────────┐
│ 大模型生成 │ ◄── RAG 上下文 + LLM
└────┬─────┘
     │
  ┌──┴──────┐
  ▼         │
 yes       no
  │         │
  ▼         ▼
RAG回答   降级回答 ◄── 原始模型直接回答

项目结构

.
├── graph.py              # LangGraph 工作流编排
├── router.py             # LLM 链定义(路由/评分/重写/生成/降级)
├── RAGtool.py            # 文档解析 → 分块 → 向量化 → 存储 → 检索
├── requirements.txt      # 依赖清单
├── test.py               # 测试脚本
├── .env                  # 环境变量(需自行创建)
└── pdf_file/             # 待索引的 PDF 文件

快速开始

1. 环境准备

git clone https://github.com/jyh20030112/ReflectionRAG.git
cd ReflectionRAG
pip install -r requirements.txt

2. 配置环境变量

创建 .env 文件:

API_KEY=sk-your-dashscope-key
EMBEDDING_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
EMBEDDING_MODEL=text-embedding-v3
CHAT_MODEL=qwen3-max

QDRANT_URL=https://your-cluster.qdrant.io
QDRANT_API_KEY=your-qdrant-key
QDRANT_COLLECTION=RAG_SEVER

TAVILY_API_KEY=tvly-your-tavily-key

3. 上传文档并写入向量库

from RAGtool import RAGTOOL

tool = RAGTOOL(file_path="./pdf_file/your-document.pdf")
result = tool.load_document()
print(result)

4. 启动问答

from graph import build_app

app = build_app()
result = app.invoke({"question": "大语言模型的底层机制是什么?"})
print(result["generation"])

核心模块

graph.py — LangGraph 工作流

节点 功能
route LLM 判断问题类型,决定走 RAG 还是 Web Search
vectorestore 调用 Qdrant 向量检索
web_search 调用 Tavily 网络搜索
grade_documents LLM 逐一评分文档相关性
transform_query 文档全不相关时重写 Query
generation 基于上下文调用大模型生成答案

router.py — LLM 链

用途
bulid_question_router() 结构化输出路由判断 (vectorstore/web_search)
build_retrieval_grader() 结构化输出文档相关性评分 (yes/no)
build_question_rewriter() 查询重写优化
build_rag_chain() RAG 上下文增强生成
build_model_chain() 降级时原始模型直接回答

RAGtool.py — 文档处理流水线

方法 功能
_enhanced_pdf_processing() MarkItDown PDF 增强解析
_split_paragraphs_with_headings() 按 Markdown 标题分段
_chunk_paragraphs() Token 估算自适应分块
_embed_chunks() 批量向量化 + Qdrant 分批写入
search() 语义检索返回 Top-K 结果

技术栈

类别 技术
工作流编排 LangGraph
LLM 框架 LangChain
大模型 通义千问 Qwen (DashScope API)
向量数据库 Qdrant Cloud
Embedding DashScope text-embedding-v3
网络搜索 Tavily Search API
文档解析 MarkItDown
环境管理 python-dotenv

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple_rag_reflect-0.1.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simple_rag_reflect-0.1.0-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file simple_rag_reflect-0.1.0.tar.gz.

File metadata

  • Download URL: simple_rag_reflect-0.1.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for simple_rag_reflect-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3b4ccbeaea8850cee388b392f21ff332cb09b5a5be485b213ad79c5d51950f5b
MD5 0ad3a80d8d81c3f61f93b58c77959381
BLAKE2b-256 8cb2b9e1cdab11c93ce92fc35efda91d3d4f26e6729add43006d425fca5993bc

See more details on using hashes here.

File details

Details for the file simple_rag_reflect-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: simple_rag_reflect-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for simple_rag_reflect-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6082ed05fb8a7cca0a42ef8fe7c39e7a25020102ef22e8bd3025818091bb10de
MD5 7b596c85905fe1c6b7e996cfd2861e07
BLAKE2b-256 fbdd7d7586d348e1e01c39b01cbcc1bc9cbe1a83e48662471ad1b31641ac6db2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page