このガイドでは、Workers Binding を使い、Cloudflare Worker から AI Search インスタンスを作成してクエリする方法を説明します。Workers Binding は Worker 内で動くランタイム API で、API トークンを管理せずに AI Search を呼び出せます。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
create-cloudflare CLI(C3)で、新しい Worker プロジェクトを作成します。C3 ↗ は、Cloudflare 向けの新しいアプリケーションのセットアップとデプロイを助けるコマンドラインツールです。
次のコマンドを実行し、ai-search-tutorial という名前の新しいプロジェクトを作成します。
npm create cloudflare@latest -- ai-search-tutorialyarn create cloudflare ai-search-tutorialpnpm create cloudflare@latest ai-search-tutorialセットアップでは、次のオプションを選びます。
- What would you like to start with? では、
Hello World exampleを選びます。 - Which template would you like to use? では、
Worker onlyを選びます。 - Which language do you want to use? では、
TypeScriptを選びます。 - Do you want to use git for version control? では、
Yesを選びます。 - Do you want to deploy your application? では、
Noを選びます(デプロイ前にいくつか変更します)。
アプリケーションのディレクトリへ移動します。
cd ai-search-tutorialWorker と AI Search インスタンスの間にバインディングを作成します。Bindings を使うと、Worker が Cloudflare Developer Platform 上のリソースとやり取りできます。
次の内容を 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これで default 名前空間が env.AI_SEARCH にバインドされます。名前空間を指定せずに作成したインスタンスは、default 名前空間に属します。remote オプションを付けると、wrangler dev がデプロイ済みインスタンスへリクエストをプロキシします。AI Search はローカルでは動作しないためです。バインディングの全オプションは、Workers バインディングのリファレンス を参照してください。
ai-search-tutorial ディレクトリの src/index.ts を、次のコードで更新します。2 つのルートを公開します。/setup は my-instance というインスタンスを作成してサンプルドキュメントをインデックスし、デフォルトルートはそのインスタンスをクエリします。
export default {
async fetch(request, env) {
const url = new URL(request.url);
// Visit /setup once to create an instance and index a sample document.
if (url.pathname === "/setup") {
const instance = await env.AI_SEARCH.create({ id: "my-instance" });
const item = await instance.items.uploadAndPoll(
"getting-started.md",
"AI Search indexes uploaded content for retrieval.",
);
return Response.json({ created: "my-instance", status: item.status });
}
// Query the instance.
const query = url.searchParams.get("q") ?? "What does AI Search do?";
const results = await env.AI_SEARCH.get("my-instance").search({
messages: [{ role: "user", content: query }],
ai_search_options: {
retrieval: { max_num_results: 3 },
},
});
return Response.json(results.chunks);
},
};export interface Env {
AI_SEARCH: AiSearchNamespace;
}
export default {
async fetch(request, env): Promise<Response> {
const url = new URL(request.url);
// Visit /setup once to create an instance and index a sample document.
if (url.pathname === "/setup") {
const instance = await env.AI_SEARCH.create({ id: "my-instance" });
const item = await instance.items.uploadAndPoll(
"getting-started.md",
"AI Search indexes uploaded content for retrieval.",
);
return Response.json({ created: "my-instance", status: item.status });
}
// Query the instance.
const query = url.searchParams.get("q") ?? "What does AI Search do?";
const results = await env.AI_SEARCH.get("my-instance").search({
messages: [{ role: "user", content: query }],
ai_search_options: {
retrieval: { max_num_results: 3 },
},
});
return Response.json(results.chunks);
},
} satisfies ExportedHandler<Env>;ローカル開発サーバーを起動します。
npx wrangler devWrangler が URL(通常は localhost:8787)を表示します。一度 /setup を開いてインスタンスを作成し、サンプルドキュメントをインデックスしてから、/?q=your+search+terms でクエリします。
Cloudflare アカウントでログインします。
npx wrangler loginWorker をデプロイし、インターネットからアクセスできるようにします。
npx wrangler deployhttps://ai-search-tutorial.<YOUR_SUBDOMAIN>.workers.dev