news 2026/10/20 21:50:50

离线强化学习与模仿学习的边界:从分布偏移到过估计的实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
离线强化学习与模仿学习的边界:从分布偏移到过估计的实战解析

你有没有遇到过这种情况:同样一批离线数据,行为克隆跑出来的指标稳稳当当,一上离线强化学习反而反复崩溃,训练曲线像过山车,最后部署效果甚至不如最朴素的监督学习?说实话,这种情况太常见了。这几年做决策智能相关的项目,凡是涉及离线强化学习和模仿学习选型,我几乎每次都要解释一遍“为什么不能说离线RL一定比模仿学习高级”,以及“边界到底划在哪”。这也是我整理现代机器学习前沿系列时,特意把这一章主题定为“离线强化学习与模仿学习的边界”的原因。

这一章的核心不是让你把一个算法摁进另一个算法里比个高低,而是想讲清楚:当数据是静态的、交互受限的时候,策略学习到底面临哪些本质困难;模仿学习和离线强化学习各自用了什么办法去克服这些困难;以及为什么在过去一两年里,这两条路越来越像,甚至在很多系统里被混着用。适合的人包括正在做机器人策略迁移的工程师、推荐系统里想用RL做长期收益优化的算法同学,以及刚读完RL入门教材、准备补上“离线+部署”这块短板的在校研究者。

1. 先厘清概念:模仿学习和离线强化学习到底在解决什么问题

1.1 模仿学习的三板斧:从抄作业到反推意图

模仿学习的起点很好理解:给定一批专家轨迹,学着专家的样子做决策。最简单的做法是行为克隆,直接把状态映射到动作,当作一个多分类或者回归问题来做极大似然估计。你给模型看“在什么状态下专家做了什么动作”,模型就试着拟合这个条件分布。

但行为克隆的核心问题也是公开的:它没有显式考虑状态分布偏移。训练时见过的状态都来自专家轨迹,一旦部署时策略自己产生了一个偏离数据集的中间状态,模型就开始瞎猜,而且猜错之后会产生一个更偏的状态,误差像滚雪球一样越来越大。这一点我后面会专门展开,因为它是理解模仿学习上限的关键。

后来发展出来的改进路线基本沿着三条走:第一条是主动收集错误状态下的专家反馈,代表作是DAgger风格的方法;第二条是把策略和环境博弈起来,用判别器去区分“专家轨迹”和“策略轨迹”,逼迫策略产生和专家更接近的分布,GAIL是这条路线的代表;第三条是反着来,不直接学策略,而是先学回报函数,再在这个回报函数上做强化学习,也就是逆强化学习的思路。

这三条路线有个本质共性:它们都假设“专家是值得学习的对象”。哪怕学的是奖励函数,最终还是希望得到一个贴近专家行为模式的策略。所以模仿学习更像是在“复刻”一个行为分布。这没有错,但复刻意味着天花板由数据本身决定。数据里没有出现过的新情况、新技能,策略无论如何也生成不出来。

1.2 离线强化学习:比“不出门训练”更深一层

离线强化学习从字面上看很简单:拿一份固定的数据集,不和环境交互,直接在这个数据集上学习策略和价值函数。但如果你把它理解成“把在线RL的代码里的环境交互换成从缓存里采样”,那就大错特错了。

在线RL之所以能工作,核心在于策略每走一步,环境都会给反馈,而策略可以根据这个反馈不断修正自己的认知。价值函数在迭代过程中会持续踩到分布外的动作,然后被环境怼回来,Q值估计随之被纠正。离线RL完全切断了这个纠错回路。策略在训练中只能看到固定数据里面的状态和动作,它没有机会知道自己对某个陌生动作的Q值估计是不是幻觉。

这就引出了离线强化学习最核心的矛盾:策略优化依赖“选择一个高价值的动作”,但高价值这个判断本身可能是错的,因为数据里根本没有足够证据支持这个动作。很多离线RL论文里反复强调的“分布外动作的过估计”,指的就是这个。而离线RL之所以能在近几年成为热点,就是因为大家意识到了:现实中大量场景没法在线试错,推荐系统换一个策略可能直接影响用户体验,机器人策略错了可能撞坏设备,医疗场景更是容不得试探。

所以离线强化学习的关键技术点,不是“怎么从固定数据里更新网络”,而是“怎么在训练过程中给不确定性惩罚、怎么限制策略不要偏离数据支撑区域太远”。这就是保守化思想的来源。

1.3 两者边界为什么越来越模糊

其实把模仿学习和离线RL摆在一起看,会发现它们在很多场景下是在回答同一个问题:在不能自由试错的前提下,如何从历史数据中获得可用的策略。只不过模仿学习不需要奖励信号,只需要专家行为;离线RL需要奖励,但不要求行为是专家的。

这几年边界进一步模糊,主要是因为理念上互相渗透了。比如离线RL里有一个非常普遍的做法是把行为克隆当成正则项,防止策略飘出数据范围;反过来,模仿学习里的数据增强、跨域泛化技巧也被离线RL吸收。更极端一点,现在热门的决策基础模型直接把“行动”当作“下一个token”来预测,本质上是行为克隆的序列建模版本,可它们又通常用大量回报过滤后的数据来训练,这算不算离线RL的一部分?很难说。

我倾向于认为,边界模糊不是坏事,它恰好说明这两个领域终于开始关注同一个底层问题:训练时如何构建一个足够稳健的策略,让它到推理阶段依然能应对变化。带着这个视角,我们再往下看具体的方法论。

2. 边界线上最致命的问题:分布偏移与过估计

2.1 分布偏移到底是什么

分布偏移在离线决策场景下有一个非常具体的坏处:策略在训练数据覆盖不到的区域里做了错误决策,而且这个错误无法被及时纠正。拿自动驾驶跟车来举例,训练数据里大部分是平稳跟车,偶尔有前车急刹,但几乎没有“前车急刹的同时旁边车道有车切入”这种叠加场景。策略一旦遇到这种复合状态,它输出什么动作都不奇怪,因为模型从前没见过这种输入分布。可怕的是,如果这一把方向猜错了,下一个状态会更加离谱,相当于把车开进了训练数据分布更远的区域,后续每一步都在扩大偏差。

在线RL为什么能容忍这种偏差?因为环境会立刻给反馈,价值网络会迭代更新,策略有机会在多次尝试里学会纠正。DAgger也部分缓解了这个问题,它允许策略犯错后主动找专家纠正。但真正部署的时候,专家不可能随时在线。所以模仿学习解决分布偏移的思路,只能是尽量在训练时就把分布拓展开,或者用更鲁棒的模型结构去减少预测误差。

而在离线强化学习里,分布偏移会以另一种方式显现:不是策略跑出去之后产生新状态,而是策略特别喜欢去选那些“数据里很少见、但Q值估计很高”的动作。比如在推荐系统场景中,某条冷门内容可能被模型错误地打了高分,策略反复推这个内容,最终用户的反馈数据里根本没有支撑,推荐效果迅速劣化。这种问题在离线RL论文里通常被称为支持偏移,本质上是一样的病根:模型在评估陌生区域时不可靠。

2.2 过估计偏差:为什么离线RL比在线RL更怕这个

强化学习里有一个著名的“致命三角”:函数逼近、自举和离策略。这三个要素只要凑到一起,Q值就存在系统性过估计的风险。在线RL里,过估计会被环境交互修正,因为如果策略真的去执行了那个被高估的动作,拿到低回报之后,Q值会被往回拉。但离线RL把“修正”这条命脉切断了,所以必须给价值函数上一道枷锁。

这道枷锁有几种典型实现。CQL这类方法会在Q函数的训练目标里加一个惩罚项,压低数据分布外动作的Q值,相当于让价值函数学会“我不知道的就是不好”。IQL则换了个思路,不去应对分布外动作,而是用分位数回归的方式只学习数据中存在动作的价值分布,从根源上规避掉对未见动作的估计。BCQ干脆约束策略只能在数据集中出现过的动作附近做选择,输出动作要经过一个变分自编码器的重构限制。

我在实际项目里的体会是:过估计问题不是一个可以一次性修掉的小bug,它更像一个永远潜在的风险。任何离线RL算法都不能保证百分百压制过估计,只能通过参数去调节保守程度。保守得太狠,策略退化成行为克隆;保守得不够,又会出现训练后期Q值暴涨。这个度非常难拿捏。

2.3 一张表看清模仿学习和离线RL的分工

为了快速判断一个场景更适合哪类方法,我一般会从下面几个维度做对比。能帮你在拿到一份数据的时候先有个预判。

对比维度模仿学习离线强化学习
是否需要奖励信号不需要,只需要专家行为需要,必须提供奖励标签
对数据来源的要求假设数据基本来自专家允许混合策略、不同质量的数据
主要风险分布偏移导致误差累积分布外Q值过估计
训练稳定性相对稳定,等价于监督学习对超参数极其敏感,容易训练崩
上线部署风险策略可能呆板、不会应对长尾策略可能激进、选择冒险动作
处理方式模仿、分布匹配、专家纠错保守化、限制支持集、分位数回归

这张表不是我拍脑袋做的,而是从无数个失败的跑实验中总结出来的。最典型的误区是:拿到一份有奖励的数据,就直接上离线RL,结果效果还不如行为克隆。奖励存在不代表奖励质量好,更不代表离线RL就能利用好它。这也是我在后面实操环节里反复强调的:先判断数据本身的“血统”,再决定算法方向。

3. 算法层面的划界:代表方法、适用条件与坑

3.1 模仿学习阵营的主力选手

行为克隆是最稳妥的起点。它实现成本极低,几十行代码就能搭起来,训练稳定,调参简单。我自己的习惯是:不管最终方案打算用哪种离线RL算法,只要手头有状态动作数据,先跑一版行为克隆作为基线。这个基线价值非常大,一方面能验证数据能不能支撑最基本的策略学习,另一方面也能给后续上线提供一个“无论如何不会太差”的保险丝。但行为克隆的缺点同样明确,它本质上是有监督学习,对数据里没有覆盖到的状态毫无泛化保障。

DAgger在行为克隆的基础上加入了“在线纠错”的环节。策略在运行中遇到不确定的状态时,可以请求专家标注,然后把新数据加入训练集。这个思路在职场上是有启发的:如果允许策略在低风险场景里乱试,并且每次乱试之后马上有人类专家接管,那DAgger会是比离线RL更好的选择。但它不适合完全自动化的系统,因为专家响应频率一旦跟不上策略犯错的速度,照样崩溃。

GAIL则换了一种博弈思路。它训练一个判别器去分辨策略轨迹和专家轨迹,策略的目标是骗过判别器。这样学出来的策略往往在通用性上更强,因为它是对抗着学习的,能避免很多行为克隆里“机械复刻而不理解意图”的问题。但GAIL的代价是训练极不稳定,判别器和策略需要同步调参,而且对专家数据量的需求也大。我见过不少团队在GAIL上耗了两三个月,最后依然不如一个认真调过的行为克隆模型。

3.2 离线强化学习阵营的三类解法

离线RL算法的核心命题其实是同一个:如何限制策略不要跑出数据支撑区域。CQL是最常被提到的一种。它的做法是在Q函数训练目标里直接加一个“最小化分布外动作Q值”的项,让Q函数整体变得保守。原理上非常好理解,相当于告诉价值网络:凡是没见过的动作,你统一把它们想象成低分。但这种保守会带来一个副作用:如果惩罚过重,Q函数区分不了“没见过的次优动作”和“没见过的优秀动作”,策略会变得消极。所以CQL的保守系数alpha调起来很折磨人。

IQL走的路线很巧妙。它没有直接去压低分布外动作的Q值,而是通过分位数回归学一个“数据中动作价值的分位数”。比如expectile设在0.8左右,意味着模型只保证自己学到的策略比80%的数据行为要好。这样它就绕开了对分布外动作的直接估计,训练稳定性好不少。我用下来感觉IQL是对超参数最不敏感、最容易稳定复现的离线RL方法之一,适合做入门首选。

BCQ则干脆在策略端做文章。它先用变分自编码器把数据集里的动作分布压缩成一个条件生成模型,策略输出动作时必须先经过这个模型的“重构校验”,确保只生成数据里出现过的动作。这个思路很像“让AI带着手铐跳舞”,安全但上限也受限。数据覆盖度很高的时候,BCQ表现不错;一旦数据不够稠密,它生成的动作多样性不足,策略容易退化成重复那几个动作。

3.3 当代研究的一个趋势:离线RL开始用模仿学习的壳

这个趋势值得单独说。最典型的例子是把行为克隆作为正则项加到离线RL里。你打开很多最新的离线RL论文,看它们的代码实现,会发现目标函数里明晃晃挂着一个behavior cloning loss的尾巴。为什么?因为纯价值迭代很容易在数据边缘疯狂试探,而行为克隆项可以强制策略“不要离数据太远”。

另外一个方向是决策基础模型。这类模型基本不玩传统Q-learning那套,而是把决策当成序列预测:把状态、动作、回报编码成token序列,用一个大型Transformer去预测下一个token。本质上这就是行为克隆的规模化,但它同时利用了回报过滤机制,相当于“先用高质量数据做模仿,再借RL目标做微调”。这里面到底有多少是模仿学习、多少是离线RL,很难分清,因为边界已经被彻底打散了。

所以如果你看到某个新算法的名字里带“离线RL”字样,但代码里全是行为克隆风格的监督学习损失,不用惊讶,这很正常。

4. 实操经验:真实项目里怎么选型、怎么落地

4.1 第一步永远是检查数据,而不是选算法

我在接触任何一个新项目的时候,都会先花两三天时间把数据彻底摸一遍,再谈算法选型。这个环节最容易被人跳过,但也是翻车率最高的环节。

具体我会看几个指标。第一个是轨迹数量和质量分布,统计一下轨迹条数、平均长度、回报的分布是否接近正态,是否存在大量零奖励轨迹。第二是状态空间的覆盖度,做一个状态向量的去重统计,如果去重后比例很小,说明大量轨迹是重复相同状态,策略学到的东西很有限。第三是动作熵,计算数据集中动作的离散程度,如果动作熵非常低,说明策略空间其实很窄,这时候就算上离线RL也可能没有足够的多样性支撑价值学习,不如老老实实用行为克隆。

还有一个细节经常被忽视:数据的时间对齐。离线RL一般假设数据是转移元组,也就是一个状态、一个动作、一个奖励、一个下一状态、一个结束标志。但真实场景里这些字段往往不在同一行,需要清洗对齐。如果对齐出问题,训练出来的策略会莫名其妙差一大截。我曾经排查过一个项目,发现性能下降的根源居然是一条时间戳差了两秒的记录让大量转移对完全错位。

4.2 上线前必须做离线策略评估

很多人训练完离线RL策略,直接截图训练曲线就准备上线。训练曲线只能说明“在数据分布内它在优化”,不能说明“上线之后它能活下去”。所以我会在部署前加一道离线策略评估的关卡。

最直接的思路是用重要性采样:把策略在数据里出现过的行为概率和原数据行为概率做一个比值加权,估算新策略的期望回报。但这个做法的方差极大,尤其在动作空间连续的情况下,几乎不可用。更实际的是FQE思路:训练一个价值网络,然后用它对策略在数据状态上的表现做滚动预测。FQE的问题是预测偏差会随着步数累积,所以只能作为参考,不能当作上线保证。

实际项目管理上,我更推荐分阶段小流量上线。先让离线RL策略在5%的流量或者仿真环境里跑一段时间,用监控指标跟老策略对比,确认没有明显劣势后再逐步放量。这看起来是工程手段,但其实是绕过离线评估局限性的最有效办法。模型的离线指标再漂亮,都不如一小段时间的真实反馈更可信。

4.3 一个务实的选型判断流程

根据我这些年踩过的坑,我把选型判断流程总结成了一段直觉性规则。数据都来自一个固定专家且质量很高,优先行为克隆或DAgger,不要折腾离线RL。如果数据是多种策略混合产生的,质量参差不齐,但回报信号比较明确,尝试IQL或者CQL,因为它们能区分不同质量行为的下限。如果数据里大量是低质量探索轨迹,没有清晰的专家行为,那模仿学习基本没戏,只能靠离线RL加保守正则,而且要做好性能提升不明显的心理准备。如果上线环境完全无法在线交互,不要考虑任何带“在线微调”的方案,从一开始就锁定纯离线训练。

另外我想单独强调一个经验:在任何团队里,先跑行为克隆基线,永远是政治正确且技术稳健的选择。它有三大好处:第一是给项目一个明确下限;第二是让所有人都能理解基线在做什么;第三是如果后续离线RL策略跑赢了它,你说服业务方的难度会小很多。反过来,如果一上来就给了个复杂离线RL模型,结果还没跑赢行为克隆,那整个项目会陷入被质疑的尴尬局面。

5. 从训练时优化到推理:边界问题的新演化

5.1 训练时优化的隐藏假设

传统强化学习和模仿学习有一个共同隐藏假设:训练阶段把策略打磨好,推理阶段直接使用。换句话说,部署阶段只是“执行”训练时学到的固定映射,不做额外计算。

这个假设在过去是合理的,因为推理阶段没有环境反馈,每一次决策都是单向的,策略函数做得再好,也只能依赖训练时见到的经验分布。但近几年推理时优化的思想开始被大规模引入,大家发现:与其在训练时把所有知识硬编码进网络,不如把一部分决策过程留到推理阶段,给模型额外的计算预算,让它“现场思考”。

这个大转变对离线强化学习和模仿学习的边界产生了非常直接的影响。以前我们说“离线RL比行为克隆更善于纠错”,靠的是价值函数在训练时给策略灌输了保守的经验。但如果推理阶段允许策略进行搜索、模拟或者自我反思,那么行为克隆同样可以通过“现场多试几步”来弥补训练时的分布偏移。也就是说,训练时阶段性的方法劣势,正在被推理时计算抹平。

5.2 推理时优化的具体实现路径

推理时优化的实现路径不少。最简单的一种是推理时搜索:策略不再直接输出最终动作,而是先生成几个候选动作,再用价值模型或者世界模型对这些候选动作的未来收益做推演,挑一个最好的执行。这种情况下,行为克隆只负责生成候选动作,价值判断交给单独的模型。离线RL的作用也变了,它不再需要训练一个非常完美的策略,只需要训练一个足够准确的价值函数用于搜索排序。

另一种是对测试时训练的使用。做法是在推理阶段遇到新数据分布时,用自监督任务临时更新模型参数,让模型快速适应新环境。比如说机器人策略部署到一个光照完全不同的车间,推理前先喂一小段现场数据做自适应。这种思路本质上是把“训练时优化”的一部分后移到了推理时刻,跟离线RL的固定策略假设完全不是一回事。

还有一种更前沿的是世界模型推演。训练一个状态转移模型,推理时让策略在虚拟世界里多跑几步,用模拟轨迹来评估某个决策的后果。世界模型的训练通常借助离线数据,而策略则可以在虚拟推演中被强化,这个过程几乎就是“把离线RL搬到了推理阶段”。

5.3 组合正在取代二选一

如果有一天策略系统变成了“行为克隆负责生成动作、价值网络负责评估候选、世界模型负责推理时推演”的架构,那模仿学习和离线RL的边界还有意义吗?

我认为边界仍然存在,但它的意义变了。模仿学习负责解决“从哪里开始”,它提供可靠的先验行为模式,保证系统在最差情况下也能像专家一样行动。离线RL负责解决“如何取舍”,它从数据中学习价值判断,给推理时的搜索提供排序依据。两者不是二选一,而是各自承担了组合系统里的一块拼图。

这也是我把这一章的主题从“区分”改成“边界”的原因。边界不是一条用来站队的线,而是一片交叉地带。真正理解这片地带的人,既不会在行为克隆效果不佳时盲目迷信离线RL,也不会在离线RL跑不动时彻底放弃。而是会问:这两个工具该怎么组合,让训练时的优化更稳健,让推理时的适应更灵活。

6. 常见问题与排查技巧实录

6.1 问题速查表

现象可能原因排查思路
离线RL训练到一半Q值爆炸保守系数太小,分布外过估计失去控制检查CQL惩罚项或IQL的expectile,先加大保守程度再看曲线
策略输出几乎不变化,像在重复一个动作BCQ重构限制过强,或行为克隆权重太大降低重构阈值,减小BC正则系数,检查动作熵
行为克隆基线反而比离线RL好数据奖励噪声大,或数据覆盖度不够回头做数据统计分析,考虑换IQL或干脆用BC上线
训练曲线很漂亮,上线效果断崖下跌训练分布和部署分布不一致,或离线评估失效检查状态特征在训练和测试集上的分布直方图,缩小测试集差异
CQL调参特别敏感,一改alpha就崩数据规模小,保守惩罚和奖励信噪比失衡把alpha设成动态权重,或在验证集上多次调参后再定

6.2 调试中的几个土办法

下面说几个实际的土办法。第一个是“先BC后RL”。不管最终用哪个离线RL算法,先把行为克隆跑通,把它的参数作为离线RL策略的初始值。这个初始化能让训练稳定很多,也能大幅缩短调参时间。第二个是“保守系数从0开始加大”。一开始尽量让算法接近行为克隆,等训练稳定了再逐步增强RL信号,找到性能抛物线的顶点。这比一上来就定一个中等保守系数更可控。第三个是“看数据覆盖度,别只盯loss曲线”。离线RL里loss下降未必代表策略变好,有可能只是价值函数被掰弯了。我会定期把训练策略的动作分布和数据集动作分布做对比,如果两者KL散度拉得过大,那多半是出了风险。

还有一个心得:保存训练过程中的多个检查点,不要只留最后一版。离线RL训练经常出现“中期最优、后期崩坏”的现象,因为训练越往后,策略越想钻数据空子。我在多个项目里都遇到过,最终上线用的不是最终迭代的模型,而是训练到一半、还在安全区域的那个检查点。

最后说一个跟推理时优化直接相关的土办法:如果推理阶段完全不可能交互,但计算资源充裕,可以给策略模型配一个非常小的搜索模块。哪怕只是一个随机扰动加价值排序,都能避免许多离线RL策略在边缘状态下的激进行为。很多人把推理时优化想得很玄,其实落地起来就是“多算几步再拍板”而已。

这些经验不一定都是论文里写的,但都是从实操里磨出来的。模仿学习和离线RL的边界,说到底不是在论文的理论划分里,而是在你拿着数据、调着参数、看着部署曲线时,内心逐渐形成的那张判断网。希望这一章能帮你少踩几个坑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 21:49:56

Node 内存监控实战:用 v8.getHeapStatistics 构建生产级防线

凌晨三点被内存告警吵醒,然后盯着监控面板看曲线一条直线往上爬,这种事情凡是在公司维护过 Node 线上服务的同学,大概率都经历过。第一次遇到的时候,我还在一个业务团队写后端,看到某个常驻服务的 RSS 从 1GB 涨到 3GB…

作者头像 李华
网站建设 2026/10/20 21:49:13

Transformer从输入到推理:Attention、训练与KV Cache全链路解析

Transformer 这几年被聊得太多了,但大部分讲解要么停在“Self-Attention 就是让每个词看其他词”这种一句话层面,要么直接甩公式把人劝退。我自己带过几个刚入行的同学,发现一个很普遍的现象:单独问 Attention 怎么算,…

作者头像 李华
网站建设 2026/10/20 21:46:46

Spring Boot农产品交易平台毕设实战:从表设计到并发扣库存避坑指南

1. 先搞清楚:农产品交易平台这个选题到底在考察什么1.1 为什么一个CRUD项目能难住这么多人接手一套Spring Boot农产品交易平台的源码,准备当作计算机毕业设计二次开发的人,十个里至少有七个栽在同一件事上:以为这东西就是网站后台…

作者头像 李华
网站建设 2026/10/20 21:46:14

Ollama本地大模型部署实战:从入门到API服务调优

我先把结论放在前面:2026年想在本地跑一个大模型,Ollama基本是绕不开的那个工具。我第一次用它是在某台16GB内存的旧笔记本上,没有独立显卡,装完驱动之后从官网下了个安装包,两条命令下去,一个7B模型就能正…

作者头像 李华
网站建设 2026/10/20 21:44:52

Agent智能体到底是什么?从原理到工程落地的完整指南

1. "Agent"这个词被用滥了,但真正把它讲清楚的人不多最近这两年,不管在技术社区还是普通用户群里,"Agent"(智能体)几乎成了一个万能热词。做客服的说自家系统是Agent,做自动化的说脚本…

作者头像 李华
网站建设 2026/10/20 21:40:24

C+++ONNX+FAISS实战:从零构建生产级RAG语义搜索系统

从零实现生产级RAG语义搜索系统:C ONNX FAISS 实战三年前第一次在线上环境跑RAG,我用的是Python。说实话当时的体验不算差,FastAPI挂一个服务,HuggingFace拉一个模型,再配个Milvus,一周就能出个能用的Dem…

作者头像 李华