# LLM Index RAG 基于索引和搜索的知识检索系统(不使用向量模型和向量库) ## 特点 - **不依赖向量模型** - 使用传统信息检索技术 - **LLM增强索引** - 使用大语言模型提取关键词、摘要、实体 - **BM25排序** - 经典相关性算法 - **智能查询处理** - LLM分析查询意图并扩展关键词 ## 工作原理 ### 1. 文档索引阶段 ``` 文档 → LLM分析 → 提取关键词/摘要/主题/实体 → 构建倒排索引 ``` - 对每个文档使用LLM进行分析 - 提取:关键词、摘要、主题分类、命名实体 - 分块处理,计算词频 - 构建倒排索引(term → [doc_ids]) ### 2. 查询处理阶段 ``` Query → LLM分析 → 提取意图/关键词 → 查询扩展 → 检索 ``` - LLM分析查询意图(查找/比较/解释等) - 提取主要关键词 - 生成同义词/相关词扩展 - 使用BM25计算相关性得分 ### 3. 检索与生成 - **文档检索模式**:返回相关文档列表 - **智能问答模式**:RAG生成回答 ## 快速开始 ```bash # 安装依赖 pip install -r requirements.txt # 启动服务 python app.py ``` 访问 http://localhost:19001 ## API接口 ### 文档管理 | 接口 | 方法 | 说明 | |------|------|------| | `/api/documents` | GET | 获取文档列表 | | `/api/documents` | POST | 上传文档 | | `/api/documents/` | GET | 获取文档详情 | | `/api/documents/` | DELETE | 删除文档 | ### 索引管理 | 接口 | 方法 | 说明 | |------|------|------| | `/api/index/` | POST | 索引单个文档 | | `/api/index/batch` | POST | 批量索引 | | `/api/index/rebuild` | POST | 重建索引 | | `/api/stats` | GET | 获取统计信息 | ### 搜索 | 接口 | 方法 | 说明 | |------|------|------| | `/api/search` | POST | 文档检索 | | `/api/rag/answer` | POST | 智能问答 | ## 使用示例 ### 上传并索引文档 ```python import requests # 上传文档 files = {'file': open('document.pdf', 'rb')} r = requests.post('http://localhost:19001/api/documents', files=files) doc_id = r.json()['document']['id'] # 索引文档 requests.post(f'http://localhost:19001/api/index/{doc_id}') ``` ### 搜索 ```python import requests # 文档检索 r = requests.post('http://localhost:19001/api/search', json={ 'query': '机器学习的基本原理', 'top_k': 10 }) results = r.json()['results'] # 智能问答 r = requests.post('http://localhost:19001/api/rag/answer', json={ 'query': '什么是深度学习?' }) answer = r.json()['answer'] ``` ## 配置说明 修改 `config.py`: ```python # LLM配置 LLM_CONFIG = { "api_base": "http://192.168.2.5:1234/v1", "model": "qwen/qwen3.5-35b-a3b", } # 索引配置 INDEX_CONFIG = { "bm25_k1": 1.5, # BM25参数 "bm25_b": 0.75, "max_results": 20, } # 文档处理 DOC_CONFIG = { "chunk_size": 2000, # 分块大小 "max_keywords": 20, # 最大关键词数 } ``` ## 目录结构 ``` llm-index-rag/ ├── app.py # Flask应用 ├── config.py # 配置文件 ├── models.py # 数据模型 ├── services.py # 核心服务 ├── requirements.txt # 依赖 ├── documents/ # 文档存储 ├── indexes/ # 索引文件 ├── templates/ # HTML模板 │ ├── index.html │ ├── documents.html │ └── search.html └── static/ # 静态资源 ``` ## 对比向量RAG | 维度 | 向量RAG | 索引RAG(本系统) | |------|---------|------------------| | 依赖 | 向量模型、向量库 | 仅LLM | | 精确匹配 | 较弱 | 强 | | 语义理解 | 强 | 中等 | | 可解释性 | 弱 | 强 | | 部署复杂度 | 高 | 低 | | 资源消耗 | 高 | 中等 | ## 扩展建议 1. **中文分词** - 集成jieba等专业分词 2. **同义词库** - 添加领域同义词扩展 3. **混合检索** - 结合向量检索 4. **增量索引** - 支持实时更新 5. **分布式** - 支持大规模文档 ## License MIT