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