规则引擎优先、模型兜底:我把三个流程做成接口后的取舍

做自动化交付一年多,有三件事被反复要求:消息分流、询盘抽取、内容改写。

第五次重复实现之后,我把它们抽成了一个服务。分享几个不显然的设计取舍。

一、默认纯规则,模型只做兜底

默认引擎是关键词 + 正则 + 词表:

  • 意图:九类关键词命中数排序,取最高
    • 情绪:正负词表计数,压到 -3..3
    • 实体:手机号 / 邮箱 / 微信号 / 国家别名 / 数量 / 预算 / 交期
    • 合规:广告法极限词、医疗功效、金融承诺、站外引流

好处是:断网能跑、输出稳定、单条耗时接近 0ms。

客户验收的时候,要的是"同样的输入永远同样的输出",而不是"每次都很聪明"。模型输出漂移,在验收阶段是灾难------你没法向老板证明它变好了。

配了 OPENAI_BASE_URL + OPENAI_API_KEY 才升级成模型引擎,异常自动回退。返回值里带 engine 字段,谁产生的写得清清楚楚。

二、输出 JSON 就是接口契约,不是聊天窗口

json 复制代码
{
  "intent": "投诉升级",
    "urgency": "高",
      "sentiment": "负面",
        "route": "主管/客诉组(15 分钟内介入)",
          "sla_minutes": 5,
            "need_human": true,
              "suggested_reply": "..."
              }
              ```
              
              字段名直接对齐 CRM 列名 / 工单字段。客户现有系统对接时不用改我们的代码。
              
              我没做成聊天窗口,原因很实际:聊天窗口演示好看,但接不进业务流程。客户已经有一个收件箱了,不想要第二个。
              
              **三、合规检查放在分发接口里**
              
              国内做内容分发,广告法极限词是最常见的下架和罚款原因。
              
              所以 `/distribute` 不只生成六个平台版本,还返回逐条修改建议:
              
              ```json
              { "type": "广告法极限词", "word": "最强", "level": "高", "fix": "改为可举证的具体描述" }
              ```
              
              这个功能不好看,但客户真的用。
              
              **四、踩过的三个坑**
              
              1. **空格的处理**:正则里 `[a-z]` 能匹配 "Aowei" 但匹配不到 "Shenzhen Aowei Trading Co., Ltd"------因为字符集没有空格。英文公司名必须允许空格。
              2. **手机号带空格**:`+86 138 0013 8000` 用纯数字正则抓不到,要先归一化。
              3. **别名**:`US` 不是 `USA`。国家识别要写别名表 + 词边界,否则 "because" 里的 "us" 也会命中。
              
              **五、性能与部署**
              
              单文件、标准库、`python server.py` 就起。镜像 100MB 以内,免费层能跑。健康检查 `/api/health` 返回引擎类型和版本。
              
              真的不需要框架。三个接口、几百行,够用了。
              
              **六、什么时候该上模型**
              
              我的判断标准:规则覆盖率低于 70% 的时候。
              
              先上规则,跑两周,看漏判的都是什么;漏判集中在语义理解("这个东西是不是你们发的"),再上模型补那 30%。
              
              反过来先上模型,你会得到一堆"看起来对但没法验收"的结果。
              
相关推荐
小雉系统4 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
JAVA前线5 小时前
用《实践论》分析前沿部署工程师:AI时代听见炮声的人
架构·ai编程
深入云栈8 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
JackJiang8 小时前
IM踩坑:聊天消息ID怎么设计?一个UUID搞不定,我用双ID解决
后端·架构
聪明的笨猪猪9 小时前
企业知识库AI架构选型:落地导向的架构决策与组件清单
经验分享·面试·架构·embedding·数据库架构
Dawson Zhu10 小时前
Queen Planner深度解析:Agent竞争从模型时代进入系统时代
人工智能·语言模型·架构·aigc·agi
孟健10 小时前
我用 REA 逆向自己的 Electron 桌面端,扒出 178 个 IPC 通道后我反而放心了
架构·开源·ai编程
Cosolar12 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github
Linye12 小时前
配了 3 套 AI 规则还打架?聊聊 Agent 信源仲裁与三层验真
人工智能·架构
一条Go12 小时前
历史告警归档:为什么"删掉主库行"是最后一步
后端·架构·github