跳转至

精炼组件 (Refiner Components)

本文档详细介绍SAGE框架中精炼组件的使用方法。精炼组件是RAG系统的高级优化模块,负责从检索到的大量文档中筛选、压缩和重组最相关的内容,以提高生成质量和降低计算成本。

技术背景

论文来源

精炼组件基于ACL 2025接收的论文《Hierarchical Document Refinement for Long-context Retrieval-augmented Generation》实现:

论文信息: - 标题:Hierarchical Document Refinement for Long-context Retrieval-augmented Generation - 作者:Jiajie Jin, Xiaoxi Li, Guanting Dong, Yuyao Zhang, Yutao Zhu, Yongkang Wu, Zhonghua Li, Qi Ye, Zhicheng Dou - 会议:ACL 2025 (Annual Meeting of the Association for Computational Linguistics) - ArXiv IDarXiv:2505.10413 - 代码开源https://github.com/ignorejjj/LongRefiner

研究动机

现实世界的RAG应用经常遇到长上下文输入场景,其中冗余信息和噪声导致更高的推理成本和性能下降。传统RAG系统在处理长文档时面临以下挑战:

  1. 上下文长度限制:大多数LLM存在上下文窗口限制
  2. 计算成本高昂:处理冗余信息增加推理开销
  3. 噪声干扰:无关信息影响生成质量
  4. 效率瓶颈:长文档检索和处理速度慢

核心创新

论文提出的LongRefiner通过以下创新技术解决上述问题:

  • 分层文档结构化:利用长文档的固有结构特征
  • 双层查询分析:深度理解用户查询意图和需求
  • 自适应精炼:通过多任务学习在单一基础模型上实现
  • 即插即用设计:可无缝集成到现有RAG系统中

性能优势

实验结果显示,LongRefiner在七个QA数据集上: - 效果提升:在各种场景下达到竞争性能 - 成本降低:相比最佳基线减少10倍计算成本和延迟 - 扩展性强:验证了可扩展性、效率性和有效性

组件概述

核心功能

精炼组件在RAG系统中承担以下关键职责:

  • 内容压缩:从长文档中提取关键信息,减少冗余内容
  • 相关性筛选:基于查询意图智能过滤最相关的文档片段
  • 结构化重组:将散乱的检索结果重新组织为连贯的上下文
  • 预算控制:在指定的token预算内优化内容选择

技术架构

精炼组件采用多模块协同的深度学习架构,基于论文提出的LongRefiner方法:

检索结果 → 查询分析 → 文档结构化 → 全局选择 → 精炼输出
    ↓         ↓          ↓           ↓         ↓
原始文档 → 意图识别 → 内容分块 → 重要性评分 → 压缩重组

核心算法模块

  1. 双层查询分析模块 (Dual-level Query Analysis)
  2. 分析用户查询的语义意图和信息需求
  3. 识别查询的关键概念和期望答案类型
  4. 为后续文档筛选提供指导

  5. 分层文档结构化模块 (Hierarchical Document Structuring)

  6. 自动识别文档的内在结构特征
  7. 将长文档分解为语义连贯的层次结构
  8. 保持上下文关系和信息完整性

  9. 全局选择模块 (Global Selection)

  10. 基于查询意图和文档结构进行全局优化
  11. 在指定token预算下选择最相关的内容片段
  12. 平衡信息覆盖度和内容质量

  13. 多任务学习框架

  14. 在单一基础模型上通过LoRA适配器实现多个专门任务
  15. 共享底层表示,提高计算效率
  16. 端到端优化整个精炼流程

应用场景

  • 长文档处理:处理超长检索结果,突破LLM上下文限制
  • 多文档融合:整合来自多个来源的相关信息
  • 成本优化:减少LLM输入token数量,降低API调用费用
  • 质量提升:去除无关信息,提高答案准确性

LongRefinerAdapter

组件描述

LongRefinerAdapter是基于LongRefiner模型的高级文档精炼器,采用多阶段深度学习模块,能够智能分析查询意图、结构化文档内容并进行全局优化选择。

技术规格

支持特性: - 基于LoRA微调的多任务模型架构 - 查询意图分析模块 - 文档结构化处理模块 - 全局内容选择模块 - BGE重排序模型集成 - 可配置的token预算控制

模型架构: - 基础模型:Qwen2.5-3B-Instruct或其他兼容模型 - 任务模块:三个专门的LoRA适配器 - 查询分析模块:理解用户查询意图和需求 - 文档结构化模块:分析和重组文档结构 - 全局选择模块:在全局视角下选择最佳内容 - 评分模型:BGE-reranker-v2-m3用于内容重排序

配置参数

参数组 参数名 类型 说明
基础模型 base_model_path str 基础LLM模型路径
max_model_len int 模型最大序列长度
gpu_device int GPU设备编号
LoRA模块 query_analysis_module_lora_path str 查询分析LoRA权重路径
doc_structuring_module_lora_path str 文档结构化LoRA权重路径
global_selection_module_lora_path str 全局选择LoRA权重路径
评分模型 score_model_name str 重排序模型名称
score_model_path str 重排序模型路径
控制参数 budget int token预算限制

实现示例

from sage.libs.rag.longrefiner.longrefiner_adapter import LongRefinerAdapter

# 基础配置
refiner_config = {
    "base_model_path": "Qwen/Qwen2.5-3B-Instruct",
    "query_analysis_module_lora_path": "/path/to/query_analysis_lora",
    "doc_structuring_module_lora_path": "/path/to/doc_structuring_lora", 
    "global_selection_module_lora_path": "/path/to/global_selection_lora",
    "score_model_name": "bge-reranker-v2-m3",
    "score_model_path": "BAAI/bge-reranker-v2-m3",
    "max_model_len": 25000,
    "budget": 4000,  # token预算
    "gpu_device": 0
}

# 创建精炼器实例
refiner = LongRefinerAdapter(refiner_config, enable_profile=True)

# 输入数据格式1:字典格式(来自检索器)
input_data = {
    "query": "什么是深度学习?",
    "results": [
        {"text": "深度学习是机器学习的一个分支..."},
        {"text": "神经网络是深度学习的基础..."},
        {"text": "反向传播算法用于训练神经网络..."}
    ]
}

# 输入数据格式2:元组格式
# input_data = ("什么是深度学习?", ["文档1内容", "文档2内容", "文档3内容"])

# 执行精炼
refined_result = refiner.execute(input_data)

# 输出格式与输入格式保持一致
print("精炼后结果:", refined_result)

处理流程

  1. 输入格式适配

    # 支持多种输入格式
    dict_format = {"query": str, "results": [{"text": str}]}
    tuple_format = (query: str, docs: List[str])
    

  2. 文档预处理

    # 转换为LongRefiner标准格式
    document_list = [{"contents": text} for text in texts]
    

  3. 多阶段精炼

    # 查询分析 → 文档结构化 → 全局选择
    refined_items = refiner.run(question, document_list, budget=budget)
    

  4. 结果后处理

    # 提取精炼后的文本内容
    refined_texts = [item["contents"] for item in refined_items]
    

性能优化

GPU设备管理

# 指定GPU设备
config["gpu_device"] = 0  # 使用GPU 0

# 环境变量设置
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

内存优化

# 调整模型最大长度
config["max_model_len"] = 25000  # 根据显存调整

# token预算控制
config["budget"] = 4000  # 控制输出长度

批处理支持

# 支持批量处理多个查询
for query_data in query_batch:
    refined_result = refiner.execute(query_data)

数据记录与分析

当启用enable_profile=True时,组件会自动记录精炼过程数据:

# 记录数据结构
{
    "timestamp": 1698765432.0,
    "question": "用户查询",
    "input_docs": ["原始文档1", "原始文档2"],
    "refined_docs": ["精炼文档1", "精炼文档2"],
    "budget": 4000
}

# 数据存储路径
.sage_states/refiner_data/refiner_data_<timestamp>.json

在管道中使用

标准RAG管道集成

from sage.core.api.local_environment import LocalEnvironment
from sage.libs.io_utils.batch import HFDatasetBatch
from sage.libs.rag.retriever import ChromaRetriever
from sage.libs.rag.longrefiner.longrefiner_adapter import LongRefinerAdapter
from sage.libs.rag.promptor import QAPromptor
from sage.libs.rag.generator import OpenAIGenerator

# 管道配置
env = LocalEnvironment()

(env
    .from_batch(HFDatasetBatch, source_config)
    .map(ChromaRetriever, retriever_config)
    .map(LongRefinerAdapter, refiner_config)  # 在检索后添加精炼步骤
    .map(QAPromptor, promptor_config)
    .map(OpenAIGenerator, generator_config)
)

env.submit()

配置文件示例

# config_refiner.yaml
refiner:
  base_model_path: "Qwen/Qwen2.5-3B-Instruct"
  query_analysis_module_lora_path: "/models/lora/query_analysis"
  doc_structuring_module_lora_path: "/models/lora/doc_structuring"
  global_selection_module_lora_path: "/models/lora/global_selection"
  score_model_name: "bge-reranker-v2-m3"
  score_model_path: "BAAI/bge-reranker-v2-m3"
  max_model_len: 25000
  budget: 4000
  gpu_device: 0

最佳实践

预算设置指南

# 根据下游模型上下文长度设置预算
budget_guide = {
    "gpt-3.5-turbo": 3000,    # 4K上下文,留1K给生成
    "gpt-4": 7000,            # 8K上下文,留1K给生成  
    "gpt-4-turbo": 120000,    # 128K上下文,留8K给生成
    "claude-3": 190000,       # 200K上下文,留10K给生成
}

模型选择建议

# 根据精度和速度需求选择基础模型
model_options = {
    "高精度": "Qwen/Qwen2.5-7B-Instruct",
    "平衡": "Qwen/Qwen2.5-3B-Instruct", 
    "高速度": "Qwen/Qwen2.5-1.5B-Instruct"
}

错误处理

try:
    refined_result = refiner.execute(input_data)
except Exception as e:
    # 精炼失败时返回原始结果
    logger.error(f"Refiner execution failed: {e}")
    refined_result = input_data  # 或者返回空结果

故障排除

常见问题

  1. 模型加载失败

    # 检查模型路径和权限
    assert os.path.exists(config["base_model_path"])
    assert os.path.exists(config["query_analysis_module_lora_path"])
    

  2. GPU内存不足

    # 调整模型参数
    config["max_model_len"] = 15000  # 减少最大长度
    config["gpu_device"] = 1         # 切换GPU设备
    

  3. 输入格式错误

    # 确保输入格式正确
    if isinstance(data, dict):
        assert "query" in data and "results" in data
    elif isinstance(data, tuple):
        assert len(data) == 2
    

调试模式

# 启用详细日志
import logging
logging.basicConfig(level=logging.DEBUG)

# 启用性能分析
refiner = LongRefinerAdapter(config, enable_profile=True)

参考文献与进一步阅读

核心论文

@misc{jin2025hierarchical,
    title={Hierarchical Document Refinement for Long-context Retrieval-augmented Generation}, 
    author={Jiajie Jin and Xiaoxi Li and Guanting Dong and Yuyao Zhang and Yutao Zhu and Yongkang Wu and Zhonghua Li and Qi Ye and Zhicheng Dou},
    year={2025},
    eprint={2505.10413},
    archivePrefix={arXiv},
    primaryClass={cs.CL},
    note={ACL 2025}
}

相关资源

相关技术

  • LoRA (Low-Rank Adaptation):参数高效的微调技术
  • BGE Reranker:双语通用嵌入模型用于重排序
  • VLLM:高效的大模型推理框架
  • Multi-task Learning:多任务学习在NLP中的应用

扩展阅读

  • RAG系统优化技术综述
  • 长文档处理的最新进展
  • 参数高效微调方法比较
  • 文档压缩与信息保持的平衡策略