INTEGRITY Dokumentace

Vlastní generační model

AI Search ve výchozím nastavení generuje odpovědi pomocí modelu Workers AI. Chcete-li použít model mimo Workers AI, použijte AI Search for search a předejte získaný obsah jinému modelu ke generování. Tento návod používá model OpenAI.

Předpoklady

  1. Zaregistrujte si účet Cloudflare ↗.
  2. Nainstalujte Node.js ↗.

Správce verzí Node.js

Použijte správce verzí Node, jako je Volta ↗ nebo nvm ↗ abyste se vyhnuli problémům s oprávněními a mohli měnit verze Node.js. Wrangler, o kterém se dozvíte dále v této příručce, vyžaduje verzi Node 16.17.0 nebo novější.

Dále potřebujete:

1. Vytvořte projekt Worker

Vytvořte nový projekt Worker pomocí create-cloudflare CLI (C3). C3 ↗ je nástroj příkazové řádky, který vám pomůže nastavit a nasadit nové aplikace na Cloudflare.

Vytvořte nový projekt s názvem byo-model spuštěním:

npm create cloudflare@latest -- byo-model

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

Přejděte do adresáře své aplikace:

cd byo-model

2. Nainstalujte AI SDK a poskytovatele OpenAI

Nainstalujte AI SDK ↗ a jeho poskytovatele OpenAI:

npm i ai @ai-sdk/openai

3. Propojte Worker vazbou a nastavte API klíč

Přidejte vazbu AI Search do svého Konfigurační soubor Wrangler:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "ai_search_namespaces": [
    {
      "binding": "AI_SEARCH",
      "namespace": "default",
      "remote": true
    }
  ]
}
[[ai_search_namespaces]]
binding = "AI_SEARCH"
namespace = "default"
remote = true

Uložte svůj API klíč OpenAI jako secret:

npx wrangler secret put OPENAI_API_KEY

Pro místní vývoj přidejte klíč do .dev.vars soubor v kořenovém adresáři projektu:

.dev.vars
OPENAI_API_KEY="<YOUR_OPENAI_API_KEY>"

4. Přidejte kód

Aktualizujte src/index.ts. Tento Worker prohledá vaši instanci, naformátuje načtené části obsahu a předá je OpenAI k vygenerování odpovědi. Nahraďte my-instance s názvem vaší instance.

src/index.js
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

export default {
	async fetch(request, env) {
		const url = new URL(request.url);
		const userQuery = url.searchParams.get("query") ?? "What is Cloudflare?";

		// Search for documents in AI Search.
		const searchResult = await env.AI_SEARCH.get("my-instance").search({
			messages: [{ role: "user", content: userQuery }],
		});

		if (searchResult.chunks.length === 0) {
			return Response.json({ text: `No data found for query "${userQuery}"` });
		}

		// Join the retrieved chunks into a single string.
		const chunks = searchResult.chunks
			.map((chunk) => `<file name="${chunk.item.key}">${chunk.text}</file>`)
			.join("\n\n");

		// Send the query and retrieved content to OpenAI for the answer.
		const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY });
		const generateResult = await generateText({
			model: openai("gpt-4o-mini"),
			messages: [
				{
					role: "system",
					content:
						"You are a helpful assistant. Answer the user question using the provided files.",
				},
				{ role: "user", content: chunks },
				{ role: "user", content: userQuery },
			],
		});

		return Response.json({ text: generateResult.text });
	},
};
src/index.ts
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

export interface Env {
	AI_SEARCH: AiSearchNamespace;
	OPENAI_API_KEY: string;
}

export default {
	async fetch(request, env): Promise<Response> {
		const url = new URL(request.url);
		const userQuery = url.searchParams.get("query") ?? "What is Cloudflare?";

		// Search for documents in AI Search.
		const searchResult = await env.AI_SEARCH.get("my-instance").search({
			messages: [{ role: "user", content: userQuery }],
		});

		if (searchResult.chunks.length === 0) {
			return Response.json({ text: `No data found for query "${userQuery}"` });
		}

		// Join the retrieved chunks into a single string.
		const chunks = searchResult.chunks
			.map((chunk) => `<file name="${chunk.item.key}">${chunk.text}</file>`)
			.join("\n\n");

		// Send the query and retrieved content to OpenAI for the answer.
		const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY });
		const generateResult = await generateText({
			model: openai("gpt-4o-mini"),
			messages: [
				{
					role: "system",
					content:
						"You are a helpful assistant. Answer the user question using the provided files.",
				},
				{ role: "user", content: chunks },
				{ role: "user", content: userQuery },
			],
		});

		return Response.json({ text: generateResult.text });
	},
} satisfies ExportedHandler<Env>;

5. Spusťte a nasaďte

Spusťte místní vývojový server a poté ho dotazujte na /?query=your+search+terms:

npx wrangler dev

Přihlaste se pomocí svého účtu Cloudflare, poté nasaďte svůj Worker, aby byl dostupný na internetu:

npx wrangler login
npx wrangler deploy

Další kroky

Modely

Používejte modely třetích stran nativně prostřednictvím AI Gateway.

Vazba Workers pro Search

Úplná referenční dokumentace k vyhledávání a chatování z Workeru.