# LightRAG 技术架构文档 ## 1. 项目概述 LightRAG 是一个基于图知识表示的检索增强生成(Retrieval-Augmented Generation, RAG)框架。它通过从文档中提取实体和关系构建知识图谱,结合多模态检索策略(本地、全局、混合、朴素、混合增强)来增强信息检索与问答能力。 - **项目地址**: https://github.com/HKUDS/LightRAG - **Python 版本要求**: >= 3.10 - **许可证**: MIT --- ## 2. 整体架构 LightRAG 采用分层架构设计,主要由以下层次组成: ``` ┌─────────────────────────────────────────────────────────────┐ │ 用户交互层 (Presentation) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ WebUI │ │ REST API │ │ Ollama API │ │ │ │ (React 19) │ │ (FastAPI) │ │ (兼容接口) │ │ │ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │ └─────────┼─────────────────┼───────────────────┼────────────┘ │ │ │ ┌─────────▼─────────────────▼───────────────────▼────────────┐ │ API 服务层 (API Server) │ │ lightrag/api/lightrag_server.py │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ 文档路由 │ │ 查询路由 │ │ 图谱路由 │ │ │ │ document_ │ │ query_routes │ │ graph_routes │ │ │ │ routes │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ └────────────────────────────┬─────────────────────────────────┘ │ ┌────────────────────────────▼─────────────────────────────────┐ │ 核心引擎层 (Core Engine) │ │ lightrag/lightrag.py │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ LightRAG 主类 (协调器) │ │ │ │ - 文档插入 (ainsert) │ │ │ │ - 查询处理 (aquery) │ │ │ │ - 存储管理 (initialize_storages / finalize_storages) │ │ │ └────────────────────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 核心操作逻辑 (operate.py) │ │ │ │ - 实体/关系提取 (extract_entities) │ │ │ │ - 文本分块 (chunking_by_token_size) │ │ │ │ - 知识图谱查询 (kg_query) │ │ │ │ - 朴素查询 (naive_query) │ │ │ │ - 节点边合并 (merge_nodes_and_edges) │ │ │ └────────────────────────────────────────────────────────┘ │ └────────────────────────────┬─────────────────────────────────┘ │ ┌────────────────────────────▼─────────────────────────────────┐ │ 存储抽象层 (Storage Abstraction) │ │ lightrag/base.py │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ ┌─────────┐ │ │ │ BaseKVStorage│ │BaseVectorStorage│ │BaseGraph│ │BaseDoc │ │ │ │ │ │ │ │Storage │ │Status │ │ │ └──────┬───────┘ └──────┬───────┘ └────┬─────┘ └────┬────┘ │ └─────────┼────────────────┼──────────────┼────────────┼──────┘ │ │ │ │ ┌─────────▼────────────────▼──────────────▼────────────▼──────┐ │ 存储实现层 (Storage Implementations) │ │ lightrag/kg/ │ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────────┐ │ │ │ KV 存储 │ │ 向量存储 │ │ 图存储 │ │ │ │ JsonKVStorage│ │NanoVectorDB │ │NetworkXStorage │ │ │ │ RedisKVStorage│ │MilvusVector │ │Neo4JStorage │ │ │ │ PGKVStorage │ │PGVector │ │PGGraphStorage │ │ │ │ MongoKVStorage│ │FaissVector │ │MongoGraphStorage │ │ │ │ OpenSearchKV │ │QdrantVector │ │MemgraphStorage │ │ │ │ │ │OpenSearchVec│ │OpenSearchGraph │ │ │ └─────────────┘ └─────────────┘ └────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ LLM 提供商层 (LLM Providers) │ │ lightrag/llm/ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────────┐ │ │ │ OpenAI │ │ Ollama │ │ Azure │ │ Anthropic │ │ │ │ Gemini │ │ Bedrock │ │ Zhipu │ │ HuggingFace │ │ │ │ Jina │ │ vLLM │ │ LMDeploy │ │ LlamaIndex │ │ │ └──────────┘ └──────────┘ └──────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 3. 核心模块详解 ### 3.1 主协调器 (lightrag.py) `LightRAG` 类是整个框架的核心入口,主要职责包括: - **生命周期管理**: 实例化后必须调用 `await rag.initialize_storages()` 初始化存储后端 - **文档插入**: `ainsert()` 支持单文档、批量文档、自定义 ID、文件路径引用 - **查询处理**: `aquery()` 支持多种查询模式与参数配置 - **存储清理**: `finalize_storages()` 用于优雅关闭与资源释放 关键配置参数: - `working_dir`: 工作目录 - `workspace`: 工作空间隔离 - `max_parallel_insert`: 最大并行插入数(默认 2,建议最大 10) - `kv_storage` / `vector_storage` / `graph_storage` / `doc_status_storage`: 存储后端选择 ### 3.2 核心操作逻辑 (operate.py) 包含所有索引与查询的核心算法: | 函数 | 职责 | |------|------| | `chunking_by_token_size` | 基于 Token 大小的文本分块 | | `extract_entities` | 使用 LLM 从文本中提取实体和关系 | | `kg_query` | 基于知识图谱的查询(local/global/hybrid) | | `naive_query` | 纯向量检索查询(不依赖知识图谱) | | `merge_nodes_and_edges` | 合并节点与边,处理冲突与重复 | | `rebuild_knowledge_from_chunks` | 从文本块重建知识 | ### 3.3 提示词模板 (prompt.py) 集中管理所有 LLM 提示词: - `entity_extraction_system_prompt`: 实体与关系提取的系统提示 - `entity_extraction_user_prompt`: 用户提示模板 - 支持多语言输出与自定义分隔符 ### 3.4 类型定义 (types.py) Pydantic 模型定义: - `KnowledgeGraph`: 知识图谱结构(节点 + 边) - `KnowledgeGraphNode` / `KnowledgeGraphEdge`: 节点与边模型 - `GPTKeywordExtractionFormat`: 关键词提取格式 --- ## 4. 存储层架构 LightRAG 使用 **4 种存储类型**,每种都有多种可插拔实现: ### 4.1 存储类型说明 | 存储类型 | 用途 | 抽象基类 | |---------|------|---------| | **KV_STORAGE** | LLM 响应缓存、文本块、文档信息 | `BaseKVStorage` | | **VECTOR_STORAGE** | 实体/关系/文本块的嵌入向量 | `BaseVectorStorage` | | **GRAPH_STORAGE** | 实体-关系图结构 | `BaseGraphStorage` | | **DOC_STATUS_STORAGE** | 文档处理状态跟踪 | `DocStatusStorage` | ### 4.2 存储实现矩阵 | 后端 | KV | Vector | Graph | DocStatus | 环境变量要求 | |------|----|--------|-------|-----------|-------------| | **JSON (文件)** | ✅ | - | - | ✅ | 无 | | **NanoVectorDB** | - | ✅ | - | - | 无 | | **NetworkX** | - | - | ✅ | - | 无 | | **PostgreSQL + pgvector** | ✅ | ✅ | ✅ | ✅ | POSTGRES_* | | **Neo4j** | - | - | ✅ | - | NEO4J_* | | **MongoDB** | ✅ | ✅ | ✅ | ✅ | MONGO_* | | **Redis** | ✅ | - | - | ✅ | REDIS_URI | | **Milvus** | - | ✅ | - | - | MILVUS_* | | **Qdrant** | - | ✅ | - | - | QDRANT_URL | | **Faiss** | - | ✅ | - | - | 无 | | **Memgraph** | - | - | ✅ | - | MEMGRAPH_URI | | **OpenSearch** | ✅ | ✅ | ✅ | ✅ | OPENSEARCH_HOSTS | ### 4.3 工作空间隔离 不同存储类型实现工作空间隔离的方式: - **文件型存储**: 子目录隔离 - **集合型存储**: 集合名前缀 - **关系型数据库**: workspace 字段过滤 - **Qdrant**: payload 分区 --- ## 5. 查询模式 LightRAG 支持 6 种查询模式: | 模式 | 说明 | 适用场景 | |------|------|---------| | **local** | 基于特定实体的上下文相关检索 | 精准事实查询 | | **global** | 基于社区摘要的广度知识检索 | 概述性、总结性问题 | | **hybrid** | 结合 local 与 global | 平衡精度与广度 | | **naive** | 纯向量搜索,不依赖知识图谱 | 快速简单查询 | | **mix** | 整合知识图谱与向量检索(默认) | 推荐配合 Reranker 使用 | | **bypass** | 直接透传,不走 RAG | 特殊调试场景 | 查询参数 `QueryParam` 关键字段: - `top_k`: 检索的实体/关系数量 - `chunk_top_k`: 文本块检索数量 - `max_entity_tokens` / `max_relation_tokens` / `max_total_tokens`: Token 预算控制 - `enable_rerank`: 启用重排序 - `stream`: 流式输出 --- ## 6. API 服务架构 ### 6.1 FastAPI 服务 (lightrag/api/) ``` lightrag/api/ ├── lightrag_server.py # FastAPI 应用主入口 ├── run_with_gunicorn.py # Gunicorn 多进程启动 ├── auth.py # JWT/OAuth2 认证 ├── passwords.py # 密码哈希 ├── config.py # 全局配置与参数解析 ├── utils_api.py # API 工具函数 ├── runtime_validation.py # 运行时校验 ├── gunicorn_config.py # Gunicorn 配置 └── routers/ ├── document_routes.py # 文档上传、管理、删除 ├── query_routes.py # 查询接口 ├── graph_routes.py # 图谱操作 └── ollama_api.py # Ollama 兼容 API ``` ### 6.2 认证机制 - **JWT Token**: 基于 PyJWT / python-jose - **OAuth2 Password Flow**: 用户名密码登录 - **API Key**: `LIGHTRAG_API_KEY` 头部验证 - **多账户支持**: `AUTH_ACCOUNTS` 环境变量配置 ### 6.3 Ollama 兼容 API 模拟 Ollama 聊天模型接口,使 AI 聊天机器人(如 Open WebUI)可以直接调用 LightRAG。 --- ## 7. WebUI 前端架构 ### 7.1 技术栈 - **框架**: React 19 + TypeScript - **构建工具**: Vite 7 - **包管理器**: Bun - **样式**: Tailwind CSS 4 - **路由**: React Router DOM 7 - **状态管理**: Zustand 5 - **国际化**: i18next + react-i18next(支持 11 种语言) - **图可视化**: Sigma.js + Graphology + @react-sigma - **UI 组件**: Radix UI + shadcn/ui 风格 - **Markdown 渲染**: react-markdown + KaTeX ### 7.2 目录结构 ``` lightrag_webui/src/ ├── App.tsx # 根组件 ├── AppRouter.tsx # 路由配置 ├── main.tsx # 入口 ├── index.css # 全局样式 ├── api/ │ └── lightrag.ts # API 客户端 ├── components/ # 通用组件 │ ├── AppSettings.tsx │ ├── ThemeProvider.tsx │ └── LanguageToggle.tsx ├── contexts/ # React Context ├── features/ # 页面级功能模块 │ ├── LoginPage.tsx │ ├── DocumentManager.tsx │ ├── GraphViewer.tsx │ ├── RetrievalTesting.tsx │ └── ApiSite.tsx ├── hooks/ # 自定义 Hooks │ ├── useLightragGraph.tsx │ └── useRandomGraph.tsx ├── locales/ # 翻译文件 (en, zh, ja, de, fr, ...) ├── stores/ # Zustand 状态存储 │ ├── graph.ts │ ├── settings.ts │ └── state.ts └── utils/ # 工具函数 ``` ### 7.3 功能模块 - **文档管理**: 上传、查看状态、删除文档 - **图谱可视化**: 交互式知识图谱浏览与搜索 - **检索测试**: 查询调试与结果查看 - **API 文档**: 内置 Swagger UI - **设置面板**: 主题切换、语言切换、系统配置 --- ## 8. LLM 提供商集成 ### 8.1 支持的提供商 | 提供商 | 模块文件 | 说明 | |--------|---------|------| | OpenAI | `llm/openai.py` | GPT-4, GPT-4o, Embedding | | Azure OpenAI | `llm/azure_openai.py` | 企业版 OpenAI | | Anthropic | `llm/anthropic.py` | Claude 系列 | | Google Gemini | `llm/gemini.py` | Gemini Pro | | Ollama | `llm/ollama.py` | 本地开源模型 | | AWS Bedrock | `llm/bedrock.py` | 亚马逊云模型 | | Zhipu AI | `llm/zhipu.py` | 智谱 AI | | HuggingFace | `llm/hf.py` | 开源模型 | | Jina AI | `llm/jina.py` | Embedding/Rerank | | NVIDIA | `llm/nvidia_openai.py` | NVIDIA API | | vLLM | `llm/vllm.py` | 高性能推理 | | LMDeploy | `llm/lmdeploy.py` | 模型部署 | ### 8.2 嵌入函数规范 使用 `@wrap_embedding_func_with_attrs` 装饰器声明维度与最大 Token: ```python @wrap_embedding_func_with_attrs(embedding_dim=1536, max_token_size=8192) async def custom_embed(texts: list[str]) -> np.ndarray: return await openai_embed.func(texts, model="text-embedding-3-large") ``` ### 8.3 重排序 (Reranker) - 显著改善检索质量 - 推荐模型: `BAAI/bge-reranker-v2-m3`, Jina Rerankers - 在 `mix` 模式下效果最佳 --- ## 9. 数据流 ### 9.1 索引流程 (Document Insertion) ``` 原始文档 │ ▼ ┌─────────────┐ │ 文本分块 │ chunking_by_token_size │ (Token 级) │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ 实体提取 │ extract_entities (LLM) │ 关系提取 │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ 知识合并 │ merge_nodes_and_edges │ 去重消歧 │ └──────┬──────┘ │ ▼ ┌─────────────────────────────────┐ │ 存储写入 │ │ • KV: 文本块、LLM 缓存 │ │ • Vector: 实体/关系/块 Embedding│ │ • Graph: 节点与边 │ │ • DocStatus: 处理状态 │ └─────────────────────────────────┘ ``` ### 9.2 查询流程 (Query) ``` 用户查询 │ ▼ ┌─────────────┐ ┌─────────────┐ │ 关键词提取 │────▶│ 查询模式选择 │ │ (LLM/规则) │ │ local/global│ └─────────────┘ │ /hybrid/mix │ └──────┬──────┘ │ ┌────────────┼────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ KG 检索 │ │ Vector │ │ Rerank │ │ 子图 │ │ 相似度 │ │ 重排序 │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ └────────────┼────────────┘ ▼ ┌─────────────┐ │ 上下文组装 │ │ (Token 预算)│ └──────┬──────┘ ▼ ┌─────────────┐ │ LLM 生成 │ │ 最终回答 │ └─────────────┘ ``` --- ## 10. 部署架构 ### 10.1 部署方式 | 方式 | 文件/命令 | 适用场景 | |------|----------|---------| | **Python 包** | `uv tool install "lightrag-hku[api]"` | 快速试用 | | **源码运行** | `uv sync --extra api && lightrag-server` | 开发调试 | | **Docker** | `docker build -t lightrag .` | 容器化部署 | | **Docker Compose** | `docker-compose up` | 完整服务栈 | | **Kubernetes** | `k8s-deploy/` | 生产级集群 | | **Gunicorn** | `lightrag-gunicorn` | 多工作进程生产 | ### 10.2 Docker Compose 完整栈 包含服务: - LightRAG Server - PostgreSQL (可选存储) - Neo4j (可选图数据库) - Redis (可选缓存) - Qdrant / Milvus (可选向量数据库) ### 10.3 环境配置 主配置文件 `.env` 关键段: - 服务器设置 (HOST, PORT, CORS) - 存储后端连接串 - LLM 与 Embedding 配置 - Reranker 配置 - 认证配置 (AUTH_ACCOUNTS, LIGHTRAG_API_KEY) --- ## 11. 测试体系 ### 11.1 测试结构 ``` tests/ ├── conftest.py # 共享 Fixture ├── test_auth.py # 认证测试 ├── test_chunking.py # 分块测试 ├── test_batch_embeddings.py # Embedding 批处理 ├── test_dimension_mismatch.py # 维度兼容性 └── ... ``` ### 11.2 测试标记 | 标记 | 说明 | 运行方式 | |------|------|---------| | `offline` | 离线单元测试(默认) | `pytest tests` | | `integration` | 集成测试(需外部服务) | `pytest tests --run-integration` | | `requires_db` | 需要数据库 | - | | `requires_api` | 需要 API 密钥 | - | --- ## 12. 技术栈总结 ### 后端 | 类别 | 技术 | |------|------| | 语言 | Python 3.10+ | | Web 框架 | FastAPI | | 异步 | asyncio | | 数据验证 | Pydantic | | 图计算 | NetworkX | | 向量检索 | NanoVectorDB / FAISS / Milvus / Qdrant / pgvector | | 数据库 | PostgreSQL / MongoDB / Redis / Neo4j | | 认证 | JWT + OAuth2 + bcrypt | | 日志 | 内置 logging | | 包管理 | uv (推荐) / pip | ### 前端 | 类别 | 技术 | |------|------| | 框架 | React 19 | | 语言 | TypeScript 5.9 | | 构建 | Vite 7 | | 样式 | Tailwind CSS 4 | | 路由 | React Router DOM 7 | | 状态 | Zustand 5 | | 图可视化 | Sigma.js 3 + Graphology | | 组件库 | Radix UI | | 国际化 | i18next | | 测试 | Bun Test | --- ## 13. 关键设计决策 1. **异步优先**: 所有 I/O 操作(LLM 调用、存储访问)均采用 async/await 模式 2. **存储可插拔**: 通过抽象基类实现不同存储后端的无缝切换 3. **多查询模式**: 针对不同场景提供 local/global/hybrid/mix 等多种检索策略 4. **工作空间隔离**: 支持多租户场景下的数据隔离 5. **LLM 缓存**: 对 LLM 响应进行缓存以降低成本与延迟 6. **Token 预算管理**: 查询阶段精确控制上下文 Token 使用量 7. **Ollama 兼容**: 通过兼容接口降低接入成本 --- *文档生成日期: 2026/04/28* *基于 LightRAG 主分支代码分析*