热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >spRAG:适用于金融等密集非结构化文本的RAG框架

spRAG:适用于金融等密集非结构化文本的RAG框架

来源:互联网 更新时间:2026-08-04 14:18

RAG(检索增强生成)模型在NLP和信息检索领域确实是个好东西,但一碰到复杂的PDF文档、密集的非结构化文本数据,问题就来了——传统方法常常力不从心。SuperpoweredAI开源的spRAG,正是冲着这个痛点来的。它专门处理金融报告、法律文件、学术论文这类“高密度”文本,在复杂查询上的表现相当亮眼。

spRAG:适用于金融等密集非结构化文本的RAG框架

spRAG关键技术架构

AutoContext:注入文档级上下文

传统RAG模型有个通病:只盯着零散的文本块,完全不管整篇文档在说什么。AutoContext技术就是来破这个局的。它的思路很直接——在把文本切块嵌入之前,先自动把文档级别的上下文信息“塞进”每个块里,让嵌入的表示更准确、更完整。

# auto_context.py
from sprag.llm import LLM
import tiktoken

# ... (PROMPT, TRUNCATION_MESSAGE 等常量定义)

def truncate_content(content: str, max_tokens: int):
# ... (使用 tiktoken 库进行文本截断)

def get_document_context(auto_context_model: LLM, text: str, document_title: str, auto_context_guidance: str = ""):
# ... (截断文本,构建 prompt,调用 LLM 生成文档摘要)

def get_chunk_header(file_name, document_context):
# ... (将文件名和文档摘要拼接成 chunk header)

代码里的get_document_context函数负责干活:用LLM模型和预设的提示模板,生成1-2句话的文档摘要,把主题和关键信息提炼出来。它还会根据内容长度做截断,确保塞进模板后调用LLM生成摘要。然后get_chunk_header把文件名和摘要拼成“块头”,加到每个文本块的开头。这样一来,每个块都知道自己来自哪份文档、整体在讲什么,嵌入质量自然就上去了。

这种做法的好处很明显:检索结果更准、更相关;下游任务(问答、摘要等)因为有了更完整的上下文,模型误解的概率也大大降低。

Relevant Segment Extraction (RSE):智能组合相关文本块

RSE是spRAG的另一个杀手锏。传统RAG固定块长,经常把相关的内容割裂开。RSE的思路是:先智能识别和组合相关文本块,给语言模型提供更丰富的上下文。

# rse.py
import numpy as np

# ... (convert_rank_to_value 函数定义) 

def get_best_segments(all_relevance_values: list[list], document_splits: list[int], max_length: int, overall_max_length: int, minimum_value: float) -> list[tuple]:
# ... (利用优化算法寻找最佳文本段组合)

def get_meta_document(all_ranked_results: list[list], top_k_for_document_selection: int = 7):
# ... (获取所有相关文档的信息,包括文档分割点和每个文档在元文档中的起始位置)

def get_relevance_values(all_ranked_results: list[list], meta_document_length: int, document_start_points: dict[str, int], unique_document_ids: list[str], irrelevant_chunk_penalty: float, decay_rate: int = 20):
# ... (计算每个文本块的 relevance value)

工作原理分三步走:

  1. 文本块聚类

    :把检索到的相关块按语义相似度归堆。
  2. 文本段构建

    :根据需要挑选和组合这些块,形成信息连贯的文本段。
  3. 上下文提供

    :把这个段喂给语言模型,帮它更准确地理解查询意图。

RSE的优势在于灵活性和准确性——可以根据问题动态组合上下文,而不是死板地切块。核心函数里,convert_rank_to_value把排序结果转成相关度分数,get_best_segments用优化算法找最佳组合,get_meta_documentget_relevance_values负责计算和定位。

spRAG核心技术组件

spRAG的组件设计得很灵活,可以按需替换。

  • VectorDB

    :BasicVectorDB用来存嵌入向量和少量元数据,支持高效的相似度搜索。
  • ChunkDB

    :BasicChunkDB以嵌套字典格式存文本块内容,供RSE检索和组合。
  • Embedding

    :可选OpenAI(如text-embedding-ada-002)、Cohere、Voyage AI的嵌入模型,把文本映射到向量空间。
  • Reranker

    :CohereReranker可以对检索结果做二次排序,进一步提升准确性。
  • LLM

    :OpenAIChatAPI或AnthropicChatAPI用于生成文档摘要,提取关键信息。

spRAG应用场景

哪里需要处理密集文本,哪里就有它的用武之地:

  • 金融领域

    :分析财报、研报,提取关键数据辅助投资决策。
  • 法律领域

    :检索法条、判例,支持律师工作。
  • 学术领域

    :快速检索论文、研究报告,辅助科研。
  • 智能客服

    :构建更精准、个性化的问答系统。
  • 信息检索

    :全面提升搜索引擎的检索质量。

spRAG性能及效果

在FinanceBench基准测试中,spRAG的准确率高达83%,远超传统RAG模型。这成绩背后,AutoContext和RSE功不可没,当然也离不开灵活的技术架构和可定制的组件。可以说,spRAG在处理各类非结构化文本数据时,确实能提供更准确、更全面的信息检索服务。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

相关攻略

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc