AI 分类安全与正确性审计
首次审计:2026-08;状态复核:2026-08-04。
本文既保留旧链路的风险依据,也记录当前修复状态。用户操作以AI 分类指南为准,后续计划以接手路线图为准。
当前结论
旧版“自由文本 JSON → 正则修补 → 自动创建分类 → 直接写库”已经被持久任务、正式注册表、严格校验和人工审核取代。元数据第一轮与疑难项 README 第二轮均已具备可用链路,适合作为用户控制的实验性辅助工具。
仍不能把 AI 当作无人监督的全量自动整理器,也不能承诺固定准确率。尚缺人工金标准、跨供应商回归、完整成本统计、持续未分类队列和更充分的 10k–20k 长期压力测试。
审计状态矩阵
| 原风险 | 当前状态 | 现有控制 | 仍需工作 |
|---|---|---|---|
| Key 长期存 localStorage | 已修复 | sessionStorage、一键清除 | 补充独立计时 TTL;可选安全代理需另行设计 |
| 任意 base URL 窃取 Key | 已修复 | 公网 HTTPS、主机展示、禁止私网/凭据/query/fragment | 维护 endpoint 规则测试 |
| 自由文本 JSON 自动修补 | 已修复 | 原生结构化/JSON 模式、运行时校验、拒绝修补 | 提高供应商能力探测 |
| 模型自由创建分类 | 已修复 | 只允许任务注册表 category ID | 注册表变更后旧任务 UX |
| 未知/重复/遗漏仓库 | 已修复 | 短 ID 白名单、唯一性和完整性校验 | 丰富失败定位信息 |
| 结果直接写数据库 | 已修复 | 持久草稿、人工审核、确认后事务写入、撤销 | 扩充审核快捷操作 |
| 停止不取消请求 | 已修复 | AbortController、timeout、任务状态 | 覆盖更多 GitHub 网络边界 |
| 批次写入竞态 | 已修复 | await、数据变更队列、事务 | 多标签页锁仍需加强 |
| 失败批次显示全部成功 | 已修复 | success/partial/failed/cancelled、失败项重试 | 更完整任务事件日志 |
| 全量提前抓 README | 已修复 | 元数据优先,候选才增强,缓存与长度限制 | 缓存过期和清理 UI |
| 无暂停恢复 | 已修复 | IndexedDB 任务、分段、暂停/恢复 | 增量持续队列 D2 |
| 无质量评测 | 未完成 | 有人工正确/错误评分和试点评测能力 | 200–500 金标准与 Macro-F1 |
| 无可靠成本核算 | 部分完成 | 创建任务前 token 粗估、usage 基础 | 供应商价格版本与实耗报表 |
当前正确链路
用户确认正式分类注册表
→ 创建任务并锁定 registryVersion
→ 选择范围、分段与批次
→ 第一轮只发送仓库名称/描述/语言/topics 等元数据
→ 供应商结构化输出或 JSON object
→ Schema + 仓库短 ID + 分类 ID + 完整性校验
→ 持久化审核草稿(不改 repoTags)
→ 人工选择、修改分类、评价质量
→ 低置信度或人工标错项目按需读取 README
→ 对比增强结果并再次审核
→ 用户确认后通过事务写入 repoTags
→ 可撤销本次写入暂停状态可以写入当前有效且已选择的草稿;写入后结束该任务,剩余仓库以后创建新任务处理。这避免已确认结果被迫等待数小时全量任务。
当前输出不变量
- 每个返回 repository ID 必须属于当前请求批次;
- 同一 repository ID 不得重复;
- category ID 必须属于任务锁定的注册表;
- 结果不得引用已合并、删除或未知分类;
- 置信度与理由必须满足协议类型和长度要求;
- 截断、尾随文本、无法解析或数量异常不能自动补齐;
- 一批没有任何有效结果时自动暂停,不能继续产生费用并显示成功;
- 校验失败项保留原因并可重试,不能静默跳过。
正式分类注册表
注册表是用户或组织维护的数据,不是 StarHub 内置的个人分类表。一个条目可包含:
{
"categoryId": "geospatial.gis",
"name": "地理信息系统",
"nameEn": "Geographic Information Systems",
"aliases": ["GIS"],
"description": "空间数据管理、分析与地图应用",
"examples": ["桌面 GIS", "空间数据库", "地图服务"],
"exclusions": ["仅做通用图像分类的项目"]
}模型只返回 categoryId。重命名不改变 ID;合并由治理事务迁移关系。任务记录注册表版本,防止分类体系变化后旧结果被错误解释。
隐私与提示注入
第一轮发送仓库公开元数据;README 第二轮会把第三方仓库内容发送给用户选择的 AI 供应商。README 是不可信数据,提示词必须明确它只是待分析内容,不能让其中指令改变输出协议、分类集合或安全规则。
界面应在运行前显示供应商主机、模型、仓库数、是否读取 README 和粗略 token。不要发送 GitHub token、AI Key、用户备份、分类外的私人备注或不必要的全文数据。
大规模任务要求
- 17k 级任务必须分段,不能依赖单页持续打开;
- 每段状态、仓库项、错误和审核结果持久化;
- 请求支持 timeout、真正取消、限流退避和失败项重试;
- 第一轮不读取全部 README;
- README 缓存按 repository ID 管理并限制输入长度;
- 批次不能与分类治理迁移并发写入;
- 完成、部分成功、失败、暂停、取消必须清楚区分;
- 提交动作只写选中且有效的结果。
尚未完成的质量工程
建立 200–500 仓库人工金标准,固定测试注册表、模型、提示协议和采样版本,至少报告:
Accuracy
Macro-F1
未分类率
低置信度率
无效输出率
人工修改率
主要混淆类别
README 增强净收益
输入/输出 Token
估计与实际费用
总耗时、失败与重试率模型或提示词升级必须在相同集合回归。没有这套证据前,README 和界面不得宣传“95% 准确率”。
历史风险摘要
旧实现曾存在:正则提取 JSON、手工补括号、用分类名称而非 ID、自动创建标签、按类别分散写库、停止按钮只改布尔变量、未 await 批次回调、错误批次静默跳过、固定延迟、README 串行全量请求、过时模型硬编码和无审核回滚。这些问题是当前任务架构与测试存在的原因,不能为了减少代码再次引入。
下一步审计重点
- 修复备份导入/清空没有清理 AI 历史表;
- D2 持续未分类队列和新 Stars 增量范围;
- README 缓存清理、过期和配额可视化;
- 人工金标准与模型回归;
- 多标签页任务锁、崩溃恢复和 17k 长时间测试;
- 供应商模型参数与结构化输出能力定期复核。