微调LLM提升工具调用能力的ShareGPT数据格式
1. 引入我们做LLM微调最常见的是Alpaca格式的数据Alpaca是最简单、最通用的指令微调格式。它没有对话历史只有 指令 (Instruction) 输入 (Input) 输出 (Output)适合单轮指令学习。如果我们想微调LLM更好的做工具调用等Agent功能要怎么做呢2. ShareGPT格式相比 Alpaca 格式的数据集ShareGPT格式支持更多的角色种类例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations 列中。注意其中 human 和 observation 必须出现在奇数位置gpt 和 function 必须出现在偶数位置。默认所有的 gpt 和 function 会被用于学习参考1。如下是一个ShareGPT格式的多轮对话数据样例[{system:你是贴心中文助手回答简洁通俗,conversations:[{from:human,value:推荐一部国产动画},{from:gpt,value:《长安三万里》画面唯美诗词氛围感拉满。},{from:human,value:还有短篇吗},{from:gpt,value:《中国奇谭》每一集独立小故事。}]}]3. 带工具调用的ShareGPT格式根据参考2我们可以看到这样的数据格式[{conversations:[{from:human,value:我需要为John Doe生成一张发票。他购买了2个苹果每个$1以及3根香蕉每根$0.5。},{from:function_call,value:{\name\: \generate_invoice\, \arguments\: {\customer_name\: \约翰·多伊\, \items\: [{\name\: \苹果\, \quantity\: 2, \price\: 1}, {\name\: \香蕉\, \quantity\: 3, \price\: 0.5}]}}},{from:observation,value:{\invoice_id\: \INV12345\, \customer_name\: \约翰·多伊\, \items\: [{\name\: \苹果\, \quantity\: 2, \price\: 1, \total\: 2}, {\name\: \香蕉\, \quantity\: 3, \price\: 0.5, \total\: 1.5}], \total\: 3.5, \status\: \生成\}},{from:gpt,value:发票已成功生成。发票编号为INV12345。约翰·多伊的总金额为$3.5。发票包含2个苹果总金额为$2以及3根香蕉总金额为$1.5。}],tools:[{\name\: \generate_invoice\, \description\: \生成发票\, \parameters\: {\type\: \object\, \properties\: {\customer_name\: {\type\: \string\, \description\: \客户名称\}, \items\: {\type\: \array\, \items\: {\type\: \object\, \properties\: {\name\: {\type\: \string\, \description\: \The item name\}, \quantity\: {\type\: \integer\, \description\: \The quantity of the item\}, \price\: {\type\: \number\, \description\: \The price per unit\}}, \required\: [\name\, \quantity\, \price\]}}}, \required\: [\customer_name\, \items\]}}, {\name\: \generate_password\, \description\: \生成随机密码\, \parameters\: {\type\: \object\, \properties\: {\length\: {\type\: \integer\, \description\: \密码的长度\}}, \required\: [\length\]}}]}]这是一个带工具调用Function Calling的 ShareGPT 对话格式专门用来训练大模型学会调用工具 / 函数比如生成发票、查天气、调用 API。上面这个数据样例抽象出来它的结构是这样的[{conversations:[对话流程用户提问 → 模型调用工具 → 工具返回结果 → 模型回答],tools:[告诉模型你可以用哪些函数]}]4. 总结本文介绍了三种用于LLM微调的数据格式各有侧重1.Alpaca格式最简单通用的指令微调格式包含“指令输入输出”三元组适合单轮指令学习但不支持对话历史。2.ShareGPT格式支持多轮对话包含多种角色human、gpt、observation、function等对话以对象列表形式呈现在conversations列中其中human和observation必须出现在奇数位置gpt和function必须出现在偶数位置。3.带工具调用的ShareGPT格式在ShareGPT格式基础上扩展专门用于训练大模型进行工具调用Function Calling。数据包含conversations对话流程用户提问→模型调用工具→工具返回结果→模型回答和tools可用的函数列表两部分使模型能够学习如何调用外部工具/API。这三种格式从简单到复杂分别适用于不同的微调场景基础指令学习、多轮对话能力训练、以及工具调用/Agent功能开发。5. 参考https://github.com/hiyouga/LlamaFactory/blob/main/data/README_zh.mdhttps://github.com/hiyouga/LlamaFactory/blob/main/data/glaive_toolcall_zh_demo.json