产品思维的角度来讲,Deep Research本质是Co-RAG

当然我这个标题扣的很多同学会不同意

也能理解

比如有些人说我用while 也能实现只要最终给出一个差不多样子的markdown文件就行

这话也对

也不对

对的是似乎从产出物来讲,是那么回事,但是实际上你的东西不一定是deep research,有可能是deep hallucination,或者是deep fake

原因其实和最早玩autoGPT之类的agent没什么区别

multistep解决问题是提升精确率的一个重要因素,但是不是只靠它就可以

内生COT或者叫隐式COT的的道理也是一样的

归根到底是单一的链式结构,链式结构中间的一个step的判断错误或者偏离了问题的本质,导致最终的输出会长且错(当然这里也会通过经过self-correct等训练方式来补救)

另外research和你普通的agent 带search tool的最大一个区别就是单一问题驱动的查询和可能跨多文档,甚至多学科文档的查询,这也涉及到context的处理能力,long -context情况下注意力减退问题等等

所以直接扔一顿文档或者网页来揉出一个markdown不是不行(也可能是纯废纸),但是没那么优雅,或者没那么有效

在LLM刚问世的时候,rag就作为解决幻觉的方案到现在也都在用,但是rag一般都是一跳,也就是问完了就拉倒

除非你的问题特别清晰,一跳能解决,那这种问题也不属于deep research的范围,然后我们以前也讨论过agentic-rag,

https://mp.weixin.qq.com/s/Jxm4YrSnXcHz784qRC8t1w?token=195447011&lang=zh_CN

agentic或者类似的解决方案是有能力通过多个模型,或者本模型自己的回归方式来实现多步分解问题进而拆解,进而逐步解决

但是回到文章中开始我们提到的,它还是解决不了错了一步就废了的情况

所以总结一下

传统的「检索增强生成」(RAG, Retrieval-Augmented Generation)方法,一般是:

  1. 先检索

    根据问题从外部知识库或语料中检索到一批相关文档。

  2. 再生成

    将检索到的文档和原问题一并送给一个大语言模型(LLM),让它基于这些文档去写答案。

然而,RAG 在一些复杂场景下会遇到检索失败推理不充分的问题。尤其是当问题需要多步推理,或在检索到的文档里没有一次就能找到所有关键信息时,单轮检索+单轮生成容易卡壳。

co-rag就诞生了出来

CO-rag字面的意思是

Chain-of-Retrieval Augmented Generation

图片

比如像图片中的问题

Where did the star of Dark Hazard study?

这个你直接去文档里查是查不到的,rag查是查不到的,然后就只能丢一堆文档进去,祈祷long-context的能给你attention对了,那就能查出来

我们这里拿模型拆解,先拆出来这个黑星是谁演的,然后查出来这人叫Edward G Robinson,然后根据第一个子查询的关键字(chain1)来找第二个子查询 它啥时候上的大学,得到的答案就是No relevant infromation found(这个相当重要一会讲),然后直接查这个Edward在哪上的大学就可以了,就找了纽约

图片

CoRAG 提出的核心思路是(如上面左图):

  • 让大语言模型分步骤地提出子查询(sub-query),去检索更细粒度的信息,得到子答案(sub-answer),再根据这些子答案来更新思路、继续提出新的查询。

  • 如果某一步的子答案不理想,就通过拒绝采样(rejection sampling)的方式,丢弃这条检索链,重新来一条新的检索链。

  • 最终模型会在多条可能的“查询→检索→子答案→再查询”的链条里,选出最优或较优的一条来输出结果。

如果对RS,拒绝采样有问题的同学,我在这里在展开讲一下

拒绝采样(Rejection Sampling)是一种常用的概率抽样方法,用于从复杂分布中生成样本。它的核心思想是:通过引入一个辅助分布来生成候选样本,然后利用某种标准筛选出符合目标分布的样本,把不符合的样本丢弃(即“拒绝”掉)。简单来说,它是一种“生成候选样本→筛选有效样本”的过程。

数学解释

假设我们想从一个复杂的目标分布 p(x)中采样,但直接采样难度很高。我们引入一个辅助分布 q(x),它满足:

  • 易采样性

    我们可以轻松从 q(x)中生成样本。

  • 包络条件

    存在一个常数 M
    使得对任意 x
    目标分布满足 p(x)≤Mq(x)
     

步骤:

  1. 从 q(x)中生成一个候选样本 x^*。

  2. 计算样本的接受概率:Paccept(x^∗)=p(x^∗)/Mq(x^∗)

  3. 生成一个随机数 u∼U(0,1)u (从均匀分布中采样)。

  4. 如果 u≤Paccept(x^∗)u,接受这个样本;否则拒绝并重新采样。

说人话,就是让你上砂子里找金子,你找不到,但是你知道金沙大概啥样,找一批金沙,然后你在金沙里面抽样就好抽了,反正抽到u≤Paccept(x^∗)u 就留下,其他的就扔了

换句话说,拒绝采样是“广撒网再精筛选”的策略,先从容易采样的分布中获得候选样本,再根据目标分布的标准过滤有效样本

在 CoRAG 中,拒绝采样的场景和机制稍微抽象一些,但核心思想一致。具体可以这么理解:

  1. 候选链生成
    CoRAG 会同时生成多个「查询-子答案链条」(检索链),每个链条是一个候选样本。

  2. 计算接受概率(评估链条质量)
    根据当前链条的子答案质量、预测得分(模型给出的概率)等指标,模型可以评估某条链条是否可能通向正确答案。

  3. 筛选有效链条(拒绝不好的链条)
    如果某条链的得分很低,或者生成的子答案不合理(比如与目标问题无关),模型会直接丢弃这条链,重新探索新的链条。

  4. 选最优答案
    通过拒绝那些“不可能得出正确答案”的链条,模型最终能保留较优解,避免浪费计算资源。

因为玩拒绝采样吗,所以你一下子就输出了好几个sub-query。也自然有若干个sub答案,这些sub-query-sub-answer就会形成多条COT链

文章开头我们说过,如果只是COT,错了一个基本就容易整个全废(self-correct也有概率给救回来)

但是因为你才去拒绝采样的方式,生成了一堆,那在里面挑最好的链,容错率就高很多

这个最好的链是怎么选的呢?

图片

需要你对模型LLM进行训练,不是原生就能实现的,google的那个用的就是微调版本的gemini1.5pro,OpenAI这边就是o3了(所以你们用开源的那些repo玩一玩概念是可以的,可是如果要是达到像他们的产品精度是要train的),OAI也没藏着掖着,也给了说明

图片

当然如果你不是用OAI的,你自己玩,你可以选多种方式,比如就是贪心算法,那就一条链,找最可能的概率,其实就是标准COT的方式

另外可以用BON和Tree search

这两种都是多条路径,在训练的时候:

图片

要同时优化3个函数

1- 子查询

含义:
  • 目标

优化子查询生成模型,使得模型能够基于上下文生成合适的下一步子查询 Qi
 

  • 公式拆解
    P(Qi∣Q,Q<i,A<i)

    • Q原始问题。
    • Q<i之前生成的所有子查询
    • A<i之前生成的所有子答案。

    • 负对数似然

      :用于最大化子查询的生成概率。

    2- 子回答

    含义:
    • 目标:优化子答案生成模型,使其能够根据子查询 Qi和检索到的文档 D^(i) 生成合适的子答案 Ai
       
    • 公式拆解:P(Ai∣Qi,D^(i))表示在给定子查询和文档的条件下生成子答案的概率
    • D^(i):是通过检索器从知识库中获取的相关文档

    3- 最终回答这3个函数可以理解成3个子任务

    第一个第二个是为了让它有更好的链式思考,第3个就是推理的时候决胜负了

    对多条链的输出接口打分是怎么实现的?

    图片

    又回来看这个,这个就是“没有找到相关信息”

    CoRAG框架在评估检索链(推理)时,并非只评估每一步骤是否找到答案的可能性,而是评估整个链条最终导致模型输出“没有找到相关信息”的可能性。具体来说,其评估方式如下:

    • “没有找到相关信息”的对数似然值:
      • CoRAG 通过计算整个检索链在“假设答案是‘没有找到相关信息’”的条件下的对数似然值来评估该链的质量。

      • 这个对数似然值是针对整个链条的,而不是针对链条中的某一步

        这意味着模型推理时只会考虑整个检索过程,看最终结果是否导致它输出 “没有找到相关信息”。

      • 对数似然值越高,意味着模型认为在该检索链下,最终答案是 “没有找到相关信息” 的可能性越高

    • 惩罚分数:
      • “没有找到相关信息”的对数似然值被用作“惩罚分数”
      • 惩罚分数是针对整个检索链计算的,而非每一步。
      • 惩罚分数越高,检索链的质量越低;惩罚分数越低,检索链的质量越高
    • 解码策略中的应用

      • 最佳N抽样(Best-of-N Sampling)中,模型会采样多条检索链,并选择惩罚分数最低的那一条链

      • 树状搜索(Tree Search)中,模型会探索不同的检索链,并保留平均惩罚分数最低的状态

      • 这两种方法都依赖于整个检索链的惩罚分数来选择最佳的检索路径

    因此,CoRAG 推理时不是分别评估检索链每一步骤找到答案的可能性,而是通过整个链条的“没有找到相关信息”的对数似然值(或惩罚分数)来评估整个链条的质量

    那折腾半天训练的时候还要1和2两个关注于步骤的损失函数干嘛呢?

    训练阶段:多任务学习

    • CoRAG 的训练过程是一个多任务学习框架,同时优化以下三个损失函数 :

      • 子查询预测损失 (Lsub_query)

        训练模型生成合适的子查询 。

      • 子答案预测损失 (Lsub_answer)

        训练模型从检索到的文档中提取正确的子答案 。

      • 最终答案预测损失 (Lfinal_answer)

        训练模型生成最终的正确答案。

    • 这三个损失函数共同作用,使得模型在训练过程中不仅学习如何进行逐步检索和推理,也学习如何最终生成正确的答案 。

    • 中间步骤的损失函数

      (Lsub_query 和 Lsub_answer)至关重要,因为它们提供了中间过程的监督信号,帮助模型学习链式思维逐步解决复杂问题的能力 。

    • 没有中间步骤的训练,模型将无法有效地进行多跳推理

    • 训练阶段的目标是学习能力

      :训练阶段的目标是让模型学会如何进行逐步检索推理整合信息以解决复杂问题 。中间步骤的损失函数提供了必要的监督信号,帮助模型掌握这些能力。

    • 推理阶段的目标是解决问题

      :推理阶段的目标是使用训练好的模型来解决实际问题。我们最终关心的是模型能否给出正确的答案,而不是模型中间推理的步骤。

    • 中间步骤的质量是最终答案质量的保证

      :虽然推理阶段不直接评估中间步骤的质量,但是模型学习的中间步骤的质量会直接影响最终答案的质量 。

    OK,现在理解了为什么推理只评估整个COT链的最终质量,我们再谈谈BON和Tree的算法异同。

    而BON和Tree的总体思路其实很像

    区别就是:

    BON:通过独立采样多条检索链进行并行探索。占用算力少

    Tree(比如MCTS):通过广东优先搜索(BFS)+rollout来拓展更多路径,路径多算力占用就大

    (说句也没那么恰当的话,你可以把BON当作Tree的BFS和rollout等于1来看待)

    最终BON也好,tree也好,哪个链惩罚分数最低,那它出现“No relevant infromation found”的可能性就越低,就越容易被选中最优,保证了回答的质量和准确度,惩罚分数这块也得训

    好,做个总结,如果要玩deep research,如果要产品化,要用Co-rag来实现time test scaling或者类似的方式实现,同时回答更精确,占用的context越合理,递归查询的轮次也能更多,但是,LLM要训练(原生不太容易做到),Bye

    <think>嗯,用户这次想了解"LoRA-RAG一体化微调"的定义。从对话历史看,用户明显在研究大模型微调技术,特别是LoRA的应用场景,之前已经提供了详细的落地路径和工具盘点。 用户引用的资料很有价值:引用[1]提到LoRA在企业知识问答系统的具体应用案例,引用[2]强调LoRA在私有化部署时的独特优势,引用[3]展示QLoRA的实战教程,而引用[4]则提供了RAG技术的商业应用背景。这些恰好构成理解LoRA-RAG的关键拼图。 需要特别注意两个核心概念的交集: - LoRA的本质是参数高效微调,通过低秩矩阵避免全参数更新 - RAG的核心是检索外部知识增强生成结果 所谓"一体化",应该是指将两者融合成端到端的解决方案。比如LangChain+LoRA的案例就很有代表性——用LoRA微调适配企业专属术语,同时用RAG模块实时检索最新政策文件,这样既能保持基础模型通用能力,又能解决动态知识更新问题。 用户可能更关注实际落地而非纯理论定义,所以回复要突出"如何实现一体化":训练阶段用LoRA微调基础模型适配企业文档格式,部署阶段将微调后的模型与向量库检索模块集成,形成闭环系统。医疗客服场景就是典型例子——LoRA保证专业术语准确性,RAG提供最新诊疗指南查询。 考虑到用户引用中多次出现企业级工具(LLaMA-Factory/Swift等),准备在定义后补充主流实现框架的对比表格,这样能帮助用户直接选型。另外需要强调资源效率这个核心卖点,毕竟引用[1]特别指出LoRA"极大降低部署成本"。 </think>LoRA-RAG一体化微调是一种**将参数高效微调技术(LoRA)与检索增强生成(RAG)系统深度整合的端到端解决方案**,旨在同时优化模型的专业适配能力和动态知识整合能力。其核心定义与关键特征如下: --- ### **定义详解** 1. **LoRA的核心作用** - 通过**低秩自适应矩阵**(Low-Rank Adaptation)对基础大模型(如LLaMA、Qwen等)进行轻量化微调,仅更新0.1%-1%的参数量(引用[1])。 - **解决领域适配问题**:例如将通用模型调整为保险客服、法律咨询等垂直领域的专业风格(引用[1]),或适配企业私有术语库(引用[3])。 - **突破部署限制**:在基础模型参数不可修改(如LLaMA权限受限)时,LoRA是唯一可行的微调方案(引用[2])。 2. **RAG的核心作用** - **动态知识注入**:从外部知识库(如企业文档、最新政策)实时检索相关信息,输入给生成模型以确保输出**准确性**和**时效性**(引用[4]的RAG技术原理)。 3. **“一体化”的协同机制** | 组件 | 传统方案缺陷 | LoRA-RAG一体化解决方案 | |---------------|----------------------------|--------------------------------| | **领域适配** | RAG无法解决模型专业术语缺失 | LoRA微调模型理解领域语言逻辑 | | **知识更新** | 重新微调模型成本高昂 | RAG动态注入新知识,无需重训模型 | | **系统架构** | 微调模块与检索模块分离 | 端到端联合训练与部署 | | **输出控制** | RAG可能返回无关片段 | LoRA约束生成风格+ RAG提供精准参考 | --- ### **典型落地场景** 1. **企业知识问答系统** - **LoRA侧**:微调出“保险行业客服话术风格”(引用[1])。 - **RAG侧**:实时检索保单条款、理赔规则(引用[4])。 *→ 输出既符合专业表述,又精准匹配最新政策。* 2. **法律/医疗顾问** - **LoRA侧**:约束模型避免“可能”“建议”等风险用语(引用[1])。 - **RAG侧**:检索病例库或法律条文支撑诊断/判决依据(引用[3])。 3. **多语言客服机器人** - **LoRA侧**:适配目标语言表达习惯(引用[1])。 - **RAG侧**:调用多语种知识库应对小众语种查询(引用[4])。 --- ### **技术实现路径** ```mermaid graph LR A[企业私有数据] --> B(LoRA微调) C[动态知识库] --> D(RAG检索) B --> E[领域适配模型] D --> E E --> F[生成可信结果] ``` **关键工具链**(引用[1][3][4]): - **训练框架**:LLaMA-Factory(配置灵活)、Axolotl(支持LoRA+RLHF)。 - **推理部署**:LangChain + LoRA(构建RAG系统)、ModelScope(开箱即用)。 - **硬件优化**:QLoRA(4-bit量化)降低显存需求(引用[3])。 --- ### **与传统方案的对比优势** | 指标 | 全量微调 | 纯RAG | LoRA-RAG一体化 | |------------------|------------------|------------------|---------------------| | 硬件成本 | 需多卡GPU | 低 | **单卡可运行** | | 知识更新时效性 | 需重新训练 | 实时 | **实时** | | 领域术语准确性 | 高 | 依赖检索质量 | **高(LoRA保障)** | | 部署灵活性 | 模型体积庞大 | 轻量 | **模型+检索均轻量** | > 此方案特别适合**中小企业**:以10%的算力成本获得接近全量微调的效果(引用[1]),同时规避私有化部署时模型权限问题(引用[2])。 --- ### **相关问题** 1. 如何选择LoRA的秩(rank)和缩放因子(alpha)以平衡效果与效率?(参考QLoRA实战[^3]) 2. LoRA-RAG系统在处理时效性极强的数据(如股市新闻)时有何局限? 3. 能否在消费级显卡(如RTX 4060)上实现LoRA-RAG的本地部署?(结合Unsloth工具[^1]) 4. 对比P-Tuning v2、Adapter等微调方法,LoRA在RAG系统中为何更受青睐?
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值