toti-cakery-toolcall
收藏资源简介:
Toti Cakery WhatsApp Chatbot — Tool-Calling SFT 是一个合成监督微调数据集,专门用于微调蛋糕店WhatsApp聊天机器人的工具调用能力。数据集为双语,包含约79%的印尼语和约21%的英语,旨在提升小模型在调用9个LangChain工具时的准确性,同时防止对话能力退化。数据构成方面,约63%的样本涉及工具调用,约37%为对话、拒绝或澄清等非工具交互。数据集分为训练集(1005行)、验证集(102行)和测试集(100行,自v1版本起冻结用于功能评估)。数据格式遵循OpenAI聊天补全结构,每条样本包括messages序列(系统提示、用户消息、助手消息/工具调用)、9个工具的JSON模式字符串(tools_json)以及元数据(如样本类型、语言、多轮、是否含噪)。v4版本针对生产环境测试中的失败模式进行了关键改进:训练数据不包含菜单/价格/产品内容以避免模型记忆;历史记录精确模拟生产环境并使用紧凑标记;工具参数直接使用用户原话;系统提示中集成了运行时路由提醒。数据集通过确定性模板生成(种子42),未使用LLM合成,并经过独立审计,适用于Qwen3等模型在Unsloth框架下的工具调用微调任务。
Toti Cakery WhatsApp Chatbot — Tool-Calling SFT is a synthetic supervised fine-tuning dataset designed to fine-tune the tool-calling capabilities of a cake shop WhatsApp chatbot. The dataset is bilingual, with approximately 79% Indonesian and 21% English, specifically aimed at improving the accuracy of small models when calling 9 LangChain tools while avoiding degradation in conversational abilities. In terms of data composition, about 63% of samples involve tool calling, and about 37% are non-tool interactions such as conversation, rejection, or clarification. The dataset includes three splits: training set (1005 rows), validation set (102 rows), and test set (100 rows, frozen from version v1 for functional evaluation). The data format follows the OpenAI chat completion structure, with each sample containing a messages sequence (system prompt, user message, assistant message/tool call), a JSON schema string for 9 tools (tools_json), and metadata (sample type, language, multi-turn, noise inclusion). Version v4 introduces key improvements based on failure modes identified in production testing: 1) training data excludes menu/price/product content to prevent model memorization; 2) history accurately simulates production environments using compact tokens; 3) tool parameters directly use users original utterances; 4) system prompts integrate runtime routing reminders. The dataset is generated via deterministic templates (seed 42), without using LLM synthesis, and has been independently audited, suitable for tool-calling fine-tuning tasks with models like Qwen3 in the Unsloth framework.
数据集概述:Toti Cakery Tool-Calling SFT
该数据集是为 WhatsApp 蛋糕店聊天机器人合成的双语(印尼语 ~79% / 英语 ~21%)SFT 数据集,旨在提升小模型在不降低对话能力前提下的工具调用准确性。
数据集特点
- 任务类型:文本生成(Text Generation)
- 标签:函数调用(function-calling)、工具使用(tool-use)、印尼语、聊天机器人
- 许可证:MIT
- 语言:印尼语(id)、英语(en)
- 大小:n<1K(少于1000条)
- 版本:v4(2026-07-16)
数据集用途
该数据集用于微调一个 WhatsApp 蛋糕店聊天机器人,该机器人使用 9个 LangChain 工具。数据集中的工具调用行约占 63%,对话/拒绝/澄清行约占 37%。
数据格式
每条数据包含 messages 数组、tools_json(9个工具 JSON schema 的序列化字符串)和 meta 元信息。
消息格式示例:
- system: 生产级系统提示 + FAQ 上下文 + 工具调用提醒
- user: 用户输入(如“menu dong”、“beli 4 cupcake”)
- assistant: 可包含对话回复或工具调用(
tool_calls),工具参数为用户原文
关键点:
- 行末的助手回复以
tool_calls结束(单次工具调用模式,无后续 LLM 二次传递) arguments为 JSON 字符串,tools_json为字符串以确保 Arrow schema 稳定- 训练时仅对最后一个助手轮次进行掩码训练
数据集划分
| 划分 | 行数 | 用途 |
|---|---|---|
train |
1005 | 权重更新 |
validation |
102 | 验证(与训练集同分布) |
test |
100 | 保持不变的测试集(自 v1 起冻结),用于功能评估 |
v4 版本更新(2026-07-16)
针对实际 WhatsApp 测试中发现的四种失败模式进行修复:
- 训练助手回复中不包含任何菜单/价格/产品内容
- 历史记录精确模拟生产环境:之前的机器人回复被压缩为标记(如
[Aku sudah menampilkan daftar menu via tool get_menu]) - 工具参数直接使用客户的原文(如“beli 4 cupcake” →
{"product": "cupcake", "qty": 4}) - 运行时路由提示被嵌入系统提示末尾
数据生成
- 由项目仓库中的
finetune/generate_dataset.py确定性生成(种子 42) - 使用真实菜单的模板+槽填充生成,未使用任何 LLM 合成数据
- 每次发布前均独立审查结构、规则、行为、统计数据和数据泄漏
训练建议
- 使用 Unsloth 的
SFTTrainer,设置eval_dataset=ds["validation"]监控验证损失 - 使用
train_on_responses_only并额外掩码除最后一个<|im_start|>assistant段以外的所有内容 - 建议配置:LoRA r=16, alpha=16, lr=2e-4, 2 个 epoch, 有效批次大小 8
- 训练后导出 GGUF(q4_k_m 量化),使用与基础模型相同的聊天模板创建 Ollama 模型
评估方法
运行功能评估工具(BFCL 风格)在保持不变的测试集上,以及回归场景测试集:
python finetune/eval_tool_calling.py --model <model_name>python finetune/scenario_suite.py --model <model_name>
评估指标:函数选择准确率、参数匹配度、无效调用率、无关检测率、虚假工具调用率,以及针对生产事故的回归测试。





