RAGFlow框架使用指南

RAGFlow框架:构建智能知识问答系统的完整解决方案

什么是RAGFlow?

RAGFlow是一个开源的RAG(Retrieval-Augmented Generation,检索增强生成)引擎,专注于基于深度文档理解构建高质量的问答系统。它提供了从文档解析到智能对话的完整工作流,是企业构建知识库问答系统的理想选择。

核心特性

1. 智能文档解析

  • 多格式支持:PDF、Word、PowerPoint、Excel、图片等
  • 版面分析:自动识别文档结构和版面布局
  • 表格识别:准确提取表格数据
  • OCR集成:图片中文字的识别和提取

2. 先进的文本分割

  • 语义分割:基于文档语义的智能分块
  • 结构化处理:保持文档的逻辑结构
  • 多策略组合:支持多种分割策略的灵活配置

3. 高效检索系统

  • 混合检索:结合向量检索和关键词检索
  • 重排序优化:使用深度学习模型优化检索结果
  • 多模态支持:支持文本、图像等多种模态的检索

4. 企业级特性

  • 可视化界面:友好的Web管理界面
  • API接口:完整的RESTful API
  • 权限管理:细粒度的用户权限控制
  • 多租户支持:支持多个独立的知识库

系统架构

RAGFlow采用模块化架构设计,主要包含以下核心组件:

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   前端界面      │    │   API网关       │    │   管理后台      │
│   Web UI        │    │   API Gateway   │    │   Admin Panel   │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         └───────────────────────┼───────────────────────┘
         ┌─────────────────────────────────────────────────────┐
         │                RAGFlow 核心引擎                     │
         │  ┌─────────────┬─────────────┬─────────────────────┐ │
         │  │ 文档解析器  │ 文本分割器  │    向量化模块       │ │
         │  │ Parser      │ Splitter    │    Embedding        │ │
         │  └─────────────┴─────────────┴─────────────────────┘ │
         │  ┌─────────────┬─────────────┬─────────────────────┐ │
         │  │ 检索引擎    │ 对话管理    │    知识库管理       │ │
         │  │ Retriever   │ Chat Mgr    │    KB Manager       │ │
         │  └─────────────┴─────────────┴─────────────────────┘ │
         └─────────────────────────────────────────────────────┘
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   向量数据库    │    │   关系数据库    │    │   大语言模型    │
│   Vector Store  │    │   SQL Database  │    │   LLM Service   │
└─────────────────┘    └─────────────────┘    └─────────────────┘

快速开始

1. 环境准备

# 系统要求
- Python 3.8+
- Docker 20.10+
- 内存:8GB以上
- 磁盘空间:20GB以上

2. Docker部署(推荐)

# 克隆项目
git clone https://github.com/infiniflow/ragflow.git
cd ragflow

# 编辑配置文件
cp docker/.env.example docker/.env
# 根据需要修改配置

# 启动所有服务
docker-compose -f docker/docker-compose.yml up -d

# 查看服务状态
docker-compose -f docker/docker-compose.yml ps

3. 配置说明

# docker/.env文件配置示例

# 基础配置
RAGFLOW_VERSION=latest
HTTP_PORT=80
HTTPS_PORT=443

# 数据库配置
MYSQL_PASSWORD=infiniflow123
REDIS_PASSWORD=infiniflow123

# 模型配置
DEFAULT_LLM_FACTORY=OpenAI
OPENAI_API_KEY=your_openai_api_key
OPENAI_BASE_URL=https://api.openai.com/v1

# Embedding模型配置
DEFAULT_EMBEDDING_MODEL=BAAI/bge-large-zh-v1.5
HF_ENDPOINT=https://huggingface.co

4. 访问系统

# 服务启动后访问
http://localhost:80

# 默认账号(首次登录后请修改密码)
用户名: admin@infiniflow.org
密码: admin123

详细使用指南

1. 创建知识库

# 通过Web界面创建知识库
1. 登录RAGFlow管理界面
2. 点击"创建知识库"
3. 填写知识库信息:
   - 名称:技术文档库
   - 描述:公司技术文档知识库
   - 语言:中文
   - Embedding模型:bge-large-zh-v1.5
4. 配置检索参数:
   - 检索方式:混合检索
   - 相似度阈值:0.2
   - 最大检索数量:6

2. 上传和处理文档

# 使用API上传文档
import requests
import json

def upload_document(file_path, knowledge_base_id, api_key):
    """上传文档到指定知识库"""
    url = "http://localhost/api/v1/documents"
    
    headers = {
        "Authorization": f"Bearer {api_key}"
    }
    
    files = {
        "file": open(file_path, "rb")
    }
    
    data = {
        "knowledge_base_id": knowledge_base_id,
        "parser_method": "auto",  # 自动选择解析方法
        "chunk_method": "naive"   # 文本分割方法
    }
    
    response = requests.post(url, headers=headers, files=files, data=data)
    return response.json()

# 使用示例
result = upload_document("./documents/manual.pdf", "kb_001", "your_api_key")
print(f"文档上传结果: {result}")

3. 文档解析配置

# 配置文档解析参数
def configure_document_parser(document_id, parser_config):
    """配置文档解析器"""
    url = f"http://localhost/api/v1/documents/{document_id}/parser"
    
    config = {
        "parser_method": "manual",  # 手动配置
        "chunk_method": "knowledge_graph",  # 知识图谱分割
        "parser_config": {
            "pages": [[1, 10]],  # 指定解析页面范围
            "layout_recognize": True,  # 开启版面识别
            "table_recognize": True,   # 开启表格识别
            "formula_recognize": True  # 开启公式识别
        },
        "chunk_config": {
            "chunk_size": 1024,    # 分块大小
            "chunk_overlap": 128,  # 分块重叠
            "auto_keywords": True, # 自动提取关键词
            "auto_questions": True # 自动生成问题
        }
    }
    
    headers = {"Authorization": f"Bearer {api_key}"}
    response = requests.put(url, headers=headers, json=config)
    return response.json()

4. 智能问答

# 实现智能问答功能
def chat_with_knowledge_base(question, knowledge_base_id, api_key):
    """与知识库进行对话"""
    url = "http://localhost/api/v1/chat"
    
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    data = {
        "knowledge_base_id": knowledge_base_id,
        "question": question,
        "stream": False,  # 是否流式响应
        "quote": True,    # 是否引用原文
        "doc_ids": []     # 限制搜索的文档ID
    }
    
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# 使用示例
answer = chat_with_knowledge_base(
    "如何配置RAGFlow的文档解析参数?", 
    "kb_001", 
    "your_api_key"
)

print(f"问题: {answer['question']}")
print(f"回答: {answer['answer']}")
print(f"引用: {answer['reference']}")

5. 高级检索功能

# 实现混合检索
def hybrid_search(query, knowledge_base_id, api_key):
    """混合检索:结合向量检索和关键词检索"""
    url = "http://localhost/api/v1/retrieval"
    
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    data = {
        "knowledge_base_id": knowledge_base_id,
        "question": query,
        "vector_similarity_weight": 0.7,  # 向量检索权重
        "keyword_similarity_weight": 0.3, # 关键词检索权重
        "top_k": 10,                      # 返回top k结果
        "similarity_threshold": 0.1,      # 相似度阈值
        "keyword_similarity_threshold": 0.0
    }
    
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# 使用示例
results = hybrid_search("机器学习算法", "kb_001", "your_api_key")
for i, result in enumerate(results['chunks']):
    print(f"结果 {i+1}:")
    print(f"  相似度: {result['similarity']}")
    print(f"  内容: {result['content'][:100]}...")
    print(f"  来源: {result['document_name']}")

总结

RAGFlow作为一个功能强大的开源RAG框架,为企业构建智能问答系统提供了完整的解决方案。通过本文的详细介绍,您可以:

  1. 快速部署:使用Docker快速搭建RAGFlow环境
  2. 灵活配置:根据业务需求调整各种参数
  3. 高效使用:掌握文档处理、检索、问答等核心功能
  4. 企业级部署:实现高可用、可扩展的生产环境
  5. 性能优化:通过各种优化技术提升系统性能

RAGFlow的优势在于其完整性和易用性,既适合快速原型开发,也能满足企业级应用的需求。通过合理的配置和优化,可以构建出高质量、高性能的知识问答系统,为用户提供准确、及时的信息服务。