微信扫码
与创始人交个朋友
我要投稿
RAG(Retrieval-Augmented Generation)模型在自然语言处理和信息检索领域展现出巨大潜力,但在处理复杂的PDF文档和密集的非结构化文本数据时,存在一些挑战。SuperpoweredAI开源的spRAG是一种用于非结构化数据的RAG框架。它在处理密集文本的复杂查询方面表现出色,例如财务报告、法律文件和学术论文。
spRAG关键技术架构
AutoContext:注入文档级上下文
AutoContext技术是spRAG框架中的一项关键创新,它解决了传统RAG模型忽略文档整体信息的局限性。其核心思想是在嵌入文本块之前,自动将文档级别的上下文信息注入到每个块中,使得嵌入的表示更加准确和完整。
# 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)
在auto_context.py中,get_document_context函数使用LLM模型和预设的prompt来生成文档摘要,这个摘要包含1-2个句子,概括了文档的主题和关键信息。该函数定义了prompt模板,根据文档内容长度进行截断,并填充到模板中,最后调用LLM生成摘要。
get_chunk_header函数将文件名和文档摘要结合,形成chunk header,添加到每个文本块的开头,为每个块提供上下文。这样,文本块的嵌入更准确,更能反映文档的整体信息。
这种方法的优势在于注入文档级上下文信息提升了嵌入质量,使得文本块更好地捕捉内容和含义,提高了检索结果的准确性和相关性。同时,为语言模型提供更完整的上下文信息,减少模型对文本的误解,提高下游任务(如问答、摘要等)的性能。
Relevant Segment Extraction (RSE):智能组合相关文本块
RSE是spRAG框架的关键技术之一,它通过智能识别和组合相关文本块,克服了传统RAG模型固定长度块的限制,为语言模型提供更丰富的上下文信息。
# 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)
工作原理包括:
文本块聚类:将检索到的相关文本块进行聚类,归类内容相似或语义相关的块。
文本段构建:根据需求选择和组合聚类后的文本块,形成信息相关的文本段。
上下文提供:将构建的文本段提供给语言模型,以更好地理解查询意图。
RSE的优势在于:
更丰富的上下文:根据需求灵活组合文本块,提供更完整的上下文信息。
更高的准确性:帮助语言模型生成更准确的答案。
核心函数包括:
convert_rank_to_value
:转换检索结果排序为relevance value,get_best_segments
:寻找最佳文本段组合,get_meta_document
:获取所有相关文档信息,get_relevance_values
:计算文本块的relevance value。
spRAG核心技术组件
VectorDB:存储嵌入向量
BasicVectorDB: 用于存储文本嵌入向量和少量元数据,支持高效的相似度搜索和检索。
ChunkDB:存储文本块内容
BasicChunkDB: 以嵌套字典格式存储文本块内容,供RSE技术检索和组合相关文本。
Embedding:定义嵌入模型
OpenAIEmbedding: 利用OpenAI提供的文本嵌入模型,例如text-embedding-ada-002,将文本数据映射到向量空间。
CohereEmbedding: 使用Cohere提供的文本嵌入模型进行文本向量化。
VoyageAIEmbedding: 使用Voyage AI提供的文本嵌入模型进行文本向量化。
Reranker:优化搜索结果
CohereReranker: 使用Cohere提供的文本重排序模型对检索结果进行重新排序,提升查询的准确性。
LLM:用于文档摘要
OpenAIChatAPI: 利用OpenAI的GPT-3模型,例如text-davinci-003、gpt-3.5-turbo等,进行文档摘要,提取关键信息。
AnthropicChatAPI: 使用Anthropic提供的Claude模型进行文档摘要和信息提取。
spRAG应用场景
金融领域: 分析财务报告、研究报告等,提取关键信息,辅助投资决策。
法律领域: 检索法律文件、案例等,为律师提供支持。
学术领域: 检索学术论文、研究报告等,辅助科研工作。
智能客服: 构建智能客服系统,提供更准确、更个性化的服务。
信息检索: 提升搜索引擎的检索效果,为用户提供更精准的搜索结果。
spRAG性能及效果
spRAG在处理复杂查询任务方面表现出色,例如在FinanceBench基准测试中,spRAG的准确率高达83%,远超传统的RAG模型。其出色的性能得益于AutoContext和RSE等关键技术的应用,以及灵活的技术架构和可定制的组件。spRAG能够有效地处理各种类型的非结构化文本数据,为用户提供更准确、更全面的信息检索服务。
项目地址:https://github.com/SuperpoweredAI/spRAG
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-23
RAG评估框架:RAG Triad框架及其实战
2024-12-22
2个简单技巧把 RAG 检索准确率从 50% 提高到 95 %
2024-12-22
Browser-Use + LightRAG Agent:可使用 LLM 抓取 99% 的网站
2024-12-22
Dynamic RAG实战:解决知识增强中的动态更新挑战
2024-12-21
构建行业RAG应用系统:金融、财务、保险、医疗等行业该怎么做?
2024-12-21
构建基于多智能体RAG的企业的AI应用程序
2024-12-21
必读!RAG好用的3种Router
2024-12-20
GraphRAG0.5.0:从安装到高效应用的全方位指南
2024-07-18
2024-05-05
2024-06-20
2024-09-04
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-07-07
2024-06-13
2024-12-21
2024-12-14
2024-12-01
2024-11-27
2024-11-25
2024-11-06
2024-11-06
2024-11-05