精炼组件 (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 ID:arXiv:2505.10413 - 代码开源:https://github.com/ignorejjj/LongRefiner
研究动机¶
现实世界的RAG应用经常遇到长上下文输入场景,其中冗余信息和噪声导致更高的推理成本和性能下降。传统RAG系统在处理长文档时面临以下挑战:
- 上下文长度限制:大多数LLM存在上下文窗口限制
- 计算成本高昂:处理冗余信息增加推理开销
- 噪声干扰:无关信息影响生成质量
- 效率瓶颈:长文档检索和处理速度慢
核心创新¶
论文提出的LongRefiner通过以下创新技术解决上述问题:
- 分层文档结构化:利用长文档的固有结构特征
- 双层查询分析:深度理解用户查询意图和需求
- 自适应精炼:通过多任务学习在单一基础模型上实现
- 即插即用设计:可无缝集成到现有RAG系统中
性能优势¶
实验结果显示,LongRefiner在七个QA数据集上: - 效果提升:在各种场景下达到竞争性能 - 成本降低:相比最佳基线减少10倍计算成本和延迟 - 扩展性强:验证了可扩展性、效率性和有效性
组件概述¶
核心功能¶
精炼组件在RAG系统中承担以下关键职责:
- 内容压缩:从长文档中提取关键信息,减少冗余内容
- 相关性筛选:基于查询意图智能过滤最相关的文档片段
- 结构化重组:将散乱的检索结果重新组织为连贯的上下文
- 预算控制:在指定的token预算内优化内容选择
技术架构¶
精炼组件采用多模块协同的深度学习架构,基于论文提出的LongRefiner方法:
核心算法模块:
- 双层查询分析模块 (Dual-level Query Analysis)
- 分析用户查询的语义意图和信息需求
- 识别查询的关键概念和期望答案类型
-
为后续文档筛选提供指导
-
分层文档结构化模块 (Hierarchical Document Structuring)
- 自动识别文档的内在结构特征
- 将长文档分解为语义连贯的层次结构
-
保持上下文关系和信息完整性
-
全局选择模块 (Global Selection)
- 基于查询意图和文档结构进行全局优化
- 在指定token预算下选择最相关的内容片段
-
平衡信息覆盖度和内容质量
-
多任务学习框架
- 在单一基础模型上通过LoRA适配器实现多个专门任务
- 共享底层表示,提高计算效率
- 端到端优化整个精炼流程
应用场景¶
- 长文档处理:处理超长检索结果,突破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)
处理流程¶
-
输入格式适配
-
文档预处理
-
多阶段精炼
-
结果后处理
性能优化¶
GPU设备管理:
# 指定GPU设备
config["gpu_device"] = 0 # 使用GPU 0
# 环境变量设置
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
内存优化:
批处理支持:
数据记录与分析¶
当启用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 # 或者返回空结果
故障排除¶
常见问题¶
-
模型加载失败
-
GPU内存不足
-
输入格式错误
调试模式¶
# 启用详细日志
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}
}
相关资源¶
- 论文链接:https://arxiv.org/abs/2505.10413
- 开源代码:https://github.com/ignorejjj/LongRefiner
- SAGE框架文档:https://intellistream.github.io/SAGE-Pub/
相关技术¶
- LoRA (Low-Rank Adaptation):参数高效的微调技术
- BGE Reranker:双语通用嵌入模型用于重排序
- VLLM:高效的大模型推理框架
- Multi-task Learning:多任务学习在NLP中的应用
扩展阅读¶
- RAG系统优化技术综述
- 长文档处理的最新进展
- 参数高效微调方法比较
- 文档压缩与信息保持的平衡策略