← Přehled / ai-search / how-to
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
- Zaregistrujte si účet Cloudflare ↗.
- 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:
- Instance AI Search, která již obsahuje indexovaný obsah. Chcete-li instanci vytvořit a přidat obsah, přejděte na Začínáme.
- OpenAI API key ↗.
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-modelPři nastavení vyberte následující možnosti:
- Pro S čím byste chtěli začít?, vyberte
Hello World example. - Pro Jakou šablonu chcete použít?, vyberte
Worker only. - Pro Jaký jazyk chcete použít?, vyberte
TypeScript. - Pro Chcete používat git pro správu verzí?, vyberte
Yes. - Pro Chcete nasadit svou aplikaci?, vyberte
No(před nasazením provedeme ještě několik změn).
Přejděte do adresáře své aplikace:
cd byo-model2. Nainstalujte AI SDK a poskytovatele OpenAI
Nainstalujte AI SDK ↗ a jeho poskytovatele OpenAI:
npm i ai @ai-sdk/openai3. 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 = trueUložte svůj API klíč OpenAI jako secret:
npx wrangler secret put OPENAI_API_KEYPro místní vývoj přidejte klíč do .dev.vars soubor v kořenovém adresáři projektu:
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.
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 });
},
};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 devPřihlaste se pomocí svého účtu Cloudflare, poté nasaďte svůj Worker, aby byl dostupný na internetu:
npx wrangler login
npx wrangler deploy