{"schema_version":1,"id":"article:ecommerce-finetune-dataset","kind":"article","slug":"ecommerce-finetune-dataset","title":"以「电商客服」为例：如何构造领域 LLM 微调数据集？","author":"晨旭","url":"https://chenxu.xin/writing/ecommerce-finetune-dataset","date":"2025-12-23","updated":"2025-12-23","description":"先回答为什么不能只靠 Prompt 和 RAG，再拆解一个支持多轮对话、情绪识别和流程引导的高质量微调数据集怎么从脏日志里炼出来，以及冷启动阶段的蒸馏与增强策略。","position":null,"group":null,"series":"AI技术理解","tags":["hands-on","ai-pm"],"publication_status":"public","maturity":"evergreen","body_sha256":"e8411a709a51129f801ca69e84948ddeed0431d93ef0c2b79fe6af7f6a33903b","paragraph_rule":"src/lib/paragraphs.mjs@1","paragraphs":[{"id":"p1","kind":"paragraph","text":"我们可能都思考过一个灵魂拷问：RAG 和 Prompt 工程已经能解决很多问题了，为什么还需要做微调呢？","raw":"我们可能都思考过一个灵魂拷问：RAG 和 Prompt 工程已经能解决很多问题了，为什么还需要做微调呢？"},{"id":"p2","kind":"paragraph","text":"对于电商客服、医疗咨询等对专业度、合规性和品牌调性要求极高的场景，通用大模型会显得「懂事但不够专业」。","raw":"对于电商客服、医疗咨询等对专业度、合规性和品牌调性要求极高的场景，通用大模型会显得「懂事但不够专业」。"},{"id":"p3","kind":"paragraph","text":"如果只是想让模型临时回答几个问题，写好 Prompt 就够了；但如果希望它长期、批量、稳定地遵守业务规则，并大幅降低推理成本，微调是必经之路。","raw":"如果只是想让模型临时回答几个问题，写好 Prompt 就够了；但如果希望它长期、批量、稳定地遵守业务规则，并大幅降低推理成本，微调是必经之路。"},{"id":"p4","kind":"paragraph","text":"这篇文章基于电商客服这个高频、高并发、强业务逻辑的场景，拆解如何构建一个支持多轮对话、情绪识别和流程引导的高质量微调数据集。","raw":"这篇文章基于电商客服这个高频、高并发、强业务逻辑的场景，拆解如何构建一个支持多轮对话、情绪识别和流程引导的高质量微调数据集。"},{"id":"p5","kind":"heading","text":"一、为什么需要微调？","raw":"## 一、为什么需要微调？"},{"id":"p6","kind":"paragraph","text":"微调的第一步，不是急着去爬取数据，而是搞清楚为什么要微调，因为很多时候容易陷入「为了微调而微调」的误区。","raw":"微调的第一步，不是急着去爬取数据，而是搞清楚为什么要微调，因为很多时候容易陷入「为了微调而微调」的误区。"},{"id":"p7","kind":"paragraph","text":"（1）特定风格和品牌人设","raw":"**（1）特定风格和品牌人设**"},{"id":"p8","kind":"paragraph","text":"Prompt 很容易受模型温度和随机性影响，多轮对话后模型容易忘记最初的设定（比如忘记了「只能退款不能退货」的规则）。而微调是在权重层面固化了客服的人设和纪律，能保证成千上万次调用中，语气和口径的高度一致。","raw":"Prompt 很容易受模型温度和随机性影响，多轮对话后模型容易忘记最初的设定（比如忘记了「只能退款不能退货」的规则）。而微调是在权重层面固化了客服的人设和纪律，能保证成千上万次调用中，语气和口径的高度一致。"},{"id":"p9","kind":"paragraph","text":"（2）严格的结构化输出","raw":"**（2）严格的结构化输出**"},{"id":"p10","kind":"paragraph","text":"电商场景中，通常需要从用户对话中提取订单号、意图、情绪等信息，并输出为标准的 JSON 格式供 API 调用。对于复杂的长对话，通用模型容易提取不全，或者输出的 JSON 格式出错（逗号、引号问题），导致下游系统崩溃。","raw":"电商场景中，通常需要从用户对话中提取订单号、意图、情绪等信息，并输出为标准的 JSON 格式供 API 调用。对于复杂的长对话，通用模型容易提取不全，或者输出的 JSON 格式出错（逗号、引号问题），导致下游系统崩溃。"},{"id":"p11","kind":"paragraph","text":"微调可以创建包含「原始对话 + 目标 JSON」配对的数据集，让模型学会从非结构化文本到精确结构化 JSON 的映射，显著提升系统稳定性。","raw":"微调可以创建包含「原始对话 + 目标 JSON」配对的数据集，让模型学会从非结构化文本到精确结构化 JSON 的映射，显著提升系统稳定性。"},{"id":"p12","kind":"paragraph","text":"（3）成本与延迟的双重夹击","raw":"**（3）成本与延迟的双重夹击**"},{"id":"p13","kind":"paragraph","text":"在电商大促期间，流量是海量的。Prompt 模式下每次对话都要把长长的系统提示词和几个 Few-shot 示例塞进上下文，Token 数多意味着推理费用高、延迟高；微调模式下模型已经记住了这些通用知识和话术风格，调用时上下文极短，响应更快，边际成本显著降低。","raw":"在电商大促期间，流量是海量的。Prompt 模式下每次对话都要把长长的系统提示词和几个 Few-shot 示例塞进上下文，Token 数多意味着推理费用高、延迟高；微调模式下模型已经记住了这些通用知识和话术风格，调用时上下文极短，响应更快，边际成本显著降低。"},{"id":"p14","kind":"paragraph","text":"一个推荐的组合方法","raw":"**一个推荐的组合方法**"},{"id":"p15","kind":"paragraph","text":"并不是说微调了就不用 RAG。成熟的架构通常是：微调基座掌握通用话术、安抚情绪、SOP 流程骨架；RAG 处理实时变动的信息（如今天的退货政策、用户的具体订单状态）。","raw":"并不是说微调了就不用 RAG。成熟的架构通常是：微调基座掌握通用话术、安抚情绪、SOP 流程骨架；RAG 处理实时变动的信息（如今天的退货政策、用户的具体订单状态）。"},{"id":"p16","kind":"paragraph","text":"微调是为了换取后期低成本、高一致性与可控合规；RAG 是为了解决知识的时效性和长尾问题。","raw":"微调是为了换取后期低成本、高一致性与可控合规；RAG 是为了解决知识的时效性和长尾问题。"},{"id":"p17","kind":"paragraph","text":"在电商客服场景，大部分情况会走这条路径：先小规模 Prompt 验证 → 收集日志 → 微调主模型 → RAG 加规则做补充。这样既快又稳，也最符合成本效益。","raw":"在电商客服场景，大部分情况会走这条路径：先小规模 Prompt 验证 → 收集日志 → 微调主模型 → RAG 加规则做补充。这样既快又稳，也最符合成本效益。"},{"id":"p18","kind":"heading","text":"二、如何构造高质量的电商客服数据集？","raw":"## 二、如何构造高质量的电商客服数据集？"},{"id":"p19","kind":"paragraph","text":"在电商客服场景下，一个标准的微调数据条目通常采用 JSON 格式，包含 conversation、role、emotion 以及 context 等字段。（虽然多轮对话本身就是上下文，但在某些需要预置背景、比如订单详情已由 API 获取的情况下，context 字段会很有用。）","raw":"在电商客服场景下，一个标准的微调数据条目通常采用 JSON 格式，包含 `conversation`、`role`、`emotion` 以及 `context` 等字段。（虽然多轮对话本身就是上下文，但在某些需要预置背景、比如订单详情已由 API 获取的情况下，`context` 字段会很有用。）"},{"id":"p20","kind":"code","text":"{\n  \"id\": \"dialogue_20251222_001\",\n  \"context\": \"场景:用户询问订单物流状态（可选）\",\n  \"conversation\": [\n    { \"role\": \"用户\", \"content\": \"你好，请问我的订单 12345 现在到哪了?\", \"emotion\": \"焦急\" },\n    { \"role\": \"客服\", \"content\": \"您好，我来帮您查询，请稍候。\", \"emotion\": \"礼貌\" },\n    { \"role\": \"客服\", \"content\": \"经查询，您的订单已离开深圳集散中心，预计明天送达。\", \"emotion\": \"专业\" }\n  ]\n}","raw":"```json\n{\n  \"id\": \"dialogue_20251222_001\",\n  \"context\": \"场景:用户询问订单物流状态（可选）\",\n  \"conversation\": [\n    { \"role\": \"用户\", \"content\": \"你好，请问我的订单 12345 现在到哪了?\", \"emotion\": \"焦急\" },\n    { \"role\": \"客服\", \"content\": \"您好，我来帮您查询，请稍候。\", \"emotion\": \"礼貌\" },\n    { \"role\": \"客服\", \"content\": \"经查询，您的订单已离开深圳集散中心，预计明天送达。\", \"emotion\": \"专业\" }\n  ]\n}\n```"},{"id":"p21","kind":"heading","text":"1、数据来源：从日志中淘金","raw":"### 1、数据来源：从日志中淘金"},{"id":"p22","kind":"paragraph","text":"起初拿到的数据大概率是几十万条原始的、脏乱差的客服聊天日志。提炼的 pipeline 是标准化的。","raw":"起初拿到的数据大概率是几十万条原始的、脏乱差的客服聊天日志。提炼的 pipeline 是标准化的。"},{"id":"p23","kind":"paragraph","text":"Step 1：筛选与切分。不是所有日志都有用。剔除那些只有「在吗？」就没有下文的无效对话，将长达一小时的闲聊切分为聚焦于单一意图（如查物流、退款）的独立对话片段。","raw":"**Step 1：筛选与切分**。不是所有日志都有用。剔除那些只有「在吗？」就没有下文的无效对话，将长达一小时的闲聊切分为聚焦于单一意图（如查物流、退款）的独立对话片段。"},{"id":"p24","kind":"paragraph","text":"Step 2：敏感信息脱敏（红线动作）。这是合规的底线，必须替换掉所有的 PII，例如将「张三」替换为 [姓名]，将「138xxxx」替换为 [电话]。","raw":"**Step 2：敏感信息脱敏（红线动作）**。这是合规的底线，必须替换掉所有的 PII，例如将「张三」替换为 `[姓名]`，将「138xxxx」替换为 `[电话]`。"},{"id":"p25","kind":"paragraph","text":"注意脱敏不能破坏句子结构，要用占位符替换而不是直接删除，否则模型会学到残缺的句式。宁可过度脱敏，也不要冒泄露隐私的风险。","raw":"注意脱敏不能破坏句子结构，要用占位符替换而不是直接删除，否则模型会学到残缺的句式。宁可过度脱敏，也不要冒泄露隐私的风险。"},{"id":"p26","kind":"paragraph","text":"Step 3：归一化。真实用户打字很随意，需要适度调整但不能过度：明显的错别字要改（如「发货」打成「发活」）；语气词、表情符号如果能体现情绪可以适当保留（如「亲~」）或转换为文本描述（如 [笑脸]）；企业侧称呼统一为「您」，消除不同客服人员的个人口癖。","raw":"**Step 3：归一化**。真实用户打字很随意，需要适度调整但不能过度：明显的错别字要改（如「发货」打成「发活」）；语气词、表情符号如果能体现情绪可以适当保留（如「亲~」）或转换为文本描述（如 `[笑脸]`）；企业侧称呼统一为「您」，消除不同客服人员的个人口癖。"},{"id":"p27","kind":"heading","text":"2、数据集的核心构成：单轮 vs 多轮","raw":"### 2、数据集的核心构成：单轮 vs 多轮"},{"id":"p28","kind":"paragraph","text":"一个高质量的客服数据集，不能只有简单的问答。建议的比例是单轮对话占 30% 到 40%，多轮对话占 60% 到 70%。","raw":"一个高质量的客服数据集，不能只有简单的问答。建议的比例是单轮对话占 30% 到 40%，多轮对话占 60% 到 70%。"},{"id":"p29","kind":"paragraph","text":"单轮对话主要用于解决无需追问的简单任务，如发票开具、政策查询，训练模型快速应答简单问题的能力，强化知识准确性。","raw":"**单轮对话**主要用于解决无需追问的简单任务，如发票开具、政策查询，训练模型快速应答简单问题的能力，强化知识准确性。"},{"id":"p30","kind":"paragraph","text":"多轮对话是微调的重头戏，考察的是模型记忆历史信息和引导用户完成任务的能力。电商咨询往往是连续的，模型必须记住上文信息（如订单号）才能进行后续操作。","raw":"**多轮对话**是微调的重头戏，考察的是模型记忆历史信息和引导用户完成任务的能力。电商咨询往往是连续的，模型必须记住上文信息（如订单号）才能进行后续操作。"},{"id":"p31","kind":"heading","text":"3、高阶技巧：流程引导类对话设计","raw":"### 3、高阶技巧：流程引导类对话设计"},{"id":"p32","kind":"paragraph","text":"这是区分「聊天机器人」和「业务 Agent」的关键。","raw":"这是区分「聊天机器人」和「业务 Agent」的关键。"},{"id":"p33","kind":"paragraph","text":"在原始日志中，经常会看到用户说「我想退货」，然后客服像挤牙膏一样问单号、问原因。在构造数据时，可以把这种引导标准化：","raw":"在原始日志中，经常会看到用户说「我想退货」，然后客服像挤牙膏一样问单号、问原因。在构造数据时，可以把这种引导标准化："},{"id":"p34","kind":"code","text":"Round 1\n  用户：商品有点问题，我想退货。\n  客服：很抱歉给您带来不便。请问商品还在吗？具体是什么质量问题？\n        （安抚 + 确认状态）\n\nRound 2\n  用户：在的，鞋底开胶了。\n  客服：明白了，这属于质量问题。我们需要您的订单号来登记。\n        （定性 + 索要信息）\n\nRound 3\n  用户：订单号是 202303250015。\n  客服：收到。接下来请您：1) 将商品放入原包装；2) 贴上退货码；\n        3) 交给快递员。退货码稍后短信发送给您。\n        （指令清晰的 SOP 引导）","raw":"```text\nRound 1\n  用户：商品有点问题，我想退货。\n  客服：很抱歉给您带来不便。请问商品还在吗？具体是什么质量问题？\n        （安抚 + 确认状态）\n\nRound 2\n  用户：在的，鞋底开胶了。\n  客服：明白了，这属于质量问题。我们需要您的订单号来登记。\n        （定性 + 索要信息）\n\nRound 3\n  用户：订单号是 202303250015。\n  客服：收到。接下来请您：1) 将商品放入原包装；2) 贴上退货码；\n        3) 交给快递员。退货码稍后短信发送给您。\n        （指令清晰的 SOP 引导）\n```"},{"id":"p35","kind":"paragraph","text":"对于退货、换货、投诉这类复杂业务，可以先画出流程图——确认问题 → 核对信息 → 给出方案 → 结束语，每一轮数据都对应流程图上的一个节点。","raw":"对于退货、换货、投诉这类复杂业务，可以先画出流程图——确认问题 → 核对信息 → 给出方案 → 结束语，每一轮数据都对应流程图上的一个节点。"},{"id":"p36","kind":"paragraph","text":"并且不能只造顺利的数据，还要加入用户中途反悔、没有订单号、不符合退货条件等异常分支，来训练模型的鲁棒性。","raw":"并且不能只造顺利的数据，还要加入用户中途反悔、没有订单号、不符合退货条件等异常分支，来训练模型的鲁棒性。"},{"id":"p37","kind":"heading","text":"4、赋予灵魂：情绪识别标签的嵌入","raw":"### 4、赋予灵魂：情绪识别标签的嵌入"},{"id":"p38","kind":"paragraph","text":"区别于冰冷的机器，金牌客服的核心在于共情，而微调是注入这种能力的最佳时机。","raw":"区别于冰冷的机器，金牌客服的核心在于共情，而微调是注入这种能力的最佳时机。"},{"id":"p39","kind":"paragraph","text":"建立情绪标签体系，为每一条用户消息打上标签，参考分布是：中性 50%（正常咨询）、不满 20%（轻微抱怨，如「怎么这么慢」）、困惑 15%（用户不懂规则）、愤怒 10%（激烈言辞，这是训练的重点）、焦急 5% 到 10%（如「明天就要用」）、满意 5%（收尾感谢）。","raw":"**建立情绪标签体系**，为每一条用户消息打上标签，参考分布是：中性 50%（正常咨询）、不满 20%（轻微抱怨，如「怎么这么慢」）、困惑 15%（用户不懂规则）、愤怒 10%（激烈言辞，这是训练的重点）、焦急 5% 到 10%（如「明天就要用」）、满意 5%（收尾感谢）。"},{"id":"p40","kind":"paragraph","text":"标签的嵌入方式是 JSON 字段：","raw":"**标签的嵌入方式**是 JSON 字段："},{"id":"p41","kind":"code","text":"{ \"role\": \"用户\", \"content\": \"我的包裹怎么还没到?!\", \"emotion\": \"愤怒\" }","raw":"```json\n{ \"role\": \"用户\", \"content\": \"我的包裹怎么还没到?!\", \"emotion\": \"愤怒\" }\n```"},{"id":"p42","kind":"paragraph","text":"训练时，这就是在告诉模型：当输入带有「愤怒」特征时，你的输出应该是「安抚 + 高效解决」。模型将隐式学习到：遇到愤怒先道歉再查单；遇到焦急强调时效，使用「马上」「立即」等词汇；遇到满意礼貌致谢。","raw":"训练时，这就是在告诉模型：当输入带有「愤怒」特征时，你的输出应该是「安抚 + 高效解决」。模型将隐式学习到：遇到愤怒先道歉再查单；遇到焦急强调时效，使用「马上」「立即」等词汇；遇到满意礼貌致谢。"},{"id":"p43","kind":"heading","text":"三、数据不够怎么办？（蒸馏与增强）","raw":"## 三、数据不够怎么办？（蒸馏与增强）"},{"id":"p44","kind":"paragraph","text":"在项目冷启动阶段，我们可能没有那么多真实日志，这时需要依靠合成数据和数据增强。","raw":"在项目冷启动阶段，我们可能没有那么多真实日志，这时需要依靠合成数据和数据增强。"},{"id":"p45","kind":"heading","text":"1、合成数据","raw":"### 1、合成数据"},{"id":"p46","kind":"paragraph","text":"方案 A：专家标注（高成本、高质量）。来源是线上问答摘录（如知乎、小红书）、机构内部咨询记录，流程是双人标注加主审终审，确保业务错误率低于 1%。这批数据用于固化核心场景的模型质量。","raw":"**方案 A：专家标注（高成本、高质量）**。来源是线上问答摘录（如知乎、小红书）、机构内部咨询记录，流程是双人标注加主审终审，确保业务错误率低于 1%。这批数据用于固化核心场景的模型质量。"},{"id":"p47","kind":"paragraph","text":"方案 B：知识蒸馏（低成本、规模化）。利用 GPT-5、DeepSeek 等超强模型作为教师，生成大量对话数据再教给小模型。比如让 GPT 同时扮演用户和客服，生成多样的对话：","raw":"**方案 B：知识蒸馏（低成本、规模化）**。利用 GPT-5、DeepSeek 等超强模型作为教师，生成大量对话数据再教给小模型。比如让 GPT 同时扮演用户和客服，生成多样的对话："},{"id":"p48","kind":"code","text":"你是一名有 20 年经验的资深客服……\n请针对电商客服处理退货场景，生成 5 个常见问答。","raw":"```text\n你是一名有 20 年经验的资深客服……\n请针对电商客服处理退货场景，生成 5 个常见问答。\n```"},{"id":"p49","kind":"paragraph","text":"大致流程是：Query 池 → 批量 Prompt → 教师模型生成 → 规则过滤（去重、去敏感词）→ 专家抽检 → 存入训练集。","raw":"大致流程是：Query 池 → 批量 Prompt → 教师模型生成 → 规则过滤（去重、去敏感词）→ 专家抽检 → 存入训练集。"},{"id":"p50","kind":"heading","text":"2、数据增强策略","raw":"### 2、数据增强策略"},{"id":"p51","kind":"paragraph","text":"有了高质量的种子数据，接下来解决「量」和「泛化」的问题，最常见的做法是举一反三：","raw":"有了高质量的种子数据，接下来解决「量」和「泛化」的问题，最常见的做法是举一反三："},{"id":"p52","kind":"list","text":"- 同义改写：用大模型把一句话变出 5 种说法，例如「没货了」可以改成「库存已售罄」「暂时缺货」。\n- 情景替换：把「手机退货」的对话模板替换实体变成「衣服退货」，同时修改相应属性（「屏幕碎了」变成「拉链坏了」）。\n- 情绪转换：把一个原本温和的咨询改写成愤怒的质问，看看模型或人工如何调整回复，这能极大丰富负面样本的数量。\n- 引入噪音：刻意加入少量拼音、拼写错误，模拟真实用户的输入环境，提高抗干扰能力。","raw":"- **同义改写**：用大模型把一句话变出 5 种说法，例如「没货了」可以改成「库存已售罄」「暂时缺货」。\n- **情景替换**：把「手机退货」的对话模板替换实体变成「衣服退货」，同时修改相应属性（「屏幕碎了」变成「拉链坏了」）。\n- **情绪转换**：把一个原本温和的咨询改写成愤怒的质问，看看模型或人工如何调整回复，这能极大丰富负面样本的数量。\n- **引入噪音**：刻意加入少量拼音、拼写错误，模拟真实用户的输入环境，提高抗干扰能力。"},{"id":"p53","kind":"paragraph","text":"此外还要监控数据集的分布，避免「偏科」：","raw":"此外还要监控数据集的分布，避免「偏科」："},{"id":"p54","kind":"list","text":"- 场景平衡：不能全是退货，要有售前咨询、物流查询、投诉等，比例要符合业务实际（如物流占 20% 到 30%，售后占 20% 到 25%）。\n- 情绪平衡：虽然真实场景中愤怒很少，但训练集中必须超采样愤怒样本，否则模型在实战中遇到真正生气的用户会不知所措。","raw":"- **场景平衡**：不能全是退货，要有售前咨询、物流查询、投诉等，比例要符合业务实际（如物流占 20% 到 30%，售后占 20% 到 25%）。\n- **情绪平衡**：虽然真实场景中愤怒很少，但训练集中必须超采样愤怒样本，否则模型在实战中遇到真正生气的用户会不知所措。"},{"id":"p55","kind":"heading","text":"最后","raw":"## 最后"},{"id":"p56","kind":"paragraph","text":"在 AI 应用落地的深水区，模型往往不是瓶颈，数据才是。","raw":"在 AI 应用落地的深水区，模型往往不是瓶颈，数据才是。"},{"id":"p57","kind":"paragraph","text":"构建一个行业微调模型，本质上是将专家的经验（标注数据）、公开的知识（通用语料）和模型的推理能力（蒸馏）串联成一个闭环。","raw":"构建一个行业微调模型，本质上是将专家的经验（标注数据）、公开的知识（通用语料）和模型的推理能力（蒸馏）串联成一个闭环。"},{"id":"p58","kind":"paragraph","text":"对于 PM 而言，掌握微调不仅仅是理解技术原理，更是掌握一种定义模型行为的能力——理解如何用数据让模型准确地按照规定的意图、风格和逻辑去服务用户。","raw":"对于 PM 而言，掌握微调不仅仅是理解技术原理，更是掌握一种定义模型行为的能力——理解如何用数据让模型准确地按照规定的意图、风格和逻辑去服务用户。"}],"authored_claims":[{"id":"finetune-for-long-term-consistency","text":"只想让模型临时回答几个问题，写好 Prompt 就够了；想让它长期、批量、稳定地遵守业务规则并大幅降低推理成本，微调才是必经之路。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-12-23"},{"id":"finetune-plus-rag-is-the-combo","text":"微调和 RAG 不是二选一。成熟架构是微调基座掌握通用话术、情绪安抚和 SOP 骨架，RAG 处理实时变动的信息——微调换的是低成本、高一致性与可控合规，RAG 解的是时效性和长尾。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-12-23"},{"id":"desensitize-with-placeholders","text":"脱敏必须用占位符替换而不是直接删除，否则模型会学到残缺的句式。宁可过度脱敏，也不要冒泄露隐私的风险。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-12-23"},{"id":"build-failure-branches-too","text":"流程引导型数据不能只造顺利的路径，必须加入用户中途反悔、没有订单号、不符合退货条件这些异常分支，否则模型在真实业务里一被打断就乱。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-12-23"},{"id":"oversample-anger","text":"真实场景中愤怒样本很少，但训练集中必须超采样，否则模型在实战中遇到真正生气的用户会不知所措。情绪分布要刻意偏离真实分布。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-12-23"}],"claim_ids":["finetune-for-long-term-consistency","finetune-plus-rag-is-the-combo","desensitize-with-placeholders","build-failure-branches-too","oversample-anger"],"revision":"60e05aed66e5132dbd268b9eb57b75ad87f382b6a92eb971f129a49004f87c67"}