本周只有两个项目有实质推进:telefast 做了后台改名与管理面板重构,同时把语言、国家标注切换为外部标注数据并补上评测基线;tg-stats 把语言识别和国家识别从分类器里拆出来,做成两条独立链路。两个项目的主题其实是同一个:先把标注数据弄干净,再谈识别效果。
telefast 本周 34 个提交,改动约 9500 行,涉及 152 个文件。主线有三条。
后台(原 web 包改名为 admin)。 先把包名和服务名总体改成 admin,然后把仪表盘升到 v2:覆盖率回归、队列健康快照、榜单健康行、实体卡活跃率都进了首屏。配套在 core 里加了运维快照读写模块和相对时间格式化,覆盖率聚合按类型拆分,并输出数据时间,缓存 TTL 默认 600 秒;调度器会预热覆盖率缓存并写入运维快照。仪表盘还专门补了一轮坏输入防御——无采集时间快照、配额上限环境变量、覆盖率缺键这几类情况都不再让页面报错。账号列表的状态列现在展示当前有效状态,停用、限流(带剩余时长)、租用中一眼可见。
后台国际化与边界修复。 新增 ADMIN_LANGUAGE 切换后台界面语言,英文界面下页面标题同步切换;顺手修了中文「保存」按钮值未归一化导致保存后跳转错误的问题。导出功能限制最大行数,避免大表被全量读取。
语言/国家直标(geo)。 从设计文档开始,一路做到落地:扩展语言枚举与国家种子,抽出国家种子并新增外部数据源的地理映射,补齐其语言国家值映射;导出直标 CSV,并提供直标导入 SQL;新增语言国家评测 runner、指标与报告,评测里补了先验切片和 matched 过滤;最后把直标基线和决策门写进文档。另外做了种子频道全账号的 access_hash 扩散,配了迁移和一组 guard 测试;tier 刷新周期也按现有账号容量重调。
分类器侧有个性价比很高的改动:GPU 脚本改成 transformers 直驱 fp16,T4 上实测 5 倍提速。会话里还讨论了几件偏方向的事:实体语言识别换 fastText 是否有收益、账号上限下如何尽可能多跟踪实体变化、实体 access_hash 的安全管理方式,以及用 Rails 8 + SQLite 搭一个 Telegram 目录站。
tg-stats 本周 45 个提交,约 1 万行,涉及 69 个文件。核心动作是解耦:分类器不再写语言、也不再写国家,摘要链路同样不再写国家,各自接独立链路,写库字段分离,避免互相覆盖。
语言识别。 新增独立语言 prompt 与 Claude Haiku 客户端,服务层是规则优先,配合脚本预过滤规则;随后修了预过滤的虚假高置信判定、客户端围栏解析、模型优先级与重试日志。新增语言来源/置信度字段与独立语言设置,管理后台能展示来源和置信度并提供设置入口,新增页的类型选择与唯一约束冲突也修了。补了回填命令(含 suspect 过滤与参数校验、批次参数收敛)和语言质量报告命令,定时任务与上线手册一并接入。语言码统一为 zh_hans,历史 zh 的清理口径写进了文档。实体列表新增「语言未设置」筛选并按具体语言码筛选,为此加了部分索引。
国家识别。 方向是受众优先 + 语言先验优先。新增独立国家 prompt 与客户端、国家语言先验规则、国家来源/置信度字段、回填命令与质量报告,另写了 country-identification-runbook.md。规则兜底这块反复调了几轮:明确城市/地区规则只匹配标题前缀与场景词,兜底只读标题,避免简介里的 hashtag 误判;单一主国家语言在 LLM 无信号时回退语言先验;汉字规则只在中文字符占优时判中文,英文通用词弱信号回退 en。
这周两个项目都在做同一件事:把「识别」从一个大杂烩里拆成可评测、可回填、可回滚的独立环节,并且给每个结果带上来源和置信度。拆完之后才谈得上调规则、比模型——telefast 的评测基线和 tg-stats 的质量报告,都是为下一步的判断准备的。