Skip to content

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

シンプルな検索エンジンを作る

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

このガイドでは、Workers バインディングsearch() メソッドを使い、クエリに一致するファイル名を返す検索エンジンを作ります。REST API に置き換えることもできます。

このパターンでよい結果を得るには、次を推奨します。

  • クエリの書き換えを無効にし、元の利用者クエリを直接照合します。
  • AI Search インスタンスのチャンクサイズを小さくします(通常は 256 トークンで十分です)。

前提条件

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

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

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

インデックス済みコンテンツを含む AI Search インスタンスも必要です。作成とコンテンツ追加は 始める を参照してください。

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

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

次を実行して、search-engine というプロジェクトを作成します。

npm create cloudflare@latest -- search-engine

セットアップでは、次のオプションを選びます。

  • 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 search-engine

2. Worker を AI Search にバインドする

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 namespaceenv.AI_SEARCH にバインドされます。remote オプションにより、wrangler dev はデプロイ済みインスタンスへリクエストをプロキシします。AI Search はローカルでは動きません。

3. 検索コードを追加する

src/index.ts を更新します。この Worker は URL からクエリを読み取り、インスタンスを検索し、一致した各チャンクのファイル名を返します。my-instance は自分のインスタンス名に置き換えます。

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

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

		return Response.json({
			files: searchResult.chunks.map((chunk) => chunk.item.key),
		});
	},
};
src/index.tsts
export interface Env {
	AI_SEARCH: AiSearchNamespace;
}

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

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

		return Response.json({
			files: searchResult.chunks.map((chunk) => chunk.item.key),
		});
	},
} satisfies ExportedHandler<Env>;

4. 実行とデプロイ

ローカルの開発サーバーを起動し、/?query=your+search+terms でクエリします。

npx wrangler dev

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

npx wrangler login
npx wrangler deploy

次のステップ

役に立ちましたか?