Repo .git was damaged (refs/ missing, index truncated, object store near-empty). Repaired via git init (rebuilt refs), stale index preserved as .git/index.corrupt-20260910.bak, then full worktree committed as a rollback baseline.
3.7 KiB
3.7 KiB
2026-09-10
负面情绪提问拦截方案调研(评审,未改代码)
- 盘点提问链路现有 5 道防线,结论:无任何情绪/意图维度判定,全部是字面/合规/可用性维度。
- 已验证的代码事实(后续复用):
- 文本审核走七牛
POST https://ai.qiniuapi.com/v3/text/censor,scene=antispam,10s 超时(internal/security/censor/qiniu.go:85)。 IsPass()只硬拦politics/terrorism/porn,且review一律放行 →abuse(辱骂)实际漏过(qiniu.go:55-68)。censor.go:50-53命中 31 天缓存后重新用 parser 计算 Pass,缓存不锁死判定 → 收紧IsPass()无需清缓存。- 拉黑
user_block只作用于私聊(route/question/page.go:368在StartChat分支内),不拦提问。 - 项目无 at-rest 加密(grep aes/Encrypt 无结果);无队列/Worker,异步只有
shared.SafeGo裸 goroutine;Redis 仅 session/cache。 - 有内存滑动窗口限流器
internal/route/ratelimit.go,可复用做单 IP 限流。 conf.Limits.QuestionContentLen默认 1000;AnswerContentLen/FollowUpContentLen默认 2000(= 七牛文本 2000 字上限的边界)。
- 文本审核走七牛
重要背景更正(用户指出)
- 图片/文本审核服务是七牛云,不是阿里云。阿里云通道虽仍在
censor.go代码中,但conf/app.sample.ini的aliyun_access_key为空,实际不生效。后续所有审核相关评估以七牛为准。
七牛云能力(官方文档已验证)
- 文本审核 label 9 类:normal/spam/ad/politics/terrorism/abuse/porn/flood/contraband/meaningless;suggestion: block/review/pass + score;≤2000 字;不支持白名单(拉黑词库要提交工单)。
- 七牛自有 LLM(MaaS):
https://api.qnaigc.com/v1,兼容 OpenAI/v1/chat/completions与 Anthropic/v1/messages,50+ 模型,用独立 API Key(非 AK/SK)。
产出
outputs/llm-moderation-feasibility-2026-09-10.md:LLM 内容审核方案可行性评审(数据流/失败降级/配置校验/Key 安全/邮件告警/成本限额)。- 4 个 P0:SSRF(用户自填 API 地址,连通性测试即探测入口)、Key 明文落库、用户 Key 被刷造成损失、失败即发信导致邮件轰炸。
- 核心建议:分层 L1 收紧七牛
IsPass()(零成本)→ L2 本地情绪词库 → L3 LLM 只补七牛覆盖不到的语义部分。 - 待用户确认 8 点,最关键:命中后是"提示+仍提交"还是"硬拦"。
追加修订(用户实测反馈)
- 用户反馈:七牛对「辱骂」判定过严,正常对话经常误伤 → 撤回原 L1 建议(把 abuse 纳入硬拦),照做会放大误伤。
- 误伤两个真实成因(已代码复核):
- 七牛把正常内容判
abuse且suggestion=block→qiniu.go:55-68拒绝 → 提问/私聊直接发不出去; - 审核服务不可用时 fail-closed 拒绝(
page.go:574、chat_handler.go:258)→ 七牛抖动期间全站发不出内容。
- 七牛把正常内容判
- 关键约束:七牛文本审核不支持白名单、自定义词库需提交工单 → 无法调准也无法调松,唯一可控的是"命中后怎么办"。
- 修订原则:显式规则硬拦,算法推断只标记。箱主自定义屏蔽词+高危三类(politics/terrorism/porn)硬拦;abuse/spam/ad/flood/contraband/meaningless 只打标记照常送达;审核不可用改 fail-open+标记待审。
- 落地:questions/messages 加标记列(AutoMigrate 自动加列)+ 后台折叠/筛选 + 设置页「审核严格度」三档(严格/宽松(默认)/仅标记)+ 用
detail.Score自建阈值(默认偏高)。 - 该路线零延迟零外部依赖,顺带消掉 SSRF/Key 明文/Key 被刷/邮件轰炸 4 个 P0。