11 KiB
斗鱼弹幕日报信息提纯设计
1. 背景
当前斗鱼弹幕日报的问题,不是“压缩不够”,而是“压缩目标不对”。
现状容易出现两个偏差:
- 把大量无效但高频的弹幕情绪词喂给 LLM,例如
哈哈哈、666、?、同一句复读几十次。 - 把真正有价值的信息和无价值信息混在一起,导致模型虽然看到了材料,但没有把重点提出来。
本设计的目标是重新划清边界:
- 本地规则和统计能完成的事情,绝不交给 LLM。
- 只有需要语义归纳、背景理解、近期话题提炼的部分,才交给 LLM。
- 给 LLM 的输入不再是“压缩后的弹幕大杂烩”,而是“本地已经提纯过的高价值证据包”。
2. 核心目标
斗鱼弹幕日报的核心目标不是生成“好看的总结”,而是:
- 从直播间弹幕中提取有效信息。
- 剔除大量无效信息。
- 将最终结果拆成两类:
- 本地可直接得出的确定性信息
- 需要 LLM 进行语义提炼的信息
最终日报应该像:
- 先有一层可靠的本地事实统计。
- 再有一层 LLM 输出的“主播相关信息提炼”。
- 而不是让 LLM 从一大堆原始弹幕里自己猜重点。
3. 总体原则
3.1 本地优先
凡是满足以下条件的信息,都优先在本地处理:
- 可由规则、计数、聚合、去重直接得出。
- 不需要理解上下文隐含语义。
- 不需要结合主播背景或近期事件进行解释。
3.2 LLM 只做语义值钱的部分
凡是满足以下条件的信息,才交给 LLM:
- 需要从多条弹幕中归纳出一个“正在讨论的事实”。
- 需要理解主播背景、赛事背景、人物关系、近期话题。
- 需要把局部零散证据整理成可读的结构化结论。
3.3 LLM 输入必须是证据包,不是原始垃圾堆
给 LLM 的材料必须满足:
- 已经做过去噪。
- 已经做过重复合并。
- 已经按“主题证据”组织。
- 已经把低价值情绪刷屏降权。
4. 功能边界重定义
4.1 本地层负责什么
本地层只做确定性提纯,不做“理解性总结”。
建议本地层负责以下内容:
A. 基础清洗
- 去掉平台系统提示。
- 去掉机器人检测文案。
- 去掉空白、乱码、纯符号内容。
- 去掉超长模板垃圾文案。
B. 重复压缩
- 完全相同弹幕合并。
- 高频短词合并。
- 高频模板句合并。
- 情绪刷屏单独归类,不再当正文语料反复出现。
例如:
哈哈哈* 200 -> 只保留为“情绪爆发词:哈哈哈,200次”梦幻小镇* 50 -> 保留为“高频共识梗:梦幻小镇,50次”- 完全一样的长句 * 20 -> 保留为“模板复读内容”
C. 时间与窗口统计
- 分时间桶统计弹幕高峰。
- 找出热点窗口。
- 每个窗口保留少量代表样本。
- 记录每个窗口的活跃人数、主要重复句、样本发言。
D. 用户画像归并
- UID 不在每条弹幕里重复出现。
- 粉丝牌、牌子等级、房间等级统一抽到用户索引。
- 样本弹幕只保留昵称或压缩后的 speaker_id。
E. 本地直接可得的结构化事实
这一层仍然属于本地,不需要 LLM:
- 总弹幕数
- 去重后弹幕数
- 高频复读句
- 高频情绪词
- 热点时间段
- 活跃用户数量
- 带牌用户数量
- 高频提到的显式关键词
注意:
这里的“显式关键词”仅用于辅助聚类,不等于最终结论。
4.2 LLM 层负责什么
LLM 只负责语义提炼,不负责基础统计。
建议 LLM 专注处理以下几类问题:
A. 近期有效信息提炼
从证据包里提炼直播间正在讨论的有效信息,例如:
- 主播最近要参加什么比赛
- 最近是否有选人、报名、分组、训练赛等话题
- 观众最近在讨论主播打什么位置
- 是否在讨论教练、队友、队内分工
B. 主播相关背景信息提炼
从弹幕中提炼“粉丝正在把主播和哪些背景联系起来”,例如:
- 老职业时期的身份梗
- 与哪些圈内人物被反复提起
- 与哪些历史赛事、名场面相关
- 当前直播内容与过往印象之间的关联
C. 对局有效信息提炼
这里不是让 LLM 解说整局,而是提炼“观众明确在讨论的局势信息”。
例如:
- 本局重点玩的英雄是什么
- 观众反复提到哪些装备、节奏点、失误点
- 某局是顺风、翻盘、被翻、队友崩盘还是后期接管
- 某局为何引发大量吐槽或称赞
D. 场外互动与梗提炼
比如:
- 是否大量观众要求开摄像头
- 是否在调侃光头、外形、状态
- 是否大量提到团播人物、户外人物、主播关系人
- 是否有明显的场外乐子线
5. 本地层与 LLM 层的分工表
| 信息类型 | 本地处理 | LLM处理 | 说明 |
|---|---|---|---|
| 哈哈哈、666、?、坏了等情绪词 | 是 | 否 | 本地统计次数即可 |
| 完全相同弹幕复读 | 是 | 否 | 本地合并 |
| 高频模板长句 | 是 | 否 | 本地合并并保留样本 |
| 热点时间段 | 是 | 否 | 本地统计即可 |
| 活跃用户、牌子、等级 | 是 | 否 | 本地汇总即可 |
| 比赛预告、选人、位置讨论 | 否 | 是 | 需要从多条弹幕归纳 |
| 近期主播相关话题 | 否 | 是 | 需要语义理解 |
| 对局关键剧情 | 部分 | 是 | 本地给证据,LLM做归纳 |
| 主播背景和粉丝讨论的关联 | 否 | 是 | 需要语境理解 |
| 团播人物关系、场外梗 | 部分 | 是 | 本地聚类,LLM提炼结论 |
6. 新的数据流设计
建议将日报处理拆成三层。
第一层:原始弹幕层
输入:
- 原始弹幕文本
- 时间戳
- 用户标识
- 粉丝牌与等级
- 直播房间上下文
输出:
- 标准化后的 message 列表
第二层:本地提纯层
输入:
- 标准化后的 message 列表
输出:
- 基础统计结果
- 高频情绪词
- 高频复读句
- 热点窗口
- 用户索引
- 主题证据簇
这一层是关键。
主题证据簇 是给 LLM 的核心材料,不是简单词频。
例如:
赛事相关簇位置讨论簇英雄与对局簇摄像头调侃簇团播人物簇
每个簇都应该包含:
- 簇名
- 匹配次数
- 涉及人数
- 时间范围
- 3-6条代表性原始弹幕
第三层:LLM 语义提炼层
输入:
- 房间上下文
- 本地统计摘要
- 主题证据簇
- 少量热点窗口样本
输出:
- 结构化语义结论
- 最终日报文本
7. 给 LLM 的推荐输入结构
建议后续给 LLM 的输入,不再是“大量压缩后的弹幕散点”,而是以下结构。
{
"report_meta": {},
"room_context": {},
"local_stats": {
"message_count": 0,
"unique_user_count": 0,
"top_emotion_bursts": [],
"top_repeated_messages": [],
"peak_windows": []
},
"topic_evidence_clusters": [
{
"label": "赛事预告与选人讨论",
"count": 0,
"user_count": 0,
"time_range": "",
"samples": []
},
{
"label": "位置与身份讨论",
"count": 0,
"user_count": 0,
"time_range": "",
"samples": []
},
{
"label": "英雄与关键对局",
"count": 0,
"user_count": 0,
"time_range": "",
"samples": []
},
{
"label": "团播人物与场外互动",
"count": 0,
"user_count": 0,
"time_range": "",
"samples": []
},
{
"label": "镜头与外形调侃",
"count": 0,
"user_count": 0,
"time_range": "",
"samples": []
}
]
}
这里最重要的是:
top_emotion_bursts只是氛围参考topic_evidence_clusters才是 LLM 的主要工作材料
8. LLM 输出建议改为结构化中间结果
为了避免 LLM 一步直接写日报导致遗漏信息,建议加一个中间层输出。
LLM 先输出结构化 JSON,再由程序拼接成日报。
建议结构如下:
{
"effective_information": {
"recent_event_updates": [],
"position_or_role_discussions": [],
"hero_and_match_topics": [],
"streamer_background_topics": [],
"off_stream_interactions": []
},
"fans_digest": {
"summary": "",
"fun_points": [],
"scene_quotes": [],
"meme_rank": [],
"closing_line": ""
}
}
这样做的原因:
- “信息提炼” 和 “文风输出” 分离。
- 先保证有效信息提全,再生成乐子日报。
- 后续也方便把有效信息单独展示或缓存。
9. 以当前问题为例,理想输出应该覆盖什么
对于用户给出的案例,LLM 最终应该能从证据中提炼出类似如下信息:
A. 近期比赛信息
- 观众正在讨论主播即将参与的
老头杯。 - 弹幕提到
4月30日的选人或相关流程。
B. 位置讨论
- 粉丝在争论主播届时打
1号位还是5号位。 - 部分弹幕在讨论是否可能承担教练或指挥视角角色。
C. 对局与英雄信息
- 当天重点讨论英雄包括
奶绿(Muerta)、德鲁伊、小小。 - 关键对局中,观众围绕装备、局势、队友崩盘、是否翻盘进行高频讨论。
D. 场外互动信息
- 大量观众希望主播打开摄像头。
- 弹幕在调侃主播外形、光头、镜头感。
- 团播人物如
糯糯、瑶瑶、冬瓜强被频繁提到。
E. 直播间氛围信息
哈哈哈、梦幻小镇、坏了这类内容只需要作为氛围补充,不应该霸占正文主体。
10. 非目标
这套功能暂时不追求以下内容:
- 不做逐局完整战报。
- 不做严格赛事解说。
- 不做全量主播百科生成。
- 不要求每条弹幕都被解释。
重点是:
从大量噪音弹幕里,稳定挖出当天真的有用的信息。
11. 推荐实施顺序
后续编码建议按下面顺序推进。
第一步:收缩本地层职责
- 明确哪些字段是纯本地统计。
- 把
哈哈哈、666、相同复读句彻底从 LLM 主材料里降权。
第二步:新增主题证据簇
先做本地证据簇,不急着写新 prompt。
优先做:
- 赛事相关簇
- 位置讨论簇
- 英雄与对局簇
- 团播人物簇
- 摄像头调侃簇
第三步:把 LLM 输出改成“先结构化,后成文”
- 先提炼有效信息 JSON
- 再基于 JSON 生成粉丝日报
第四步:最后再调文风
文风是最后一步。
在有效信息没提全之前,不要优先优化“好不好笑”“像不像整活”。
12. 一句话结论
斗鱼弹幕日报后续应该改成:
本地做去噪、去重、统计、聚类证据;LLM 只做主播相关有效信息的语义提炼;日报文本只是最终展示层,不再让模型直接从一大堆弹幕里盲猜重点。