微调模型

使用指定的训练数据集微调模型。

选项 

  • 账户名是用于 AI 账户名的文本表达式。在当前文件中,使用配置 AI 账户脚本步骤设置账户,并在此脚本步骤运行之前随时为其分配此名称。

  • 基础模型是用于微调的文本生成模型的文本表达式。有关支持的模型,请参阅 FileMaker 技术规格

  • 训练数据指定用于微调的训练数据的来源:

    • :根据当前的搜索结果使用指定表摹本中的数据。对于训练,来自完成字段的数据用作助手响应;来自所有其他字段的数据用作相应的用户提示。

    • 文件:使用包含训练数据的 JSONL 文件。每行必须是包含用户提示及其相应的助手响应的有效 JSON 对象。

  • 响应目标指定模型提供商返回 JSON 对象的字段或变量,其中包含有关此脚本步骤启动的微调作业的信息。

  • 微调参数是 JSON 对象的文本表达式,由模型提供商支持的其他参数的键值对组成。

选项仅在训练数据时才可用:

  • 的值指定用于训练数据的表摹本。

  • 完成字段指定中包含供训练使用的预期助手响应或答案的字段。

仅当训练数据文件时才可用:

  • 文件的值指定包含训练数据的 JSONL 文件的一个或多个路径列表。路径必须使用 file 路径前缀之一。脚本步骤会搜索列表,并添加它成功找到的第一个 JSONL 文件。请参阅创建文件路径

兼容性 

产品 是否支持
FileMaker Pro
FileMaker Go
FileMaker WebDirect
FileMaker Server
FileMaker Cloud
FileMaker Data API
自定义 Web 发布

原始版本 

22.0

说明 

此脚本步骤将训练数据发送给受支持的模型提供商,以使用低阶适应 (LoRA) 技术创建基础 AI 模型的微调版本。微调允许您通过在您自己的数据上进行训练,同时保留基础模型的一般功能,为特定任务、域或响应样式自定义模型的行为。例如,您可以微调模型,以使用您公司的特定术语、写作风格或领域专业知识来更好地响应。LoRA 是一种高效的方法,可以在不修改原始权重的情况下将小的可训练参数添加到模型中。与完整模型微调相比,这种方法所需的计算资源和内存显著减少,同时还能实现相当的性能提升。

账户名称指定的 AI 账户必须为以下模型提供商之一配置:

  • OpenAI

  • 在 Apple silicon Mac 上与 FileMaker Server 一起提供的 AI 模型服务器

其他模型提供商和操作系统不支持微调。请参阅 FileMaker 技术规格

训练数据

训练数据可以从 FileMaker 表或 JSON 行 (JSONL) 文件提供。每个训练示例都由用户提示和所需的助手响应组成。然后,当给出类似的提示时,模型能够生成与您的训练示例类似的响应。

训练数据来自 执行操作

对于指定的表摹本,从完成字段发送数据作为助手响应,并从所有其他字段发送数据作为相应的用户提示。对于当前搜索结果中的每个记录(或者对于指定了相关表时的每个相关记录),脚本步骤以下列格式创建 JSON 对象,然后将它们全部作为 JSONL 文件发送到模型提供商。

复制
{
  "消息"
  [
    {
      "内容" : "<FieldName1>=<Data1>, <FieldName2>=<Data2>, ... ",
      "角色" : "用户"
    },
    {
      "内容" : "<Completion_Field_Data>",
      "角色" : "助手"
    }
  ]
}

注释  此选项不允许您在用户提示中指定发送哪些字段。要指定要包含在用户提示中的字段,请使用将记录保存为 JSONL脚本步骤创建 JSONL 文件,然后使用此脚本步骤中的“文件”选项将该文件作为训练数据发送。

文件

发送第一个成功位于“文件”指定的路径列表中的 JSONL 文件。JSONL 文件的每一行必须包含一个 JSON 对象,该对象至少具有用户提示和以下格式的相应助手响应:

复制
{
  "消息"
  [
    {
      "内容" : "<User_Prompt>",
      "角色" : "用户"
    },
    {
      "内容" : "<Assistant_Prompt>",
      "角色" : "助手"
    }
  ]
}

注释  虽然为了清楚起见,这里显示在多行上,但每个 JSON 对象必须在 JSONL 文件中的一行上。

您可以使用将记录保存为 JSONL脚本步骤,并打开“用于微调的格式”选项,从记录数据创建此文件。

回复目标

要获取有关此脚本步骤启动的微调作业的信息,请为“响应目标”选项指定一个变量或字段。微调可能需要相当长的时间,因此您需要与模型提供商核实,以确定该过程何时完成,微调的模型何时可以使用。

例如,AI 模型服务器在以下情况下发送如下所示的响应:

  • 文件”指定的 JSONL 文件是 my-training-data.jsonl。

  • 基础模型是 google/codegemma-7b-it。

  • 微调参数”中指定的 fine_tuned_model_name 键的值是 my-fine-tuned-model-name。“响应目标”中 fine_tuned_model 键的值是 AI 模型服务器分配的全名。

复制
{
  "result": {
    "object": "fine_tuning.job",
    "id": "fm-ftjob-1753297022103",
    "file_id": "fm-ft-train-1753297022070",
    "model": "google/codegemma-7b-it",
    "created_at": 1753297022103,
    "fine_tuned_model": "fm-mlx-my-fine-tuned-model-name",
    "status": "queued",
    "training_file": "my-training-data.jsonl",
    "tags": [
      "fine-tune"
    ]
  }
}

要确定 AI 模型服务器何时完成微调,请登录 FileMaker Server Admin Console。参见“注释”。

微调参数

微调参数”选项可用于指定模型提供商支持的微调参数。有关受支持参数的键名称及其有效范围,请参阅模型提供商的文档。

对于 FileMaker Server 提供的 AI 模型服务器,如果需要,您可以使用以下键和值来调整微调。如果未指定密钥或未使用“微调参数”选项,则脚本步骤将使用默认值。

参数 说明 默认值

max_steps

训练步骤(或迭代)总数。更多的迭代需要更多的机器内存和时间,但有过度拟合的风险。

1000

learning_rate

控制模型在每个训练步骤中调整程度的数字。更高的值意味着更快的训练,但有超过最佳性能的风险。较低的值意味着更稳定的训练,但收敛速度较慢。

2e-4 (0.0002)

lora_layers

在微调期间将应用 LoRA 适配器的模型层数。较低的值意味着更快的训练和更低的内存使用量,适合简单的模型更改。更高的值意味着训练速度较慢,内存使用量更高,更适合较复杂的模型更改。

4

batch_size

在微调期间更新模型权重之前一起处理的训练示例数量。较低的值意味着较低的内存使用量和较慢的训练。更高的值意味着更多的内存使用量和更快的训练。

1

fine_tuned_model_name

控制训练后微调模型的自定义名称。对于您在此参数中指定的根名称,AI 模型服务器将空格转换为连字符,并添加 fm-mlx- 前缀,以生成您想要使用此微调模型时应在其他脚本步骤和函数中使用的全名。例如,如果您指定 my support model,则全名为 fm-mlx-my-support-model。如果没有指定值,AI 模型服务器会在前缀后附加一个时间戳(例如,fm-mlx-1753215585244)。

响应目标”中返回完整的微调模型名称。

警告  如果全名与现有微调模型的全名匹配,则在开始对新微调模型的训练之前,将删除现有微调模型。

timestamp

例如,这个 JSON 对象在“微调参数”选项中设置了键:

复制
{
  "max_steps": 2000,
  "learning_rate": 1e-4,
  "batch_size": 2,
  "lora_layers": 6,
  "fine_tuned_model_name": "customer-support-v1"
}

注释 

  • 微调需要大量的计算资源。在 AI 模型服务器上一次运行多个微调作业可能会对系统性能产生负面影响。

  • 要监控 AI 模型服务器上微调模型的状态(例如,判断训练何时完成),请打开 FileMaker Server Admin Console。在那里,您还可以通过上传 JSONL 文件直接创建微调模型。请参阅 FileMaker Server 帮助中的创建 AI 微调模型

示例 1-使用表格数据进行基本微调

用表格中的数据微调 OpenAI 模型。该脚本为 OpenAI 配置 AI 账户,并进入 Support_QA 布局。Support_QA 表格包含“问题”和“答案”字段等。脚本执行查找以获取所需的发现集,然后从这些记录中发送数据以微调 GPT-4.1 模型,指定完成字段的答案字段(来自所有其他字段的数据作为用户提示发送)。

复制
配置 AI 账户 [ 账户名称: "my-account" ; 模型提供商: OpenAI ; API 密钥: Global::OpenAI_API_Key ]

转到布局 [ "Support_QA" (Support_QA) ]

执行查找 [ 恢复 ]

微调模型 [ 账户名称: "my-account" ; 基础模型: "gpt-4.1-2025-04-14" ; 训练数据: 表 ; "Support_QA" ; 完成字段: Support_QA::Answer ; 响应目标: $$responseTarget ]

当 OpenAI 通知您训练已完成并提供微调的模型名称时,您可以在脚本步骤中使用模型,例如从模型生成回复

复制
从生成模型响应 [ 账户名称: "my-account" ; 模型: "ft:gpt-4o-mini-2024-07-18:my-org::LBNO71Qq" ; 用户提示: $question ; 代理模式 ; 响应: $$response ]

示例 2-使用 JSONL 文件进行微调

通过发送在示例 2 中为将记录保存为 JSONL脚本步骤所创建的 JSONL 文件,在 AI 模型服务器上对模型进行微调。该脚本配置 AI 账户,并将 $trainingFile 变量设置为文档文件夹中 JSONL 文件的路径。

然后,脚本将 $parameters 变量设置为包含用于微调参数的键值对的 JSON 对象,包括设置根名称以提供微调模型。

最后,脚本将 $trainingFile 指定的 JSONL 文件发送到 AI 模型服务器,指示要微调的基础模型、要使用的参数和要存储回复的 $response 变量。为了使完全微调的模型名称可供以后使用,脚本从 $response 获取名称,并将其存储在全局字段中。

复制
配置 AI 账户 [ 账户名称: "AI_Model_Server" ; Model Provider: Custom ; 端点: "https://myserver.example.com/llm/v1/" ; API 密钥: Global::Fine_Tuning_API_Key ;验证 SSL 证书]

设置变量 [ $trainingFile ; 值: Get(文档路径) & "training_data.jsonl" ]

设置变量 [ $parameters ; 值: 
  Let ( [
    json = "{}" ;
    json = JSONSetElement ( json; "max_steps"; 1500; JSONString ) ;
    json = JSONSetElement ( json; "learning_rate"; 1e-4; JSONString ) ;
    json = JSONSetElement ( json; "batch_size"; 2; JSONString ) ;
    json = JSONSetElement ( json; "fine_tuned_model_name"; "product-expert-v2" ; JSONString )
  ] ;
    json
  )
]

微调模型 [ 账户名: "AI_Model_Server" ; 基础模型: "google/codegemma-7b-it" ; 训练数据: 文件 ; "$trainingFile" ; 响应目标: $responseTarget ; 微调参数: $parameters ]

设置字段 [ Global::Fine_Tuned_Model ; JSONGetElement ( $responseTarget ; "result.fine_tuned_model" ) ]