このガイドでは、Workers バインディング の search() メソッドを使い、クエリに一致するファイル名を返す検索エンジンを作ります。REST API に置き換えることもできます。
このパターンでよい結果を得るには、次を推奨します。
- クエリの書き換えを無効にし、元の利用者クエリを直接照合します。
- AI Search インスタンスのチャンクサイズを小さくします(通常は 256 トークンで十分です)。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
インデックス済みコンテンツを含む AI Search インスタンスも必要です。作成とコンテンツ追加は 始める を参照してください。
create-cloudflare CLI(C3)で新しい Worker プロジェクトを作成します。C3 ↗ は、Cloudflare へ新しいアプリケーションをセットアップしてデプロイするためのコマンドラインツールです。
次を実行して、search-engine というプロジェクトを作成します。
npm create cloudflare@latest -- search-engineyarn create cloudflare search-enginepnpm 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-engineWrangler 設定ファイル に次を追加します。
{
"$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 namespace が env.AI_SEARCH にバインドされます。remote オプションにより、wrangler dev はデプロイ済みインスタンスへリクエストをプロキシします。AI Search はローカルでは動きません。
src/index.ts を更新します。この Worker は URL からクエリを読み取り、インスタンスを検索し、一致した各チャンクのファイル名を返します。my-instance は自分のインスタンス名に置き換えます。
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),
});
},
};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>;ローカルの開発サーバーを起動し、/?query=your+search+terms でクエリします。
npx wrangler devCloudflare アカウントでログインし、Worker をデプロイしてインターネットからアクセスできるようにします。
npx wrangler login
npx wrangler deploy