coder 8baecc520a fix: 修复文档列表显示问题和添加文档详情页面
修复:
- Document.to_dict() 添加 file_type 和 file_size 字段
- 文档列表正确显示类型和大小

新增:
- /documents/<id> 文档详情页面
- document_detail.html 模板(显示文档信息、分块内容、关键词等)
2026-04-09 17:02:17 +08:00

LLM Index RAG

基于索引和搜索的知识检索系统(不使用向量模型和向量库)

特点

  • 不依赖向量模型 - 使用传统信息检索技术
  • LLM增强索引 - 使用大语言模型提取关键词、摘要、实体
  • BM25排序 - 经典相关性算法
  • 智能查询处理 - LLM分析查询意图并扩展关键词

工作原理

1. 文档索引阶段

文档 → LLM分析 → 提取关键词/摘要/主题/实体 → 构建倒排索引
  • 对每个文档使用LLM进行分析
  • 提取:关键词、摘要、主题分类、命名实体
  • 分块处理,计算词频
  • 构建倒排索引term → [doc_ids]

2. 查询处理阶段

Query → LLM分析 → 提取意图/关键词 → 查询扩展 → 检索
  • LLM分析查询意图查找/比较/解释等)
  • 提取主要关键词
  • 生成同义词/相关词扩展
  • 使用BM25计算相关性得分

3. 检索与生成

  • 文档检索模式:返回相关文档列表
  • 智能问答模式RAG生成回答

快速开始

# 安装依赖
pip install -r requirements.txt

# 启动服务
python app.py

访问 http://localhost:19001

API接口

文档管理

接口 方法 说明
/api/documents GET 获取文档列表
/api/documents POST 上传文档
/api/documents/<id> GET 获取文档详情
/api/documents/<id> DELETE 删除文档

索引管理

接口 方法 说明
/api/index/<id> POST 索引单个文档
/api/index/batch POST 批量索引
/api/index/rebuild POST 重建索引
/api/stats GET 获取统计信息

搜索

接口 方法 说明
/api/search POST 文档检索
/api/rag/answer POST 智能问答

使用示例

上传并索引文档

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}')

搜索

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

# 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

Description
基于索引和搜索的知识检索系统(不使用向量模型)
Readme 369 KiB
Languages
HTML 45.8%
Python 45.7%
JavaScript 8.5%