2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Pistis-RAG: 面向可信检索增强生成(RAG)的可扩展级联框架

发布日期:2024-07-03 07:42:06 浏览次数: 3673
作者:芝士AI吃鱼

微信搜一搜,关注“芝士AI吃鱼”

1. 引言

在人工智能和自然语言处理领域,大型语言模型(LLMs)的发展日新月异。然而,即使是最先进的LLMs也面临着一些固有的局限性,如知识更新滞后、领域专业知识不足等问题。为了克服这些挑战,检索增强生成(Retrieval-Augmented Generation, RAG)技术应运而生。


本文将详细解读一篇名为《Pistis-RAG: A Scalable Cascading Framework Towards Trustworthy Retrieval-Augmented Generation》的论文。这篇论文提出了一个名为Pistis-RAG的新型框架,旨在提高RAG系统的效果和效率。

1.1 RAG简介

在深入探讨Pistis-RAG之前,我们先简要回顾一下RAG技术:

RAG技术通过在LLM生成答案之前,先从外部知识库中检索相关信息,从而增强模型的回答能力。这种方法不仅能够提供更新、更准确的信息,还能帮助LLM更好地处理专业领域的问题。

1.2 Pistis-RAG的创新点

Pistis-RAG框架在传统RAG基础上引入了几个关键创新:

  1. 内容中心视角:强调内容传递与业务目标和用户偏好的一致性。

  2. 多阶段级联检索:包括匹配、预排序、排序、重排序等阶段。

  3. 考虑LLM对提示顺序的敏感性:优化提示序列以提高相关性。

  4. 并行推理和专家路由:通过多路径推理提高系统的鲁棒性。

接下来,我们将逐一深入探讨Pistis-RAG框架的各个组成部分。

2. Pistis-RAG架构详解

Pistis-RAG框架采用了一种多阶段的级联架构,每个阶段都有其特定的功能和优化目标。让我们从整体架构开始,逐步深入每个关键组件。

2.1 整体架构

Pistis-RAG的整体架构可以用以下图示来表示:


这个级联架构的每个阶段都经过精心设计,以优化检索和生成过程。现在让我们详细探讨每个服务的功能和实现。

2.2 匹配服务(Matching Service)

匹配服务是整个流程的起点,负责理解用户意图并快速检索最相关的信息。

2.2.1 核心功能

  • 利用多种信息检索(IR)技术快速定位相关文档

  • 优化大规模在线检索的延迟

  • 集成外部搜索引擎以访问海量信息

2.2.2 关键技术

匹配服务使用多种数据结构和算法来优化检索过程:

  1. 向量存储:用于基于嵌入的检索方法,如近似最近邻(ANN)搜索。

class VectorStorage:
    def __init__(self, dimension):
        self.index = faiss.IndexFlatL2(dimension)

    def add(self, vectors):
        self.index.add(vectors)

    def search(self, query_vector, k):
        return self.index.search(query_vector, k)
  1. 倒排索引:用于基于关键词的快速检索。

class InvertedIndex:
    def __init__(self):
        self.index = defaultdict(list)

    def add(self, doc_id, words):
        for word in words:
            self.index[word].append(doc_id)

    def search(self, query):
        return set.intersection(*[set(self.index[word]) for word in query])
  1. 内存键值缓存:用于维护用户会话、缓存常见问题答案等。

class MemoryCache:
    def __init__(self):
        self.cache = {}

    def set(self, key, value):
        self.cache[key] = value

    def get(self, key):
        return self.cache.get(key)

2.2.3 混合检索策略

为了进一步提高检索效果,Pistis-RAG采用了混合检索策略,结合多种检索方法的优势:

def hybrid_retrieval(query, vector_storage, inverted_index, memory_cache):
    # 1. 首先检查缓存
    cached_result = memory_cache.get(query)
    if cached_result:
        return cached_result

    # 2. 进行向量检索
    query_vector = encode_query(query)
    vector_results = vector_storage.search(query_vector, k=10)

    # 3. 进行关键词检索
    keyword_results = inverted_index.search(query.split())

    # 4. 合并结果
    combined_results = merge_results(vector_results, keyword_results)

    # 5. 缓存结果
    memory_cache.set(query, combined_results)

    return combined_results

通过这种混合策略,匹配服务能够在保证检索质量的同时,大幅提升检索速度。

2.3 排序服务(Ranking Service)

排序服务是Pistis-RAG框架中的关键组件,负责对检索到的文档进行精确排序,以确保最相关和最有价值的信息被优先考虑。

2.3.1 排序过程

排序服务包含三个主要阶段:预排序、排序和重排序。每个阶段都有其特定的目标和方法:

  1. 预排序(Pre-Ranking):

  • 目的:快速筛选出潜在相关的文档

  • 方法:使用轻量级模型或启发式方法

  1. 排序(Ranking):

  • 目的:对文档进行更精细的相关性评估

  • 方法:使用复杂的机器学习模型,如ListNet或LambdaMART

  1. 重排序(Re-Ranking):

  • 目的:考虑额外因素(如文档可信度)进行最终调整

  • 方法:应用特定领域的规则或模型

2.3.2 排序模型

Pistis-RAG使用了一种基于Transformer的listwise学习排序模型。该模型不仅考虑了单个文档的相关性,还学习了整个文档列表的最优排序。
模型的数学表示如下:


2.3.3 考虑LLM的提示顺序敏感性

Pistis-RAG的一个重要创新是考虑了LLM对提示顺序的敏感性。通过学习最优的提示顺序,可以显著提升生成质量。

class PromptOrderOptimizer:
    def __init__(self, llm):
        self.llm = llm

    def optimize_order(self, prompts):
        best_order = prompts
        best_score = self.evaluate_order(prompts)

        for _ in range(100):  # 简单的随机搜索
            new_order = random.sample(prompts, len(prompts))
            score = self.evaluate_order(new_order)
            if score > best_score:
                best_order = new_order
                best_score = score

        return best_order

    def evaluate_order(self, prompts):
        response = self.llm.generate(prompts)
        return self.score_response(response)

通过这种方式,排序服务不仅考虑了文档的相关性,还优化了它们作为LLM提示的顺序,从而提高了最终生成内容的质量。

2.4 推理服务(Reasoning Service)

推理服务是Pistis-RAG框架中的核心组件,负责利用检索到的信息生成最终的回答。该服务采用了多路径推理和专家路由等创新技术,以提高生成内容的质量和可靠性。

2.4.1 多路径推理

多路径推理是一种通过并行生成多个推理路径来提高结果稳定性和质量的技术。其基本思想是:对于同一个问题,使用不同的检索结果或提示策略,生成多个候选答案,然后从中选择最佳结果或综合多个结果。
实现多路径推理的伪代码如下:

def multi_path_reasoning(query, retrieved_docs, llm):
    paths = []
    for _ in range(NUM_PATHS):
        # 随机选择一部分文档
        selected_docs = random.sample(retrieved_docs, k=3)

        # 构建提示
        prompt = construct_prompt(query, selected_docs)

        # 生成回答
        response = llm.generate(prompt)

        paths.append(response)

    # 选择最佳路径或合并多个路径
    final_answer = select_or_merge_paths(paths)

    return final_answer

2.4.2 专家路由

专家路由是一种根据问题类型将查询分发给最合适的"专家"模型的技术。这种方法可以充分利用不同模型在特定领域的优势。

class ExpertRouter:
    def __init__(self):
        self.experts = {
            'medical': MedicalExpert(),
            'tech': TechExpert(),
            'general': GeneralExpert()
        }

    def route(self, query):
        query_type = self.classify_query(query)
        return self.experts[query_type]

    def classify_query(self, query):
        # 使用简单的关键词匹配或更复杂的分类器
        if 'symptom' in query or 'disease' in query:
            return 'medical'
        elif 'computer' in query or 'software' in query:
            return 'tech'
        else:
            return 'general'

2.4.3 链式思考(Chain-of-Thought)推理

Pistis-RAG还incorporates了链式思考(CoT)推理技术,这种方法让模型像人类一样,通过一系列的中间步骤来解决复杂问题。

def chain_of_thought_reasoning(query, context, llm):
    prompt = f"""
    Question: {query}
    Context: {context}

    Let's approach this step by step:
    1) First, let's identify the key information in the context.
    2) Next, let's consider how this information relates to the question.
    3) Then, let's think about any additional knowledge or reasoning needed.
    4) Finally, let's formulate our answer based on these steps.

    Detailed thought process:
    """


    cot_response = llm.generate(prompt)

    # Extract the final answer from the CoT response
    final_answer = extract_final_answer(cot_response)

    return final_answer

通过结合多路径推理、专家路由和链式思考,Pistis-RAG的推理服务能够生成更加准确、可靠和有洞察力的回答。

2.5 聚合服务(Aggregating Service)

聚合服务是Pistis-RAG框架的最后一个关键组件,负责将推理服务生成的多个结果整合成一个连贯、全面的最终答案。这个服务不仅仅是简单地合并结果,还需要考虑结果的一致性、可信度和可读性。

2.5.1 结果合并策略

聚合服务采用了多种策略来合并多路径推理的结果:

  1. 投票机制:对于有明确选项的问题,可以采用简单多数投票。

def majority_vote(answers):
    return max(set(answers), key=answers.count)
  1. 置信度加权:根据每个答案的置信度进行加权平均。

def confidence_weighted_aggregation(answers, confidences):
    total_confidence = sum(confidences)
    weighted_answers = [a * c / total_confidence for a, c in zip(answers, confidences)]
    return sum(weighted_answers)
  1. 语义相似度聚类:对语义相似的答案进行聚类,选择最大类别的代表性答案。

from sklearn.cluster import KMeans
from sentence_transformers import SentenceTransformer

def semantic_clustering(answers):
    # 使用预训练的sentence transformer模型将答案转换为向量
    model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
    answer_embeddings = model.encode(answers)

    # 使用K-means聚类
    kmeans = KMeans(n_clusters=min(3, len(answers)))
    clusters = kmeans.fit_predict(answer_embeddings)

    # 选择最大类别的中心点作为最终答案
    largest_cluster = max(set(clusters), key=list(clusters).count)
    cluster_center = kmeans.cluster_centers_[largest_cluster]

    # 找到最接近聚类中心的答案
    distances = [np.linalg.norm(embedding - cluster_center) for embedding in answer_embeddings]
    best_answer_index = np.argmin(distances)

    return answers[best_answer_index]

2.5.2 一致性检查

为了确保最终答案的一致性,聚合服务会进行一系列的一致性检查:

def consistency_check(aggregated_answer, original_answers):
    # 1. 事实一致性检查
    fact_consistency = check_fact_consistency(aggregated_answer, original_answers)

    # 2. 逻辑一致性检查
    logic_consistency = check_logic_consistency(aggregated_answer)

    # 3. 上下文一致性检查
    context_consistency = check_context_consistency(aggregated_answer, original_query)

    if fact_consistency and logic_consistency and context_consistency:
        return True
    else:
        return False

def check_fact_consistency(aggregated_answer, original_answers):
    # 实现事实一致性检查逻辑
    pass

def check_logic_consistency(answer):
    # 实现逻辑一致性检查逻辑
    pass

def check_context_consistency(answer, query):
    # 实现上下文一致性检查逻辑
    pass

2.5.3 可信度增强

为了提高最终答案的可信度,聚合服务还会采取以下措施:

  1. 添加引用信息:

def add_citations(answer, source_documents):
    cited_answer = answer
    for i, doc in enumerate(source_documents):
        if doc['content'in answer:
            cited_answer = cited_answer.replace(doc['content'], f"{doc['content']}[{i+1}]")

    # 在答案末尾添加参考文献列表
    cited_answer += "\n\nReferences:\n"
    for i, doc in enumerate(source_documents):
        cited_answer += f"[{i+1}{doc['title']}{doc['author']}{doc['year']}\n"

    return cited_answer
  1. 置信度评分:

def confidence_scoring(answer, original_answers):
    # 计算答案与原始答案的平均相似度作为置信度分数
    model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
    answer_embedding = model.encode(answer)
    original_embeddings = model.encode(original_answers)

    similarities = [cosine_similarity([answer_embedding], [orig_emb])[0][0for orig_emb in original_embeddings]
    confidence_score = np.mean(similarities)

    return confidence_score
  1. 不确定性表达:

def add_uncertainty_expression(answer, confidence_score):
    if confidence_score > 0.8:
        return answer
    elif confidence_score > 0.6:
        return f"I believe that {answer}, but I'm not entirely certain."
    else:
        return f"I'm not very confident, but here's my best guess: {answer}"

通过这些策略和技术,聚合服务能够生成一个既准确又可信的最终答案,同时保持答案的可读性和连贯性。

3. 实验结果与分析

为了评估Pistis-RAG框架的效果,作者进行了一系列实验,主要使用了MMLU (Massive Multitask Language Understanding) 数据集。

3.1 实验设置

实验的主要组件和设置如下:

  1. 检索模型: BEG-M3

  2. 预排序模型: BEG-reranker-larger

  3. 生成模型: Llama-2-13B-chat

  4. 评估指标: Precision, Recall, F1-score

3.2 消融实验

为了理解各个组件对框架性能的影响,作者进行了消融实验。下面是实验结果的表格:

范式组件F1-Score
内容中心完整的Pistis-RAG54.65%
内容中心无排序阶段52.3%
内容中心无推理和聚合阶段52.8%
模型中心基线 (仅匹配和预排序)50.0%

我们可以通过下面的图表更直观地看到各个组件的贡献:

3.3 结果分析

  1. 完整的Pistis-RAG框架相比基线模型提升了9.3%的F1-Score,这是一个显著的improvement。

  2. 排序阶段的引入带来了2.3%的提升,说明考虑LLM的提示顺序敏感性确实能够提高生成质量。

  3. 推理和聚合阶段虽然提升幅度不如排序阶段大,但仍然贡献了0.5%的improvement,证明了多路径推理和结果聚合的有效性。

  4. 内容中心的范式相比模型中心的范式在各个阶段都表现更好,验证了论文的核心假设。

3.4 案例分析

为了更好地理解Pistis-RAG框架的优势,让我们看一个具体的例子:
问题: 什么是光合作用?
基线模型回答: 光合作用是植物利用阳光能量将二氧化碳和水转化为葡萄糖和氧气的过程。
Pistis-RAG回答: 光合作用是一个复杂的生物化学过程,主要发生在植物、藻类和某些细菌中。这个过程可以分为以下几个关键步骤:

  1. 光反应: 植物叶绿体中的叶绿素吸收光能,将水分解为氢离子、电子和氧气。这个过程产生了ATP和NADPH,它们是后续反应的能量来源。

  2. 暗反应(Calvin循环): 利用光反应产生的ATP和NADPH,将大气中的二氧化碳固定成碳水化合物,主要是葡萄糖。

  3. 碳固定: 通过一系列酶促反应,将无机碳(CO2)转化为有机碳化合物。

光合作用的化学方程式可以简化表示为: 6CO2 + 6H2O + 光能 → C6H12O6 + 6O2
这个过程不仅为植物提供了生长所需的能量,还是地球上大多数生命形式赖以生存的基础,因为它产生了氧气并固定了大气中的二氧化碳。
[1] Campbell, N.A. & Reece, J.B. (2002). Biology. Benjamin Cummings. [2] Taiz, L. & Zeiger, E. (2010). Plant Physiology. Sinauer Associates.
置信度: 高
分析:

  1. 信息的全面性: Pistis-RAG的回答更加全面,不仅解释了什么是光合作用,还详细描述了其过程和意义。

  2. 结构化表达: 使用了编号列表,使信息更容易理解和记忆。

  3. 专业性: 提供了专业术语(如"暗反应"、"Calvin循环")和化学方程式,体现了更高的专业水平。

  4. 可信度: 添加了引用信息和置信度评分,增加了答案的可信度。

  5. 上下文理解: 不仅回答了"什么是",还解释了"为什么重要",显示出对问题更深入的理解。

这个例子很好地展示了Pistis-RAG框架如何通过多阶段处理、多路径推理和结果聚合来生成更高质量的回答。

4. 结论与未来展望

4.1 主要贡献

  1. 提出了内容中心的视角,强调了内容传递与业务目标和用户偏好的一致性。

  2. 设计了多阶段级联检索框架,优化了检索和生成过程。

  3. 考虑了LLM对提示顺序的敏感性,提高了生成质量。

  4. 引入了多路径推理和专家路由,增强了系统的鲁棒性。

4.2 局限性

  1. 计算复杂度: 多阶段处理和多路径推理可能会增加系统的延迟和资源消耗。

  2. 领域适应性: 虽然框架在MMLU数据集上表现良好,但在特定领域的适应性还需要进一步验证。

  3. 隐私考虑: 检索增强可能涉及敏感信息的处理,需要更多的隐私保护机制。

4.3 未来研究方向

  1. 效率优化: 研究如何在保持性能的同时减少计算开销,可能通过模型压缩或分布式计算等技术。

  2. 领域迁移: 探索如何快速将Pistis-RAG框架适应到新的领域或任务。

  3. 可解释性: 增强系统的可解释性,使用户能够理解答案是如何生成的。

  4. 动态知识更新: 研究如何实时更新检索库,以适应快速变化的知识环境。

  5. 多模态扩展: 将框架扩展到处理图像、音频等多模态数据。

4.4 实际应用前景

Pistis-RAG框架在多个领域都有潜在的应用价值:

  1. 客户服务: 提供更准确、全面的客户支持。

  2. 教育: 作为智能导师,提供个性化的学习辅助。

  3. 医疗诊断: 辅助医生进行更准确的诊断和治疗方案制定。

  4. 法律咨询: 提供初步的法律建议和案例分析。

  5. 科研辅助: 帮助研究人员快速检索和综合相关文献。

5. 总结

Pistis-RAG框架代表了检索增强生成技术的一个重要进展。通过引入内容中心的视角、多阶段级联架构、考虑LLM的提示敏感性等创新,该框架在MMLU数据集上取得了显著的性能提升。然而,要将Pistis-RAG真正应用到实际生产环境中,还需要解决计算效率、领域适应性、隐私保护等一系列挑战。未来的研究可能会focus于这些方向,进一步提升框架的实用性和普适性。Pistis-RAG为我们提供了一个很好的起点和思路,相信在未来我们会看到更多基于这一框架的创新和应用。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅