导入Role(user+assistant)数据
登录到千帆ModelBuilder操作台,在左侧功能列选择通用数据集,进入主任务界面。
数据格式说明
Role(user+assistant):单轮或多轮的文本对话数据,提问与回答一一对应,支持多角色类型与Function Call工具调用。适用于模型精调的SFT大语言模型训练。
多角色类型
数据样本中的messages (list, required) 描述多角色对话和互动。在不包含工具调用的精调数据中,可填写的角色具体说明如下:
Role(角色) | 是否必须包含 | 角色说明 |
---|---|---|
system | 否 | 代表系统角色设定,其content 字段为角色设定信息 |
user | 是 | 代表用户输入,其content 字段为对话文本内容 |
assistant | 无标注样例不包含,有标注样例包含 | 代表模型回答,其content 字段为对话文本内容 |
不包含工具调用的精调数据样本示例如下,每行一条样本:
- 无标注样例
{"messages":[{"role":"system","content":"你是一个专业的新闻摘要撰写助手,擅长使用简洁明了的语言来提炼核心信息。"},{"role":"user","content":"请根据下面的新闻生成摘要, 内容如下:据315晚会报道,...\n请生成摘要。"}]}
平台支持上传无标注样例,您可在平台上进行数据标注,标注方式包括在线标注、多人标注和众测标注。只有标注完成的数据集,才能被发布并用于训练。
- 单轮对话(含标注)
{"messages":[{"role":"system","content":"你是一个AI学习助手。"},{"role":"user","content":"我想了解一下机器学习是什么。"},{"role":"assistant","content":"机器学习是人工智能的一个分支..."}]}
- 多轮对话(含标注)
{"messages":[{"role":"system","content":"你是一个擅长写诗的人工智能助手。"},{"role":"user","content":"生成一首诗歌吧。"},{"role":"assistant","content":"好的,请问你想让这首诗歌关于什么主题呢?"},{"role":"user","content":"主题关于秋天。"},{"role":"assistant","content":"秋风轻抚过金黄的稻田,\n\n稻穗摇曳,似在低语绵绵。\n\n落叶纷飞,舞动秋的旋律,\n\n铺就一地斑斓,点缀金黄的画卷。\n\n远方的你,是否也在期盼?"}]}
平台支持上传多轮对话,但每个样例中的对话限制不超过150轮,超出部分将会被截断。
在多轮对话的监督式微调(SFT)中,有时会遇到某些轮次对话效果不理想的情况。为避免模型学习错误信息,可以通过为对话数据集配置 weight
字段,选择性地跳过特定轮次的回答,使其不参与损失函数(loss)的计算。weight
为选填字段,默认为1,表示当前及历史轮次参与SFT精调,并对当前轮次计算loss;weight
为0时,表示当前轮次不参与SFT精调的loss计算。
如下方示例中的第二轮,模型并未按照指定要求热情地回答问题。如直接使用全部数据进行精调,可能会影响最终的模型性能。通过将第二轮对话的weight
设为0,可在SFT精调时跳过该轮次的模型回答,避免模型学习错误信息:
{"messages": [{"role": "user", "content": "可以请你用热情的语气回答我的问题吗?"}, {"role": "assistant", "content": "当然可以,请说出你的问题", "weight": 1},
{"role": "user", "content": "法国的首都是哪里"}, {"role": "assistant", "content": "巴黎", "weight": 0},
{"role": "user", "content": "请你用热情的语气认真回答"}, {"role": "assistant", "content": "哦!是巴黎,浪漫之都,那儿有很多漂亮的建筑,有机会你一定要去看看!", "weight": 1}]}
注意:含weight字段的数据仅在ERNIE Tiny、ERNIE Character、ERNIE Lite 0308、ERNIE Lite128K-0419和ERNIE Speed模型精调SFT中可用,该字段对其他模型开放的情况,请您时刻关注官方说明。
Function Call 工具调用
Role格式支持工具调用场景,实现了模型与外部工具、系统的连接,这对于增强模型推理效果或拓展AI助手的能力很有帮助。工具调用场景包括信息检索、数据库操作、知识图谱搜索与推理、操作系统、触发外部操作等。
使用包含工具调用的样本进行精调,可以让模型学习到更准确且稳定的工具调用方式和输出结果。工具调用场景的精调数据样本需要同时包含:1. tools (list, optional) 工具列表描述工具功能;2. messages (list, required) 对话列表说明期望的工具调用方式和输出结果。以下格式说明为结构清晰展开展示,数据上传时需参考示例模板,每行一条样本。
1. 如何描述工具功能
为了向模型描述外部工具库,需要向 tools (list, optional) 字段传入可以调用的工具列表。Function Call函数调用场景下,每个函数的对应参数如下表:
参数名称 | 类型 | 参数说明 |
---|---|---|
type |
string | 固定值function |
function |
object | 用于描述函数,包含name 、description 和parameters |
name |
string | 函数名称 |
description |
string | 描述函数功能,模型会依据描述确定相应的函数调用方式 |
parameters |
object | 函数所接受的参数,为一个 Json Schema 对象 |
如果需要模型完成计算月供的任务,外部函数calculate_loan_payment
可以根据贷款本金、贷款年利率和贷款年限来计算月供,该函数可以描述如下,供模型选择调用:
"tools": [
{
"type": "function",
"function": {
"name": "calculate_loan_payment",
"description": "计算每个月月供",
"parameters": "{\"type\": \"object\", \"properties\": {\"principal\": {\"type\": \"number\", \"description\": \"贷款本金\"}, \"interest_rate\": {\"type\": \"number\", \"description\": \"贷款年利率\"}, \"loan_term\": {\"type\": \"integer\", \"description\": \"贷款年限\"}}, \"required\": [\"principal\", \"interest_rate\", \"loan_term\"]}"
}
}
]
将数据样本上传至平台后,您可以在Tools列点击查看工具详情:
2. 期望的工具调用方式和输出结果
在包含工具调用的精调数据样本中,messages (list, required) 对话列表将包含更丰富的多角色对话互动。通过用户(user)、模型(assistant)和工具(tool)三种角色的交互来展示期望的工具调用方式和模型输出。
用户(user)发出指令,模型(assistant)发起工具调用任务并传入参数,工具(tool)执行调用并返回结果,最终模型(assistant)根据工具返回结果生成面向用户的回答。具体说明如下:
角色(role) | 是否必须包含 | 角色说明 |
---|---|---|
system | 否 | 代表系统角色设定,其content 字段为角色设定信息 |
user | 是 | 代表用户输入,其content 字段为对话文本内容 |
assistant | 是 | 代表模型回答,其content 字段为对话文本内容,其tool_calls 字段为工具调用传参 |
tool | 是 | 代表工具调用,其tool_call_res 字段为工具调用返回结果 |
在Function Call函数调用场景下,模型(assistant)在调用工具传参时使用tool_calls
字段,对应参数如下:
参数名称 | 类型 | 参数说明 |
---|---|---|
id |
string | 工具调用ID,需要和工具(tool)的tool_call_id 参数值一致 |
type |
string | 固定值function |
function |
object | 用于描述目标调用函数,包含name 和arguments |
name |
string | 目标调用工具名称 |
arguments |
object | 调用函数时的参数取值,为一个 Json Schema 对象 |
工具(tool)在调用工具返回结果时使用tool_call_res
字段,对应参数如下:
参数名称 | 类型 | 参数说明 |
---|---|---|
name |
string | 目标调用工具名称 |
tool_call_id |
string | 工具调用ID,需要和模型(assistant) tool_calls 字段id 参数值一致 |
content |
object | 工具执行结果返回,为一个 Json Schema 对象 |
"messages": [
{
"role": "system",
"content": "作为银行工作人员,回答下列问题"
},
{
"role": "user",
"content": "你好,我需要计算一下我每月的贷款还款额。我有一笔5万元的贷款,年利率5%,贷款期限为10年。你能帮我吗?"
},
{
"role": "assistant",
"content": "好的,我会帮助您计算",
"tool_calls": [
{
"id": "19c443b42d3f5000",
"type": "function",
"function": {
"name": "calculate_loan_payment",
"arguments": "{\"principal\": 50000, \"interest_rate\": 5, \"loan_term\": 10}"
}
}
]
},
{
"role": "tool",
"tool_call_res": [
{
"name": "calculate_loan_payment",
"tool_call_id": "19c443b42d3f5000",
"content": "{\"monthly_payment\": \"$530.33\"} "
}
]
},
{
"role": "assistant",
"content": "根据所提供的信息,您每月的贷款还款额为530.33元"
}
]
将数据样本上传至平台后,您可以在Assistant列点击查看工具调用详情:
3. 示例模板
工具调用场景单轮对话样例(需要含标注):
{"messages":[{"role":"system","content":"作为银行工作人员,回答下列问题"},{"role":"user","content":"你好,我需要计算一下我每月的贷款还款额。我有一笔5万元的贷款,年利率5%,贷款期限为10年。你能帮我吗?"},{"role":"assistant","tool_calls":[{"id":"19c443b42f3f3005","type":"function","function":{"name":"calculate_loan_payment","arguments":"{\"principal\": 50000, \"interest_rate\": 5, \"loan_term\": 10}"}}]},{"role":"tool","tool_call_id":"19c443b42f3f3005","content":"{\"monthly_payment\": \"$530.33\"} "},{"role":"assistant","content":"根据所提供的信息,您每月的贷款还款额为530.33元"}],"tools":[{"type":"function","function":{"name":"calculate_loan_payment","description":"计算每个月月供","parameters":"{\"type\": \"object\", \"properties\": {\"principal\": {\"type\": \"number\", \"description\": \"贷款本金\"}, \"interest_rate\": {\"type\": \"number\", \"description\": \"贷款年利率\"}, \"loan_term\": {\"type\": \"integer\", \"description\": \"贷款年限\"}}, \"required\": [\"principal\", \"interest_rate\", \"loan_term\"]}"}}]}
为了完成用户指令,模型可以调用单个工具,也可以并行或串行调用多个工具。如需查看工具调用场景的单轮对话和多轮对话样例,请下载jsonl示例模板。
若您的数据集包含工具调用场景,请上传已标注文本数据。 Function Call工具调用场景的数据集当前仅适用于ERNIE-Lite-128K-0722模型精调,暂不支持Weight字段参与训练。
数据文件要求
文件类型 | 无标注数据 | 有标注数据 |
---|---|---|
jsonl文件 |
|
|
xlsx文件 |
|
|
csv文件 |
|
|
压缩包 |
|
|
- 文件编码支持UTF-8。
数据导入方式
创建数据集完成后,在数据集管理页面中,找到该数据集,点击右侧操作列下的“导入”按钮,即可进入导入数据页面。
您可以使用以下方式上传文本数据:本地导入、BOS导入、分享链接导入、平台已有数据集。
导入方式 | 文件限制 |
---|---|
本地导入 |
|
BOS导入 |
|
分享链接导入 |
|
平台已有数据集 |
|
自定义字段
messages (list, required) 和 tools (list, optional) 字段为平台预留字段,会参与SFT模型精调。
除这些预留字段外,Role(user+assistant)数据集还额外支持您在数据中扩展自定义业务字段,为数据集样本附加多维度元信息,例如实际业务指标、终端用户反馈和分类标签,可在数据准备过程中指导您更好地进行数据洞察与处理。
注:自定义字段主要用于在数据洞察环节辅助样本筛选与处理,不会参与到模型精调环节;自定义字段的键名需由英文和数字组成,不支持中文字符
jsonl格式
在jsonl格式的SFT数据集中,您可以在每个样本对话后添加自定义字段 custom_fields (object, optional) 。
以知识问答场景的单轮对话数据集为例,您可以为每个样本附加问题领域和难度信息,在custom_fields中增加“area”和“complexity”两个键值对,代表两个自定义字段。
{"messages": [{"role": "user", "content": "什么是大语言模型?"}, {"role": "assistant", "content": "大语言模型(Large Language Model,简称LLM)是指使用大量文本数据训练的深度学习模型,能够生成自然语言文本或理解语言文本的含义,是自然语言处理领域的重要工具,可以处理多种自然语言任务"}], "custom_fields": {"area":"人工智能","complexity":"中等"}}
{"messages": [{"role": "user", "content": "请你证明费马大定理"}, {"role": "assistant", "content": "由于费马大定理的证明非常复杂且涉及高级的数学概念,我无法在这里给出一个完整的证明过程。"}], "custom_fields": {"area":"数学","complexity":"困难"}}
{"messages": [{"role": "user", "content": "热胀冷缩是什么导致的?"}, {"role": "assistant", "content": "热胀冷缩现象是物质的一种基本性质,其主要原因与物质内部的微观结构以及粒子间的相互作用有关。"}], "custom_fields": {"area":"物理","complexity":"简单"}}
xlsx和csv格式
您也可以选择在xlsx和csv格式的SFT数据集中添加自定义字段,数据集首行的列名为自定义字段的键名(需由英文和数字组成)。以xlsx格式为例,上述样本可以通过添加“area”和“complexity”两列,来代表自定义字段。
数据洞察
将完成上传后,在SFT数据洞察环节,您可以利用“area”字段统计问题领域分布,或利用“complexity”字段统计问题困难度分布,以帮助您更好地“诊断”SFT数据集,从而对数据进行更针对性处理。
您的自定义字段可能会包括实际业务指标、终端用户反馈或分类标签等。结合自定义字段进行筛选,您可以精准锁定感兴趣的样本,便于进一步编辑和处理,助力数据飞轮场景的精调迭代。