Archer Han
← 全部作品

灼见

一个想让争论收敛的讨论平台,机制做完了,然后我主动停了

广场首页:正在对线的话题列表,右侧是发起话题入口和我的战绩速览
广场。每条话题都带着根立场、未决反驳数和参与人数,右侧可以直接发起新话题。

为什么做

起点是一个帖子:如果给“AI 编程就是垃圾 / AI 编程能极大提高效率”这种对立话题设计一个界面,怎样才算好的对线体验?

我的答案是:现在社区奖励的是嗓门和情绪,不奖励“被说服”。打赢一场骂战很爽,但没有人真的改变想法,讨论也不留下结论——几天后同样的架在别的地方再吵一遍。

所以想做的其实是三件事:让争论有形状,让不回应有代价,让“我改主意了”成为战绩。

项目状态:已暂停(2026-09-12)。代码、数据模型和设计文档都保留着,为什么停见文章结尾。

先立规矩

理性讨论须知:六条规则,读完才能发帖

发帖之前必须过一遍六条规则(约 5 分钟,一次通过永久有效):

  1. 对论点,不对人——批评“这句话为什么站不住”,而不是“你不行”。
  2. 反驳前先复述——说不清对方在主张什么,就不算一次有效的反驳。
  3. 区分事实、推断与偏好——事实给来源,推断讲推理链,偏好就明说“这是我想要的”。
  4. 允许被说服——发现对方说得对,公开承认并记录立场变化。
  5. 一次一个论点——重复内容会被合并,刷屏不会让观点更正确。
  6. 挂红是检验台,不是羞辱——计时是为了推动收敛,不是给吵架记分。

这不是挂在墙上的公约:程序会拿它做检查(复述覆盖度不够就不算有效反驳),发布动作也会在服务端二次校验这道门槛。

发起话题:三步

发起话题:先选类型,再写主张与论据

第一步选类型,只有两种:我在做选择(真实的个人纠结,请陌生人帮我权衡利弊、补盲区),或者我要验证一个观点(“X 是否成立”,靠论据和逻辑交锋)。

第二步把话说清楚:标题(一句话讲清你在纠结什么)+ 背景与约束 + 我的立场主张(这句话会成为讨论树的根)+ 我目前的倾向(支持 / 中立验证 / 倾向反对)+ 最多三个标签 + 可选的第一条论据。

立场不是标签,是树根——后面所有的支持和反驳都挂在这句话上,谁都不能偷偷移动它。

对线:反驳必须先复述

话题页:主论点、支持理由与反驳两栏对照

想反驳?先用自己的话复述对方的观点。过不了复述检验,就不算一次有效的反驳。

通过了才算挂上:目标论点立刻进入“挂红”状态,开始 3 / 7 / 14 天倒计时——3 天橙色提醒,7 天红色并且结论书里自动降权展示,14 天可以申请“默认判负”,交给轻陪审确认。

楼主有两条路:回应(解除挂红,生成回应节点),或者承认击穿。承认不等于被否定得一无是处——被击穿的只是“作为论据的有效性”:它的支撑型子孙自动变成“悬空”(论据本身可能仍然为真,只是失去了论证目标),反驳型后代变成 moot(目标没了,不判胜负),而成功击穿的那条链会被提升到理由层。

还有一条“修订优先于判负”:被击穿之后可以出新版本,旧版存档,反驳继续对旧版有效。认错和修正被鼓励,而不是被打死。

结论书

一个话题收敛之后,产出的是结论书:只能采纳“理由层”的论点,采纳时冻结一条支撑链快照,连作者名一起存下来——以后改名也不会改写历史导出。存在未决反驳时不允许悄悄收尾,只能“带险关闭”:逐条勾选确认,风险写进快照,结论书里单列未决风险区。可以导出成 Markdown 分享。

被说服,要有证词

改换立场必须写证词:原来怎么想、哪条论据改变了你。它会作为公开记录留在个人页的立场时间线上,诚实 +1,而且豁免这一次的声望损失。

奖励是双向的:改主意的人拿到诚实战绩,说服他的人拿到“说服”战绩。两边都赢,平台上才没有人害怕被说服。

立帖为证:把判断交给时间

个人决策类话题可以在发布时立帖为证:一句话押注 + 揭晓日期,别人可以押你“会后悔”或“不会后悔”,楼主不能自押,开放数量和截止时间都有约束。

到期不是系统替你编一个结论,而是楼主回访作答(没后悔 / 部分后悔 / 后悔),据此结算押注、写进判断力战绩。挂红阶段、回访、揭晓都会推站内通知。

通知中心:挂红阶段提醒与揭晓提醒

战绩

我的战绩:计数卡、立场时间线、徽章墙

四个计数严格分开:判断力(押中多少)、贡献(论据被采纳多少)、诚实(公开改换过几次阵营)、裁定权重(做陪审的资格与分量)。

原则是:战绩不可购买、不可转让,只能靠真实行为和时间积累。内部另有一层“逻辑币”(可花费,用来发悬赏、押注、交陪审押金),和战绩严格分开——花钱不影响信誉。

裁判阶梯

谁有权改变树的状态?答案是分权,一共六级:

  • L0 程序:查重、复述覆盖度、来源完整性、侮辱词识别——只标记和提示,AI 没有裁决权。
  • L1 作者/楼主:采纳、修订、个人决策关闭。
  • L2 轻陪审:3 人,48 小时,简单多数。
  • L3 重陪审:5 人,72 小时,适用于折叠确认、公共主张关闭、扣战绩级惩罚。
  • L4 上诉陪审:7 人,5 天,需付申诉押金;推翻原判要有人负责。
  • L5 时间/现实:预测揭晓、决策回访、事实反转。

四条铁律贯穿全部:分权(没有任何一方拥有完整裁判权)、分级(判错代价越大门槛越高)、留痕可申诉(一切裁定进审计账本,除系统性作弊外都可逆)、AI 只有建议权。

怎么做的

把规则写成纯函数是这套东西能跑起来的关键:

  • 领域层全是纯函数:论点树(祖先链、重挂、提升)、节点状态机、击穿传播、计时、复述检查、课程门槛、立帖为证——每个模块配单测,核心分支覆盖率门槛 85%,全仓行覆盖 ≥70%(做到对线那期时到了 90%)。
  • 服务层一个动作一个事务:挂反驳会同时建节点、建 challenge、写 3/7/14 计时、把目标置为 challenged;承认击穿要连带处理悬空、moot 和击杀链提升。
  • 计时不靠常驻进程:读取路径惰性推进 + 每天一次 Cron 对账,事件幂等写入,漏一次也不会算错。
  • 数据在 PostgreSQL(Drizzle ORM):树用邻接表 + 祖先链,depth 恒等于链长,有断言兜底。
  • 认证两条路:GitHub OAuth,以及邮箱验证码注册——验证码只存 HMAC 摘要、密码 scrypt 加盐、重置令牌一次性且只存摘要、登录注册找回都有内存限流。
  • 部署:一个 Dockerfile 出三个目标(约 200MB 的非 root 运行镜像、迁移用、构建用),compose 的顺序是 db → migrate → app → scheduler;自建 Nginx + Let’s Encrypt 证书自动续期,镜像在 CI 构建后推到镜像仓库,服务器只负责拉取重启。

然后我把它停了

结论先写:这不是技术问题,是单人扛不动一个公开 UGC 平台的内容审核与合规责任。

审核是地基层,不是附加项。 公开注册意味着 7×24 的违法与有害内容处置、举报响应、应急上报和法务对接。我手上只有程序性检查(查重、复述检验、侮辱词提示),那不是审核队列、处置分级和申诉流程。

合规风险不可压缩。 “立帖为证”一旦沾上体育竞猜、彩票、赔率或可兑换价值,就有被认定为赌博的风险;面向中国大陆用户的 UGC 平台还涉及实名、日志留存、内容安全负责人这些法定义务。这些需要专业评估,不是免责声明能盖住的。

成本结构与个人开发不匹配。 功能一个人做得完(M0–M5 全跑通了),但审核运营、内容安全 API、值班和法务是持续投入,而一旦出事后果严重。

所以在投入更多之前止损:代码冻结在标签 pause-2026-09-12,GitHub Actions 全部停用(工作流改成 .disabled,恢复时改回来即可),仓库和文档原样保留。

什么条件下会考虑重启:先把形态的风险降下来(邀请制闭门内测、团队内部决策工具、或者“AI + 可信朋友”的个人决策助手);补齐上线前必备的自动审核与人工队列、品类黑名单、举报与处置分级、申诉通道、用户协议与法务评估;以及——有人一起扛。

回头看

这个项目最值钱的可能不是代码,而是那几份设计文档:产品总览、裁判机制、奖惩机制、数据库设计、视觉呈现。它们把“怎么让讨论收敛”拆成了能实现的规则——每一条状态迁移凭什么发生、由谁决定、错了怎么纠正。

也认清了一件事:机制设计一个人做得完,运营不行。 上线一个公开社区,每一行代码背后都站着一个必须负责的人,而那个人不能是“下班以后的我”。

让讨论收敛,比让讨论热闹难得多。

Next.js · PostgreSQL + Drizzle · 论点树状态机 · Docker 自建部署