Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Agentic-RAG v2 智能知识问答系统

版本:2.0.0 | Python:3.11+ | 状态:稳定版

基于 LangGraph 工作流 + 混合检索 + LLM 评测的 Agentic RAG 知识问答系统。前后端分离:后端 FastAPI 提供 /api/v1 接口,前端 Next.js 提供聊天门面。系统核心是一条 4 节点 LangGraph 工作流(查询路由 → 检索协调 → 答案生成 → 质量检查,带 Self-RAG 反思重试),配合向量 / BM25 / 混合三种检索策略与启发式重排序,并通过 LLM Judge 评测与 A/B 测试框架保障回答质量。

核心特性

  • LangGraph 工作流:4 节点图(query_router → retrieval_coordinator → answer_generator → quality_checker),条件边驱动 Self-RAG 反思重试,状态对象内嵌 QueryState
  • 混合检索:RetrievalRouter 按规则选择 Vector / BM25 / Hybrid 策略,HybridFusion 使用 RRF(k=60)融合,Reranker 启发式 + 外部 API 降级精排
  • LLM 评测:Evaluator 用 LLM Judge 多维度评分 + 启发式降级,输出结构化 EvaluationResult
  • A/B 测试:ABTestFramework 一致性分组 + 统计分析(scipy 可选,缺失时纯 Python 兜底)
  • 容错存储:QdrantStore / MySQLStore / RedisCache 全异步,lifespan 容错初始化(无外部服务也能启动)
  • 集成测试:TestClient(create_app()) 系统级端到端,真实工作流不 mock

架构概览

模块 职责
config/ Pydantic v2 配置中心(必填校验 + 计算属性)
models/ 8 枚举 + 11 数据模型 + 对话记忆模型
agents/ LangGraph 工作流(graph/)+ QueryRouter / RetrievalCoordinator 两个 Agent
storage/ QdrantStore / MySQLStore / RedisCache(全异步)
retrieval/ RetrievalRouter + 三策略(Vector / BM25 / Hybrid)+ Reranker
evaluation/ Evaluator(LLM Judge)+ ABTestFramework
api/v2/ FastAPI 应用工厂(create_app + lifespan)+ routes(health / query)
frontend/ Next.js 16 + React 19 聊天门面(App Router)
tests/ 单元测试 + integration/ 系统级端到端
main.py uvicorn 入口(加载 create_app)

数据流:用户查询 → QueryRouter(LLM 分析意图 + 策略,规则降级)→ RetrievalCoordinator(调度 Vector/BM25/Hybrid + 重排序)→ LangGraph 工作流生成答案 → Evaluator(LLM 评测)→ ABTestFramework(配置对比)

快速开始

1. 环境准备

# 克隆项目
git clone <repo-url>
cd Agentic-RAG-Knowledge-Assistant

# 创建虚拟环境(推荐)
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate

2. 配置环境变量

cp .env.example .env
# 编辑 .env,至少填入 OPENAI_API_KEY

主要配置项:

配置项 说明 必填
OPENAI_API_KEY LLM 调用密钥(OpenAI / DeepSeek / 通义千问等兼容 API 均可) 是
OPENAI_BASE_URL LLM API 地址 是
OPENAI_MODEL 模型名称 是
SECRET_KEY 应用密钥(JWT / 会话签名等) 是
QDRANT_HOST / QDRANT_PORT Qdrant 服务地址 是
MYSQL_* MySQL 连接信息 否
REDIS_* Redis 连接信息 否
RERANKER_MODEL / SERPER_API_KEY / NEO4J_* 高级功能 否

未配置外部服务时系统仍可启动(lifespan 容错初始化),但检索 / 缓存相关功能不可用。

3. 启动后端

pip install -r requirements.txt
python main.py

后端启动在 http://localhost:8000,交互式 API 文档:http://localhost:8000/docs

4. 启动前端

cd frontend
npm install
npm run dev

前端启动在 http://localhost:3000,通过代理转发 /api/v1 请求到后端。

Docker 部署

一键拉起后端 + 前端 + Qdrant + MySQL + Redis:

cp .env.example .env   # 填入 OPENAI_API_KEY 等敏感配置
docker compose up -d --build

服务拓扑:frontend(3000) → app(8000) → qdrant(6333) / mysql(3306) / redis(6379)

常用命令:

docker compose ps           # 查看服务状态
docker compose logs -f app  # 跟踪后端日志
docker compose down         # 停止(保留数据卷)

完整部署细节(环境变量、网络、健康检查、Neo4j 启用等)见 docs/deployment.md。

测试

# 全套件(单元 + 集成)
python -m pytest tests/ --no-cov -q

# 仅集成测试(系统级端到端)
python -m pytest tests/integration/ -v --no-cov

# 覆盖率报告
python -m pytest tests/ --cov

集成测试以 TestClient(create_app()) 启动完整应用,跑真实 LangGraph 工作流(不 mock),覆盖 health、完整查询、问候分支、错误处理、多轮无状态泄漏等系统级场景。工作流为占位实现(不调真实 LLM),无外部服务也能稳定运行。

API 文档

启动后端后访问 Swagger UI:

当前端点:

方法 路径 说明
GET /api/v1/health 健康检查(status / version / services 状态)
POST /api/v1/query 知识问答(执行 LangGraph 工作流,返回 answer + sources + confidence)

POST /api/v1/query 请求体示例:

{
  "query": "什么是机器学习",
  "user_id": 1,
  "conversation_context": null
}

响应示例:

{
  "query_id": "a1b2c3...",
  "answer": "机器学习是...",
  "sources": ["doc_001", "doc_002"],
  "confidence": 0.85,
  "processing_time": 0.42,
  "retrieved_count": 2
}

项目结构

Agentic-RAG-Knowledge-Assistant/
├── main.py                       # uvicorn 入口(加载 create_app)
├── requirements.txt              # Python 依赖
├── Dockerfile                    # 后端镜像(python:3.11-slim)
├── docker-compose.yml            # 一键编排(app + frontend + 三个数据服务)
├── .env.example                  # 环境变量模板
│
├── config/                       # 配置
│   └── settings.py               # Pydantic v2 配置中心
│
├── models/                       # 数据模型
│   ├── enums.py                  # 8 个枚举(QueryIntent / TaskStatus / DocumentSource 等)
│   ├── schemas.py                # 11 个模型(QueryState / Document / AnswerResult 等)
│   └── memory.py                 # 对话记忆模型
│
├── agents/                       # LangGraph 工作流 + Agent
│   ├── graph/                    # 4 节点工作流(workflow.py + state.py)
│   ├── query_router.py           # 查询路由 Agent(LLM 分析 + 规则降级)
│   └── retrieval_coordinator.py  # 检索协调 Agent(策略调度 + 重排序)
│
├── storage/                      # 异步存储层
│   ├── qdrant_store.py           # Qdrant 向量存储
│   ├── mysql_store.py            # MySQL 异步访问
│   └── redis_cache.py            # Redis 缓存
│
├── retrieval/                    # 检索系统
│   ├── router.py                 # RetrievalRouter(规则选策略)
│   ├── strategies.py             # Vector / BM25 / Hybrid(RRF 融合)
│   └── reranker.py               # 启发式 + 外部 API 重排序
│
├── evaluation/                   # 评测体系
│   ├── evaluator.py              # LLM Judge 多维度评测
│   └── ab_testing.py             # A/B 测试框架(统计分析)
│
├── api/v2/                       # FastAPI 应用
│   ├── app.py                    # create_app + lifespan + 异常处理
│   └── routes/
│       ├── health.py             # GET /api/v1/health
│       └── query.py              # POST /api/v1/query
│
├── frontend/                     # Next.js 16 前端
│   ├── package.json              # next / react / react-dom
│   └── src/app/                  # App Router(layout.tsx / page.tsx)
│
├── tests/                        # 测试
│   ├── conftest.py               # 共享 fixture
│   ├── test_*.py                 # 单元 / 端点契约测试
│   └── integration/              # 系统级端到端集成测试
│       └── test_system.py
│
├── utils/                        # 工具
│   ├── logger.py                 # 日志(loguru)
│   └── helpers.py                # 重试装饰器等
│
└── docs/                         # 文档
    ├── deployment.md             # Docker 部署详解
    ├── development-guide.md      # 开发指南
    └── PROGRESS.md               # 重构进度总结

技术栈

层级 技术
语言 Python 3.11
后端框架 FastAPI + Uvicorn
工作流 LangGraph
配置 Pydantic v2
向量数据库 Qdrant
关系数据库 MySQL 8
缓存 Redis 7
LLM 接口 OpenAI 兼容(支持 DeepSeek / 通义千问等)
中文检索 jieba + rank_bm25
前端 Next.js 16 + React 19 + TypeScript(App Router)
容器化 Docker + Docker Compose
测试 pytest + pytest-asyncio + httpx TestClient

License

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages