Saltar para o conteúdo principal
Use fine-tuning quando você quiser adaptar um modelo base aos seus próprios exemplos de treinamento e ao estilo operacional da sua aplicação. Os endpoints de fine-tuning criam um job assíncrono a partir de arquivos JSONL enviados e retornam um ID de modelo quando o treinamento é concluído com sucesso. Os endpoints de fine-tuning estão marcados como ADMIN ONLY na Referência da API gerada. Use uma API key com as permissões necessárias.

Antes de começar

Prepare:
EntradaDescrição
Arquivo de treinamentoUm arquivo JSONL com seus exemplos de treinamento. Envie com purpose: "fine-tune".
Arquivo de validaçãoDados de validação em JSONL, opcionais. Envie com purpose: "fine-tune".
Modelo baseO ID do modelo que você quer ajustar, por exemplo meetkai:functionary-medium.
Jobs de fine-tuning podem retornar estes status:
validating_files -> queued -> running -> succeeded
                          \-> failed
                          \-> cancelled

Etapa 1 - Enviar os arquivos de treinamento

Envie cada arquivo JSONL com a API de Files e purpose: "fine-tune".
import { SDK } from '@meetkai/mka1';

const mka1 = new SDK({
  bearerAuth: 'Bearer <mka1-api-key>',
});

const requestOptions = {
  headers: {
    'X-On-Behalf-Of': '<end-user-id>',
  },
};

const trainingFile = await mka1.llm.files.upload(
  {
    file: Bun.file('./fine-tuning-train.jsonl'),
    purpose: 'fine-tune',
  },
  requestOptions
);

const validationFile = await mka1.llm.files.upload(
  {
    file: Bun.file('./fine-tuning-validation.jsonl'),
    purpose: 'fine-tune',
  },
  requestOptions
);

console.log(trainingFile.id);
console.log(validationFile.id);
Guarde os IDs de arquivo retornados. Você vai passá-los para a API de Fine-Tuning na próxima etapa.

Etapa 2 - Criar um job de fine-tuning

Chame mka1.llm.fineTuning.create com o modelo base e o ID do arquivo de treinamento enviado. Adicione arquivo de validação, suffix, metadata e configurações de method quando precisar.
const job = await mka1.llm.fineTuning.create(
  {
    model: 'meetkai:functionary-medium',
    trainingFile: trainingFile.id,
    validationFile: validationFile.id,
    suffix: 'support-bot',
    seed: 42,
    method: {
      type: 'supervised',
      supervised: {
        hyperparameters: {
          nEpochs: 3,
        },
      },
    },
    metadata: {
      experiment: 'support-bot-v1',
    },
  },
  requestOptions
);

console.log(job.id);             // "ftjob_aa87e2b1112a455b8deabed784372198"
console.log(job.status);         // "validating_files" | "queued" | "running" | ...
console.log(job.fineTunedModel); // null até o job ser concluído com sucesso

Etapa 3 - Consultar o status do job

Consulte o job até ele chegar em succeeded, failed ou cancelled.
async function waitForFineTuningJob(
  fineTuningJobId: string,
  timeoutMs = 30 * 60_000
) {
  const terminalStatuses = new Set(['succeeded', 'failed', 'cancelled']);
  const start = Date.now();

  while (Date.now() - start < timeoutMs) {
    const current = await mka1.llm.fineTuning.retrieve(
      { fineTuningJobId },
      requestOptions
    );

    if (terminalStatuses.has(current.status)) {
      return current;
    }

    await new Promise((resolve) => setTimeout(resolve, 10_000));
  }

  throw new Error(`Fine-tuning job ${fineTuningJobId} did not finish in time`);
}

const completedJob = await waitForFineTuningJob(job.id);

if (completedJob.status === 'succeeded') {
  console.log(completedJob.fineTunedModel);
} else {
  console.log(completedJob.error);
}
Você também pode paginar todos os jobs com mka1.llm.fineTuning.list({ limit, after }).

Etapa 4 - Inspecionar eventos e checkpoints de treinamento

Use events para logs de treinamento e atualizações de métricas. Use checkpoints para inspecionar checkpoints intermediários do modelo e suas métricas.
const events = await mka1.llm.fineTuning.listEvents(
  {
    fineTuningJobId: job.id,
    limit: 20,
  },
  requestOptions
);

for (const event of events.data) {
  console.log(event.createdAt, event.level, event.message, event.data);
}

const checkpoints = await mka1.llm.fineTuning.listCheckpoints(
  {
    fineTuningJobId: job.id,
    limit: 10,
  },
  requestOptions
);

for (const checkpoint of checkpoints.data) {
  console.log(
    checkpoint.stepNumber,
    checkpoint.fineTunedModelCheckpoint,
    checkpoint.metrics
  );
}
As métricas de checkpoint podem incluir train_loss, train_mean_token_accuracy, valid_loss, valid_mean_token_accuracy, full_valid_loss e full_valid_mean_token_accuracy.

Etapa 5 - Pausar, retomar ou cancelar um job

Use pause quando precisar interromper temporariamente um job em execução. Use resume para continuar. Use cancel para interromper o job definitivamente.
await mka1.llm.fineTuning.pause(
  { fineTuningJobId: job.id },
  requestOptions
);

await mka1.llm.fineTuning.resume(
  { fineTuningJobId: job.id },
  requestOptions
);

await mka1.llm.fineTuning.cancel(
  { fineTuningJobId: job.id },
  requestOptions
);

Etapa 6 - Usar o modelo ajustado

Quando o job chegar em succeeded, job.fineTunedModel conterá o novo ID de modelo. Passe esse ID para uma requisição Responses.
const response = await mka1.llm.responses.create(
  {
    model: completedJob.fineTunedModel!,
    input: 'Escreva uma resposta de suporte para uma entrega atrasada.',
  },
  requestOptions
);

console.log(response.outputText);

Referência da API

Para ver o schema completo de requisição e resposta, abra o grupo Fine-Tuning na Referência da API.