讲师中心 微信公众号
AI工具推荐 视频效率加速

ShareGPT格式转Alpaca格式的脚本编写:数据格式转换的完整Python代码实现

落枫同学_6704

落枫同学_6704

发布时间:2026-05-23 11:22:00

|

784人浏览过

|

来源于php中文网

原创

需将ShareGPT格式(message列表,含role/content)转为Alpaca格式(instruction/input/output),核心是提取首轮user-assistant对作为instruction和output,多轮内容可选填入input;代码含基础版(单轮)、增强版(多轮压缩)、鲁棒处理(清洗异常字段)及命令行批量支持。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

sharegpt格式转alpaca格式的脚本编写:数据格式转换的完整python代码实现

如果您拥有以ShareGPT格式组织的对话数据集,但需要将其转换为Alpaca格式以适配微调流程,则需对字段结构、角色映射和指令构造进行系统性重排。以下是完成该格式转换的完整Python代码实现:

一、理解ShareGPT与Alpaca格式结构差异

ShareGPT格式以message列表形式存储多轮对话,每条message包含role("user"或"assistant")和content字段;Alpaca格式则采用扁平化单样本结构,包含instruction、input(可选)、output三个固定键,其中instruction通常对应首轮用户提问,output为首轮模型回复,后续多轮交互需合并或截断。转换核心在于识别首组user-assistant对并提取为instruction-output,同时将中间轮次内容按规则归入input字段或丢弃。

1、读取原始JSONL文件,逐行解析ShareGPT格式的字典对象。

2、遍历messages列表,定位第一个role为"user"的项作为instruction候选。

立即学习“Python免费学习笔记(深入)”;

3、查找紧随其后的role为"assistant"的项,将其content设为output值。

4、若存在位于首user与首assistant之间的其他user消息(如system提示被误标),则跳过该样本。

5、将剩余非首轮的user-assistant对拼接为input字段,用换行符分隔,格式为“User: 内容\nAssistant: 内容”。

二、基础版转换脚本(支持单轮提取)

该版本适用于标准ShareGPT数据,仅保留首轮问答,忽略后续轮次,确保Alpaca格式严格对齐单指令-单响应范式。输出结果符合Hugging Face Datasets库直接加载要求。

1、导入json模块用于读写JSONL文件,导入os模块校验输入路径有效性。

2、定义函数convert_sharegpt_to_alpaca_basic(input_path, output_path),接收输入输出路径参数。

3、以只读模式打开input_path,逐行读取并用json.loads解析每行。

4、对每个样本检查messages是否为列表且长度≥2,且首项role=="user"、次项role=="assistant"。

5、构造新字典:{"instruction": messages[0]["content"], "input": "", "output": messages[1]["content"]}。

6、将新字典用json.dumps写入output_path,每行一个JSON对象。

三、增强版转换脚本(支持多轮压缩与input填充)

该版本在保留首轮instruction-output基础上,将第二轮及以后的user-assistant对编码进input字段,形成上下文感知的Alpaca样本,适用于需建模对话历史的训练场景。所有非首轮内容均经转义处理,避免JSON序列化失败。

1、定义函数convert_sharegpt_to_alpaca_enhanced(input_path, output_path, max_rounds=3),max_rounds控制最多纳入几轮历史。

python-pro
python-pro

高级 Python 特性、异步编程、性能调优、静态类型、内存管理、Python 内部机制及生态库方面的专家。

下载

2、对每个样本过滤出role为"user"或"assistant"的有效消息,剔除system类消息。

3、取索引0的消息作为instruction(强制要求为user),索引1的消息作为output(强制要求为assistant)。

4、从索引2开始截取最多max_rounds×2条消息,按顺序两两配对,生成形如"User: {content}\nAssistant: {next_content}"的字符串片段。

5、将所有片段用两个换行符连接,赋值给input字段;若无额外轮次,则input保持空字符串。

6、使用json.dump写入时设置ensure_ascii=False,保证中文不被转义。

四、鲁棒性增强处理(处理缺失字段与异常角色)

真实ShareGPT数据常含role为"system"、"observation"等非标准值,或content为空字符串。此步骤通过预处理清洗,防止转换中断,并提供可配置的容错策略。

1、在解析每条message前,检查是否存在role和content键,缺失则跳过该message。

2、将role值统一小写并映射:'user'→'user','assistant'→'assistant','system'→None(丢弃),其他值统一视为'user'并记录警告。

3、对content执行strip()操作,若结果为空,则整条message被忽略。

4、当首条有效message非user角色时,向前搜索首个user项;若未找到,则丢弃该样本并打印"Warning: No valid user message found in sample"。

5、启用logging模块,在output_path同目录下生成error.log记录所有被丢弃样本的原始行号与原因。

五、命令行封装与批量处理支持

为便于集成至数据预处理流水线,脚本需支持终端直接调用,接受输入文件、输出目录、格式类型等参数,并自动创建输出子目录结构。同时兼容通配符批量处理多个ShareGPT文件。

1、使用argparse.ArgumentParser定义--input、--output、--mode(basic/enhanced)、--max-rounds等参数。

2、若--input值含*字符(如"data/sharegpt_*.jsonl"),则用glob.glob展开为文件列表。

3、对每个输入文件,基于文件名生成对应输出文件名,例如sharegpt_v1.jsonl → alpaca_v1.jsonl。

4、根据--mode参数动态调用basic或enhanced转换函数,传入相应参数。

5、转换完成后打印完成统计:"Processed X files, generated Y valid Alpaca samples"。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1671

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4184

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

24277

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2967

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3007

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1163

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn