Files
tamabox/.workbuddy/memory/2026-09-10.md
T
tamakyi e3e59e7c69 chore: baseline snapshot before moderation-strictness feature
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.
2026-09-10 10:56:27 +08:00

3.7 KiB
Raw Blame History

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 纳入硬拦),照做会放大误伤。
  • 误伤两个真实成因(已代码复核):
    1. 七牛把正常内容判 abuse 且 suggestion=block → qiniu.go:55-68 拒绝 → 提问/私聊直接发不出去;
    2. 审核服务不可用时 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。