LLaMA-Factory 使用 sharegpt 格式的数据集
flyfish
sharegpt 格式的数据集遵循的格式
json
[
{
"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 文件中的列应该包括:
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来获取天气信息。
json
[
{
"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: 多轮对话
展示一个更复杂的多轮对话,其中包含多个函数调用和更多的交互。
json
[
{
"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文件中的数据集描述可以如下所示:
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,如社交媒体平台、云服务提供商等。
文件操作:模型可以调用函数来读取、写入或修改文件内容。
通知和消息发送:模型可以调用函数来发送电子邮件、短信或其他类型的通知。
验证和确认
在某些情况下,模型可能需要验证信息或确认某个操作的结果。
例如,在预订系统中确认订单状态。
身份验证:模型可以调用身份验证函数来验证用户的身份。
权限检查:模型可以调用权限检查函数来确保用户有权限执行某些操作。