LLaMA-Factory 使用 sharegpt 格式的数据集_sharegpt数据集
LLaMA-Factory 使用 sharegpt 格式的数据集
flyfish
sharegpt 格式的数据集遵循的格式
[ { \"conversations\": [ { \"from\": \"human\", \"value\": \"user instruction\" }, { \"from\": \"gpt\", \"value\": \"model response\" } ], \"system\": \"system prompt (optional)\", \"tools\": \"tool description (optional)\" }]
字段作用
conversations: 包含一系列对话对象,每个对象都由发言者(from)和发言内容(value)组成。from可以是\"human\"(人类)或\"gpt\"(机器),表示是谁说的这句话。
system: 可选的系统级别提示,类似于alpaca格式中的system字段,用于设置对话的整体背景或规则。
tools: 描述可用的外部工具或功能的信息,这些工具可能被模型用来执行某些任务或获取更多信息。这个字段对于那些需要与外部世界互动的应用特别有用。
在 data/dataset_info.json 文件中提供您的数据集定义,并采用以下格式
对于 sharegpt 格式的数据集,dataset_info.json 文件中的列应该包括:
\"dataset_name\": { \"file_name\": \"dataset_name.json\", \"formatting\": \"sharegpt\", \"columns\": { \"messages\": \"conversations\", \"system\": \"system\", \"tools\": \"tools\" }, \"tags\": { \"role_tag\": \"from\", \"content_tag\": \"value\", \"user_tag\": \"user\", \"assistant_tag\": \"assistant\" } }
示例1: 基本对话
假设我们有一个场景,用户询问当前天气,并且系统通过调用外部API来获取天气信息。
[ { \"conversations\": [ { \"from\": \"human\", \"value\": \"今天济南的天气怎么样?\" }, { \"from\": \"function_call\", \"value\": \"{\\\"name\\\": \\\"get_weather\\\", \\\"arguments\\\": {\\\"location\\\": \\\"济南\\\"}}\" }, { \"from\": \"observation\", \"value\": \"{\\\"temperature\\\": 20, \\\"condition\\\": \\\"晴天\\\", \\\"humidity\\\": 45}\" }, { \"from\": \"gpt\", \"value\": \"今天济南的天气是晴天,温度大约20摄氏度,湿度为45%。\" } ], \"system\": \"你是一位智能助手,能够帮助用户查询各种信息。\", \"tools\": \"[{\\\"name\\\": \\\"get_weather\\\", \\\"description\\\": \\\"获取指定地点的天气信息\\\", \\\"parameters\\\": {\\\"type\\\": \\\"object\\\", \\\"properties\\\": {\\\"location\\\": {\\\"type\\\": \\\"string\\\", \\\"description\\\": \\\"要查询天气的地点\\\"}}, \\\"required\\\": [\\\"location\\\"]}}]\" }]
在这个例子中:
human 用户询问济南今天的天气。
function_call 调用了一个名为get_weather的函数,传递了位置参数济南。
observation 返回了从API获取到的天气信息,包括温度、天气状况和湿度。
gpt 根据观察结果生成了对用户的回答。
示例2: 多轮对话
展示一个更复杂的多轮对话,其中包含多个函数调用和更多的交互。
[ { \"conversations\": [ { \"from\": \"human\", \"value\": \"我想知道明天济南的天气预报。\" }, { \"from\": \"function_call\", \"value\": \"{\\\"name\\\": \\\"get_weather_forecast\\\", \\\"arguments\\\": {\\\"location\\\": \\\"济南\\\", \\\"date\\\": \\\"明天\\\"}}\" }, { \"from\": \"observation\", \"value\": \"{\\\"temperature_high\\\": 25, \\\"temperature_low\\\": 18, \\\"condition\\\": \\\"多云\\\", \\\"humidity\\\": 60}\" }, { \"from\": \"gpt\", \"value\": \"明天济南的天气预报显示是多云,最高温度约为25摄氏度,最低温度约为18摄氏度,湿度为60%。\" }, { \"from\": \"human\", \"value\": \"那后天呢?\" }, { \"from\": \"function_call\", \"value\": \"{\\\"name\\\": \\\"get_weather_forecast\\\", \\\"arguments\\\": {\\\"location\\\": \\\"济南\\\", \\\"date\\\": \\\"后天\\\"}}\" }, { \"from\": \"observation\", \"value\": \"{\\\"temperature_high\\\": 23, \\\"temperature_low\\\": 17, \\\"condition\\\": \\\"小雨\\\", \\\"humidity\\\": 70}\" }, { \"from\": \"gpt\", \"value\": \"后天济南可能会有小雨,最高温度约为23摄氏度,最低温度约为17摄氏度,湿度为70%。记得带伞哦!\" } ], \"system\": \"你是一位智能助手,能够帮助用户查询各种信息。\", \"tools\": \"[{\\\"name\\\": \\\"get_weather_forecast\\\", \\\"description\\\": \\\"获取指定地点的天气预报\\\", \\\"parameters\\\": {\\\"type\\\": \\\"object\\\", \\\"properties\\\": {\\\"location\\\": {\\\"type\\\": \\\"string\\\", \\\"description\\\": \\\"要查询天气的地点\\\"}, \\\"date\\\": {\\\"type\\\": \\\"string\\\", \\\"description\\\": \\\"查询的日期(例如:\'明天\', \'后天\')\\\"}}, \\\"required\\\": [\\\"location\\\", \\\"date\\\"]}}]\" }]
在这个多轮对话中:
第一轮对话中,用户询问明天济南的天气预报,系统调用get_weather_forecast函数并返回结果。
第二轮对话中,用户继续询问后天的天气,系统再次调用同一个函数并返回相应结果。
数据集描述
对于上述格式的数据,dataset_info.json文件中的数据集描述可以如下所示:
{ \"天气查询数据集\": { \"file_name\": \"weather_data.json\", \"formatting\": \"sharegpt\", \"columns\": { \"messages\": \"conversations\", \"system\": \"system\", \"tools\": \"tools\" } }}
这个描述指定了数据文件的名称、使用的格式以及字段映射关系。
function_call字段
在sharegpt格式的数据集中,function_call字段用于表示模型调用外部函数或工具的行为。这种机制允许模型与外部服务交互,以获取额外的信息或执行特定任务。这在许多实际应用中非常有用,比如查询天气、检索数据库等。
数据获取:
模型可以通过调用外部API来获取实时数据,如天气预报、股票价格、新闻更新等。
例如,在询问天气时,模型可以调用一个天气API来获取最新的天气信息。
复杂计算:
对于复杂的数学计算或其他需要大量处理的任务,模型可以直接调用专门的计算服务。
例如,计算用户的年龄、财务分析等。
数据库查询:
模型可以调用数据库查询函数来检索存储在数据库中的信息。
例如,从客户数据库中查找用户信息。
扩展功能:
通过调用外部工具,模型可以执行原本无法完成的任务,从而增强其功能和实用性。
例如,发送电子邮件、创建日历事件等。
自定义逻辑:开发者可以编写自定义脚本或插件,并通过function_call机制让模型调用这些脚本来执行特定的任务。
第三方集成:模型可以调用第三方服务的API,如社交媒体平台、云服务提供商等。
文件操作:模型可以调用函数来读取、写入或修改文件内容。
通知和消息发送:模型可以调用函数来发送电子邮件、短信或其他类型的通知。
验证和确认
在某些情况下,模型可能需要验证信息或确认某个操作的结果。
例如,在预订系统中确认订单状态。
身份验证:模型可以调用身份验证函数来验证用户的身份。
权限检查:模型可以调用权限检查函数来确保用户有权限执行某些操作。