[【封面图】可追溯评分仪表盘:每个分数都能追溯到具体关键词,透明可解释的规则引擎]
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% 准确但每一步可追溯的系统,在很多场景下,后者更有价值。
因为你可以不断调优——看到哪个关键词没命中,加一个;看到哪个阈值不合理,改一下。每次调整都是确定的、可验证的。
相关帖子:
- 主帖:用 AI 看完了 SOLO 两场赛事 4000+ 个项目,发现了这些秘密
- 反检测爬虫框架:500+ 项目采集零封禁,断点续传不怕崩
- 数据审计工具箱:8 项自动检查,12 个碰瓷项目一键揪出







