10小时黑客松,我们做了个 2am 也在线的电竞搭子
黑客松时间很短,如果一上来就说“我要做一个通用陪伴 Agent”,那大概率最后做出来的是一个套壳 ChatGPT,再加几张炫酷卡片。用户先做一个轻量 onboarding:你看什么赛事,主队是谁,喜欢哪个选手,自己是毒奶型、理性复盘型,还是纯情绪上头型。他们能看到的是:流程顺不顺,反应快不快,情绪有没有被调起来,最后一页能不能把故事闭环。很多时候,它更像一个情绪放大器,把那些原本没人接住的瞬间,轻
10小时黑客松,我们做了个 2am 也在线的电竞搭子
—— 毒奶观察室:AI 搭子陪你看比赛,一起吐槽,一起破防,一起把赛后朋友圈也写了。
凌晨一点半,一个人窝在沙发上看决赛。
主队前期裂开,弹幕在刷,论坛在吵,你本来还能装作很冷静。结果决胜局最后一波,对面五个人去抢大龙,我方一个人绕后偷家,水晶爆掉的一瞬间,你从沙发上弹起来:
“卧槽!这也能偷?!”
喊完才发现,屋里就你一个人。
你想给朋友发消息,朋友睡了。想给对象解释,对方问你:“偷塔是什么意思?” 想发朋友圈,憋了半天只憋出一句 YYDS,配图还像从营销号偷的。
这就是我们在黑客松里抓住的那个场景:电竞观赛不缺信息,缺的是一个懂你阵营、懂你黑话、也能接住你情绪的人。
于是有了这个项目:毒奶观察室。
先放一版 demo 演示,后面再拆它是怎么做出来的:
如果上面的播放器加载不出来,也可以直接去 B 站看:毒奶观察室 demo 演示视频。
先说明一下视角:这篇不是“我一个人包圆整个项目”的战报,而是我作为研发负责人 / 技术负责人,对这个团队黑客松项目做的一次复盘。所以产品判断和用户链路,我会更多用“我们”;具体到架构、prompt、AI 调用链和工程取舍,我会回到“我”的视角。
01. 缘起:看比赛这件事,正在变得越来越孤独
我们一开始没想做一个“AI 聊天机器人”。
聊天机器人太泛了,什么都能聊,也就意味着什么都不够锋利。黑客松时间很短,如果一上来就说“我要做一个通用陪伴 Agent”,那大概率最后做出来的是一个套壳 ChatGPT,再加几张炫酷卡片。
我们真正想解决的是一个更窄的问题:
当一个电竞粉丝独自看比赛时,他的情绪没有地方落。
这件事挺微妙。虎扑、B站、直播间弹幕都很热闹,但那种热闹是广场,不是朋友。你发一句“这波怎么敢开的”,立刻被几百条弹幕冲走。它有群体氛围,但没有个体回应。
而电竞比赛最强的地方,偏偏就是情绪密度:
-
赛前,想找个人一起押一手、毒奶一下; -
赛中,高光、失误、争议、翻盘,每十秒钟都可能让人上头; -
赛后,想把今晚的情绪发出去,但又懒得自己写复盘、做海报。
所以我们把产品价值收敛成一句话:
它不是赛事数据库,也不是冷冰冰的智能助手,而是那个 2am 也在线、永远站在你这边的电竞搭子。
这个定位一旦定下来,后面所有设计就很顺了。
02. 产品拆解:赛前期待,赛中共振,赛后表达
我们没有把它做成一个单页聊天框,而是拆成完整观赛链路。
第一段是赛前。
用户先做一个轻量 onboarding:你看什么赛事,主队是谁,喜欢哪个选手,自己是毒奶型、理性复盘型,还是纯情绪上头型。这个步骤不是为了“填表”,而是给后面的搭子人格喂上下文。
同样是一条提醒:
TES vs JDG 即将开始。
和:
30 分钟后开团,速效救心丸已备好。
信息量差不多,但关系感完全不同。前者是工具,后者才像朋友。
第二段是赛中。
这是整个 demo 的核心。用户可以打字,也可以像微信一样按住说话。我们做了一个脚本化赛事时间线,让比赛过程稳定推进:比分变化、关键团战、高光事件、情绪峰值,都能按节奏出现。
用户发一句“气死我了,这波凭什么接啊”,搭子不会回你“请保持理性”。它会根据当前比分、比赛时间、刚发生的事件和用户情绪,生成同频回复。
这里我很喜欢代码里一个小设计:情绪不是只交给 LLM 猜,而是先在本地做一层粗粒度识别。
比如:
-
“气死”“拉跨”“服了” → anger -
“封神”“起飞了”“YYDS” → ecstasy -
“寄了”“破防”“心态崩了” → devastated -
“紧张”“怕输”“心跳” → tension
识别完以后再把情绪标签和强度塞进 system prompt,让搭子别错位。
用户在骂的时候,不要突然端水;用户在嗨的时候,不要像客服一样冷静;用户破防的时候,也别假装世界和平。
这其实是陪伴型产品里非常关键的一点:不是回答正确,而是情绪位置正确。
第三段是赛后。
比赛结束后,系统把赛中留下的情绪日志、flag、金句、关键事件汇总起来,生成两类东西:
-
情绪曲线和赛后回顾; -
可分享的文案和纪念海报。
我们给海报做了三个风格:荣耀叙事、吐槽梗图、复盘理性。用户可以选择选手、游戏角色,再补一句自己想说的话,然后通过图像生成模型出图。
这个设计的重点不是“AI 替你写”,而是“AI 放大你”。
如果生成内容里没有用户自己赛中说过的话,没有那场比赛真实发生过的情绪峰谷,那它就只是 AI 作文。看起来很完整,但用户没有发出去的欲望。
所以赛后内容必须长得像“这是我的夜晚”,而不是“这是模型的作业”。
03. 工程取舍:10小时窗口里,先让体验跑起来
这次黑客松最有意思的不是技术有多复杂,而是取舍非常清楚。
我们没有上真实数据库,没有接真实赛事 API,也没有做 WebSocket 实时通信。整个技术方案可以总结成一句话:
客户端承担 90% 的体验逻辑,服务端只做必须的 AI 代理。
技术栈是:
-
Vite + TanStack Start + React 19 -
TanStack Router 做文件系统路由 -
Zustand + persist 把用户画像、对话记录、flag、情绪日志落到 localStorage -
Framer Motion 做页面过渡和交互动画 -
Tailwind CSS v4 + Radix UI 搭 UI -
TokenDance 网关调用大模型和图片生成 -
StepFun stepaudio-2.5-asr做语音识别
为什么这么做?
因为黑客松只有 10 小时。
评委看不到数据库建得多优雅,也不会因为你接了一个极其真实但不稳定的赛事 API 就多给两分。他们能看到的是:流程顺不顺,反应快不快,情绪有没有被调起来,最后一页能不能把故事闭环。
所以我们用 mock timeline 保证比赛稳定演出,用 localStorage 代替数据库,用服务端函数隔离 API Key,用脚本化事件喂给 LLM 上下文。
这不是偷懒,是 demo 阶段合理的剪枝。
很多项目死在“我想把它做完整”。但黑客松更像舞台剧,你必须先保证观众看见主线:
他孤独地打开比赛,有搭子陪他一起上头,最后带着一张属于自己的图文离开。
这条线跑通了,项目就站住了。
04. Prompt 不是玄学,是产品策略的落地
这个项目还有一个我觉得挺值得写的点:提示词不是散落在代码里的魔法咒语,而是被集中管理成了产品资产。
我们把 prompt 分成几类:
-
搭子人设:它是谁,怎么说话,和用户是什么关系; -
粉丝镜像:不同用户类型应该怎样被回应; -
海报 prompt:荣耀、吐槽、复盘三种视觉风格; -
赛后文案 prompt:朋友圈和官方社媒两种输出场景。
甚至还做了一个隐藏的 /admin 提示词管理页。
你可以在浏览器里直接改 prompt,填示例变量,试运行真实模型输出。改动会落在 localStorage,不会污染代码仓库。这个功能在黑客松里很实用,因为现场调 prompt 是高频动作,不能每改一次都重新发版。
对我来说,这其实是 AI 产品工程化的一个小缩影:
Prompt 不应该只是写死在代码里的字符串,它应该像配置、像策略、像可迭代的产品文案。
尤其是这种强风格产品,模型能力只是一半,另一半是你有没有把角色、场景、情绪边界设计清楚。
05. 最满意的设计:反应先于语言
陪伴类产品有一个很容易被忽略的问题:如果所有反应都等 LLM 返回,体验会慢半拍。
比赛高光发生的时候,人不是先组织语言的,人是先“啊!”一下。
所以我们把视觉和音频反馈做成了旁路系统。情绪事件从 Zustand 触发后,可以直接调用 EffectOverlay、音效、动画,不必等模型完整生成一句话。
也就是说,用户喊“卧槽稳了”的时候,页面可以先闪、先震、先给情绪反馈,然后搭子的文字再补上来。
这件事在工程上不大,但在体验上很关键。
因为它让 AI 从“慢吞吞回答问题的人”,更接近“坐你旁边一起看比赛的人”。
06. 遗憾和下一步:真正的陪伴不该需要你按按钮
当然,它现在还只是一个黑客松 demo。
它的很多地方都是为了 10 小时窗口服务的:
-
赛事数据是脚本化 mock,不是真实时; -
记忆只存在本地 localStorage,没有账户和云端档案; -
语音交互还是 turn-based,需要用户按住说话; -
多人共看、房间级上下文、长期记忆都还没做; -
赛后海报和文案已经能跑,但距离真正可商用的内容生产链路还有距离。
如果继续往下做,我觉得方向有两个。
第一,把单人陪伴做沉浸。
理想状态不是用户点按钮问 AI,而是 WebSocket + VAD 挂在后台。用户说话,搭子听见;比赛进入高压时刻,搭子主动开口;用户沉默时,它也懂得闭嘴。
第二,把情绪日志做成用户资产。
每场比赛都沉淀结构化记录:
{
"emotion": "ecstasy",
"intensity": 5,
"timestamp": "18:42",
"event": "最后一波偷家成功",
"userQuote": "这波偷家真封神",
"isPeak": true
}
长期看,这不只是复盘素材,而是一个人的电竞情绪档案。
你会记得哪天凌晨主队翻盘,哪场比赛你嘴硬立了 flag,哪一刻你真的破防了。产品留住的不是数据,是你曾经上头过的证据。
07. 写在最后:小项目也要有完整闭环
这次黑客松最后拿到了评委的一致好评,我自己也挺开心。
不是因为它已经多完美,而是因为它在很短时间里完成了一个清晰闭环:赛前点燃期待,赛中接住情绪,赛后帮你表达。
做 AI 产品以后,我越来越觉得,很多项目不是缺模型,而是缺一个足够尖锐的场景。
“陪伴”太大,“电竞搭子”就小很多。
“生成内容”太泛,“把我今晚看比赛的破防和狂喜变成一张能发出去的图”就具体很多。
具体,才有温度。
毒奶观察室现在还只是一个 demo,但它提醒了我一件事:AI 不一定总要去替代人。很多时候,它更像一个情绪放大器,把那些原本没人接住的瞬间,轻轻接住,再递还给你。
凌晨两点,有人懂你为什么骂,也有人懂你为什么笑。
这事听起来不大,但对一个独自看比赛的人来说,可能刚刚好。
- END -本文由 mdnice 多平台发布
更多推荐




所有评论(0)