INTEGRITY Dokumentace

Vytvořte doladěný model OpenAI pomocí R2

V tomto tutoriálu použijete OpenAI API a Cloudflare R2 pro vytvoření doladěný model.

Tato funkce v API OpenAI umožňuje odvodit vlastní model z různých velkých jazykových modelů OpenAI na základě sady vlastních instrukcí a ukázkových odpovědí. Tyto instrukce a ukázkové odpovědi se zapisují do dokumentu označovaného jako fine-tune dokument. Tento dokument se uloží do R2 a dynamicky poskytne API OpenAI při vytváření nového fine-tune modelu.

Chcete-li tuto funkci použít, provedete následující kroky:

  1. Nahrajte dokument pro fine-tuning do R2.
  2. Přečtěte soubor R2 a nahrajte ho do OpenAI.
  3. Vytvořte nový doladěný model na základě dokumentu.
Demo

Chcete-li si prohlédnout dokončený kód této aplikace, přečtěte si Repozitář GitHub pro tento tutoriál.

Předpoklady

Než začnete, ujistěte se, že máte:

1. Vytvořte aplikaci Worker

Nejprve použijte c3 CLI k vytvoření nového projektu Cloudflare Workers.

npm create cloudflare@latest -- finetune-chatgpt-model

Při nastavení vyberte následující možnosti:

Výše uvedené volby vytvoří projekt TypeScript "Hello World".

Přejděte do nově vytvořeného adresáře:

cd finetune-chatgpt-model

2. Nahrajte dokument pro fine-tuning do R2

Dále nahrajte dokument pro fine-tuning do R2. R2 je úložiště typu klíč-hodnota, které umožňuje ukládat a načítat soubory přímo z vaší aplikace Workers. K tomu použijete Wrangler pro vytvoření nového R2 bucketu.

Chcete-li vytvořit nový bucket R2, použijte wrangler r2 bucket create příkaz. Vezměte na vědomí, že jste přihlášeni pomocí svého účtu Cloudflare. Pokud nejste přihlášeni přes Wrangler, použijte wrangler login příkazu.

npx wrangler r2 bucket create <BUCKET_NAME>

Nahraďte <BUCKET_NAME> požadovaným názvem bucketu. Názvy bucketů musí být psány malými písmeny a mohou obsahovat pouze pomlčky.

Dále nahrajte soubor pomocí wrangler r2 object put příkazu.

npx wrangler r2 object put <PATH> -f <FILE_NAME>

<PATH> je kombinace bucketu a cesty k souboru, který chcete nahrát, například fine-tune-ai/finetune.jsonl, kde fine-tune-ai je název bucketu. Nahraďte <FILE_NAME> místním názvem souboru vašeho dokumentu pro doladění.

3. Připojte svůj bucket k Workeru

Binding je způsob, jakým váš Worker komunikuje s externími zdroji, například s R2 bucketem.

Chcete-li k Workeru připojit bucket R2, přidejte do souboru Wrangler následující. Vlastnost binding upravte na platný identifikátor proměnné JavaScript. Nahraďte <YOUR_BUCKET_NAME> názvem bucketu, který jste vytvořili v krok 2:

{
	"r2_buckets": [
		{
			"binding": "MY_BUCKET", // <~ valid JavaScript variable name
			"bucket_name": "<YOUR_BUCKET_NAME>"
		}
	]
}
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "<YOUR_BUCKET_NAME>"

4. Inicializujte svou aplikaci Worker

Použijete Hono, odlehčený framework pro vytváření aplikací Cloudflare Workers. Hono poskytuje rozhraní pro definování tras a middleware funkcí. V adresáři svého projektu spusťte následující příkaz pro instalaci Hono:

npm i hono

Také musíte nainstalovat OpenAI Node API library. Tato knihovna poskytuje pohodlný přístup k OpenAI REST API v projektu Node.js. Knihovnu nainstalujete spuštěním následujícího příkazu:

npm i openai

Dále otevřete src/index.ts soubor a nahraďte výchozí kód níže uvedeným kódem. Nahraďte <MY_BUCKET> názvem binding, který jste nastavili v souboru Wrangler.

import { Context, Hono } from "hono";
import OpenAI from "openai";

type Bindings = {
	<MY_BUCKET>: R2Bucket
	OPENAI_API_KEY: string
}

type Variables = {
	openai: OpenAI
}

const app = new Hono<{ Bindings: Bindings, Variables: Variables }>()

app.use('*', async (c, next) => {
	const openai = new OpenAI({
		apiKey: c.env.OPENAI_API_KEY,
	})
	c.set("openai", openai)
	await next()
})

app.onError((err, c) => {
	return c.text(err.message, 500)
})

export default app;

Ve výše uvedeném kódu nejprve importujete potřebné balíčky a definujete typy. Poté inicializujete app jako novou instanci Hono. Pomocí use middleware funkce přidáte klienta OpenAI API do kontextu všech tras. Tato middleware funkce umožňuje přistupovat ke klientovi z libovolného route handleru. onError() definuje obslužnou rutinu chyb, která veškeré chyby vrací jako odpověď ve formátu JSON.

5. Načtěte soubory R2 a nahrajte je do OpenAI

V této části definujete trasu a funkci odpovědnou za zpracování nahrávání souborů.

V createFile, váš Worker načte soubor z R2 a převede ho na File objekt. Váš Worker poté pomocí OpenAI API nahraje soubor a vrátí odpověď.

GET /files trasa naslouchá GET požadavky s parametrem dotazu file, představující název souboru nahraného fine-tune dokumentu v R2. Funkce používá createFile funkci pro správu procesu nahrávání souborů.

Nahraďte <MY_BUCKET> názvem binding, který jste nastavili v souboru Wrangler.

// New import added at beginning of file
import { toFile } from 'openai/uploads'

const createFile = async (c: Context, r2Object: R2ObjectBody) => {
	const openai: OpenAI = c.get("openai")

	const blob = await r2Object.blob()
	const file = await toFile(blob, r2Object.key)

	const uploadedFile = await openai.files.create({
		file,
		purpose: "fine-tune",
	})

	return uploadedFile
}

app.get('/files', async c => {
	const fileQueryParam = c.req.query("file")
	if (!fileQueryParam) return c.text("Missing file query param", 400)

	const file = await c.env.<MY_BUCKET>.get(fileQueryParam)
	if (!file) return c.text("Couldn't find file", 400)

	const uploadedFile = await createFile(c, file)
	return c.json(uploadedFile)
})

6. Vytvořte doladěné modely

Tato sekce zahrnuje GET /models trasu a createModel funkci. Funkce createModel se stará o zadání podrobností a spuštění procesu fine-tuningu u OpenAI. Route zpracovává příchozí požadavky na vytvoření nového fine-tuned modelu.

const createModel = async (c: Context, fileId: string) => {
	const openai: OpenAI = c.get("openai");

	const body = {
		training_file: fileId,
		model: "gpt-4o-mini",
	};

	return openai.fineTuning.jobs.create(body);
};

app.get("/models", async (c) => {
	const fileId = c.req.query("file_id");
	if (!fileId) return c.text("Missing file ID query param", 400);

	const model = await createModel(c, fileId);
	return c.json(model);
});

7. Vypište všechny úlohy dolaďování

Tato sekce popisuje GET /jobs trasu a odpovídající getJobs funkci. Funkce komunikuje s API OpenAI a načítá seznam všech úloh doladění (fine-tuning). Trasa poskytuje rozhraní pro získání těchto informací.

const getJobs = async (c: Context) => {
	const openai: OpenAI = c.get("openai");
	const resp = await openai.fineTuning.jobs.list();
	return resp.data;
};

app.get("/jobs", async (c) => {
	const jobs = await getJobs(c);
	return c.json(jobs);
});

8. Nasaďte svou aplikaci

Jakmile vytvoříte aplikaci Worker a přidáte potřebné funkce, aplikaci nasaďte.

Než nasadíte, musíte nastavit OPENAI_API_KEY secret pro vaši aplikaci. Provedete to spuštěním wrangler secret put příkaz:

npx wrangler secret put OPENAI_API_KEY

Chcete-li nasadit aplikaci Worker do globální sítě Cloudflare:

  1. Ujistěte se, že jste v adresáři svého projektu Worker, a poté spusťte wrangler deploy příkaz:
npx wrangler deploy
  1. Wrangler zabalí a nahraje váš kód.

  2. Po nasazení aplikace vám Wrangler poskytne adresu URL vašeho Workeru.

9. Zobrazte stav úlohy dolaďování a použijte model

Chcete-li aplikaci používat, vytvořte novou úlohu doladění (fine-tune) odesláním požadavku na /files s file parametr dotazu odpovídající názvu souboru, který jste dříve nahráli:

curl https://your-worker-url.com/files?file=finetune.jsonl

Po nahrání souboru odešlete další požadavek na /models, přičemž předáte file_id parametr dotazu. Ten by měl odpovídat id vrácená jako JSON z /files trasa:

curl https://your-worker-url.com/models?file_id=file-abc123

Nakonec přejděte na /jobs pro zobrazení stavu vašich fine-tune úloh v OpenAI. Jakmile je úloha fine-tune dokončena, můžete zobrazit fine_tuned_model hodnota, která signalizuje, že byl vytvořen fine-tuned model.

Úlohy

Navštivte OpenAI Playground abyste mohli použít svůj fine-tune model. Vyberte svůj fine-tune model z rozbalovací nabídky vlevo nahoře v rozhraní.

Demo

Použijte ho v jakýchkoli API požadavcích na chat completions endpointy OpenAI. Například v níže uvedeném ukázkovém kódu:

openai.chat.completions.create({
	messages: [{ role: "system", content: "You are a helpful assistant." }],
	model: "ft:gpt-4o-mini:my-org:custom_suffix:id",
});

Další kroky

Chcete-li se dozvědět více o tom, co lze vytvářet s Workers, přečtěte si Návody.

Pokud máte jakékoli dotazy, potřebujete pomoc nebo se chcete podělit o svůj projekt, připojte se ke komunitě Cloudflare Developer na Discord pro spojení s dalšími vývojáři a týmem Cloudflare.