为企业 AI 代理准备工具调用数据集:本地工作流
AI 代理需要工具调用训练数据来可靠地选择和调用正确的工具。以下是如何从企业文档准备函数调用数据集——完全本地。
大多数企业 AI 代理项目都卡在同一个环节:代理能够正常对话,却无法在恰当的时机、用正确的参数、可靠地调用正确的内部工具。根本原因几乎总是同一个,模型从来没有在反映本组织真实工具的工具调用数据上训练过。
单靠提 示词解决不了这个问题。你可以把函数定义和少样本示例一股脑塞进系统提示,但当内部工具超过 40 个、彼此能力还有重叠时,基于提示的做法就会触到天花板:模型会混淆相似的工具,凭空编造参数,或者不管上下文如何都退回到最常用的那个工具。
解决办法很直接:用贴合你自身环境的工具调用数据去微调模型。难点在于,这份数据在你亲手造出来之前并不存在;而对企业来说,整个制作过程还必须完全在本地完成,因为工具定义本身就是敏感信息。
为什么代理需要工具调用训练数据
AI 代理选择并调用工具的能力是学出来的行为,不会自己涌现。基础模型乃至指令微调过的模型都具备通用的工具调用能力,但那是在公开 API 的 schema 上训练出来的,比如天气 API、搜索引擎、计算器函数。企业内部的工具和这些完全是两回事。
一家典型的企业内部会有一整套 API:CRM 数据查询、ERP 事务处理、文档管理、合规检查、审批流,以及几十种特定业务领域的操作。每个工具都有各自的参数格式、必需的鉴权上下文,还有一套关于何时该调用、何时不该调用的业务规则。
用企业自有的工具调用样本做过微调之后,有三件事会出现可测量的改善。第一,在内部基准上,工具选择准确率从仅用提示词时的 60-70% 提升到微调后的 90-95%。第二,参数格式错误减少 80% 以上,因为模型学到了确切的 schema。第三,模型学会了负样本,也就是什么时候不该调用工具,这会减少不必要的 API 调用以及随之而来的成本。
工具调用数据集的格式
不管你微调的是哪一个模型家族,每条工具调用训练样本的结构都一样,由五个部分组成:
系统提示:定义代理的角色和通用指令。各条样本之间保持一致。
函数定义:用 JSON schema 描述可用的工具,包括名称、说明、参数(含类型与约束)以及必填字段。
用户查询:一条应当触发某个特定工具调用的自然语言请求。
预期函数调用:模型应当选中的那个工具名。
预期参数:模型应当传给该工具的确切 JSON 参数。
一条训练样本在实际中长这样:
{
"messages": [
{
"role": "system",
"content": "You are an enterprise assistant with access to internal tools."
},
{
"role": "user",
"content": "Pull the Q3 revenue numbers for the EMEA region."
}
],
"tools": [
{
"name": "query_financial_report",
"description": "Retrieves financial metrics by quarter, region, and metric type.",
"parameters": {
"quarter": "string (Q1-Q4)",
"year": "integer",
"region": "string",
"metric": "string"
}
}
],
"expected_call": {
"name": "query_financial_report",
"arguments": {
"quarter": "Q3",
"year": 2026,
"region": "EMEA",
"metric": "revenue"
}
}
}要让微调稳定见效,每个工具需要 50-200 条样本。一套 30 个工具的系统,总量就是 1,500-6,000 条。听上去很多,但下面这条准备流水线能把工作量压到可控范围内。