【社会服务赛道】 - 洞洞:一个零社交压力的情绪出口

【社会服务赛道】 - 洞洞:一个零社交压力的情绪出口

【标签】社会服务、社会公益

【标题】社会服务赛道 - 洞洞:一个零社交压力的情绪出口


1. Demo 简介

是什么: 洞洞是一个不进行任何评价的情绪出口——一个零社交压力的社区日记本。它不强行给你建议、不会一直告诉你"应该怎么做",只提供一个"你说,我听着,我不评判你"的安全空间。名字取自"树洞":把情绪倒进洞里,洞不会回嘴。

面向谁: 12-30岁的青少年(中学生、大学生,社会压力大的人群),以及所有"想倾诉又怕被评判"的人——深夜睡不着不敢打扰别人、考试失利怕被说矫情、和朋友吵架怕被当负担的那些时刻。

核心理念: 这个世界从不缺愿意教你做事的人,缺的是愿意听完你说话的人。洞洞只做一件事——倾听和回应

主要功能:


2. Demo 创作思路

灵感来源:

深夜两点,一个16岁的女孩在被窝里哭。她不敢告诉父母,怕被说"矫情";她不敢发朋友圈,怕被同学议论;她甚至不敢跟闺蜜讲,怕成为负担。她需要的不是一份心理测评量表,不是一个冷冰冰的"建议",而是一个永远不会评判她、永远听她说完的出口。

想解决的问题——"评价"和“建议”本身就是压力:

  • 社交平台的评价压力: 朋友圈、微博、小红书——每次倾诉都暴露在点赞、评论、转发的凝视下。倾诉变成"表演",情绪变成"内容",越倾诉越孤独。

  • 心理类App的评价压力: 心理测评给你贴上"中度焦虑"的标签,咨询App给你推"建议就医",情绪记录App给你算"幸福指数"——这些都在用"评价"代替"陪伴"。

  • 真实人际关系的评价压力: 父母会说教,朋友会有自己的烦恼,老师会"上报"——没有任何一个真人能做到"听完不评价"。

  • 结果: 中国17岁以下青少年中约3000万人有心理问题,但真正求助的不到20%。他们不是不想求助,而是没有一个足够低门槛、足够安全、足够不评价的出口。

为什么做"不评价"这个方向:

  • 评价≠帮助: 很多时候人倾诉不是为了被"解决",而是为了被"听见"。一句"我懂你"比一百条建议更有用。

  • 匿名+无评价=真正的零压力: 只要还有点赞、粉丝、排行、标签,倾诉就会被异化。只有彻底去掉"评价体系",社区才能回到倾诉的本质。

  • AI适合做"不评价的倾听者": AI没有价值观、没有情绪、不会疲倦、不会"上报"——它是天然适合"只听不说"的角色,配合明确的提示词约束(不给建议、不说教),可以做到真人做不到的"纯粹倾听"。

  • 主动权归用户: 家长端只能看到孩子主动授权的脱敏数据。它不是监控工具,是孩子主动让渡有限信任的桥梁——评价权始终在孩子手里。

核心取舍: 我们刻意不做"心理测评"“抑郁筛查”“风险等级评定"这类看似专业但本质是"评价"的功能。洞洞的价值不是"诊断你有没有病”,而是"接住那些没人接住的情绪"。


3. Demo 体验地址

在线体验: http://120.27.160.252:3002/

APK下载: 通过网盘分享的文件:dongdong-mvp-demo.apk
链接: 百度网盘 请输入提取码 提取码: sqq3


4. TRAE 实践过程

整个项目从需求文档撰写、技术框架确立、核心功能实现、到跨平台能力落地,全部在 TRAE IDE 中通过 AI 协作完成。以下按真实工程演进顺序展开。

阶段一:需求文档撰写

起点是把"零社交压力"这一定位想清楚并落成文档。 与 TRAE 对话反复推敲"为什么不做心理测评"“为什么去掉点赞排行”“匿名到什么程度才算零压力”,最终形成两份基础文档:

  • 产品需求文档,明确"零压力、零评判、高度隐私"三大核心设计原则,定义青少年端/家长端/咨询师端三端边界
  • MVP 范围与里程碑规划

这一阶段的关键产出不是代码,而是通过对话把模糊的"不评价"直觉,打磨成可执行的设计约束——后续所有功能取舍都回到这三条原则上来。


Session ID: 3974101309594131:81de7cb9bdacb4d4f0e441bc4634a8d0_6a32276b22e6c1145457d6e2.6a32276b22e6c1145457d6e5.6a32276b22e6c1145457d6e3:TRAE Work

阶段二:技术框架确立

框架不是一开始就定的,而是随 MVP 验证逐步演进。 实际经历了两次技术栈迁移:

1. MVP 验证期(Vite + React + localStorage):
最初按开发计划用 Vite + React 搭建最小可运行版本,AI 回复用模拟数据,数据存 localStorage。目标是一周内验证"不评价"的交互体验是否成立,不追求工程完备性。

2. 工程化重构期(Next.js + Go + PostgreSQL + Redis):
MVP 验证通过后,进入实质性产品开发,技术栈升级为:

层级 技术方案 说明
前端(青少年端) Next.js + React + Tailwind 静态导出,支持 Capacitor 打包
后端 Go(Koa 风格中间件) 直接服务 8081 端口,处理 WebSocket 鉴权
数据库 PostgreSQL 16 个 migration 文件管理 schema 演进
缓存 Redis 邮箱验证码 60s 冷却、会话管理
管理后台 独立 Next.js 应用 heart-hole-admin,LLM 配置/用户/Agent/认证审核
语音转写 FunASR WebSocket 流式 ASR
部署 Docker Compose + frp 隧道 一键部署脚本 + LAN/frp 双通道

这一阶段通过 TRAE 对话生成项目骨架、数据库 schema、路由结构与中间件,并约定了"前后端分离、后端直连 WebSocket、Admin 独立部署"的工程边界。


Session ID: 3974101309594131:1b95cc2354d52bc37bab7710990e8293_6a32276b22e6c1145457d6e2.6a324406d42885c7ffe75a40.6a324406d42885c7ffe75a3e:TRAE Work CN.0.1.31.no_sid.no_ppe.T(2026/6/17 14:51:50)

阶段三:核心功能实现

框架确立后,核心功能按"先骨架后细节、先能用后打磨"的顺序推进:

1. AI 共情对话 · 提示词工程实现"只听不说教"
设计 AI 对话提示词,明确约束"先倾听、再回应、不给建议、不说教、不评判、用户不想聊就安静陪"。后端 Go 实现 WebSocket 流式传输 + FunASR 实时转写,前端设计语音交互状态机。

2. 情绪日记 · TextBlock+VoiceBlock 混合块编辑器
设计块编辑器:文字块自适应高度、语音块插入时按光标位置切分前后段、Backspace 删除前一录音块、语音转写支持重试。日记数据存储支持 content 纯文本 + contentBlocks JSON 双格式,并兼容旧版数据。

3. 情绪空间 · “看见"而非"评价”
五维情绪雷达图 + 趋势图 + 洞察卡。文案刻意避免"诊断/风险/异常"等评价性词汇,只用描述性表达。每 30s 刷新 + visibility change 触发。

4. 守护关联 · 主动权归孩子
家长端只能看孩子主动授权的脱敏数据,绑定需孩子发起邀请码。不是监控工具,是"孩子主动让渡有限信任"的桥梁。

5. 匿名社区 · 刻意去掉社交评价机制
发现社区去掉点赞排行、粉丝关注、优质内容算法推荐——只保留匿名发帖与温和回应,避免倾诉变成表演。

6. UI 设计语言统一 · 让界面本身不带有"评价感"
统一设计 token(bg-surface/bg-page/text-text-*/rounded-apple*/shadow-card)、柔和动效(0.28s fade+slide 路由转场、whileTap 0.97)、温暖配色。

7. LLM 多用户路由与配置
Admin 后台支持 OpenAI/Anthropic/DeepSeek/NVIDIA/自定义多供应商配置,用户可在设置中绑定自有 API Key,Agent 提示词可视化编辑。

8. 咨询师认证
认证心理咨询师入驻流程,Admin 后台审核。

9. FunASR 语音转写兜底
FunASR 容器禁用 SSL 允许 ws://,转写失败时支持点击重试。


Session ID: 3974101309594131:7269782c86b9273b3f83d0d4fb0dad30_6a32276b22e6c1145457d6e2.6a32dbe7d42885c7ffe76249.6a32dbe7d42885c7ffe76248:TRAE Work CN.0.1.31.no_sid.no_ppe.T(2026/6/18 01:42:14)

阶段四:跨平台能力落地

Web 端跑通后,目标是让"不评价的情绪出口"能装进口袋。这一阶段解决三个跨平台难题:

1. Android 打包(Capacitor)
使用 Capacitor 将 Next.js 静态导出打包为 Android APK:

  • 注入 NEXT_PUBLIC_API_BASE_URLNEXT_PUBLIC_LAN_API_BASE_URL
  • AndroidManifest.xml 声明 RECORD_AUDIO / MODIFY_AUDIO_SETTINGS / CAMERA 权限,启动时申请运行时权限
  • WebView 自动授予 AUDIO_CAPTURE 资源请求
  • APK 最终产物 89MB,已包含全部核心功能与 ONNX 模型

2. 本地情绪模型(ONNX Runtime Web)
原方案情绪判定走后端 LLM,但跨平台(移动端 WebView)下不可靠。改为嵌入式本地小模型满足跨平台需求:

  • 模型选型 ,用 convert-emotion-model.py 转 ONNX int8 量化(98.3MB)
  • 通过 ONNX Runtime Web(WASM SIMD)实现浏览器内推理,300ms 防抖实时分析
  • 模型与 wasm 运行时预打包在随 APK 内置
  • Diary 页异步推理 + emotionSeqRef 防竞态,先 fallback 关键词算法、后 ONNX 覆盖

3. API 地址双通道自动切换
实现 800ms 健康检查 + 5 分钟缓存,保证移动设备在不同网络下都能连上后端。


Session ID: 3974101309594131:32653915b42041204cfc0821dbaa8054_6a32276b22e6c1145457d6e2.6a33d94bd42885c7ffe786c8.6a33d94bd42885c7ffe786c6:TRAE Work CN.0.1.31.no_sid.no_ppe.T(2026/6/18 19:40:59)

开发心得与踩坑

  • TRAE最值得说的价值: 不是"帮你写代码快",而是"帮你把模糊的产品直觉打磨成清晰的设计原则"。通过反复对话"为什么不做测评"“为什么去掉点赞”,最终才把"不评价"这个定位立住。

  • "不评价"也是工程问题: 提示词约束AI不评判、ONNX模型只输出情绪倾向不输出诊断、社区算法去掉排行——每一个"不评价"背后都是具体的工程实现。

  • 踩坑经历:

  • WebSocket语音流必须直连后端(8081),不能走Next.js代理(3002),否则鉴权失败

  • Turbopack开发模式下 process.env.NEXT_PUBLIC_* 不内联到客户端bundle,必须硬编码fallback

  • 本地ONNX模型需要WASM SIMD支持,移动端WebView需手动放行 .wasm 资源

  • @capacitor/preferences 在web端proxy的 then() 未实现,需改用localStorage

  • jd-binary模型训练数据为电商评价,对中性日记句判定偏正向,后续考虑换 uer/roberta-base-finetuned-dianping-chinese


报名帖链接


备注: 本项目已构建Android APK,包含全部核心功能、ONNX情绪模型与WASM运行时,可在Android设备上完整体验"不评价的情绪出口"。Web端可通过在线体验链接或本地一键部署访问。

1 个赞