资讯动态

规则引擎与大模型的控制权之争:图系统的三层仲裁机制

发布时间:2026/10/24 5:47:38 来源:尧图企业网站定制
上个月给某个还在迭代中的智能图谱系统做内部演示现场翻车了。用户问了一句“供应商名单里新增了三家公司其中两家有历史风险记录请问我能不能在这周发起新的采购”规则引擎的回答是“不建议因为风控规则第7条命中”大概20毫秒就给出。旁边的大模型接口慢吞吞跑了两秒给出的结论是“可以尝试但建议谨慎”。会议室气氛瞬间凝固——两个控制源同时给了结论一个稳但死板一个活但飘到底听谁的这恰好就是“确定性硬编码”和“概率性大模型预测”在图中竞争控制权时的真实战况。所谓“图”可以是知识图谱、任务依赖图、决策流程图也可以是业务流程的状态机。凡是有节点、有边、有路径选择的地方必然存在两套逻辑在同一张图上争夺“这条路该由谁说了算”的问题。这篇文章想做的不是给一个玄学答案而是把这个问题拆开讲讲我实际做系统时怎么分析这个平衡点又是怎么把它变成一套可落地的仲裁机制的。1. 核心矛盾的本质两种决策范式的差异比你想的大得多先说一个概念上的基础工程判断硬编码和概率模型不是同一个物种它们在底层逻辑上就是两种完全不同的决策范式。理解了这个差异后面聊平衡才有意义。1.1 确定性硬编码精度换弹性的规则引擎确定性硬编码的本质是“把决策逻辑显式写死”包括条件分支、查表规则、图搜索算法、约束求解、状态机转换。它的核心特征是对同样的输入无论跑多少遍输出永远是一样的任何一步出错都可以通过日志和单步调试直接定位到那一行规则。这种范式在图数据系统里特别有价值因为图结构本身是离散的、可枚举的、强拓扑约束的。比如一个知识图谱里“A节点的出边只有三条”“从节点X到节点Y最短路径只有两条可达”这些事实是客观确定的。用硬编码去处理这类问题天然具备三个优势可解释性极强。每一步决策都有据可查适合审计、合规和复盘运行成本极低。规则引擎走的是纯计算逻辑不需要GPU和云端推理行为可预测。系统面对边界情况时不会乱来即使错了也是稳定地错好修好改。但硬编码的代价同样明显。当业务规则多到一定程度规则之间开始互相打架维护成本指数上升。更重要的是现实世界的语义问题往往无法用精确条件表达。比如“判断一条采购审批是否属于‘高风险’”除非业务方给出严格定义否则你根本没法把“风险”写成一条布尔表达式。1.2 概率性大模型预测用泛化换常识的临时判断大模型的预测逻辑完全不同。它不维护任何显式的规则表而是把海量文本中隐含的知识压缩成参数然后根据输入上下文计算一个概率分布再从分布中采样或取最大概率值作为输出。这种机制让它在语义理解、模糊匹配、开放域问答方面有压倒性优势。你不需要提前写“苹果既可以是水果也可以是公司”这样的消歧规则模型见过足够多的语料天然就能根据上下文判断。在带复杂语义关系的图中模型也更能捕捉到隐含的关联和常识约束。但概率预测的问题和它的优势同样致命第一它对同一输入可能给出不同输出尤其在温度参数调高的时候第二模型会一本正经地编造不存在的“事实”也就是幻觉问题第三模型给出的置信度分数并不总是和真实正确率一一对应。更麻烦的是大模型推理需要显著的计算资源和延迟预算如果图里的每条路径选择都靠模型“拍脑袋”系统的响应速度和成本都会失控。1.3 为什么在“图”上竞争会被放大很多人以为规则和大模型的冲突只在文本问答里出现其实真正放大矛盾的是图结构。图的特征就是“路径可选、节点关联、状态转移”一个决策往往不是孤立的判断而是沿着图的分支不断往下走的连锁反应。硬编码在图里负责提供拓扑约束比如“这个节点不能连到那个节点”“这条路径的累计耗时不能超过上限”大模型则负责处理语义信号比如“用户问的真正意图是什么”“哪个候选节点在业务含义上和问题最匹配”。问题来了当两者给出的路径建议不一致时系统的行为就分裂了。更麻烦的是图的组合爆炸让“穷举所有冲突场景并提前写好应对规则”这件事变得不可行这也正是为什么不能简单粗暴地让规则全权接管也不能干脆把方向盘全交给模型。你需要的是一个结构性的仲裁机制而不是一个“看心情”的临时判断。2. 图中“竞争控制权”的典型场景拆三个最常踩的例子为了把问题具象化我拆三个具体场景这三个场景我都在实际项目中遇到过。2.1 场景一知识图谱上的路径选择假设你有一个企业知识图谱节点是员工、部门、项目、技术栈边是“任职于”“负责”“依赖”“关联”。当用户提问“技术部里谁最适合接手这个遗留系统”系统需要沿着图找到一条从问题语义到推荐人选的路径。硬编码的做法是建立一套权重规则比如“有该系统相关经验加5分”“在部门层级上更接近加3分”“职称高一级加1分”然后沿着图遍历所有候选节点取总分最高者。这种方式稳定可解释但分数规则很难覆盖复杂的语义组合比如候选人A的经验写在简历里、没有明确的图谱关联边就漏掉了。大模型的做法把整个子图序列化成文本让模型直接输出推荐人选。这种方式能捕捉常识和潜在关联但模型可能推荐一个在图中根本不存在关联路径的节点或者给出一个已经被跨调走的旧员工——因为它依赖的是训练时的知识而不是当前图的实时状态。两个控制源都认为自己有权决定“推荐谁”这就是赤裸裸的控制权竞争。2.2 场景二任务编排与状态流转移另一种常见冲突在任务编排图里尤其是带状态机的业务流程。比如一条审批流申请提交→自动规则校验→人工复核→财务打款。每个环节有一个状态集合一条边代表“条件满足时允许迁移”。确定性硬编码负责管理状态机的合法性某状态必须经过前置状态才能到达某个权限角色只能触发某类迁移。大模型则可以用于理解用户提交的模糊请求比如用户说“这笔款比较急能不能走加急通道”模型需要判断这是否构成“加急”的语义条件。冲突来了规则说“加急通道必须满足金额小于5万且风险等级为低”模型却认为这次申请“从表述和上下文看有加急的合理需求”。到底放行还是不放行放错了是资金风险不放是业务梗阻。这个场景里的每一步都可能被一个“合理但不符合规则”的模型建议打到规则墙上去体验立刻变糟。2.3 场景三实体链接与关系消歧第三类常见问题发生在图数据的入口环节——实体链接。比如一条文本提到“苹果”系统要在图谱中决定它指代的是水果“苹果”还是科技公司“苹果”。规则可以用前后词匹配、词典表来做硬消歧大模型则直接用上下文理解来猜。正常情况下两种方式在大部分样本上结论一致。但总有一小撮故意刁钻的输入比如“苹果酝酿新机型”“苹果”二字出现在一条供应链新闻里词典规则认为“苹果”与“新机型”关联命中科技公司模型则基于新闻语境也判断为科技公司看起来一致。可如果词典里恰好没有“新机型”这个词规则就只能靠常识兜底说“返回最常见含义”而模型仍然能精准命中。这就是覆盖率差异带来的竞争——规则没有漏掉错误但漏掉了正确它也想“有权处理这个输入”。这三个场景的共同点是无论哪种控制源都有自己擅长的区域和明显的盲区。谁都不能完全替代对方但谁都不愿意让权。为了更直观对比我做了一张简表对比维度确定性硬编码概率性大模型预测输出稳定性完全可复现同输入可能不同输出可解释性高链式定位低内部决策难以追因语义泛化能力弱依赖人工覆盖强可处理模糊输入图结构约束保障强天然保证合法路径弱可能产出虚假关联运行成本与延迟极低毫秒级高秒级且按量计费维护方式人工维护规则库数据训练调优模型这张表看下来结论其实很清晰你不可能只选一边。你需要的是“确定性优先、概率性兜底、仲裁机制居中调停”的混合决策架构。3. 寻找最佳平衡点一套三层动态仲裁机制的设计思路下面这部分是全文的核心。我直接给出我习惯用的仲裁框架并说明每层的设计理由你可以直接当成一套可复用模板来参考。3.1 第一原则不是二选一而是分域而治先说最重要的方法论不要试图在“规则对还是模型对”之间做单一选择那是伪命题。正确的做法是把整个图决策空间分成“硬约束域”和“软语义域”。硬约束域由不可违背的业务底线、技术约束、合规要求组成。比如状态机的合法迁移、资金风险红线、用户权限范围、节点白名单。这些必须由确定性硬编码完全接管大模型不得干预。软语义域由可以弹性解释、偏向体验和效率的决策组成。比如候选推荐顺序、文本总结风格、意图识别中非关键部分的判断、关联关系的权重微调。这些可以交给大模型。分域而治的设计理由很简单把错误代价最高的决策全部放入硬约束域可以让系统在灾难面前永远有底线。剩下的部分即便模型犯错造成的损失也在可接受范围内可以通过后续校验和泛化纠错弥补。3.2 第一层仲裁规则前置校验与路径合法性强制约束在模型开始推理之前先用规则引擎把图空间中根本不该出现的路径剪掉。具体操作包括节点白名单/黑名单确定哪些节点不允许出现在结果链中有向可达性预检从起点出发穷举所有合法路径时间窗约束某些边只在特定时间窗口内允许参与决策角色权限过滤某些路径只对特定权限角色开放。这一层的执行是“零容忍”的所有模型候选路径都必须先过这一关。过了才允许进入下一层不过的直接打回。为什么要前置而不是后置因为大模型在受限空间内生成候选时如果提前知道“很多路径本来就不合法”它的输出质量会明显更高。你把约束都剪干净了模型就没机会跑偏到合规死角里。3.3 第二层仲裁规则命中优先未命中再交模型生成候选在硬约束全部满足的前提之下第二个仲裁维度是“规则覆盖率”。具体逻辑先用确定性规则集对当前输入做匹配。如果规则命中且有明确输出直接复用规则输出不再调用模型。只有规则未命中、无法给出明确结论时才把问题交给大模型让模型在合法的路径子集中生成候选路径。模型输出的候选必须再次通过一个“规则后置校验器”校验器会检查路径合法性、节点存在性、关系约束和业务规则一致性。校验不通过则丢弃。这一步解决了一个最关键的问题硬编码负责“减少模型的使用次数”模型只负责“覆盖规则的空白缝隙”。这样既控制了延迟和成本也保证了输出的合法性和可解释性上限。从我实测经验看大部分图决策系统中规则能覆盖的场景往往在60%到80%之间。多余的部分交给模型模型的实际流量只占全部请求的一小部分整体系统的稳定性和成本都能得到显著改善。3.4 第三层仲裁置信度分级与动态阈值调整模型生成候选之后系统需要决定“是否直接采用”。这里不能只看模型自报的置信度因为大模型的自信心和准确率经常不对齐。我的做法是建立一个多因素裁决分数综合考虑模型的原始置信度分数提示词中要求模型输出后置校验器的规则吻合度例如候选路径与已知合法路径的相似度历史知识库命中情况例如该候选结果在过去是否被验证过上下文稳定性因子例如这个输入是否容易受到措辞微调的影响。对这个综合裁决分数做分级处理。一般我会分三档分级综合裁决分数处理策略高置信高于阈值上限直接采纳进入自动执行链路中置信介于上下限之间采纳但打上“建议复核”标记并记录完整证据链低置信低于阈值下限不直接采纳回退到规则默认值或等待人工处理这个“动态阈值”不是拍脑袋定的。我的建议是先用历史日志离线跑一版分数分布和真实结果把“低置信区间的错误率”和“高置信区间的覆盖率”找出来再基于错误代价和覆盖率目标去选阈值。真实业务中根据错误后果的严重程度动态调整阈值往往更合理如果这个决策导致资金损失阈值调高如果只是内容推荐阈值可以适当放低。3.5 成本感知给模型设预算而不是给它无限权限最后一层仲裁其实是成本层的。大模型调用不是免费的延迟也不是可忽略的。在竞争控制权的问题里模型不应该有“随时被调用”的权利。我会给系统设定一个“模型调用预算”比如每分钟最多调用N次、每个请求最多调用M次、超出预算直接进入规则兜底。这么做不仅是为了省钱。更重要的原因是当你限制了模型的调用量规则系统就会被迫自我增强——那些反复触发模型调用的高频场景会被逐渐固化成新的规则模板。这就像把一个刚入职的实习生模型放在一个老带徒的环境里先让他只处理特殊情况见多了再把常见逻辑沉淀成制度规则。这样模型压力减小规则库也越来越完备整个循环是正向的。4. 实操改造记录从一个模拟项目看平衡工程是怎么落地的理论说再多不如看看实际改造过程中会遇到什么。我挑一个比较典型的“专家知识问答与推荐系统”来复盘这套系统本质就是一个带有大量知识图谱关系的决策系统正好合适。4.1 项目原始状态规则与大模型“并行让路”的混乱期这个系统一开始的设计很天真请求进来先用规则引擎跑一遍如果规则没有命中就直接调大模型接口拿答案。看起来没问题但实际运行一个月后发现三个痛病第一是“接缝处产生真空地带”。规则引擎认为“未命中就是不想管”大模型认为“既然让我回答我就要负责回答得漂亮”。可是规则引擎有边界条件比如某类输入在法律上不应该回答但规则没有明确写出来模型拿到请求后以为有问必答直接产生了一个不合规且无法解释的回答。用户看不到规则的那种“确定性保护”只看到一个荒谬的输出。第二是“规则与模型同一选项给出不同答案”。本意是规则未命中时才调模型但问题的格式千变万化规则引擎其实常常“部分命中”。例如规则已经判断出城市是A但模型整体推理后认为城市是B。按照原先的流程规则未完全命中会被当成未命中模型直接覆盖了规则的中间结论。这就是典型的控制权竞争导致的决策覆盖。第三是系统对模型“形成了路径依赖”。团队发现只要放开让模型回答用户满意度有时候确实高。于是越来越多的场景被引导到模型上去规则引擎逐渐被架空可响应延迟从500毫秒飙升到平均2.1秒且出错时根本没有复盘抓手。4.2 改造过程三层仲裁机制的具体落地步骤改造并不是推翻重来而是把决策过程从“并行让路”改成“分层仲裁”。我跟团队做的核心工作是这四步第一步把全部决策点清单化区分硬约束和软语义。把所有图路径上的决策点列成一份表格每个决策点标记“错误代价”和“可逆性”。比如“是否允许放行一笔资金”是不可逆的高代价决策“推荐给用户哪一篇技术文档”是可逆的低代价决策。表格画完之后不可逆的全部划入硬约束域可逆的才允许模型介入。这一步是整个改动里最花时间的但也是最值得的因为很多开发根本不清楚哪个决策是不可逆的等出事才反应过来。第二步搭建规则前置校验器。写一段通用的剪枝层代码在模型被调用之前先把所有边界和约束前置检查完。这个校验器需要直接访问图数据库执行物理路径验证。当时我们用了几十行图查询逻辑把生产环境里“允许参与决策的节点集合”和“合法边集合”全部拉出来然后要求任何模型候选必须在这些集合内。第三步加入规则后置校验器。这一步比前置校验更重要。大模型的每一条输出路径都会再回到规则引擎里做一次完整合法性检查。检查的内容包括终点节点是否合法、路径是否可达、是否满足所有硬约束、是否和用户权限匹配。校验不通过的输出会被打上“规则冲突”标签直接丢弃并返回规则默认值。这个“默认值”的设计很关键我会在后面避坑部分细说。第四步建立置信度分级与反馈闭环。每一条模型候选在通过后置校验之后还要经过综合裁决分数分级。高置信的自动放行中置信的写入复核队列低置信的回退默认值。同时所有决策日志都记录“规则命中情况”“模型候选”“校验结果”“最终采纳结果”这套日志就是后续调阈值的依据。4.3 改完后看到的直接变化改造上线后效果是比较明显的。先从技术指标看模型调用比例从原本“未命中就调”的隐性高调用改为目标式调用后实际只有约20%的请求会真正走到模型层平均响应时间从原来的2.1秒降到0.45秒因为绝大多数请求直接走了规则快路径规则覆盖率从改造前的67%提升到91%主要原因是前置校验器逼着大家把模糊场景写成了新规则可解释性事故从平均每周发生3-4起降到几乎为零因为所有模型输出都必须在规则边界内。业务侧的感受更直观用户再没遇到过“规则说不行但模型说行”的撕裂感。因为仲裁机制让规则在底线问题上一票否决模型只会在规则允许的空间里做优化和推荐。即使某些推荐结果不是最优也至少是安全且合法的。4.4 调优参数时的实际感受平衡点不是一次调出来的我看到不少团队卡在阈值上。说几个实操心得置信度阈值很难“一次定死”。第一版我们把高置信阈值设成0.95结果发现模型候选被大量打回系统的灵活性完全消失规则覆盖率虽然高但推荐质量明显下降用户开始抱怨“系统太死板”。后来我们线下分析了历史日志发现0.87到0.91之间的候选实际正确率已经足够安全于是把高置信阈值放宽到0.89系统立刻活过来了。规则后置校验器的“回退默认值”一定要设计得合理。回退不是“空着不答”而是提前为每种语义场景准备一个安全兜底答案比如“未找到符合条件的候选请走人工复核通道”。如果没有这个默认值系统会在冲突时直接报错或返回空白反而比错答更影响体验。模型候选生成时的“温度”建议调低。在图中做路径决策时不需要模型发挥太多创造性把温度设到0.2以下能显著减少模型在边界处随机游走的情况配合后置校验器通过率会高不少。5. 常见问题与排查技巧实录这部分整理了我实际踩过、也看到同行踩过的一些典型的坑按“场景-现象-排查思路-解法”的方式整理成速查表方便你直接对照。5.1 动态阈值到底怎么定才算合理很多团队把阈值当成一个固定的超参数设完就再也不管。其实阈值应该跟随系统的运行状态动态调整。我的建议是上线初期用一个保守的静态阈值比如0.9然后运行两周把所有“中置信区间”的决策日志抽出来做人工评估。统计出“如果采用该候选错误率是多少”“如果回退默认值用户流失率是多少”。用这两个指标做一次成本权衡就能得到一个比拍脑袋准得多的阈值区间。每隔一个月重复一次这个动作因为业务数据、模型版本、规则库都在变阈值也需要跟着微调。你甚至可以做成一个简单的自动脚本每天统计决策准确率和覆盖率当覆盖率连续三天低于预期时自动把阈值下调0.02当准确率连续三天下降时自动上调0.02。这不复杂但很实用。5.2 规则和模型在同一决策点上各执一词这是最常见也最麻烦的场景。规则说“不放行”模型说“放行更优”系统到底选谁我的处理原则是按决策的“逆程度”来排优先级。涉及安全、合规、资金、人命的决策规则永远一票否决涉及内容推荐、文案润色、排序微调的决策模型可以拥有优先权。具体落到工程上就是给每条规则标注一个“冲击等级”冲击等级高的规则在仲裁时优先级天然高于任何模型输出。这种“按等级排序”的设计比单纯看置信度分数可靠得多因为置信度是模型自己的衡量尺而冲击等级是业务方对后果的共同判断。5.3 大模型的置信度分数感觉不太可信确实不可信这是个已知问题不要过度依赖模型自报的置信度。我见过模型给自己打了0.97的置信度但输出里包含一个完全不存在的图谱实体。处理思路有两个。一是做“置信度校准”用历史数据拟合模型分数和真实正确率之间的映射函数校准后得到的分数比原始分数靠谱很多。二是做“交叉验证”把同一个问题用两种不同方式问两次比如一次直接问、一次要求分步推理看两次答案是否一致。一致性高的答案才是高置信候选。5.4 规则库越补越大最后自己内部打架了很多系统跑着跑着规则库开始自我冲突这也是一种典型的“熵增”。解决方式是为规则引入明确的“优先级表达式”而不是让人肉眼去排查。举个例子规则A说“金额高于10万的采购禁止自动通过”规则B说“总部审批过的采购可以直接通过”。这两条规则在“总部审批过的10万以上采购”场景下冲突。正确的做法并不是删掉某一条而是给规则增加优先级字段比如“覆盖型规则”和“例外型规则”并写明“总部审批例外可覆盖金额上限限制”。5.5 大模型开始输出“过时信息”或者“被污染的上下文”泛化模型的知识有截止日期而且它读取的上下文越长越容易受到无关信息的干扰。在图的场景里模型可能会读到一个很久以前就已经失效的节点关系然后自信地推荐一条不存在的路径。对策是在送入模型之前先把候选路径的实时状态从图数据库里取出来做成“带时戳的上下文”一并交给模型同时在规则后置校验器里加入“节点状态有效期检查”。如果节点在某日期之后已经失效即使模型推荐了校验器也会拦下来。这本质上是让模型永远基于“当前真实的图快照”做预测而不是基于它自己记忆中的世界。5.6 模型调用超时拖垮整个链路大模型接口偶尔会变慢。如果你的主链路是同步等待模型返回的那模型一旦超时整个请求也跟着超时。我是这样处理的给模型调用设置一个“熔断时间”比如300毫秒。超过这个时间还没返回系统直接放弃模型候选走规则默认值。并发量超过阈值时也一样直接降级为纯规则模式宁可牺牲一点灵活性也不能让整个系统跟着模型的延迟一起崩溃。这里有个小技巧把模型调用从主链路中拆出去改成异步“预取”。比如用户在浏览前几条候选时系统已经在后台预生成后续候选路径。这样真正需要模型结果时结果往往已经准备好了延迟体感会低很多。6. 关于平衡点的工程师心得契约比聪明更重要聊到最后我想说一个跟技术无关但跟工程品味有关的体会。做混合决策系统最难的地方不是模型调优也不是规则编写而是所有人业务方、开发、产品对系统边界的共同想象。如果业务方认为“系统应该尽量聪明”开发就会拼命往模型上堆能力如果业务方认为“系统必须永远可靠”开发又会把所有东西都硬化成规则。真正健康的系统设计应该从一开始就明确一张“决策契约”哪些地方模型说了算、哪些地方规则一票否决、哪些地方需要人工参与仲裁。这个契约不是技术文档而是整个团队共同的思维底座。我自己的设计习惯是先画一张“决策路由图”把系统里所有可能出现控制权竞争的位置标出来然后为每个位置写上默认控制方、备选控制方、切换条件和失败兜底。系统上线之后定期对照这张图检查实际行为是否还和契约一致。很多时候你会发现随着规则库膨胀和模型升级某些节点的实际控制方早已悄悄偏离了契约而所有人还蒙在鼓里。关于“最佳平衡点”我最后再分享一个实战经验最佳平衡点往往不在“五五开”也不在“规则保底、模型偶尔出场”这种简单比例里而在“规则的硬约束面足够大模型的弹性活动空间足够受控”这种结构性设计里。硬编码负责圈出一个安全、可解释、低成本的决策边界大模型只在这个边界内做精细化选择和语义补齐两者各司其职系统才能既稳又活。如果你正在做带图结构、带规则系统、又接了大模型的产品希望这套仲裁思路能给你一个具体的落地抓手。别急着让模型变得更聪明先让规则变得可协商、让边界变得清晰平衡点自然就浮出水面了。

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

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

免费获取报价 →
↑