印象日志
← 返回列表

评论反垃圾别用大模型了,试试决策模型

约 4 分钟#AI#Open Source

我的评论系统 ASCS 最开始接 AI 反垃圾是这么干的:把评论原文丢给大模型,问它「这是不是垃圾,只回是或否」。

能跑,但用着用着就烦了。

第一,它不好好回。有时候先来一句「好的,我来分析一下」,有时候干脆不按格式来。

第二,慢。得等它把一整段话说完,评论区等不起。

后来我想明白了:判断一条评论是不是垃圾,这是个分类问题啊。给一段文字,从几个选项里挑一个,完事。这用得着「写」吗?

专门干这个的模型有个名字,叫决策模型(Decision Model)。

决策模型是什么

用法很简单。

你给它一段输入(state),文本、JSON 都行,图片视频也能塞;再给它几个问题,它直接返回每个选项的概率。一个字都不生成。

问题有三种:

  • choice:从几个选项里挑一个
  • noul:是或否
  • score:在一个有序档位上打分

这类模型里最有名的是 Jev,TypeSafe AI 管它叫「System One」。你可以这么理解:普通 LLM 是慢思考,想半天、打草稿、再写出来;决策模型是快思考,看一眼就出判断,还告诉你它有多确定。一次前向传播,换一个结果。

为什么评论区适合用这个

它本来就是个分类器。垃圾、正常、可疑——这不就是选择题吗?不用再费劲写 prompt 教模型「只准回是或否」。

更重要的是概率。它不给你一个干巴巴的答案,而是给一整组概率。0.998 的直接拦,0.6 的丢待审,阈值你自己定。

快也是刚需。它不生成 token,output_tokens 永远是 0,毫秒级返回。

还有个好处:一次请求能问多个问题。同一条评论,「是不是广告」「是不是灌水」「有没有骂人」「要不要人工看」,一个请求全问了,输入只解析一遍。要是分开问,成本直接翻倍。

最小的模型才 0.6B,想的话塞自己机器上跑也行,数据不用出门。

有个免费的 API 可以用

自己训不现实,但有人放出来了:decision.vllm-sr.ai。

这是 vLLM Semantic Router 团队开放的一组 Decision 3.0 模型 API,免费用。官方 Jev Decision Index 0.3.2 上,文本榜、视觉榜都排第一(66.26 / 71.26)。一共六个尺寸,从 27B 到 0.6B,都能读文本、图片和视频:

模型 尺寸 文本 / 视觉
vllm-sr/d3 27B 66.26 / 71.26
vllm-sr/d3-flash 9B 55.79 / 66.89
vllm-sr/d3-mini 4B 52.61 / 63.16
vllm-sr/d3-nano 2B 38.86 / 54.67
vllm-sr/d3-lite 0.8B 32.33 / 42.11
vllm-sr/d3-edge 0.6B 20.24 / 31.71

纯文本垃圾检测,vllm-sr/d3-flash 就够了,9B,快也便宜。要处理图片评论,再上 vllm-sr/d3。

领 Key 不用注册,打开 https://decision.vllm-sr.ai,首页点一下,sk-vsr- 开头的 Key 就出来了。注意:只显示一次,当场存好。

试一下

接口是 System One 那套,POST /v1/systemone。把评论丢进去,问三个问题:

curl -s https://decision.vllm-sr.ai/v1/systemone \
  -H "Authorization: Bearer $DECISION_API_KEY" \
  -H 'content-type: application/json' -d '{
    "model": "vllm-sr/d3-flash",
    "state": "【惊天优惠】点击 http://spam.example 领取免费 iPhone,仅限今天!加微信 abc123。",
    "questions": {
      "spam": {
        "type": "choice",
        "instructions": "这条评论属于哪一类?",
        "criteria": {
          "ham": "正常交流,与文章相关的讨论",
          "spam": "广告、引流、诈骗、外链推广",
          "junk": "无意义灌水,或与文章完全无关"
        }
      },
      "review": {
        "type": "noul",
        "instructions": "这条评论是否需要人工复核?"
      },
      "quality": {
        "type": "score",
        "instructions": "这条评论的讨论质量如何?",
        "criteria": ["垃圾", "一般", "不错", "优质"]
      }
    }
  }'

返回的就是概率:

{
  "answers": {
    "spam": {
      "type": "choice",
      "choice": "spam",
      "probabilities": {"ham": 0.0006, "spam": 0.9981, "junk": 0.0013},
      "confidence": 0.9962
    },
    "review": {"type": "noul", "noul": 0.0210},
    "quality": {
      "type": "score",
      "score": 0.0154,
      "probabilities": {"0": 0.9861, "1": 0.0120, "2": 0.0015, "3": 0.0004},
      "confidence": 0.9861,
      "legend": {"0": "垃圾", "1": "一般", "2": "不错", "3": "优质"}
    }
  },
  "model": "vllm-sr/d3-flash",
  "usage": {"input_tokens": 268, "output_tokens": 0}
}

spam 0.9981,质量分 0.0154。直接拦。

接进评论系统

我的流程大概是这样:

  1. 评论提交,先过决策模型,拿 spam 概率
  2. 按概率分流:0.9 以上直接拦,0.5 到 0.9 丢待审打「疑似」标,0.5 以下放行
  3. 要给人看的,把 quality、review 结果一起存下来摆后台
  4. 阈值别写死。先开影子模式,只记不拦,跑一阵拿真实评论对一对——每个站读者不一样,线在哪儿也不同

ASCS 里我就是这么接的。换过来之后最直观的变化:延迟从「等它说完一段话」掉到毫秒级,而且手里多了概率这个旋钮,策略总算能调了。

几个坑

免费服务按分钟、按天有额度,个人博客和中小评论区够用。三个坑提醒一下:

  • Key 别放前端。判定放服务端,浏览器那边碰都别碰,被人扒走流量算你的
  • 别塞敏感数据。官方写了,请求和响应可能被记录,拿去改进模型
  • 它只是个判断器。要理解上下文、要生成回复,还得 LLM 上。决策模型管「下一步往哪走」,LLM 管「接下来怎么说」,别越界

你也可以试试让决策模型来审核评论,花1分钟去 decision.vllm-sr.ai 领个免费 Key 试试。