Workers は、新しいアプリケーションを作ったり、既存のものを拡張したりできるサーバーレス実行環境です。Workers バインディング を使い、Cloudflare Worker から AI Search インスタンスを検索し、チャットします。
AI Search を Workers で使うには、AI Search バインディングを作成する必要があります。バインディングは Wrangler 設定 を更新して作成します。AI Search には次の 2 種類のバインディングがあります。
- 名前空間バインディング:
ai_search_namespaces - インスタンスバインディング:
ai_search
名前空間 内のすべてのインスタンスにアクセスします。実行時にインスタンスの取得、作成、一覧、削除ができます。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"compatibility_date": "2026-03-27",
"ai_search_namespaces": [
{
"binding": "AI_SEARCH",
"namespace": "my-namespace"
}
]
}compatibility_date = "2026-03-27"
[[ai_search_namespaces]]
binding = "AI_SEARCH"
namespace = "my-namespace"| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
binding |
string | はい | env で使える変数名です。たとえば "AI_SEARCH" とすると、env.AI_SEARCH でアクセスできます。 |
namespace |
string | はい | バインド先の 名前空間 です。アカウントごとに default 名前空間が自動作成されます。名前空間が存在しない場合、Wrangler はデプロイ時に作成します。 |
remote |
boolean | いいえ | ローカル開発で wrangler dev を使う場合は true にします。 |
default 名前空間内の 1 つのインスタンスへ直接バインドします。デプロイ時に使うインスタンスが決まっている場合に使います。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"compatibility_date": "2026-03-27",
"ai_search": [
{
"binding": "MY_SEARCH",
"instance_name": "my-instance"
}
]
}compatibility_date = "2026-03-27"
[[ai_search]]
binding = "MY_SEARCH"
instance_name = "my-instance"| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
binding |
string | はい | env で使える変数名です。たとえば "MY_SEARCH" とすると、env.MY_SEARCH でアクセスできます。 |
instance_name |
string | はい | AI Search インスタンスの名前です。デプロイ時にデフォルト名前空間に存在する必要があります。 |
remote |
boolean | いいえ | ローカル開発で wrangler dev を使う場合は true にします。 |
次のメソッドは、ai_search_namespaces バインディングと ai_search バインディングの両方で使えます。名前空間バインディングでは、get() が返すハンドルでメソッドを呼びます。インスタンスバインディングでは、バインディングに直接メソッドを呼びます(例: env.MY_SEARCH.search())。
以下の例は、名前空間バインディングを使います。
インデックス済みデータソースから、関連するコンテンツチャンクを検索します。ソース参照付きのスコア付きチャンクを返します。
const instance = env.AI_SEARCH.get("my-instance");
const results = await instance.search({
messages: [{ role: "user", content: "What is Cloudflare?" }],
});messages array 必須
会話を表すメッセージオブジェクトの配列です。各メッセージには role と content フィールドがあります。
-
rolestring必須- メッセージ送信者のロールです。有効な値は
system、developer、user、assistant、toolです。
- メッセージ送信者のロールです。有効な値は
-
contentstring必須- メッセージの内容です。
query string 任意
単純なテキストクエリ文字列です。messages の代替です。query または messages のどちらか一方を指定し、両方は指定しないでください。
ai_search_options object 任意
検索操作の設定です。
-
retrievalobject任意-
retrieval_typestring任意- 実行する取得の種類です。有効な値は
vector、keyword、hybridです。デフォルトはhybridです。
- 実行する取得の種類です。有効な値は
-
match_thresholdnumber任意- 結果を一致とみなすために必要な最小マッチスコアです。
0から1の間である必要があります。デフォルトは0.4です。
- 結果を一致とみなすために必要な最小マッチスコアです。
-
max_num_resultsinteger任意- 返す結果の最大件数です。
1から50の間である必要があります。デフォルトは10です。
- 返す結果の最大件数です。
-
filtersobject任意- メタデータに基づいて検索結果を絞り込みます。比較フィルター(
eq、ne、gt、gte、lt、lte)と複合フィルター(and、or)に対応します。詳細は メタデータフィルタリング を参照してください。
- メタデータに基づいて検索結果を絞り込みます。比較フィルター(
-
context_expansioninteger任意- 追加の文脈として含める周囲のチャンク数です。
0から3の間である必要があります。デフォルトは0です。
- 追加の文脈として含める周囲のチャンク数です。
-
fusion_methodstring任意- ハイブリッド取得で、ベクトルスコアとキーワードスコアを結合する方法です。有効な値は
rrf(Reciprocal Rank Fusion)、max(最大スコアを採用)です。デフォルトはインスタンスレベルの設定です。
- ハイブリッド取得で、ベクトルスコアとキーワードスコアを結合する方法です。有効な値は
-
keyword_match_modestring任意- キーワード(BM25)照合で候補ドキュメントを選ぶ方法です。
andはすべての語の一致が必要です。orはいずれかの語の一致で足ります。デフォルトはandです。
- キーワード(BM25)照合で候補ドキュメントを選ぶ方法です。
-
boost_byarray任意- メタデータフィールドで結果をブーストします。最大 3 件です。各項目には次があります。
fieldstring必須 - ブーストに使うメタデータフィールド名です(例:timestamp)。最大 64 文字です。directionstring任意 - ブーストの方向です。有効な値はasc、desc、exists、not_existsです。数値フィールドのデフォルトはasc、テキストフィールドのデフォルトはexistsです。
- メタデータフィールドで結果をブーストします。最大 3 件です。各項目には次があります。
-
metadata_onlyboolean任意- 各チャンクについて、テキスト本文なしでメタデータだけを返します。
-
return_on_failureboolean任意- 一部の処理ステップが失敗した場合に部分結果を返すかどうかです。デフォルトは
trueです。
- 一部の処理ステップが失敗した場合に部分結果を返すかどうかです。デフォルトは
-
-
query_rewriteobject任意-
enabledboolean任意- クエリを書き換えて取得精度を上げます。デフォルトは
falseです。
- クエリを書き換えて取得精度を上げます。デフォルトは
-
modelstring任意- クエリ書き換えに使うモデルです。
-
rewrite_promptstring任意- クエリ書き換えを案内するカスタムプロンプトです。
-
-
rerankingobject任意-
enabledboolean任意- リランキングモデルを使い、取得結果を意味的な関連度で並べ替えます。デフォルトは
falseです。
- リランキングモデルを使い、取得結果を意味的な関連度で並べ替えます。デフォルトは
-
modelstring任意- 使うリランキングモデルです。有効な値は
@cf/baai/bge-reranker-baseです。
- 使うリランキングモデルです。有効な値は
-
match_thresholdnumber任意- リランキング後の結果の最小スコアです。
0から1の間である必要があります。デフォルトは0.4です。
- リランキング後の結果の最小スコアです。
-
-
cacheobject任意-
enabledboolean任意- このリクエストについて、インスタンスレベルのキャッシュ設定を上書きします。
-
cache_thresholdstring任意- キャッシュヒットの類似度しきい値です。有効な値は
super_strict_match、close_enough、flexible_friend、anything_goesです。
- キャッシュヒットの類似度しきい値です。有効な値は
-
レスポンスには次のフィールドが含まれます。
| Field | Type | Description |
|---|---|---|
search_query |
string | 検索に使ったクエリです。クエリ書き換えが有効な場合は書き換え後の値になることがあります。 |
chunks |
array | 一致したコンテンツチャンクの配列です。 |
chunks[].id |
string | チャンクの一意の識別子です。 |
chunks[].type |
string | コンテンツの種類です。通常は text です。 |
chunks[].score |
number | 0 から 1 の総合一致スコアです。 |
chunks[].text |
string | チャンクのテキスト内容です。 |
chunks[].item |
object | 出典アイテムに関する情報です。 |
chunks[].item.key |
string | 出典ドキュメントのファイルパスまたは URL です。 |
chunks[].item.timestamp |
number | アイテムが最後に変更された Unix タイムスタンプです。 |
chunks[].item.metadata |
object | 出典アイテムに関連付けたカスタムメタデータです。 |
chunks[].scoring_details |
object | チャンクのスコア内訳です。 |
chunks[].scoring_details.vector_score |
number | 意味的類似度スコア(0 から 1)です。 |
chunks[].scoring_details.keyword_score |
number | キーワード(BM25)照合スコアです。ハイブリッドまたはキーワード取得を使うときにあります。 |
chunks[].scoring_details.keyword_rank |
number | キーワードの順位です。 |
chunks[].scoring_details.vector_rank |
number | ベクトルの順位です。 |
chunks[].scoring_details.reranking_score |
number | リランキングスコア(0 から 1)です。リランキングが有効なときにあります。 |
chunks[].scoring_details.fusion_method |
string | 使った融合方法(rrf または max)です。ハイブリッド取得を使うときにあります。 |
AI Search インスタンスをコンテキストとしてチャット補完を生成します。このメソッドは関連コンテンツを取得し、それを使って応答を生成します。
const instance = env.AI_SEARCH.get("my-instance");
const response = await instance.chatCompletions({
messages: [
{ role: "system", content: "You are a helpful documentation assistant." },
{ role: "user", content: "What is Cloudflare?" },
],
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
ai_search_options: {
retrieval: {
max_num_results: 5,
},
query_rewrite: {
enabled: true,
},
},
});stream: true を設定すると、生成に合わせて Server-Sent Events(SSE)として応答を受け取れます。
const instance = env.AI_SEARCH.get("my-instance");
const stream = await instance.chatCompletions({
messages: [{ role: "user", content: "What is Cloudflare?" }],
stream: true,
});
return new Response(stream, {
headers: {
"content-type": "text/event-stream",
"cache-control": "no-cache",
},
});stream を有効にすると、メソッドは SSE イベントの ReadableStream を返します。各イベントには、増分テキスト用の choices[0].delta.content を含む JSON オブジェクトがあります。ストリームは data: [DONE] イベントで終わります。
messages array 必須
会話を表すメッセージオブジェクトの配列です。各メッセージには role と content フィールドがあります。
-
rolestring必須- メッセージ送信者のロールです。有効な値は
system、developer、user、assistant、toolです。
- メッセージ送信者のロールです。有効な値は
-
contentstring必須- メッセージの内容です。
model string 任意
応答の生成に使うテキスト生成モデルです。デフォルトは、AI Search インスタンス設定で構成した生成モデルです。対応モデルの一覧は 対応モデル を参照してください。
stream boolean 任意
生成された結果をストリームで返します。有効にすると、読み取り可能なストリーム付きの Response オブジェクトを返します。デフォルトは false です。
ai_search_options object 任意
検索と生成の設定オプションです。
-
retrievalobject任意-
retrieval_typestring任意- 実行する取得の種類です。有効な値は
vector、keyword、hybridです。デフォルトはhybridです。
- 実行する取得の種類です。有効な値は
-
match_thresholdnumber任意- 結果を一致とみなすための最小マッチスコアです。
0から1のあいだである必要があります。デフォルトは0.4です。
- 結果を一致とみなすための最小マッチスコアです。
-
max_num_resultsinteger任意- 返す結果の最大数です。
1から50のあいだである必要があります。デフォルトは10です。
- 返す結果の最大数です。
-
filtersobject任意- メタデータに基づいて検索結果を絞り込みます。比較フィルター(
eq、ne、gt、gte、lt、lte)と複合フィルター(and、or)に対応します。詳細は メタデータフィルタリング を参照してください。
- メタデータに基づいて検索結果を絞り込みます。比較フィルター(
-
context_expansioninteger任意- 追加のコンテキストとして含める周囲のチャンク数です。
0から3のあいだである必要があります。デフォルトは0です。
- 追加のコンテキストとして含める周囲のチャンク数です。
-
fusion_methodstring任意- ハイブリッド取得で、ベクトルスコアとキーワードスコアをどう結合するかを制御します。有効な値は
rrf(Reciprocal Rank Fusion)、max(最大スコアを採用)です。デフォルトはインスタンスレベルの設定です。
- ハイブリッド取得で、ベクトルスコアとキーワードスコアをどう結合するかを制御します。有効な値は
-
keyword_match_modestring任意- キーワード(BM25)マッチングが候補ドキュメントを選ぶ方法を制御します。
andはすべての語句の一致が必要です。orはいずれかの語句の一致で足ります。デフォルトはandです。
- キーワード(BM25)マッチングが候補ドキュメントを選ぶ方法を制御します。
-
boost_byarray任意- メタデータフィールドで結果をブーストします。最大 3 件です。各項目には次があります。
fieldstring必須 - ブーストに使うメタデータフィールド名です(例:timestamp)。最大 64 文字です。directionstring任意 - ブーストの方向です。有効な値はasc、desc、exists、not_existsです。数値フィールドのデフォルトはasc、テキストフィールドのデフォルトはexistsです。
- メタデータフィールドで結果をブーストします。最大 3 件です。各項目には次があります。
-
metadata_onlyboolean任意- 各チャンクについて、テキスト本文なしでメタデータだけを返します。
-
return_on_failureboolean任意- 一部の処理ステップが失敗した場合に、部分的な結果を返すかどうかです。デフォルトは
trueです。
- 一部の処理ステップが失敗した場合に、部分的な結果を返すかどうかです。デフォルトは
-
-
query_rewriteobject任意-
enabledboolean任意- 取得精度を上げるためにクエリを書き換えます。デフォルトは
falseです。
- 取得精度を上げるためにクエリを書き換えます。デフォルトは
-
modelstring任意- クエリ書き換えに使うモデルです。
-
rewrite_promptstring任意- クエリ書き換えを案内するカスタムプロンプトです。
-
-
rerankingobject任意-
enabledboolean任意- リランキングモデルを使い、意味的な関連度に基づいて取得結果を並べ替えます。デフォルトは
falseです。
- リランキングモデルを使い、意味的な関連度に基づいて取得結果を並べ替えます。デフォルトは
-
modelstring任意- 使うリランキングモデルです。有効な値は
@cf/baai/bge-reranker-baseです。
- 使うリランキングモデルです。有効な値は
-
match_thresholdnumber任意- リランキング後の結果の最小スコアです。
0から1のあいだである必要があります。デフォルトは0.4です。
- リランキング後の結果の最小スコアです。
-
-
cacheobject任意-
enabledboolean任意- このリクエストについて、インスタンスレベルのキャッシュ設定を上書きします。
-
cache_thresholdstring任意- キャッシュヒットの類似度しきい値です。有効な値は
super_strict_match、close_enough、flexible_friend、anything_goesです。
- キャッシュヒットの類似度しきい値です。有効な値は
-
| フィールド | 型 | 説明 |
|---|---|---|
id |
string | 補完の一意な識別子です。 |
object |
string | 常に chat.completion です。 |
created |
number | 補完が作成された Unix タイムスタンプです。 |
model |
string | 応答の生成に使ったモデルです。 |
choices |
array | 補完の選択肢の配列です。 |
choices[].message.role |
string | 常に assistant です。 |
choices[].message.content |
string | 生成された応答テキストです。 |
choices[].finish_reason |
string | モデルが生成を止めた理由です。通常は stop です。 |
usage.prompt_tokens |
number | プロンプトのトークン数です。 |
usage.completion_tokens |
number | 生成された応答のトークン数です。 |
usage.total_tokens |
number | 使用したトークンの合計です。 |
chunks |
array | コンテキストとして使ったソースチャンクです。検索レスポンス と同じ形式です。 |
stream: true のとき、メソッドは Server-Sent Events の ReadableStream を返します。取得したチャンクは最初に chunks イベントとして送られ、そのあとにストリームされた応答が続きます。
event: chunks
data: [{"id":"chunk-001","type":"text","score":0.85,"text":"...","item":{"key":"about-cloudflare.md","timestamp":1775925540000},"scoring_details":{"vector_score":0.85}}]
data: {"id":"id-1776072781845","created":1776072781,"model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" document"}}]}
data: {"id":"id-1776072781845","created":1776072781,"model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" you provided doesn"}}]}
data: {"id":"id-1776072781845","created":1776072781,"model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"'t contain"}}]}
data: {"id":"id-1776072781845","created":1776072781,"model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" information"}}]}
data: [DONE]次のメソッドは、ai_search_namespaces バインディングを使うときだけ利用できます。名前空間ハンドル(env.AI_SEARCH)を直接使い、1 回の呼び出しで複数インスタンスを横断して検索およびチャットします。
ai_search_options に instance_ids を渡し、クエリするインスタンスを指定します。結果はマージされて順位付けされます。各チャンクには、どのインスタンス由来かを示す instance_id フィールドが含まれます。
const results = await env.AI_SEARCH.search({
messages: [{ role: "user", content: "What is Cloudflare?" }],
ai_search_options: {
instance_ids: ["product-docs", "customer-abc123"],
},
});インスタンスレベルの検索 と同じです。次の必須フィールドが 1 つ追加されます。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
ai_search_options |
object | はい | 名前空間レベルの検索では必須です。 |
ai_search_options.instance_ids |
array | はい | 横断検索するインスタンス ID です。最小 1、最大 10 です。 |
インスタンスレベルの検索 と同じです。次のフィールドが追加されます。
| フィールド | 型 | 説明 |
|---|---|---|
chunks[].instance_id |
string | このチャンクの元になったインスタンスです。 |
errors |
array | いずれかのインスタンスが失敗した場合の、インスタンスごとのエラーです。各オブジェクトは instance_id と message を持ちます。 |
複数インスタンスから取得したコンテキストを使い、チャット補完を生成します。
const response = await env.AI_SEARCH.chatCompletions({
messages: [{ role: "user", content: "What is Cloudflare?" }],
ai_search_options: {
instance_ids: ["product-docs", "customer-abc123"],
},
});stream: true でストリーミングにも対応します。
インスタンスレベルのチャット補完 と同じです。次の必須フィールドが 1 つ追加されます。
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
ai_search_options |
object | はい | 名前空間レベルのチャット補完では必須です。 |
ai_search_options.instance_ids |
array | はい | 横断検索するインスタンス ID です。最小 1、最大 10 です。 |
インスタンスレベルのチャット補完 と同じです。各チャンクに次のフィールドが追加されます。
| フィールド | 型 | 説明 |
|---|---|---|
chunks[].instance_id |
string | このチャンクの元になったインスタンスです。 |
errors |
array | いずれかのインスタンスが失敗した場合の、インスタンスごとのエラーです。各オブジェクトは instance_id と message を持ちます。 |
ローカル開発は、デプロイ済みの AI Search インスタンスへリクエストをプロキシすることで対応しています。wrangler dev でローカル開発するには、バインディング設定に remote: true を追加します。
// wrangler.jsonc
{
"ai_search": [
{
"binding": "MY_SEARCH",
"instance_name": "my-instance",
"remote": true,
},
],
}