资讯动态

小模型+强化学习攻克残缺知识图谱:Plan Then Retrieve原理与实战

发布时间:2026/10/17 8:14:06 来源:尧图企业网站定制
1. 一句话项目背景小模型挑战大模型靠的不是魔法前阵子看到一个研究团队放出的项目结果用参数只有7B的开放小模型基于“先规划、再检索”Plan Then Retrieve的思路配合强化学习在残缺知识图谱上的多跳问答任务上把某国际商用旗舰大模型打得没脾气。这个结果是某高校联合某科技公司一起做的消息一出来很多做检索增强和知识问答的朋友都在讨论。先说清楚这个项目解决的是什么问题现实中的知识图谱往往是不完整的实体缺关系、关系缺目标、路径断头这种情况非常常见。而传统问答模型面对残缺图谱要么硬检索检索不到就瞎编要么完全靠模型参数里的记忆硬答答案看着流畅但根本没有图谱依据。这个项目给了一条很务实的路——用7B小模型先把“该走哪条路径”规划出来再去图谱里按图索骥然后把规划能力交给强化学习去反复打磨最终在残缺图谱的复杂问题上超过参数规模大几十倍的商用模型。这篇博客我想从一个从业者的角度把这项研究的核心拆开来讲残缺知识图谱到底难在哪Plan Then Retrieve为什么能解决问题强化学习在这个链路里扮演什么角色以及如果我们要在自己项目里复现类似思路有哪些坑必须先知道。不管你是做RAG、知识图谱问答还是想在端侧部署一个低成本的推理方案这篇内容都值得看完。2. 残缺知识图谱上的问答为什么普通检索救不了2.1 “图谱不完整”才是常态不是例外很多人一听到知识图谱第一反应是“一个巨大的数据库”。但实际上任何从文本、网页、文档里自动构建的图谱都不可能做到完整覆盖。一套中等规模的知识抽取流程在通用语料上跑完漏掉的关系条目比例动辄在20%~40%。实体覆盖率还行但实体之间的关系断链非常严重。举个例子假设图谱里有“某导演”“某电影公司”这些实体也有“某电影公司制作了某电影”这样的三元组。如果用户问“某导演名下有哪些影片作品”理想情况下去图里遍历“导演→参与制作→影片”路径就能返回答案。但残缺图谱里很有可能只有“导演参与某公司项目”这个关系没有直接到影片的边又或者影片实体存在但“导演→影片”的关系缺失。这种情况下站在图谱上直接做子图检索就是死路一条。检索器返回的结果要么为空要么只有半截路径根本拼不出正确答案。2.2 传统RAG的底层假设在残缺图谱上不成立现在主流的检索增强生成RAG流程本质是“先找材料再让模型阅读材料生成答案”。这套流程隐含一个假设外部知识库里存有回答问题的相关信息只要检索能召回它们生成模型就能基于这些内容作答。这个假设在文档库场景下基本成立。PDF、网页这种非结构化文档通常包含完整的陈述句哪句话里有答案检索器只要把它捞出来就行。但知识图谱不一样图谱存储的是离散的三元组答案往往需要多跳组合才能得到。比如“A导演的影片里哪些票房最高”需要先找到A导演的所有作品实体再逐个关联票房数据最后排序。这是一个推理过程不是一个检索过程。更重要的是残缺图谱上很多路径是断掉的。直接检索不到答案并不是因为“材料没找到”而是因为“推理路径不存在”。这时候传统的RAG只能干瞪眼因为它的检索策略是死的召回什么就用什么没有“这条走不通我再换一条绕过去”的能力。2.3 为什么不能直接把所有问题丢给大模型硬答也有另一种思路管他图谱残不残缺直接把问题丢给大模型让它靠参数记忆回答。这条路在简单问题上确实有效但深挖下去有三个问题。第一大模型不知道图谱里有什么。它回答问题时用的是训练阶段学到的世界知识不是当前这张图谱的内容。同一道题换一张图谱答案可能完全不同。第二大模型回答无法保证可解释性用户要的是“根据图谱中哪些关系得出这个答案”而不是一段流畅的文本。第三商用旗舰大模型部署成本和时延都很高在私有数据场景里数据还不允许出域。一句话硬答不可控也不可溯源。3. Plan Then Retrieve的核心设计先规划再检索3.1 两阶段流水线到底在做什么Plan Then Retrieve的思路其实很朴素就是把“找答案”这件事拆成两步。第一步是规划Plan由一个规划器模型根据用户问题生成一份在图谱中检索的行动计划。这份计划不是自然语言句子而是结构化的路径描述从哪个起始实体出发依次跨越哪些关系类型到达哪些目标实体。第二步是检索Retrieve规划器把这份行动计划交给检索器检索器像一个听话的导航员严格按计划去图数据库里走路径、取子图、收集候选答案。检索完成后再由生成器模型基于这些真实的图谱事实输出最终答案。我打个比方这就像你到一个陌生城市找一家馆子。盲目检索是打开地图App乱搜关键词搜不到就完蛋规划再检索是先研究一下城市布局推测馆子大概率开在哪个商圈然后按路线找过去。哪怕中间某条路封了你还能换条路走因为你知道目的地在哪个方向。3.2 为什么计划比检索结果更抗残缺理解这套方案的关键在于计划表达的是“该走哪条路”而不是“目的地在哪里”。在残缺图谱上这是质的区别。直接检索只做一件事看目标边存不存在。不存在就返回空。但一份好的规划可以做到“绕过断点”。比如从“导演A”到“影片B”的直接关系缺失但图谱里存在“导演A→所属公司C→投资影片B”的间接路径。规划器如果意识到直接路径断了可以规划一条跨两步的替代路径检索器就能沿着这条路径把答案捞出来。这种能力依赖于规划器对图谱结构的全局认知。它不需要把整张图谱背下来但需要知道哪些关系类型之间存在可连接性哪些路径方向大概率通向答案。这种“路径层面的策略知识”恰恰是普通检索器不具备的。3.3 这里为什么要用7B小模型当规划器可能有人会问规划这么难为什么不直接让商用旗舰模型来做规划答案很现实第一商用模型的接口调用贵、时延高在多步检索场景里每一步都要调一次接口整个链路的延迟用户根本忍不了。第二很多企业知识场景要求数据不出域商用模型的API方案直接不可用。第三也是研究里最重要的一点——规划能力是可以通过任务导向的训练获得的不一定需要巨大的参数规模。7B小模型的好处是它是开源的、可本地部署的推理速度快还可以针对特定任务做专用优化。这个项目的核心贡献就是证明了只要训练方法得当7B模型的规划能力可以在特定任务上压过通用大模型。不是7B模型本身突然变强了而是它获得了“专门为这张残缺图谱找路”的专项技能。4. 用强化学习训练规划器从模仿到超越4.1 纯监督学习为什么教不会规划给7B模型做文本生成训练最直接的办法是构造“问题—规划路径”对让模型做有监督学习。这条路不是不行但有天花板。最大问题是训练数据和推理目标不一致。监督学习要求每个中间步骤都有标准答案但“从实体A到实体B的最优路径”在残缺图谱上往往是不唯一的也没有人知道哪条路径是“标准答案”。我们可以拿完整图谱找一条路径当标注但推演到残缺图谱上时这条标注路径可能根本走不通。模型学到的只是对“标注路径”的机械模仿遇到没见过的断链情况就不行了。另一个问题是规划的目标是得到正确答案不是复刻某条路径。两条不同的路径可能导向同一个正确答案甚至有些时候绕远路反而能拿到更多支撑证据。这些属于典型的“稀疏奖励”问题——中间动作对不对很难判断只有最终结果才能评判好坏。这正是强化学习的用武之地。4.2 整体训练流程先模仿打底再强化提升这套研究的训练流程分两个阶段。第一阶段是行为克隆也叫模仿学习。研究团队先用一个中等规模模型对一个模拟图谱环境进行探索收集大量“问题—规划轨迹—检索结果—最终答案”的样本然后取出规划轨迹作为标签让7B模型先学习一个初始策略。第二阶段是强化学习微调。规划器在模拟环境中与检索器交互它输出一个计划检索器按计划执行并返回结果然后根据最终答案是否正确给一个奖励信号。规划器用这个奖励信号更新自己的策略。因为规划器是7B模型本身已经具备一定的语言能力和推理先验强化学习只需要在策略空间中做局部优化所以样本效率比从零开始用强化学习好得多。这里有个关键细节强化学习阶段的目标是最大化期望奖励而不是复现参考路径。这意味着模型可以自由探索出人意料但更有效的规划路径。也是在这一阶段7B模型逐渐学会了在残缺图谱上绕路、跳转、折返等策略而这些策略是监督学习阶段完全不可能学到的。4.3 奖励函数怎么设计才算合理如果你要复现这套方案奖励函数是成败的核心。我按经验把奖励拆成三块。第一块是答案奖励最终生成的答案是否正确。答对给正分答错给零分。这是最核心的稀疏奖励反映任务的真实目标。第二块是检索命中奖励规划器给出的路径每成功跨越一条存在的边就累积一个小正奖励。这块奖励和答案奖励本质上是互补的——它鼓励规划器生成“在图谱中真实可走的路径”避免模型胡编乱造不存在的边。第三块是路径长度惩罚路径越长扣分越多。目的是防止模型靠绕远路“碰运气”逼它学会在多个可行方案里挑最短、最合理的那条。这也能控制推理成本缩短响应时间。实际实现时这三块奖励通常按比例加权再用蒙特卡洛采样或者优势函数估计来降低方差。多项式实现建议不要直接用原始奖励而是用“相对于当前策略平均水平的优势值”让模型更清楚地知道哪些路径比平时好哪些比平时差。奖励函数的伪代码大概长这样def compute_reward(question, plan, graph, answer, gold_answer): # 答案是否正确 r_answer 1.0 if normalize_answer(answer) normalize_answer(gold_answer) else 0.0 # 检索路径上的边是否真实存在 hits 0 total len(plan.edge_types) for edge in plan.edges: if graph.has_edge(edge.src, edge.rel, edge.dst): hits 1 r_retrieval hits / max(total, 1) # 路径长度惩罚越短越好 r_path -0.02 * len(plan.edges) # 加权合成 reward r_answer 0.4 * r_retrieval r_path return reward4.4 7B模型为什么能在特定任务上反超旗舰模型一个7B模型的参数规模只有旗舰模型的几十分之一凭什么在特定评测上反超关键在“任务专用”这四个字。旗舰模型是通用的它的能力分散在海量任务中而这个7B模型经过行为克隆和强化学习后把几乎所有参数容量都用于优化“在这张残缺图谱上找有效路径”这一件事。它不需要懂诗歌、不需要写代码只需要钻研这一道题。更重要的是强化学习让模型的决策分布发生了针对性偏移。通用模型遇到断链时会优先选择“看起来自然的路径”而7B模型通过成千上万次探索知道哪些看似冷门的路径组合在概率上更可能通向答案。这种环境自适应能力是通用模型在固定推理成本下无法达到的。说白了一个专跑的运动员在特定赛道上确实能跑赢十项全能选手。5. 实操复盘复现这个思路的关键环节与避坑记录5.1 第一步构造一个“会给你制造麻烦”的残缺图谱想复现这套方案第一件事不是写模型代码而是先把数据环境造好。我建议从某个开放知识图谱数据集中抽一个子图比如包含人物、作品、机构、地区四大类实体的部分然后刻意遮蔽掉一部分三元组模拟真实世界的残缺情况。遮蔽比例很关键。遮蔽太少比如只有5%~10%大多数推理路径仍然是通的检索器怎么都够用体现不出规划的价值遮蔽太狠比如超过50%图谱结构严重断裂规划器也找不到可用路径模型会陷入绝望状态。我实践下来20%~30%的遮蔽率是比较合理的区间——普通检索器开始明显犯错但规划器还有可发挥的空间。另外建议单独保留一份“完整版”图谱作为评测参考标准用来判断规划器给定的路径在原始数据里是否真的能通向正确答案。这个设计能帮你区分两种失败是规划器路径选错了还是图谱本身真的没有答案。5.2 第二步拿一个通用模型去采集初始规划轨迹规划轨迹从哪里来最开始没有可用的规划器得先“雇”一个有基础规划能力的模型当老师。不需要顶配大模型用中等规模的开放模型就够了。把训练问题集抛给这个模型让它在一个交互式图谱环境里做探索式规划。每道题允许它尝试几次环境返回路径是否可达、结果有什么实体。然后把成功轨迹记录下来写成(问题, 规划轨迹)的训练对。这个环节的技术含量不在于模型选多大而是提示词设计要让模型输出的轨迹是严格结构化的比如用JSON数组描述每一跳的关系和目标实体而不是一段自然语言。轨迹格式一旦不统一后面对7B模型做监督微调时数据清洗工作量会让你崩溃。所以从一开始就要定义好格式不合规的轨迹直接丢弃。5.3 第三步行为克隆与强化学习的训练参数参考行为克隆阶段就是标准的监督微调训练时注意把规划器模型和检索器环境解耦规划器只输出计划检索器只负责执行两者之间通过结构化数据交互。学习率建议设在1e-5到2e-5之间训练3~5个epoch。太多轮容易让模型过拟合到采集轨迹的分布反而丢失探索能力。强化学习阶段是重头戏。规划器每轮生成一个计划投入检索器执行拿到奖励后更新参数。建议先把奖励的权重系数固定比如答案奖励权重1.0检索命中权重0.4路径惩罚0.02一轮训练跑完再调。训练步数不用多单任务5000~8000步足够因为7B模型的策略空间已经被行为克隆约束在合理范围内。一个非常重要的训练细节是强化学习阶段要把温度参数调高一点让模型多探索一些低概率路径。如果温度太低模型会一直选行为克隆阶段见过的高概率路径永远不会发现新策略。5.4 评测时要控制变量否则“超越”就是伪命题拿到“7B模型超越旗舰模型”的实验结果之前别忘了检查对比是否公平。我知道很多团队做出漂亮的数字最后发现是因为对比方案没做对。对比旗舰模型的时候建议给它配上同样的外部检索条件——要么直接让它访问图谱工具要么先检索再回答。旗舰模型的优势是常识丰富但劣势是它不会主动使用图谱工具。你拿“裸答”的旗舰模型去对比“带了规划器和检索器”的7B小模型这不是小模型赢了而是工具链赢了。也要注意评测指标的粒度。除了最终答案准确率建议额外记录“路径命中率”和“回答可解释性”。路径命中率反映出规划器到底有没有真正找到一条可达路径回答可解释性则考察模型是否把路径上的实体和关系写进了答案陈述里。这两个指标才能说明小模型是“靠自己规划赢的”而不是“靠生成模型蒙对答案”。5.5 关于部署成本的一点观察这套方案落地时最大的优势不只是精度而是成本可控。7B模型的推理对显存要求不高量化后单张消费级显卡就能带动甚至可以在高配CPU上缓慢跑。检索器不需要额外的大模型参与图数据库路径查找可以用传统算法完成。相比每天调旗舰模型API做多轮对话检索这套方案的边际成本几乎可以忽略。如果你的业务场景是私有化部署、侧端一体机或者数据不能出域的行业问答系统这套“小模型规划图谱检索”架构应该进入你的方案候选名单。6. 常见问题与排查技巧实录6.1 规划器输出了一堆不存在的边怎么办我实际跑这类方案时最先遇到的就是这个问题行为克隆阶段模型学得还行一旦切换到强化学习阶段规划器开始放飞自我输出一些图谱里完全不存在的边。说白了奖励函数里的检索命中奖励没有压住模型的探索欲望。解决方法是直接给“虚构边”引入惩罚不只是降低奖励。比如RL阶段采样时如果发现一次规划中的边有超过30%不存在本轮奖励直接置为-1。这个强硬信号能有效压制模型的编造行为。同时建议在图谱环境里加入边类型校验规划器输出边之前先做一次mask把不可能的边类型排除在生成概率之外。6.2 强化学习训练时奖励震荡模型效果忽好忽坏奖励震荡是RL训练最常见的坑尤其是在奖励本身是多块加权合成的情况下。前期模型探索到一条高分路径后梯度更新方向会发生剧烈变化很容易把学过的好策略冲掉。我的实践经验是三个措施配合使用全局梯度裁剪限制更新幅度奖励做Running Normalization让奖励分布维持在稳定尺度训练过程中保留历史最优策略的权重备份如果当前策略的验证精度掉了就回滚到备份点继续训练。这套机制虽然原始但在7B这个规模下非常管用。6.3 效果上不去的排查顺序建议如果你发现怎么调优最终准确率都上不去建议按下面的顺序排查。先看图谱遮蔽率是否过大很多任务根本不是规划能力的锅而是图谱已经稀碎到谁也救不了。再看轨迹采集阶段的数据质量行为克隆数据里如果有大量不正确的规划轨迹后面强化学习再努力天花板也很低。然后看奖励函数是否过于倾斜某一项经常出现的情况是路径长度惩罚设置太狠模型学到了“少走边、早收手”结果为了求短牺牲了准确性。最后再回头检查评测标准是否过于严格比如答案匹配方式用了字符全等而忽略了语义等价。我整理了一个排查速查表方便直接对照现象可能原因建议排查动作规划路径大量无效检索命中奖励权重不够提高r_retrieval权重或引入虚构边硬惩罚最终答案准确率停滞行为克隆数据质量差检查轨迹格式合规率和成功率重新采集数据训练过程奖励飙升但评测下降过拟合奖励函数检查是否产生了“碰运气”的极端路径增加路径长度惩罚路径过短但答案错误长度惩罚设置过强调低路径惩罚系数观察平均路径长度答案正确但路径与图谱事实不符生成器绕过规划器检测生成阶段是否直接复述了问题模板调整生成策略强制引用检索结果6.4 规划器已经接近满分但最终答案还是错这个现象很有迷惑性。路径都走对了候选实体也拿到了生成器却给出了错误答案说明问题出在“从检索结果到最终回答”的环节。常见的两个原因候选实体太多生成模型被无关实体的噪声干扰或者生成模型没有忠实引用检索结果而是依赖参数记忆作答。解决办法有两个方向。一是在检索结果里增加“证据排序”环节把路径更短、与问题关键词重合度更高的实体排在前面。二是修改生成阶段的提示词让模型必须引用图谱实体ID或路径关系才能生成答案否则输出无效。后者效果立竿见影但会牺牲一些答案的流畅度需要根据场景取舍。7. 写在最后一点个人体会这项研究让我比较触动的地方不是“小模型强于大模型”这个标题而是它把问题域、方法域和工程成本放到了一个非常务实的坐标系里。通用大模型确实很强但如果任务边界清晰、环境可控小模型加专项训练完全可以在特定场景里持平甚至超越它。对一个做实际业务的工程师来说这不仅意味着省钱更意味着可控性。如果你打算在自己项目里复现类似思路我给两个建议。第一个建议是先从模拟小图谱开始不要一上来就奔着大规模图谱去在一个几千实体的小图上把训练闭环打通比什么规划都重要。第二个建议是重视数据采集阶段的轨迹质量这一步的花费可能占整个项目的一半时间但它决定了强化学习的天花板。数据干净了后面就算调参粗放一点结果也不会差到哪里去。项目后续如果想继续做方向其实很多把规划器扩展到支持多图谱联合检索在检索器里加入属性过滤条件或者用别的强化学习算法替代策略梯度来提升样本效率。这些都不难难的是先建立起一套可靠的训练闭环。希望这篇拆解能帮你少踩几个坑。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑