Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Workers バインディング

最終更新 Markdown で表示Agent セットアップ

このガイドでは、Workers Binding を使い、Cloudflare Worker から AI Search インスタンスを作成してクエリする方法を説明します。Workers Binding は Worker 内で動くランタイム API で、API トークンを管理せずに AI Search を呼び出せます。

  1. Cloudflare アカウント に登録します。
  2. Node.js をインストールします。

Node.js のバージョンマネージャー

権限の問題を避け、Node.js のバージョンを切り替えられるよう、Voltanvm などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。

1. Worker プロジェクトを作成する

create-cloudflare CLI(C3)で、新しい Worker プロジェクトを作成します。C3 は、Cloudflare 向けの新しいアプリケーションのセットアップとデプロイを助けるコマンドラインツールです。

次のコマンドを実行し、ai-search-tutorial という名前の新しいプロジェクトを作成します。

npm 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-tutorial

2. Worker を AI Search に接続する

Worker と 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 バインディングのリファレンス を参照してください。

3. Worker から AI Search を作成してクエリする

ai-search-tutorial ディレクトリの src/index.ts を、次のコードで更新します。2 つのルートを公開します。/setupmy-instance というインスタンスを作成してサンプルドキュメントをインデックスし、デフォルトルートはそのインスタンスをクエリします。

src/index.jsjs
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);
	},
};
src/index.tsts
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>;

4. ローカルで開発する

ローカル開発サーバーを起動します。

npx wrangler dev

Wrangler が URL(通常は localhost:8787)を表示します。一度 /setup を開いてインスタンスを作成し、サンプルドキュメントをインデックスしてから、/?q=your+search+terms でクエリします。

5. Worker をデプロイする

Cloudflare アカウントでログインします。

npx wrangler login

Worker をデプロイし、インターネットからアクセスできるようにします。

npx wrangler deploy
https://ai-search-tutorial.<YOUR_SUBDOMAIN>.workers.dev

次のステップ

役に立ちましたか?