☰
AI内容合规审查Skill建设实录:规则引擎与LLM复核实战
2026/10/21 22:57:47 网站建设 项目流程

最近,我在内部做了一个不大、但上线后把整个内容团队都救了的组件——内容合规审查Skill。它被接进AI助手“龙虾”之后,从原来只能查文本错别字、逻辑漏洞,升级成能判断“这句话到底能不能对投资者说”的闸门。整个事情做下来,我对“AI时代金融内容的合规防线”这句话有了完全不一样的理解。

先说背景。我们平台每天会出现大量由AI生成的基金介绍、行情解读、投教科普、直播话术和用户问答回复,量级早就超出了人工逐条审核的极限。传统做法是“内容团队抽检+合规岗事后追责”,但AI内容一旦直接进入对外渠道,抽检永远堵不住口子。把合规审查能力直接做成一个Skill挂到“龙虾”上,本质上是把“事后追责”改成“事中拦截”。这个方向,我认为是未来金融科技平台必须走的一条路。

这篇文章不聊虚的,就把我从零搭建这套S审计能力的思路、技术选型、踩坑实录和上线后的数据变化全部摊开,给正在做类似事情的团队一个可落地的参考。

1. 项目背景与核心思路拆解

1.1 人工审核为什么先失守了

金融内容合规审查,最核心的诉求从来不是“文笔好”,而是“合法合规、不误导”。过去我们处理一篇基金推荐文章,流程大概是这样:运营写初稿、内容组长看一遍、合规岗再逐字过一遍,确认没有收益率承诺、没有保本暗示、没有不规范排名,最后才能发布。

这套流程在图文时代勉强能用,但到了AI生产内容的阶段就完全顶不住了。“龙虾”上线后,一天能生成几百条甚至上千条定制化内容,覆盖基金页点评、社区问答、投教短视频脚本。如果每一版都走人工审核,内容团队扩招三倍都做不完。更麻烦的是,人工审核在晚上和节假日是不接单的,而用户提问、直播脚本生成是7x24小时的。你不可能让合规岗凌晨三点爬起来审一条AI生成的基金短评。

我当时的判断是,审查能力必须前置到AI生成链路里,并且要做到“毫秒级响应”。人工审核可以保留,但它应该做“争议内容复核”和“规则迭代”,而不是像流水线工人一样每天通读几百条AI文案。

1.2 “龙虾”的真实定位与合规压力

“龙虾”是我们内部的一个AI助手项目,覆盖文本生成、信息检索、数据问答和内容润色。和市面上通用大模型产品不同,它面向的是金融业务场景,输出的内容会直接或者间接影响用户决策。这就带来一个严重问题:通用大模型倾向于“自信地胡说”,它不会自动判断“业绩展示不满一年不能宣传”、“不能用‘稳赚’这种词”、“历史收益不代表未来表现”。

很多团队给AI产品做合规,靠的是“提示词约束”,在System Prompt里写上一句“不要承诺收益,不要使用绝对化用语”。我可以负责任地说,这种方式在真实业务里效果极差。大模型的提示词遵循能力是概率性的,同一个提示词,今天能守住,明天换个问法就漏了。而且提示词本身可以被使用者绕过,甚至可以引导模型生成违规内容。所以必须有一个独立的、确定性更强的审查模块,像一道闸门一样卡在AI内容和用户之间。

之所以做成“Skill”,是因为当时“龙虾”的架构本身就是插件化的。技能可以按需加载,有的管数据查询,有的管文本润色,有的管知识库检索。把合规审查做成一个独立Skill,好处是它不侵入“龙虾”的核心生成逻辑,生成和审查解耦,审查规则更新不需要重新训练生成模型,只需要升级Skill本身的规则库和复核模型。这个解耦设计帮我们少走了很多弯路。

1.3 为什么说“合规审查”是AI内容上线的底线

金融领域的内容有一条隐形边界:普通资讯和投资建议之间只隔着一层窗户纸。AI生成的“这只基金近期表现不错”和“这只基金值得买入”,一个合规,一个就可能踩线。关键在于“推荐”和“陈述”的区别,人工审核能靠经验判断,AI生成却不自知。

如果这条边界被AI内容大量突破,最直接的风险是用户被误导,更深层的风险是平台会背上“未尽到审慎管理义务”的责任。监管在这块的态度一直很明确,金融营销宣传必须真实、准确、适当,不得误导投资者。AI生产内容让违规变得更容易、更隐蔽、更规模化,如果不加拦截,一旦出事,就不是删一篇文章能解决的。

所以内容合规审查Skill要解决的不是“文笔是否通顺”,而是“这句话能不能在公开渠道对投资者说”。它更像是一个内容安全网关,而不是一个质检工具。这个定位确定了,后续所有的规则设计、模型选型、流程配置都有了明确方向。

2. 合规审查Skill的产品设计与技术选型

2.1 先分清哪些内容需要审:四类高风险场景

在动手写代码之前,我们做了一次内容场景盘点。整个平台的AI生成内容,如果按来源和对外可见度来分,真正需要合规审查的并不是全部,而是四类高风险场景。

第一类是基金产品页和投教文章。这类内容直接影响用户投资决策,最怕出现“历史业绩好就值得买”“成立以来年化达到XX%”这类表述,业绩展示规则极其严格,必须标注时间区间,必须说明历史业绩不代表未来表现。第二类是社区和问答区里由AI生成的回复。用户问“这只基金能不能买”,AI如果直接给建议,就是典型的违规越界,正确做法是给出客观信息,提示用户自主决策。第三类是短视频、直播脚本。这类内容口语化的多,容易在口头表达里夹带“稳了”“闭眼入”这种词,审查难度比书面语大不少。第四类是营销短信和App推送文案,属于强监管场景,禁用词限制最严,审核优先级最高。

这四类内容,我们分别定义了不同的审查规则包。比如产品页的规则偏向数据披露校验,社区问答的规则偏向“建议性言论”判定,短信推送则直接把禁用词命中设置为最高风险等级,一票否决。做过内容合规的人都知道,规则不能“一刀切”,否则会大量误杀正常内容,业务部门会直接炸掉。

2.2 两段式判定架构:为什么不用一个模型硬扛

整个项目最关键的技术决策,是摒弃了“用一个LLM判断是否违规”的单模型方案,改为“规则引擎预筛+LLM语义复核”的两段式架构。

单模型方案听起来很美好:直接把文本丢给大模型,让模型判断有没有违规。但我们实测下来发现三个问题。第一,可解释性差。模型说“违规”,它为什么违规?命中哪条规则?对应哪段监管要求?说不出依据,后续举证和追责都困难。第二,稳定性不够。大模型判断边界类内容是概率性的,今天说违规,明天同一句话可能就放行了,这在合规场景里是不可接受的。第三,成本高。所有文本都走大模型接口,响应延迟和费用都扛不住。

两段式架构的思路很简单:先用规则引擎做第一道过滤,用正则表达式、关键词词库、语义模板这些确定性手段,把明显的违规内容直接拦截;只有规则引擎判不了、判出来有争议的内容,才交给第二段的LLM做深度语义复核。规则引擎的特点是快、稳、可解释,LLM的特点是强、灵活、懂语境。把两者结合,既能保证关键违规一定被抓住,又能把LLM的处理量控制在一个合理范围。

打个比方,合规审查就像机场安检。第一道是金属探测门,大部分违禁品直接报警,又快又准;过不了门的或者警报模糊的,再让安检员开包检查。如果你把安检全换成机器人AI来判断,理论上也行,但速度和误判率都会出问题。

2.3 合规词库与测试集:决定整个系统效果的基础工程

这个项目里,最费时间、最容易被低估的,是合规词库和测试集的构建。啥叫词库?就是把业内常见的违规表述、禁用词、风险句式整理成结构化条目。我们一开始以为网上能直接买到或下载一份现成的金融禁用词表,结果发现要么太宽泛,要么不更新,根本没法直接用。最后只能自己啃。

词库构建分了三条线。第一条线是梳理监管罚单和通报案例,把被处罚的违规表述逐条拆出来,比如“预期年化收益率高达XX%”“最安全的投资方式”“稳赚不赔”这类经典描述。第二条线是人工审核记录复盘,我们调了过去两年内容业务在审流程中拦截过的所有问题内容,把高频违规话术抽出来。第三条线是“龙虾”生成内容的主动性测试,让它故意生成带有擦边球性质的内容,再把露出来的违规模式补进词库。

测试集是另一块关键资产。我们建了正向测试集和反向测试集,正向集是大量的合规内容,用来检验审查系统会不会误杀;反向集是违规样本,用来检验系统能不能拦住。两套集合构建完之后,每一次规则调整都要全量回归跑一遍,防止新规则解决了旧问题又引入新误杀。我可以直接说,这套测试集的价值不亚于审查系统本身,它是后续所有优化工作的标尺。

3. 实操过程与核心实现

3.1 审查工作流的状态设计:待审、拦截、放行、人工复核

整条审查链路落地之后,核心是一个四状态工作流。AI内容生成完成之后,进入“待审”状态;规则引擎开始第一轮扫描,命中高风险级规则,直接进入“拦截”状态,内容不会对外发布,同时回流给生成端重新改写;如果只命中中风险规则,或者规则引擎无法确定,进入“人工复核”状态;完全没命中任何规则,直接“放行”。

这里有一个设计细节很关键:被拦截的内容不会简单丢弃,而是带着“违规命中明细”重新返回给“龙虾”改写。命中明细里包含命中的规则编号、命中位置、违规类型和改写建议。比如“命中业绩展示违规,建议删除收益承诺句式并增加历史业绩不代表未来表现提示”会作为改写指令注入生成端。这个闭环设计让“龙虾”在被拦截几次之后,生成内容的初始合规率明显提升,相当于用审查反哺生成。

放行的内容也不是永久免检。我们还做了抽样回流机制:被放行的内容按比例定期回到人工复核队列,用来发现漏网的违规模式。这个机制花不了多少成本,但对于保持规则时效性特别重要,可以理解为“飞行检查”。

3.2 关键实现细节与可复用参数

规则引擎这块,我直接贴一段当时核心逻辑的简化版本供参考。不需要完全照抄,重点是理解命中逻辑和风险等级怎么联动。

import re # 高风险规则:直接拦截,不进入复核 HIGH_RISK_PATTERNS = [ r"保本", r"稳赚", r"零风险", r"不会亏", r"无风险", r"必涨", r"稳了", r"闭眼入", ] # 中风险规则:命中后进入LLM复核 MEDIUM_RISK_PATTERNS = [ r"预期收益", r"收益.{0,4}承诺", r"最高攒钱", r"推荐买入", r"值得配置", r"必选基金", ] def rule_engine(text): high_hits = [] medium_hits = [] for pattern in HIGH_RISK_PATTERNS: if re.search(pattern, text): high_hits.append(pattern) for pattern in MEDIUM_RISK_PATTERNS: if re.search(pattern, text): medium_hits.append(pattern) if high_hits: return {"verdict": "reject", "risk_level": "high", "hits": high_hits} if medium_hits: return {"verdict": "manual", "risk_level": "medium", "hits": medium_hits} return {"verdict": "pass", "risk_level": "low", "hits": []}

实际生产环境的规则引擎会比这段复杂很多,但核心思路一致。正则规则之外,我们还叠加了一层“否定前缀检查”和“上下文窗口限制”,后面在误杀案例里会详细讲。

风险等级阈值我们定过两版,第一版追求高召回,把所有命中中等风险的文本全部拉去人工复核,结果人工复核队列暴涨三倍,合规岗直接被淹没了。后来改成“高风险拦截+中风险部分入复核队列+低风险抽样复核”的分级策略,人工复核压力才回到可接受范围。这个教训说明:审查系统不是越严越好,它要跟人工处理能力匹配,否则会把真正的风险埋在一堆废线索里。

3.3 与“龙虾”主链路的对接方式

技术对接上,我们没有修改“龙虾”的生成主逻辑。生成阶段完全不变,生成结果出来之后,通过一个中间件调用合规审查Skill的接口。审查通过,内容继续往下游走;审查不通过,返回拦截结果给生成端改写。从接口调用到拿到审查结果,整体时延压在200毫秒以内,对用户体验基本无感。

这么做的好处是,合规审查和生成能力完全解耦。后续“龙虾”升级基座模型,或者换一个新的生成框架,审查部分完全不用动。反过来,如果审查规则要更新,也只需要升级Skill服务,不碰生成逻辑。这个在微服务架构里看起来是常识,但在AI应用落地时很容易被做成“面多了加水,水多了加面”的耦合状态,两个模块互相拖累,最后哪个都改不动。

对接时我们还加了一层“审计留痕”。每次审查请求都会记录下输入文本、命中规则、风险等级、审查结果、处理耗时、最终由谁改写或放行。这个留痕不仅是技术日志,更是合规追溯的依据。如果某天一条已发布内容被质疑,我们能精确还原它在发布前的审查路径,随时进行回溯。

3.4 实测数据与效果对比

系统上线后的前两周,我们做了详细的对比测试。同一批测试内容分别走纯人工审核、纯规则引擎、规则引擎+LLM两段式审查,得到的数据大概是这样:

审查方式单条耗时违规拦截率误杀率人工介入率
纯人工审核5-10分钟85%1%以下100%
纯规则引擎50毫秒72%8%0%
规则+LLM两段式180毫秒94%2.5%12%

两段式的拦截率比纯规则引擎提升了22个百分点,最核心的贡献来自LLM对语义的理解。比如“这只基金我已经持有了三年,体验还不错”这句话本身没有任何禁用词,但放在社区问答场景里,由AI以一个普通用户的身份说出,就容易给其他用户造成“我亲测有效”的暗示,规则引擎发现不了,但LLM能识别出这种变相推荐的语气。

误杀率控制在2.5%左右,人工介入率12%,意味着每天真正需要人工看的AI内容数量大幅减少,内容团队终于不用熬夜了。当然,数据是测试集上的,上线后前三天误杀率一度冲到6%,后来靠加样本回归和规则微调慢慢压了回来。这就是测试集不够大的代价,前两周一直在补课。

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

4.1 漏检与误杀:最典型的矛盾怎么解决

上线之后最大的矛盾,不是拦不住违规,而是误杀太多业务方受不了。比如我们词库里有一条“最高”的禁用规则,本意是拦截“最高收益”“最高推荐”这类绝对化用语。结果有次“龙虾”生成了一篇基金分红公告解读,里面正常写了“这是本基金历史上第九次分红”,完全没问题,但“分”和“红”之间没有触发规则,小小的字面没问题。真正出问题的是另一句写“该基金2022年以来最高连续分红纪录”,一个真实的数据描述,直接被拦了。因为规则引擎只看字面,不看语境。

解决办法是给中风险规则加“否定前缀检查”和“语境豁免机制”。具体来说,如果一个中风险规则命中,但命中位置附近出现了“历史”“统计”“区间”“仅供参考”这些限定词,就把风险等级降一档,从“人工复核”降到“放行+抽样”。这个豁免机制上线后,误杀率直接砍了一半。

另一个漏检点也很有意思。我们的规则引擎一直在追字面词,但实际违规话术经常做变形处理,比如“绝壁不会亏”“稳得一批”“下了重仓不会凉”这些网络化表达,词库里根本没有。后来专门为“龙虾”生成的社区回复做了一个“网络热词变体映射表”,把常见的谐音、缩写、方言变体统一映射到基础禁用词,再进规则引擎判断。这一步补了不少漏检。

4.2 模型幻觉与边界判断:复核阶段的新风险

两段式架构里的LLM复核,帮我们解决了大量语义判断问题,但它自己也引入了新风险,最典型的两个。

第一个是幻觉问题。LLM复核时,偶尔会“凭空创造”违规理由。比如某条内容明明只是“基金净值更新了”,LLM却输出“该内容存在承诺收益风险”。我们排查后发现,这不是模型逻辑问题,而是复核Prompt里给了太多“宁可错杀不可放过”的倾向性,模型就开始把模棱两可的内容全往违规方向推。后来把复核Prompt改成“仅当有明确证据支持时才能判定违规”,并限定必须输出命中理由对应的具体规则编号,幻觉情况才明显减少。

第二个是边界判断问题。金融内容里“陈述收益”和“承诺收益”之间的边界,很多资深审核员都要想一下,更别说LLM。比如“该基金过去一年上涨15%”是客观陈述,“该基金一年内可上涨15%”就是变相承诺,就差一个字,性质完全不同。我们针对这类句式专门做了一批标注样本,反复调优复核模型的判断阈值。最终发现,与其让LLM直接判断“违规”,不如让它判断“是否包含对未来收益的明确指向”,再把这个判断结果交给规则层做最终裁定。把大模型的“直觉判断”转成“特征识别”,准确率反而更高。

4.3 性能与成本:别让审查变成内容生产的瓶颈

规则引擎预筛阶段把大概六成的内容直接放行,真正进LLM复核的只有四成。这四成的单条处理时延被控制在800毫秒以内,整体来说可以接受。但如果未来内容量再涨十倍,成本还是扛不住。

我的建议是,建设中长期缓存机制。同一个用户画像、同一只基金、同一类问题,AI生成的内容往往模板相似,只要合规审查过一次,就可以把结果缓存下来,后续遇到匹配度高的问题直接复用审查结果。这个机制可以把LLM复核成本再降四到五成。另外一个策略是错峰批处理,非实时场景(比如短视频脚本、长文初稿)可以把复核任务放到夜间批处理队列,白天只需要保证实时问答内容走全量审查。

上线后我最大的体会是:合规审查不是一次性工程,而是一个需要持续运营的基础设施。规则词库要按周更新,测试集要按月补样本,LLM复核的Prompt要按季度复盘优化。没有这个常态运营机制,再强的技术架构也会在三个月后变成摆设。

现在回顾整个项目,内容合规审查Skill真正解决了三个层面的问题:把AI生成内容的风险从不可控变成可控,把合规团队从海量人工审核中解放出来,也把“龙虾”这个AI助手从“能说”进化成“懂得什么不能说”。这背后最重要的一点,是合规不能靠AI的自觉,必须靠工程化的审查链路来兜底。再聪明的模型,都需要一道独立的闸门。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询