【skill 创作】零 API 成本,每个分数都能追溯到具体关键词

[【封面图】可追溯评分仪表盘:每个分数都能追溯到具体关键词,透明可解释的规则引擎]

GitHub 仓库yaohewoma/rule-scoring-engine


摘要

一个纯规则驱动的多维度评分引擎,基于关键词匹配 + 统计特征,对大规模文本内容进行 6 维度自动化评分与 10 品类分类。每个分数都能追溯到具体命中了哪个关键词,零 API 调用成本,3400+ 个项目 10 分钟评分完毕,AI 评分跑两次结果一样——这就是可解释性的力量

核心卖点:6 维度关键词评分 × 可追溯评分逻辑 × 10 品类自动分类 × 零 API 成本 × 断点续传兼容


背景:AI 评分的黑色十分钟

做完爬虫采集到 3400+ 个 SOLO 挑战赛项目后,下一个难题来了:怎么给这些项目打分?

我的第一反应是——调 AI。写个 prompt,把项目描述扔进去,让 AI 打分。

跑了 50 个样本,结果让我崩溃:

同样的项目,第一次运行
“avgScore”: 7.2

同样的项目,第二次运行
“avgScore”: 6.5

更致命的是,领导拿着评分报告问我:

“这个项目为什么得 7.2 分?那个为什么只有 6.5?”

我:呃…AI 说的。

领导:那为什么同样跑两次,分数不一样?

我:…

AI 评分的问题

问题 影响
不可解释 说不出"为什么是这个分数"
不一致 同样的输入,不同时间输出不同
成本高 $0.1/个,3400 个 = $340
不可调试 分数不满意?没办法调 prompt 外的任何东西

![【配图1】AI 评分不一致的困境:同一个项目输入,两次调用返回不同的分数,开发者被领导追问"为什么"却答不上来]


创作过程:从黑盒到白盒

我需要一个透明、一致、零成本、可调优的评分系统。

核心思路

评分从 5.0 中点起步——不是从 0 开始。这样大部分项目落在中间档位,区分度更高:

基础分 5.0

  • 关键词匹配加分(每个类别共享一个上限,防刷分)
  • 统计特征加分(字数、图片数、代码块数、投票数)
  • 负面关键词减分
    = 最终得分(0~10)

六维度评分设计

用 TRAE SOLO 快速搭建了 6 个评分维度,每个维度都有独立的关键词库:

维度 关键词类别 关键词数 统计特征
功能完整度 核心/进阶/流程/质量 16 字数 > 1000 +1.5, 图片 > 5 +1.0
创新性 新颖/独特/方法/AI 16
交互体验 设计/响应式/精致/Demo 16
视觉设计 设计/素材/Figma 13 图片数 +2.0
技术难度 后端/前端/复杂/基础设施 16 代码块 +1.5, 字数 > 2000 +1.0
实用价值 问题/用户/市场/反馈 16 投票 +1.0, 回复 +0.5

[【配图2】六维度评分设计:每个维度独立的关键词库与统计特征,从5.0中点起步的评分架构]

关键设计决策:同类关键词共享一个加分上限,防止"关键词堆砌"刷分。

def score_keywords(text, dim, kws, config):
“”“同类关键词共享加分上限,防刷分”“”
bonus = 0.0
for category, words in kws[dim].items():
hit_count = sum(1 for w in words if w in text)
if hit_count > 0:
# AI 类别有更高加成
per_hit = 0.5 if category == “ai” else config.KW_BONUS_PER_HIT
cap = 2.0 if category == “ai” else config.KW_BONUS_CAP
bonus += min(hit_count * per_hit, cap)
return bonus

每一步都可追溯

评分结果不是"一个数字",而是完整的评分树:

项目:AI 智能助手
├── 功能完整度:7.4 分
│ ├── 基础分:5.0
│ ├── 关键词命中:core(2/4)=+0.6, advanced(1/7)=+0.3
│ ├── 统计特征:字数 1200=+1.5
│ └── 最终:7.4
├── 创新性:8.0 分
│ ├── 基础分:5.0
│ ├── 关键词命中:novelty(2/7)=+0.6, ai(3/7)=+1.5
│ ├── AI 特殊加成:+2.0(cap)
│ └── 最终:8.0
├── 交互体验:5.9 分
│ └── …
├── 视觉设计:6.0 分
├── 技术难度:7.5 分
├── 实用价值:5.8 分
└── 综合:6.8 分 → 等级 A
Strengths: [“功能完整,描述详尽”, “技术实现复杂,有深度”]
Weaknesses: [“交互设计较薄弱”, “实用价值待验证”]
OneLiner: “以功能完整度和交互体验为亮点的产品”

现在回答领导:“因为这个项目在功能完整度维度命中了 core 类别的 2 个关键词,AI 类别命中了 3 个,统计特征贡献了 1.5 分,综合 6.8 分。”

每个数字都能说出来

[【配图3】评分树追溯:从基础分到最终得分的每一步都可追踪,展示关键词命中详情和统计特征贡献]

意外收获:产品分类器

评分过程中发现,只知道分数还不够——想知道"哪些类型的项目得分高"。

顺手做了一个 10 类自动分类器:

分类 关键词数 典型命中
游戏 20 游戏、玩法、关卡、unity、godot
教育 20 学习、课程、答题、刷题、背单词
工具 20 效率、自动化、插件、分析、搜索
AI 12 AI、大模型、LLM、ChatGPT、智能体
健康 17 健康、医疗、心理、康复、睡眠
金融 11 理财、投资、股票、记账、贷款
设计 10 设计、figma、UI、UX、原型
社交 12 社交、聊天、匹配、交友、社区
求职 10 简历、面试、求职、offer、招聘
内容 15 博客、写作、笔记、markdown、翻译

分类器支持赛道加权:传入 --track Code,Code 赛道下的工具类项目自动加权。配合科技/创新类优先匹配策略,一行命令完成分类:

python classification-rules.py --text “这是一个AI驱动的学习助手” --track Code

输出:分类结果: AI工具 (置信度: 80%)

[【配图4】10品类自动分类器:赛道加权 + 科技优先匹配策略,一行命令完成精准分类]


使用步骤:5 分钟上手

1. 安装(零依赖)

仅需 Python 3.8+,使用标准库,无需 pip install 任何东西

python --version # 确认 >= 3.8

2. 准备数据

输入格式与上游 stealth-scraper 无缝对接:

{
“projects”: [
{
“topicId”: “123”,
“title”: “AI 智能助手”,
“rawText”: “这是一个基于大模型的AI智能助手…”,
“votes”: 150,
“imageCount”: 5,
“replyCount”: 20
}
]
}

3. Dry-Run 预览(关键一步)

python full-engine.py --input data.json --dry-run --dry-run-size 10

输出关键词命中率报告,帮你发现哪些关键词太泛(命中率 80%→无效)、哪些太冷门(命中率 0%→去掉)。

4. 全量评分

python full-engine.py --input data.json --output scored.json

3400+ 个项目,10 分钟跑完。输出带进度条,每 100 个项目打印一次进度。

5. 高级选项

替换自定义关键词库

python full-engine.py --input data.json --keywords custom_kw.json

自动建议阈值调优

python full-engine.py --input data.json --output scored.json --tune

分类器独立运行

python classification-rules.py --text “在线教育平台” --track Code --verbose


效果展示

评分 vs 成本

对比维度 AI 评分 规则评分引擎
可解释性 黑盒,说不清 每个分数追溯到关键词和统计量
一致性 每次结果不同 100% 可复现
成本(3400 条) $340 $0
速度(3400 条) 约 30 分钟(API 调用) 约 10 分钟(纯本地)
可调优 只能改 prompt 关键词、增量、上限、阈值全部可调
依赖性 需要网络 + API Key 离线运行

[【配图5】AI评分 vs 规则引擎全方位对比:成本$340→$0,速度30分钟→10分钟,结果从不可复现到100%一致]

真实数据:SOLO 挑战赛评分分布

评分完成: 3400 个项目
S: 180 (5.3%) ← 卓越
A: 1020 (30.0%) ← 优秀
B: 1700 (50.0%) ← 良好
C: 500 (14.7%) ← 一般

分数分布: min=2.0, p25=5.2, p50=6.0, p75=6.8, max=9.5

分布接近正态,说明评分引擎区分度合理——不会把大部分挤在高分或低分段。

分类发现

类型 数量 平均分
工具 2,142 5.1
教育 778 4.6
游戏 359 4.9
内容 68 4.7
其他 53 4.5

[【配图6】SOLO挑战赛3400项目评分分布:正态分布验证了评分引擎的区分度合理性,S/A/B/C四档分布均衡]


我踩过的坑

坑 1:基础分从 0 开始

一开始基础分设成 0,结果大部分项目分数在 2~4 之间,区分度极差。改成 5.0 中点起步后,分布立刻合理了。

坑 2:每个关键词单独加分

最早设计是"每命中一个关键词 +0.5",结果一个堆了 20 个技术关键词的项目直接冲到 15 分(满分 10)。改成同类共享上限后解决。

坑 3:关键词太泛

“好”“优秀”"棒"这些词命中率 95%,几乎没有区分作用。全部替换成具体的技术术语和行业词汇。

坑 4:忘记 Dry-Run

直接跑全量评分,发现创新性维度命中率只有 2%——关键词太冷门了。Dry-Run 应该永远是第一步。

坑 5:分类器只匹配关键词

早期分类器没有区分度:一个提到"学习"二字的工具直接被分到"教育"。加入赛道加权科技/创新优先匹配后,准确率大幅提升。


总结与思考

什么场景适合规则评分?

适合 不适合
大批量文本初筛(百条以上) 几十条数据——人工更快
同一标准反复评分 需要深度语义理解
评分逻辑需要公开透明 高度非结构化的对话文本
预算有限(零 API 成本) 创意类、艺术类评估

为什么不用 AI?

不是不用,是用在对的地方。规则引擎做初筛和基础打分,AI 做深度洞察——这才是最优解。

在我的竞品分析全链路系统中:

stealth-scraper → 采集数据

rule-scoring-engine → 初筛 + 评分(本 Skill)

ai-batch-processor → 对重点项目的 AI 深度洞察

data-audit-toolkit → 审计评分质量

规则引擎把 3400 个项目筛到 180 个 S 级 + 1020 个 A 级,AI 只分析这 1200 个高质量项目——成本从 $340 降到 $8.5。

[【配图7】竞品分析全链路流水线:stealth-scraper→rule-scoring-engine→ai-batch-processor→data-audit-toolkit,规则引擎承担初筛核心角色]

核心感悟

可解释性比准确率更重要。 一个 90% 准确但不可解释的系统,和一个 80% 准确但每一步可追溯的系统,在很多场景下,后者更有价值。

因为你可以不断调优——看到哪个关键词没命中,加一个;看到哪个阈值不合理,改一下。每次调整都是确定的、可验证的。


相关帖子