INTEGRITY Dokumentace

Volání funkcí OpenAI GPT pomocí JavaScriptu a Cloudflare Workers

V tomto tutoriálu sestavíte projekt, který využívá volání funkcí od OpenAI funkci, která je dostupná v nejnovějších modelech Chat Completions API od OpenAI.

Funkce function calling umožňuje AI modelu inteligentně rozhodnout, kdy zavolat funkci na základě vstupu, a odpovědět ve formátu JSON odpovídajícím signatuře dané funkce. Funkci function calling použijete k tomu, aby model určil adresu URL webu s informacemi relevantními pro zprávu uživatele, načetl textový obsah dané stránky a nakonec vrátil výslednou odpověď podloženou daty z webu v reálném čase.

Co se naučíte


Než začnete

Všechny návody předpokládají, že jste již dokončili Úvodní návod, který vás provede nastavením účtu Cloudflare Workers, C3, a Wrangler.

1. Vytvořte nový projekt Worker

Vytvořte projekt Worker v příkazovém řádku:

npm create cloudflare@latest -- openai-function-calling-workers

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

Přejděte do svého nového openai-function-calling-workers projekt Workeru:

cd openai-function-calling-workers

Uvnitř svého nového openai-function-calling-workers adresáři, najděte src/index.js soubor. Tento soubor budete konfigurovat po většinu tohoto návodu.

Pro tento tutoriál budete také potřebovat účet OpenAI a API klíč. Pokud jej ještě nemáte, vytvořte nový účet OpenAI a vytvořte API klíč pro pokračování v tomto tutoriálu. Nezapomeňte si klíč API uložit na bezpečné místo, abyste ho mohli později použít.

2. Odešlete požadavek na OpenAI

Jakmile máte vytvořený projekt Workeru, proveďte svůj první požadavek na OpenAI. K interakci s OpenAI API použijete knihovnu OpenAI pro Node. V tomto projektu také použijete knihovnu Cheerio ke zpracování HTML obsahu webových stránek

npm i openai cheerio

Nyní definujte strukturu svého Workeru v index.js:

export default {
	async fetch(request, env, ctx) {
		// Initialize OpenAI API
		// Handle incoming requests
		return new Response("Hello World!");
	},
};

Výše export default, přidejte importy pro openai a cheerio:

import OpenAI from "openai";
import * as cheerio from "cheerio";

Ve vašem fetch funkci vytvořte instanci vašeho OpenAI klient:

async fetch(request, env, ctx) {
  const openai = new OpenAI({
    apiKey: env.OPENAI_API_KEY,
  });

  // Handle incoming requests
  return new Response('Hello World!');
},

Použijte wrangler secret put nastavit OPENAI_API_KEY. Toto secretu hodnota je API klíč, který jste dříve vytvořili v OpenAI dashboardu:

npx wrangler secret put <OPENAI_API_KEY>

Pro lokální vývoj vytvořte nový soubor .dev.vars ve vašem projektu Workeru a přidejte tento řádek. Nezapomeňte nahradit OPENAI_API_KEY vlastním API klíčem OpenAI:

OPENAI_API_KEY = "<YOUR_OPENAI_API_KEY>"

Nyní odešlete požadavek na OpenAI Chat Completions API:

export default {
	async fetch(request, env, ctx) {
		const openai = new OpenAI({
			apiKey: env.OPENAI_API_KEY,
		});

		const url = new URL(request.url);
		const message = url.searchParams.get("message");

		const messages = [
			{
				role: "user",
				content: message ? message : "What's in the news today?",
			},
		];

		const tools = [
			{
				type: "function",
				function: {
					name: "read_website_content",
					description: "Read the content on a given website",
					parameters: {
						type: "object",
						properties: {
							url: {
								type: "string",
								description: "The URL to the website to read",
							},
						},
						required: ["url"],
					},
				},
			},
		];

		const chatCompletion = await openai.chat.completions.create({
			model: "gpt-4o-mini",
			messages: messages,
			tools: tools,
			tool_choice: "auto",
		});

		const assistantMessage = chatCompletion.choices[0].message;
		console.log(assistantMessage);

		//Later you will continue handling the assistant's response here
		return new Response(assistantMessage.content);
	},
};

Zkontrolujte argumenty, které předáváte do OpenAI:

3. Vytváření vašeho read_website_content() funkce

Nyní budete muset definovat read_website_content funkce, na kterou se odkazuje v tools pole. read_website_content funkce načte obsah zadané adresy URL a extrahuje z ní text <p> tagy pomocí cheerio knihovna:

Přidejte tento kód nad export default blok ve svém index.js soubor:

async function read_website_content(url) {
	console.log("reading website content");

	const response = await fetch(url);
	const body = await response.text();
	let cheerioBody = cheerio.load(body);
	const resp = {
		website_body: cheerioBody("p").text(),
		url: url,
	};
	return JSON.stringify(resp);
}

V této funkci vezmete URL, kterou jste obdrželi od OpenAI, a použijete Fetch API pro stažení obsahu webu a extrakci textu odstavců. Nyní musíme určit, kdy tuto funkci zavolat.

4. Zpracujte zprávy asistenta

Dále je potřeba zpracovat odpověď z OpenAI API a zkontrolovat, zda obsahuje volání funkcí. Pokud je volání funkce přítomno, měli byste ve svém Workeru spustit odpovídající funkci. Mějte na paměti, že asistent může požadovat i více volání funkcí najednou.

Upravte metodu fetch v rámci export default blok následovně:

// ... your previous code ...

if (assistantMessage.tool_calls) {
	for (const toolCall of assistantMessage.tool_calls) {
		if (toolCall.function.name === "read_website_content") {
			const url = JSON.parse(toolCall.function.arguments).url;
			const websiteContent = await read_website_content(url);
			messages.push({
				role: "tool",
				tool_call_id: toolCall.id,
				name: toolCall.function.name,
				content: websiteContent,
			});
		}
	}

	const secondChatCompletion = await openai.chat.completions.create({
		model: "gpt-4o-mini",
		messages: messages,
	});

	return new Response(secondChatCompletion.choices[0].message.content);
} else {
	// this is your existing return statement
	return new Response(assistantMessage.content);
}

Zkontrolujte, zda zpráva asistenta obsahuje nějaká volání funkcí, a to ověřením tool_calls vlastnost. Protože AI model může standardně volat více funkcí, musíte projít všechna případná volání funkcí a přidat je do messages pole. Každý read_website_content volání vyvolá read_website_content funkci, kterou jste definovali dříve, a jako argument předejte adresu URL vygenerovanou OpenAI. `

secondChatCompletion je potřeba k tomu, aby odpověď vycházela z dat získaných z jednotlivých volání funkcí. Posledním krokem je nyní nasazení vašeho Workeru.

Otestujte svůj kód spuštěním npx wrangler dev a otevřete zadanou adresu URL v prohlížeči. Zobrazí se vám odpověď od OpenAI, která využívá aktuální informace ze získaných webových dat.

5. Nasaďte svou aplikaci Worker

Chcete-li nasadit aplikaci, spusťte npx wrangler deploy příkaz pro nasazení aplikace Worker:

npx wrangler deploy

Náhled svého Workeru nyní najdete na <YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev. Po otevření této adresy URL se zobrazí odpověď od OpenAI. Volitelně můžete přidat message parametr URL pro zápis vlastní zprávy, například https://<YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev/?message=What is the weather in NYC today?.

6. Další kroky

Podívejte se na dokončený kód k tomuto tutoriálu na GitHubu.

Chcete-li pokračovat v práci s Workers a AI, přečtěte si průvodce společným používáním LangChain a Cloudflare Workers nebo jak vytvořit plugin ChatGPT pomocí Cloudflare Workers.

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 ostatními vývojáři a týmem Cloudflare.