Workers 提供无服务器执行环境,使你能够创建新应用或增强现有应用。使用 Workers 绑定(binding) 从 Cloudflare Worker 创建、列出、更新与删除 AI Search 实例。你还可以检查实例配置并监控索引进度。
要在 Workers 中使用 AI Search,必须创建 AI Search 绑定(binding)。通过更新 Wrangler 配置 创建绑定。AI Search 提供两种绑定类型:
- 命名空间绑定:
ai_search_namespaces - 实例绑定:
ai_search
访问命名空间内的所有实例。你可以在运行时 get、create、list 和 delete 实例。
{
"$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 命名空间中的单个实例。当你在部署时已知需要哪个实例时使用。
{
"$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 实例的名称。部署时必须在 default 命名空间中存在。 |
remote |
boolean | 否 | 使用 wrangler dev 进行本地开发时设置为 true。 |
以下方法仅在使用 ai_search_namespaces 绑定时可用。命名空间句柄(env.AI_SEARCH)暴露用于处理 命名空间 内实例的方法。
返回特定实例的句柄。此调用是同步的,不会发起网络请求。实例会在你调用 search() 或 info() 等方法时惰性解析。
const instance = env.AI_SEARCH.get("my-instance");
const results = await instance.search({
messages: [{ role: "user", content: "What is Cloudflare?" }],
});| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | 是 | 要获取句柄的实例名称。 |
返回命名空间内的所有实例。
const { result, result_info } = await env.AI_SEARCH.list();
for (const instance of result) {
console.log(`${instance.id} (${instance.type}) - ${instance.status}`);
}
// result_info.total_count contains the total number of instances| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
page |
number | 否 | 要返回的页码。默认为 1。 |
per_page |
number | 否 | 每页实例数。默认为 20。最大 100。 |
search |
string | 否 | 按 ID 搜索实例。 |
order_by |
string | 否 | 排序列。有效值:created_at。默认为 created_at。 |
order_by_direction |
string | 否 | 排序方向。有效值:asc、desc。默认为 desc。 |
| 字段 | 类型 | 说明 |
|---|---|---|
result |
array | 实例对象数组。 |
result[].id |
string | 实例标识符。 |
result[].type |
string | 数据源类型(r2、web-crawler,或空实例为 null)。 |
result[].source |
string | 数据源位置。 |
result[].status |
string | 实例状态(active、waiting、indexing)。 |
result[].enable |
boolean | 实例是否已启用。 |
result[].namespace |
string | 实例所属的命名空间。 |
result[].created_at |
string | 实例创建时间的 ISO 8601 时间戳。 |
result[].modified_at |
string | 上次修改的 ISO 8601 时间戳。 |
result_info |
object | 分页元数据。 |
result_info.total_count |
number | 命名空间中的实例总数。 |
创建新实例并返回其句柄。你可以创建由数据源支持的实例,或创建空实例以配合 Items API 使用。
创建用于文件上传的空实例:
AI Search 实例自带 内置存储,你可以直接上传文档。
const instance = await env.AI_SEARCH.create({
id: "knowledge-base",
});
// Upload documents using the Items API
await instance.items.upload("guide.pdf", pdfArrayBuffer);创建 web-crawler 实例:
自动抓取并索引你拥有的网站。更多配置选项请参阅 网站数据源。
const instance = await env.AI_SEARCH.create({
id: "my-docs",
type: "web-crawler",
source: "developers.cloudflare.com",
});创建由 R2 支持的实例:
索引存储在 R2 存储桶中的文档。更多配置选项请参阅 R2 数据源。
const instance = await env.AI_SEARCH.create({
id: "internal-docs",
type: "r2",
source: "my-docs-bucket",
});id stringrequired
AI Search 实例的唯一标识符。长度必须为 1–64 个字符,并匹配模式 ^[a-z0-9_]+(?:-[a-z0-9_]+)*$。
type stringoptional
数据源类型。有效值:r2、web-crawler。使用数据源创建实例时为必填。若创建供 Items API 使用的空实例,则省略此字段。
source stringoptional
数据源位置。对于 r2 类型,这是 R2 存储桶名称。对于 web-crawler 类型,这是网站域名。指定 type 时为必填。
source_params objectoptional
数据源的其他参数。
prefixstringoptional- 对于 R2 源,将索引限制为具有此键前缀的对象。
r2_jurisdictionstringoptional- R2 存储桶的管辖区域(jurisdiction),例如
eu。
- R2 存储桶的管辖区域(jurisdiction),例如
include_itemsarrayoptional- 要包含在索引中的路径的 glob 模式。例如:
["/blog/**", "/docs/**/*.html"]。
- 要包含在索引中的路径的 glob 模式。例如:
exclude_itemsarrayoptional- 要从索引中排除的路径的 glob 模式。例如:
["/admin/**", "/private/**"]。
- 要从索引中排除的路径的 glob 模式。例如:
web_crawlerobjectoptional-
Web crawler 源的配置。
parse_typestringoptional- 解析方法。有效值:
sitemap。
- 解析方法。有效值:
parse_optionsobjectoptionalinclude_headersobjectoptional- 爬取时要包含的自定义 HTTP 标头。
include_imagesbooleanoptional- 是否在索引中包含图像。
specific_sitemapsarrayoptional- 要爬取的特定 sitemap URL。例如:
["https://example.com/sitemap.xml"]。
- 要爬取的特定 sitemap URL。例如:
use_browser_renderingbooleanoptional- 使用 Browser Run(原 Browser Rendering)爬取由 JavaScript 渲染的页面。
store_optionsobjectoptionalstorage_typestringoptional- 存储类型。有效值:
r2。
- 存储类型。有效值:
storage_idstringoptional- 存储桶 ID。
r2_jurisdictionstringoptional- 存储桶的管辖区域(jurisdiction)。
-
index_method objectoptional
配置实例启用哪些索引方法。决定是提供向量(语义)搜索、关键词搜索,还是两者都提供。至少有一个必须为 true。
vectorbooleanoptional- 启用基于向量的语义搜索。默认为
true。
- 启用基于向量的语义搜索。默认为
keywordbooleanoptional- 启用基于关键词的搜索。默认为
false。
- 启用基于关键词的搜索。默认为
将两者都设为 true 可进行混合搜索。
fusion_method stringoptional
控制在使用混合搜索时如何合并向量分数与关键词分数。有效值:rrf(Reciprocal Rank Fusion)、max(取最大分数)。默认为 rrf。
indexing_options objectoptional
内容索引方式的配置。
keyword_tokenizerstringoptional- 用于关键词搜索索引的分词器。有效值:
porter(基于词干提取)、trigram(字符 n-gram)。默认为porter。
- 用于关键词搜索索引的分词器。有效值:
retrieval_options objectoptional
实例的默认检索配置。这些默认值可在每次请求时使用 ai_search_options 覆盖。
keyword_match_modestringoptional- 控制关键词(BM25)匹配如何选择候选文档。
and要求所有词项匹配。or要求任意词项匹配。默认为and。
- 控制关键词(BM25)匹配如何选择候选文档。
boost_byarrayoptional- 应用于所有搜索查询的默认提升字段。最多 3 项。每一项包含:
fieldstringrequired - 用于提升的元数据字段名称。最多 64 个字符。directionstringoptional - 提升方向。有效值:asc、desc、exists、not_exists。
- 应用于所有搜索查询的默认提升字段。最多 3 项。每一项包含:
sync_interval numberoptional
自动数据源同步之间的间隔秒数。有效值:3600、7200、14400、21600、43200、86400。默认为 21600(6 小时)。
token_id stringoptional
用于此实例的服务 API token 的 UUID。仅当你从未创建过 AI Search 实例时才需要。有关如何创建和注册服务 token,请参阅 API 快速入门指南。
ai_gateway_id stringoptional
用于路由请求以进行日志记录和分析的 AI Gateway ID。
embedding_model stringoptional
用于向量化内容的嵌入模型。
ai_search_model stringoptional
用于生成响应的文本生成模型。
rewrite_query booleanoptional
启用查询改写以提高检索准确度。默认为 false。
rewrite_model stringoptional
用于查询改写的模型。
reranking booleanoptional
启用重排序,按语义相关性对检索结果重新排序。默认为 false。
reranking_model stringoptional
要使用的重排序模型。有效值:@cf/baai/bge-reranker-base。
chunk_size numberoptional
拆分文档时的分块大小。最小值:64。
chunk_overlap numberoptional
分块之间的重叠。最小值:0。
max_num_results numberoptional
默认返回的最大结果数。最小值:1。
score_threshold numberoptional
结果的默认最低分数阈值。最小值:0。
cache booleanoptional
启用响应缓存。默认为 true。
cache_threshold stringoptional
缓存匹配阈值。有效值:super_strict_match、close_enough、flexible_friend、anything_goes。默认为 close_enough。
cache_ttl numberoptional
缓存条目的 TTL(秒)。有效值为 600、1800、3600、7200、21600、43200、86400、172800、259200 和 518400。默认为 172800。
custom_metadata arrayoptional
要从文档中提取并索引的自定义元数据字段。
field_namestringrequired- 元数据字段的名称。
data_typestringrequired- 字段的数据类型。有效值:
text、number、boolean、datetime。
- 字段的数据类型。有效值:
enable booleanoptional
实例是否已启用。默认为 true。
返回可立即用于调用 search()、info()、stats() 与 items.upload() 等方法的 AiSearchInstance 句柄。在句柄上调用 info() 可获取实例配置。
永久删除实例及其所有已索引内容。此操作无法撤销。
await env.AI_SEARCH.delete("old-docs");| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | 是 | 要删除的实例名称。 |
返回 void。如果实例不存在则抛出错误。
以下方法在 ai_search_namespaces 与 ai_search 绑定上均可用。使用命名空间绑定时,在 get() 返回的句柄上调用方法。使用实例绑定时,直接在绑定上调用方法(例如 env.MY_SEARCH.info())。
以下示例使用命名空间绑定。
部分更新实例配置。仅修改你传入的字段。
const updated = await env.AI_SEARCH.get("my-instance").update({
ai_search_model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
reranking: true,
});接受 创建参数 的部分版本。仅更新你包含的字段。
| 字段 | 类型 | 说明 |
|---|---|---|
ai_search_model |
string | 文本生成模型。 |
embedding_model |
string | 嵌入模型。 |
index_method |
object | 索引方法:\{ vector: boolean, keyword: boolean \}。 |
fusion_method |
string | 向量与关键词分数的组合方式(rrf 或 max)。 |
indexing_options |
object | 索引配置,包括 keyword_tokenizer。 |
retrieval_options |
object | 检索配置,包括 keyword_match_mode 与 boost_by。 |
reranking |
boolean | 开启或关闭重排序。 |
reranking_model |
string | 重排序模型。 |
rewrite_query |
boolean | 开启或关闭查询改写。 |
rewrite_model |
string | 查询改写模型。 |
source |
string | 更新数据源位置。 |
cache |
boolean | 开启或关闭响应缓存。 |
chunk_size |
number | 每个分块的 token 大小。 |
chunk_overlap |
number | 分块之间的 token 重叠。 |
score_threshold |
number | 结果的最低分数阈值。 |
max_num_results |
number | 每次查询的最大结果数。 |
custom_metadata |
array | 自定义元数据字段定义。 |
sync_interval |
number | 自动数据源同步之间的秒数。 |
返回更新后的实例配置。形状与 info() 相同。
返回实例的当前配置与元数据。
const info = await env.AI_SEARCH.get("my-instance").info();| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 实例标识符。 |
type |
string | 数据源类型(r2、web-crawler 或 null)。 |
source |
string | 数据源位置。 |
namespace |
string | 实例所属的命名空间。 |
status |
string | 实例状态(active、waiting、indexing)。 |
enable |
boolean | 实例是否已启用。 |
created_at |
string | 实例创建时间的时间戳。 |
modified_at |
string | 上次修改的时间戳。 |
ai_search_model |
string | 文本生成模型。 |
embedding_model |
string | 嵌入模型。 |
reranking |
boolean | 是否启用重排序。 |
reranking_model |
string | 重排序模型。 |
rewrite_query |
boolean | 是否启用查询改写。 |
rewrite_model |
string | 查询改写模型。 |
cache |
boolean | 是否启用响应缓存。 |
cache_threshold |
string | 缓存命中的相似度阈值。 |
index_method |
object | 已启用的索引方法(vector、keyword)。 |
fusion_method |
string | 向量与关键词分数的组合方式(rrf 或 max)。 |
indexing_options |
object | 索引配置,包括 keyword_tokenizer。 |
retrieval_options |
object | 检索配置,包括 keyword_match_mode 与 boost_by。 |
chunk_size |
number | 每个分块的 token 大小。 |
chunk_overlap |
number | 分块之间的 token 重叠。 |
score_threshold |
number | 结果的最低分数阈值。 |
max_num_results |
number | 每次查询的最大结果数。 |
sync_interval |
number | 自动数据源同步之间的秒数。 |
custom_metadata |
array | 自定义元数据字段定义。 |
last_activity |
string | 上次索引活动的时间戳。 |
返回实例的当前索引进度。在创建实例或上传文件后使用此方法轮询完成状态。
const stats = await env.AI_SEARCH.get("my-instance").stats();| 字段 | 类型 | 说明 |
|---|---|---|
queued |
number | 等待处理的条目。 |
running |
number | 当前正在处理的条目。 |
completed |
number | 已成功索引的条目。 |
error |
number | 索引失败的条目。 |
skipped |
number | 索引期间跳过的条目。 |
outdated |
number | 需要重新索引的条目。 |
last_activity |
string | 上次索引活动的 ISO 8601 时间戳。 |
file_embed_errors |
object | 文件 ID 到嵌入错误详情的映射。 |
engine.vectorize.vectorsCount |
number | 存储的向量总数。 |
engine.vectorize.dimensions |
number | 向量嵌入的维度。 |
engine.r2.payloadSizeBytes |
number | 存储的载荷总字节大小。 |
engine.r2.metadataSizeBytes |
number | 存储的元数据总字节大小。 |
engine.r2.objectCount |
number | 存储中的对象总数。 |
本地开发通过将请求代理到已部署的 AI Search 实例得到支持。在绑定配置中添加 remote: true,以使用 wrangler dev 启用本地开发。
// wrangler.jsonc
{
"ai_search": [
{
"binding": "MY_SEARCH",
"instance_name": "my-instance",
"remote": true,
},
],
}