项目背景
给大模型做个性化微调,需要的是”像某个人说话”的训练数据。最自然的来源就是真实聊天记录。但原始聊天记录是杂乱的——夹杂着图片、表情、文件消息,对话之间毫无上下文边界,直接拿来用效果很差。
这个项目(AIGF_dataset_generation)的数据清洗模块,解决的就是这个问题:把原始 JSON 格式聊天记录,自动加工成可以直接用于 Qwen3:14b 等模型微调的高质量训练数据集。
整体处理流程
JSON 聊天记录 ↓ 消息过滤(去除图片/表情/文件等非文本消息) ↓ 主题分组(按时间间隔切分对话主题) ↓ AI 主题分析(调用大模型提炼问答对) ↓ 数据质量增强(去重、脱敏、短对话过滤) ↓ 标准格式数据集(instruction / input / output)模块详解
1. 消息过滤器 message_filter.py
过滤掉图片、表情、文件等非文本消息类型,同时清除 [图片] 等占位符文本,只保留有实际内容的文字消息。
2. 主题分组器 topic_grouper.py
这是整个系统最核心的设计之一。
传统做法是把聊天记录里相邻的两条消息直接配对成问答对,问题显而易见——两条消息之间可能隔了好几个小时,根本不是同一个话题。
这里换了一个思路:用时间间隔来识别”对话主题”。
消息1 (10:00) ─┐消息2 (10:05) ├─ 主题 A消息3 (10:30) ─┘
(间隔 > 2 小时)
消息4 (14:00) ─┐消息5 (14:15) ├─ 主题 B消息6 (14:45) ─┘两个关键参数:
- 时间间隔阈值:相邻消息超过这个时间间隔就切一个新主题,默认 2 小时
- 最小消息数:每个主题至少包含多少条消息,消息数不足的直接丢弃,默认 3 条
TopicGrouper.group_by_time() 遍历按时间排序的消息列表,发现时间差超过阈值就开启新 TopicGroup,最后过滤掉消息数过少的组。
3. AI 主题分析器 ai_topic_analyzer.py
主题分组完成后,每个 TopicGroup 包含一段完整的、有上下文的对话。接下来把整段对话喂给大模型(支持通义千问、DeepSeek 等 OpenAI 兼容接口),让它:
- 理解这段对话的主题和意图
- 从多个角度提炼出多条问答对:
- 直接的问答
- 隐含的知识点
- 对话风格和习惯
- 情感表达方式
返回格式为标准 JSON 数组,解析器会自动从响应文本中提取:
[ {"instruction": "你在图书馆吗?", "output": "在呢,刚到。"}, {"instruction": "你一般去几楼自习?", "output": "三楼,那里安静。"}]并发处理使用 ThreadPoolExecutor,可灵活配置并发线程数,大幅提升批量处理速度。失败时有指数退避重试机制(最多 3 次)。
4. 数据质量增强器 data_quality.py
四个可选的质量增强步骤,按顺序执行:
| 步骤 | 功能 | 默认 |
|---|---|---|
| 短对话过滤 | 过滤内容长度过短的条目 | 开启 |
| 去重 | 移除完全相同的问答组合 | 开启 |
| 脱敏 | 手机号中间 4 位替换为 ****,地址区级信息脱敏 | 关闭 |
| 多轮合并 | 将 5 分钟内同发送者的连续消息合并 | 关闭 |
5. 其他模块
config_manager.py:统一读取配置文件,带参数校验,缺少必填项会报错提示file_loader.py:扫描指定目录下所有 JSON 文件并解析data_models.py:Message、TopicGroup、DialoguePair等核心数据结构dataset_pipeline.py:串联以上所有步骤的主流程管道log_manager.py:统一的日志管理
创新点
1. 主题分组优先于逐条配对
传统方案直接把相邻两条消息配对,极易产生”鸡同鸭讲”的噪声数据。这里先按时间间隔把消息聚合成有完整上下文的主题组,再整组送给大模型提炼,生成的问答对上下文连贯、语义完整。
2. 一个主题提炼多条数据
把整段对话给大模型,大模型能从不同角度提炼出多个有独立训练价值的问答对,而不是只能配对出一组。单段对话的数据利用率更高。
3. 提示词工程保持风格一致性
提示词明确要求模型保留原始对话的”风格、语气和上下文连贯性”,确保微调后的模型能学到说话方式,而不只是内容本身。这对 AIGF(AI Girlfriend/Friend,AI 虚拟伴侣/朋友)场景尤为重要。
4. 参数可调,适配不同聊天习惯
时间间隔阈值和最小消息数两个参数直接影响数据质量和数量的权衡,可以根据聊天密度灵活调整,而不是写死逻辑。
输出格式
最终生成符合 Qwen3:14b 微调标准的 JSON 数据集:
[ { "instruction": "你好,最近怎么样?", "input": "", "output": "挺好的,最近在忙毕业设计。" }, { "instruction": "需要帮忙吗?", "input": "", "output": "谢谢,暂时不用,我自己能搞定。" }]项目地址
https://github.com/neutronstar238/AIGF_dataset_generation
数据清洗模块在 数据清洗/ 目录下,包含完整的单元测试和集成测试(tests/)。
部分信息可能已经过时









